Class: Fog::Hetznercloud::Compute::Server

Inherits:
Compute::Server
  • Object
show all
Defined in:
lib/fog/hetznercloud/models/compute/server.rb

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Server

Returns a new instance of Server.



30
31
32
33
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 30

def initialize(options)
  @async = true
  super(options)
end

Instance Method Details

#async=(value) ⇒ Object



186
187
188
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 186

def async=(value)
  @async = !!value
end

#async?Boolean

Returns:

  • (Boolean)


190
191
192
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 190

def async?
  @async
end

#async_mode?Boolean

Returns:

  • (Boolean)


194
195
196
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 194

def async_mode?
  async?
end

#change_dns_ptr(dns_ptr, ip: public_ip_address, async: async_mode?) ) ⇒ Object



304
305
306
307
308
309
310
311
312
313
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 304

def change_dns_ptr(dns_ptr, ip: public_ip_address, async: async_mode?)
  requires :identity

  body = {
    ip: ip,
    dns_ptr: dns_ptr
  }

  execute_action('change_dns_ptr', async, body)
end

#change_type(async: async_mode?, , upgrade_disk: false, server_type:) ⇒ Object



278
279
280
281
282
283
284
285
286
287
288
289
290
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 278

def change_type(async: async_mode?, upgrade_disk: false, server_type:)
  requires :identity

  # FIXME: Should I shutdown and wait here as server needs to
  #        be stopped ?

  body = {
    upgrade_disk: upgrade_disk,
    server_type: server_type
  }

  execute_action('change_type', async, body)
end

#create_backup(async: async_mode?, , description: "Backup of #{attributes[:name]} created at #{Time.now}") ⇒ Object

Returns action, imageObject



240
241
242
243
244
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 240

def create_backup(async: async_mode?, description: "Backup of #{attributes[:name]} created at #{Time.now}")
  requires :identity

  create_image(async: async, description: description, type: 'backup')
end

#create_image(async: async_mode?, , description: "image of #{attributes[:name]} created at #{Time.now}", type: 'snapshot') ⇒ Object

Returns action, imageObject



247
248
249
250
251
252
253
254
255
256
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 247

def create_image(async: async_mode?, description: "image of #{attributes[:name]} created at #{Time.now}", type: 'snapshot')
  requires :identity

  body = {
    description: description,
    type: type
  }

  execute_action('create_image', async, body)
end

#datacenter=(value) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 93

def datacenter=(value)
  attributes[:datacenter] = case value
                            when Hash
                              service.datacenters.new(value)
                              attributes[:location] = service.locations.new(value['location'])
                            when String
                              service.datacenters.all(name: value).first
                            when Integer
                              service.datacenters.get(value)
                            else
                              value
                                end
end

#destroyObject



149
150
151
152
153
154
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 149

def destroy
  requires :identity

  service.delete_server(identity)
  true
end

#disable_backup(async: async_mode?) ) ⇒ Object



315
316
317
318
319
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 315

def disable_backup(async: async_mode?)
  requires :identity

  execute_action('disable_backup', async)
end

#disable_rescue(async: async_mode?) ) ⇒ Object



206
207
208
209
210
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 206

def disable_rescue(async: async_mode?)
  requires :identity

  execute_action('disable_rescue', async)
end

#enable_backup(async: async_mode?, , backup_window: nil) ⇒ Object



292
293
294
295
296
297
298
299
300
301
302
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 292

def enable_backup(async: async_mode?, backup_window: nil)
  requires :identity

  unless backup_window.nil?
    body = {
      backup_window: backup_window
    }
  end

  execute_action('enable_backup', async, body)
end

#enable_rescue(type: 'linux64', ssh_keys: [], async: async_mode?) ) ⇒ Object



212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 212

def enable_rescue(type: 'linux64', ssh_keys: [], async: async_mode?)
  requires :identity

  # FIXME: Refactor with ssh_keys=(value) above to do DRY
  sshkeys = []
  ssh_keys.each do |item|
    thing = case item
            when Hash
              service.ssh_keys.new(item)
            when String
              service.ssh_keys.all(name: item).first
            when Integer
              service.ssh_keys.get(item)
            else
              value
                       end
    sshkeys << thing.identity
  end

  body = {
    type: type,
    ssh_keys: sshkeys
  }

  execute_action('enable_rescue', async, body)
end

#execute_action(action, async = true, body = {}) ⇒ Object



331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 331

def execute_action(action, async = true, body = {})
  requires :identity

  request_body = service.execute_server_action(identity, action, body).body
  if (action = request_body['action'])
    service.actions.new(action).tap do |a|
      unless async
        a.wait_for { a.success? }
        reload
      end
    end
  end
  extra = service.images.new(request_body['image']) unless request_body['image'].nil?
  extra = request_body['root_password'] unless request_body['root_password'].nil?
  [action, extra]
