Class: Fog::Compute::OpenStack::Server
- Inherits:
-
Server
show all
- Defined in:
- lib/fog/openstack/models/compute/server.rb
Instance Attribute Summary collapse
Attributes inherited from Server
#private_key, #private_key_path, #public_key, #public_key_path, #ssh_options, #ssh_port, #username
Attributes inherited from Model
#collection, #service
Instance Method Summary
collapse
Methods inherited from Server
#scp, #scp_download, #ssh, #ssh_ip_address, #ssh_ip_address=, #sshable?
Methods inherited from Model
#inspect, #symbolize_keys, #to_json, #wait_for
#_load, #aliases, #attribute, #attributes, #identity, #ignore_attributes, #ignored_attributes
#connection, #connection=, #prepare_service_value
#_dump, #attributes, #dup, #identity, #identity=, #merge_attributes, #new_record?, #persisted?, #requires, #requires_one
Constructor Details
#initialize(attributes = {}) ⇒ Server
Returns a new instance of Server.
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/fog/openstack/models/compute/server.rb', line 58
def initialize(attributes={})
prepare_service_value(attributes)
self.security_groups = attributes.delete(:security_groups)
self.min_count = attributes.delete(:min_count)
self.max_count = attributes.delete(:max_count)
self.nics = attributes.delete(:nics)
self.os_scheduler_hints = attributes.delete(:os_scheduler_hints)
self.block_device_mapping = attributes.delete(:block_device_mapping)
super
end
|
Instance Attribute Details
#block_device_mapping ⇒ Object
Returns the value of attribute block_device_mapping.
55
56
57
|
# File 'lib/fog/openstack/models/compute/server.rb', line 55
def block_device_mapping
@block_device_mapping
end
|
#flavor_ref ⇒ Object
148
149
150
|
# File 'lib/fog/openstack/models/compute/server.rb', line 148
def flavor_ref
@flavor_ref
end
|
#image_ref ⇒ Object
140
141
142
|
# File 'lib/fog/openstack/models/compute/server.rb', line 140
def image_ref
@image_ref
end
|
#nics=(value) ⇒ Object
54
55
56
|
# File 'lib/fog/openstack/models/compute/server.rb', line 54
def nics=(value)
@nics = value
end
|
#os_scheduler_hints=(value) ⇒ Object
Sets the attribute os_scheduler_hints
54
55
56
|
# File 'lib/fog/openstack/models/compute/server.rb', line 54
def os_scheduler_hints=(value)
@os_scheduler_hints = value
end
|
#password ⇒ Object
Returns the value of attribute password.
53
54
55
|
# File 'lib/fog/openstack/models/compute/server.rb', line 53
def password
@password
end
|
#personality ⇒ Hash
Note:
This attribute is only used for server creation. This field will be nil on subsequent retrievals.
Returns Hash containing data to inject into the file system of the cloud server instance during server creation.
30
|
# File 'lib/fog/openstack/models/compute/server.rb', line 30
attribute :personality
|
Instance Method Details
#all_addresses ⇒ Object
103
104
105
106
107
|
# File 'lib/fog/openstack/models/compute/server.rb', line 103
def all_addresses
@all_addresses ||= service.list_all_addresses.body["floating_ips"].select{|data| data['instance_id'] == id}
end
|
#associate_address(floating_ip) ⇒ Object
230
231
232
233
|
# File 'lib/fog/openstack/models/compute/server.rb', line 230
def associate_address(floating_ip)
requires :id
service.associate_address id, floating_ip
end
|
#attach_volume(volume_id, device_name) ⇒ Object
269
270
271
272
273
|
# File 'lib/fog/openstack/models/compute/server.rb', line 269
def attach_volume(volume_id, device_name)
requires :id
service.attach_volume(volume_id, id, device_name)
true
end
|
#change_password(admin_password) ⇒ Object
160
161
162
163
164
|
# File 'lib/fog/openstack/models/compute/server.rb', line 160
def change_password(admin_password)
requires :id
service.change_server_password(id, admin_password)
true
end
|
#confirm_resize ⇒ Object
184
185
186
187
188
|
# File 'lib/fog/openstack/models/compute/server.rb', line 184
def confirm_resize
requires :id
service.confirm_resize_server(id)
true
end
|
#console(log_length = nil) ⇒ Object
215
216
217
218
|
# File 'lib/fog/openstack/models/compute/server.rb', line 215
def console(log_length = nil)
requires :id
service.get_console_output(id, log_length)
end
|
#create_image(name, metadata = {}) ⇒ Object
210
211
212
213
|
# File 'lib/fog/openstack/models/compute/server.rb', line 210
def create_image(name, metadata={})
requires :id
service.create_image(id, name, metadata)
end
|
#destroy ⇒ Object
92
93
94
95
96
|
# File 'lib/fog/openstack/models/compute/server.rb', line 92
def destroy
requires :id
service.delete_server(id)
true
end
|
#detach_volume(volume_id) ⇒ Object
275
276
277
278
279
|
# File 'lib/fog/openstack/models/compute/server.rb', line 275
def detach_volume(volume_id)
requires :id
service.detach_volume(id, volume_id)
true
end
|
#disassociate_address(floating_ip) ⇒ Object
235
236
237
238
|
# File 'lib/fog/openstack/models/compute/server.rb', line 235
def disassociate_address(floating_ip)
requires :id
service.disassociate_address id, floating_ip
end
|
#floating_ip_address ⇒ Object
Also known as:
public_ip_address
126
127
128
|
# File 'lib/fog/openstack/models/compute/server.rb', line 126
def floating_ip_address
floating_ip_addresses.first
end
|
#floating_ip_addresses ⇒ Object
Also known as:
public_ip_addresses
120
121
122
|
# File 'lib/fog/openstack/models/compute/server.rb', line 120
def floating_ip_addresses
all_addresses.map{|addr| addr["ip"]}
end
|
#images ⇒ Object
98
99
100
101
|
# File 'lib/fog/openstack/models/compute/server.rb', line 98
def images
requires :id
service.images(:server => self)
end
|
#ip_addresses ⇒ Object
returns all ip_addresses for a given instance this includes both the fixed ip(s) and the floating ip(s)
116
117
118
|
# File 'lib/fog/openstack/models/compute/server.rb', line 116
def ip_addresses
addresses.values.flatten.map{|x| x['addr']}
end
|
#live_migrate(host, block_migration, disk_over_commit) ⇒ Object
225
226
227
228
|
# File 'lib/fog/openstack/models/compute/server.rb', line 225
def live_migrate(host, block_migration, disk_over_commit)
requires :id
service.live_migrate_server(id, host, block_migration, disk_over_commit)
end
|
#max_count=(new_max_count) ⇒ Object
249
250
251
|
# File 'lib/fog/openstack/models/compute/server.rb', line 249
def max_count=(new_max_count)
@max_count = new_max_count
end
|
72
73
74
75
76
77
78
79
|
# File 'lib/fog/openstack/models/compute/server.rb', line 72
def metadata
@metadata ||= begin
Fog::Compute::OpenStack::Metadata.new({
:service => service,
:parent => self
})
end
end
|
81
82
83
84
85
86
|
# File 'lib/fog/openstack/models/compute/server.rb', line 81
def metadata=(new_metadata={})
return unless new_metadata
metas = []
new_metadata.each_pair {|k,v| metas << {"key" => k, "value" => v} }
@metadata = metadata.load(metas)
end
|
#migrate ⇒ Object
220
221
222
223
|
# File 'lib/fog/openstack/models/compute/server.rb', line 220
def migrate
requires :id
service.migrate_server(id)
end
|
#min_count=(new_min_count) ⇒ Object
245
246
247
|
# File 'lib/fog/openstack/models/compute/server.rb', line 245
def min_count=(new_min_count)
@min_count = new_min_count
end
|
#networks ⇒ Object
253
254
255
|
# File 'lib/fog/openstack/models/compute/server.rb', line 253
def networks
service.networks(:server => self)
end
|
#private_ip_address ⇒ Object
136
137
138
|
# File 'lib/fog/openstack/models/compute/server.rb', line 136
def private_ip_address
private_ip_addresses.first
end
|
#private_ip_addresses ⇒ Object
132
133
134
|
# File 'lib/fog/openstack/models/compute/server.rb', line 132
def private_ip_addresses
ip_addresses - floating_ip_addresses
end
|
#ready? ⇒ Boolean
156
157
158
|
# File 'lib/fog/openstack/models/compute/server.rb', line 156
def ready?
self.state == 'ACTIVE'
end
|
#reboot(type = 'SOFT') ⇒ Object
204
205
206
207
208
|
# File 'lib/fog/openstack/models/compute/server.rb', line 204
def reboot(type = 'SOFT')
requires :id
service.reboot_server(id, type)
true
end
|
#rebuild(image_ref, name, admin_pass = nil, metadata = nil, personality = nil) ⇒ Object
166
167
168
169
170
|
# File 'lib/fog/openstack/models/compute/server.rb', line 166
def rebuild(image_ref, name, admin_pass=nil, metadata=nil, personality=nil)
requires :id
service.rebuild_server(id, image_ref, name, admin_pass, metadata, personality)
true
end
|
#reload ⇒ Object
109
110
111
112
|
# File 'lib/fog/openstack/models/compute/server.rb', line 109
def reload
@all_addresses = nil
super
end
|
#reset_vm_state(vm_state) ⇒ Object
240
241
242
243
|
# File 'lib/fog/openstack/models/compute/server.rb', line 240
def reset_vm_state(vm_state)
requires :id
service.reset_server_state id, vm_state
end
|
#resize(flavor_ref) ⇒ Object
172
173
174
175
176
|
# File 'lib/fog/openstack/models/compute/server.rb', line 172
def resize(flavor_ref)
requires :id
service.resize_server(id, flavor_ref)
true
end
|
#revert_resize ⇒ Object
178
179
180
181
182
|
# File 'lib/fog/openstack/models/compute/server.rb', line 178
def revert_resize
requires :id
service.revert_resize_server(id)
true
end
|
#save ⇒ Object
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
|
# File 'lib/fog/openstack/models/compute/server.rb', line 281
def save
raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
requires :flavor_ref, :name
requires_one :image_ref, :block_device_mapping
options = {
'personality' => personality,
'accessIPv4' => accessIPv4,
'accessIPv6' => accessIPv6,
'availability_zone' => availability_zone,
'user_data' => user_data_encoded,
'key_name' => key_name,
'config_drive' => config_drive,
'security_groups' => @security_groups,
'min_count' => @min_count,
'max_count' => @max_count,
'nics' => @nics,
'os:scheduler_hints' => @os_scheduler_hints,
'block_device_mapping' => @block_device_mapping
}
options['metadata'] = metadata.to_hash unless @metadata.nil?
options = options.reject {|key, value| value.nil?}
data = service.create_server(name, image_ref, flavor_ref, options)
merge_attributes(data.body['server'])
true
end
|
#security_groups ⇒ Object
190
191
192
193
194
195
196
197
198
|
# File 'lib/fog/openstack/models/compute/server.rb', line 190
def security_groups
requires :id
groups = service.list_security_groups(id).body['security_groups']
groups.map do |group|
Fog::Compute::OpenStack::SecurityGroup.new group.merge({:service => service})
end
end
|
#security_groups=(new_security_groups) ⇒ Object
200
201
202
|
# File 'lib/fog/openstack/models/compute/server.rb', line 200
def security_groups=(new_security_groups)
@security_groups = new_security_groups
end
|
#setup(credentials = {}) ⇒ Object
307
308
309
310
311
312
313
314
315
316
317
318
319
|
# File 'lib/fog/openstack/models/compute/server.rb', line 307
def setup(credentials = {})
requires :ssh_ip_address, :identity, :public_key, :username
Fog::SSH.new(ssh_ip_address, username, credentials).run([
%{mkdir .ssh},
%{echo "#{public_key}" >> ~/.ssh/authorized_keys},
%{passwd -l #{username}},
%{echo "#{Fog::JSON.encode(attributes)}" >> ~/attributes.json},
%{echo "#{Fog::JSON.encode(metadata)}" >> ~/metadata.json}
])
rescue Errno::ECONNREFUSED
sleep(1)
retry
end
|
#user_data=(ascii_userdata) ⇒ Object
88
89
90
|
# File 'lib/fog/openstack/models/compute/server.rb', line 88
def user_data=(ascii_userdata)
self.user_data_encoded = [ascii_userdata].pack('m')
end
|
#volume_attachments ⇒ Object
264
265
266
267
|
# File 'lib/fog/openstack/models/compute/server.rb', line 264
def volume_attachments
requires :id
service.get_server_volumes(id).body['volumeAttachments']
end
|
#volumes ⇒ Object
257
258
259
260
261
262
|
# File 'lib/fog/openstack/models/compute/server.rb', line 257
def volumes
requires :id
service.volumes.find_all do |vol|
vol.attachments.find { |attachment| attachment["serverId"] == id }
end
end
|