end

#image=(value) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 35

def image=(value)
  attributes[:image] = case value
                       when Hash
                         service.images.new(value)
                       when String
                         service.images.all(name: value).first
                       when Integer
                         service.images.get(value)
                       else
                         value
                       end
end

#location=(value) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 80

def location=(value)
  attributes[:location] = case value
                          when Hash
                            service.locations.new(value)
                          when String
                            service.locations.all(name: value).first
                          when Integer
                            service.locations.get(value)
                          else
                            value
                           end
end

#migrating?Boolean

Returns:

  • (Boolean)


133
134
135
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 133

def migrating?
  status == 'migrating'
end

#name=(value) ⇒ Object



115
116
117
118
119
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 115

def name=(value)
  return true if name == value
  @needsupdate = true
  attributes[:name] = value
end

#poweroff(async: async_mode?) ) ⇒ Object



162
163
164
165
166
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 162

def poweroff(async: async_mode?)
  requires :identity

  execute_action('poweroff', async)
end

#poweron(async: async_mode?) ) ⇒ Object



156
157
158
159
160
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 156

def poweron(async: async_mode?)
  requires :identity

  execute_action('poweron', async)
end

#public_dns_nameObject



121
122
123
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 121

def public_dns_name
  "static.#{public_net['ipv4']['ip']}.clients.your-server.de"
end

#public_ip_addressObject



348
349
350
351
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 348

def public_ip_address
  public_net['ipv6']['ip'] if public_net.key?('ipv6')
  public_net['ipv4']['ip'] if public_net.key?('ipv4')
end

#ready?Boolean

Returns:

  • (Boolean)


129
130
131
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 129

def ready?
  status == 'running'
end

#reboot(async: async_mode?) ) ⇒ Object



168
169
170
171
172
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 168

def reboot(async: async_mode?)
  requires :identity

  execute_action('reboot', async)
end

#rebuild_from_image(async: async_mode?, , image:) ⇒ Object



258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 258

def rebuild_from_image(async: async_mode?, image:)
  requires :identity

  # FIXME: Lookup images by description. As API does not support
  #        this we need to filter our own. Probably needs pagination
  #        support.
  image_id = case image
             when Fog::Hetznercloud::Compute::Image
               image.identity
             when Integer
               image
                        end

  body = {
    image: image_id
  }

  execute_action('rebuild', async, body)
end

#reset(async: async_mode?) ) ⇒ Object



174
175
176
177
178
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 174

def reset(async: async_mode?)
  requires :identity

  execute_action('reset', async)
end

#reset_root_password(async: async_mode?) ) ⇒ Object

Returns action, password



322
323
324
325
326
327
328
329
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 322

def reset_root_password(async: async_mode?)
  requires :identity
  unless ready?
    throw Fog::Hetznercloud::Error::StateError.new('ERROR: to reset the root password, the server must be running')
  end

  execute_action('reset_password', async)
end

#reverse_dns_nameObject



125
126
127
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 125

def reverse_dns_name
  public_net['ipv4']['dns_ptr']
end

#saveObject



141
142
143
144
145
146
147
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 141

def save
  if persisted?
    update
  else
    create
  end
end

#server_type=(value) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 67

def server_type=(value)
  attributes[:server_type] = case value
                             when Hash
                               service.server_types.new(value)
                             when String
                               service.server_types.all(name: value).first
                             when Integer
                               service.server_types.get(value)
                             else
                               value
                       end
end

#shutdown(async: async_mode?) ) ⇒ Object



180
181
182
183
184
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 180

def shutdown(async: async_mode?)
  requires :identity

  execute_action('shutdown', async)
end

#ssh_keys=(value) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 48

def ssh_keys=(value)
  attributes[:ssh_keys] = []
  # API does not return ssh_key
  return true if value.nil?
  value.each do |item|
    thing = case item
            when Hash
              service.ssh_keys.new(item)
            when String
              service.ssh_keys.all(name: item).first
            when Integer
              service.ssh_keys.get(item)
            else
              value
                       end
    attributes[:ssh_keys] << thing
  end
end

#stopped?Boolean

Returns:

  • (Boolean)


137
138
139
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 137

def stopped?
  status == 'off'
end

#sync=(value) ⇒ Object



198
199
200
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 198

def sync=(value)
  @async = !value
end

#sync?Boolean

Returns:

  • (Boolean)


202
203
204
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 202

def sync?
  !@async
end

#user_data=(value) ⇒ Object



107
108
109
110
111
112
113
# File 'lib/fog/hetznercloud/models/compute/server.rb', line 107

def user_data=(value)
  attributes[:user_data] = if value =~ /^(\.|~)?\/[^\/]+/
                             File.read(value)
                           else
                             value
                           end
end