Class: Fog::Compute::RackspaceV2::Server
- Inherits:
-
Server
show all
- Defined in:
- lib/fog/rackspace/models/compute_v2/server.rb
Constant Summary
collapse
- ACTIVE =
'ACTIVE'
- BUILD =
'BUILD'
- DELETED =
'DELETED'
- ERROR =
'ERROR'
- HARD_REBOOT =
'HARD_REBOOT'
- MIGRATING =
'MIGRATING'
- PASSWORD =
'PASSWORD'
- REBOOT =
'REBOOT'
- REBUILD =
'REBUILD'
- RESCUE =
'RESCUE'
- RESIZE =
'RESIZE'
- REVERT_RESIZE =
'REVERT_RESIZE'
- SUSPENDED =
'SUSPENDED'
- UNKNOWN =
'UNKNOWN'
- VERIFY_RESIZE =
'VERIFY_RESIZE'
Instance Attribute Summary collapse
Attributes inherited from Server
#private_key, #private_key_path, #public_key, #public_key_path, #username
Attributes inherited from Model
#collection, #service
Instance Method Summary
collapse
Methods inherited from Server
#scp, #scp_download, #ssh, #ssh_port, #sshable?
Methods inherited from Model
#inspect, #reload, #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.
49
50
51
52
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 49
def initialize(attributes={})
@service = attributes[:service]
super
end
|
Instance Attribute Details
#password ⇒ Object
Returns the value of attribute password.
47
48
49
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 47
def password
@password
end
|
Instance Method Details
#attach_volume(volume, device = nil) ⇒ Object
145
146
147
148
149
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 145
def attach_volume(volume, device=nil)
requires :identity
volume_id = volume.is_a?(String) ? volume : volume.id
attachments.create(:server_id => identity, :volume_id => volume_id, :device => device)
end
|
#attachments ⇒ Object
136
137
138
139
140
141
142
143
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 136
def attachments
@attachments ||= begin
Fog::Compute::RackspaceV2::Attachments.new({
:service => service,
:server => self
})
end
end
|
#change_admin_password(password) ⇒ Object
200
201
202
203
204
205
206
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 200
def change_admin_password(password)
requires :identity
service.change_server_password(identity, password)
self.state = PASSWORD
@password = password
true
end
|
#confirm_resize ⇒ Object
188
189
190
191
192
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 188
def confirm_resize
requires :identity
service.confirm_resize_server(identity)
true
end
|
#create ⇒ Object
83
84
85
86
87
88
89
90
91
92
93
94
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 83
def create
requires :name, :image_id, :flavor_id
options = {}
options[:disk_config] = disk_config unless disk_config.nil?
options[:metadata] = metadata unless @metadata.nil?
options[:personality] = personality unless personality.nil?
data = service.create_server(name, image_id, flavor_id, 1, 1, options)
merge_attributes(data.body['server'])
true
end
|
#create_image(name, options = {}) ⇒ Object
125
126
127
128
129
130
131
132
133
134
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 125
def create_image(name, options = {})
requires :identity
response = service.create_image(identity, name, options)
begin
image_id = response.["Location"].match(/\/([^\/]+$)/)[1]
Fog::Compute::RackspaceV2::Image.new(:collection => service.images, :service => service, :id => image_id)
rescue
nil
end
end
|
#destroy ⇒ Object
109
110
111
112
113
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 109
def destroy
requires :identity
service.delete_server(identity)
true
end
|
#flavor ⇒ Object
115
116
117
118
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 115
def flavor
requires :flavor_id
@flavor ||= service.flavors.get(flavor_id)
end
|
#image ⇒ Object
120
121
122
123
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 120
def image
requires :image_id
@image ||= service.images.get(image_id)
end
|
59
60
61
62
63
64
65
66
67
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 59
def metadata
raise "Please save server before accessing metadata" unless identity
@metadata ||= begin
Fog::Compute::RackspaceV2::Metadata.new({
:service => service,
:parent => self
})
end
end
|
69
70
71
72
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 69
def metadata=(hash={})
raise "Please save server before accessing metadata" unless identity
metadata.from_hash(hash)
end
|
#private_ip_address ⇒ Object
151
152
153
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 151
def private_ip_address
addresses['private'].select{|a| a["version"] == 4}[0]["addr"]
end
|
#public_ip_address ⇒ Object
155
156
157
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 155
def public_ip_address
ipv4_address
end
|
#ready?(ready_state = ACTIVE, error_states = [ERROR]) ⇒ Boolean
159
160
161
162
163
164
165
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 159
def ready?(ready_state = ACTIVE, error_states=[ERROR])
if error_states
error_states = Array(error_states)
raise "Server should have transitioned to '#{ready_state}' not '#{state}'" if error_states.include?(state)
end
state == ready_state
end
|
#reboot(type = 'SOFT') ⇒ Object
167
168
169
170
171
172
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 167
def reboot(type = 'SOFT')
requires :identity
service.reboot_server(identity, type)
self.state = type == 'SOFT' ? REBOOT : HARD_REBOOT
true
end
|
#rebuild(image_id, options = {}) ⇒ Object
181
182
183
184
185
186
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 181
def rebuild(image_id, options={})
requires :identity
service.rebuild_server(identity, image_id, options)
self.state = REBUILD
true
end
|
#resize(flavor_id) ⇒ Object
174
175
176
177
178
179
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 174
def resize(flavor_id)
requires :identity
service.resize_server(identity, flavor_id)
self.state = RESIZE
true
end
|
#revert_resize ⇒ Object
194
195
196
197
198
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 194
def revert_resize
requires :identity
service.revert_resize_server(identity)
true
end
|
#save ⇒ Object
74
75
76
77
78
79
80
81
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 74
def save
if persisted?
update
else
create
end
true
end
|
#setup(credentials = {}) ⇒ Object
208
209
210
211
212
213
214
215
216
217
218
219
220
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 208
def setup(credentials = {})
requires :public_ip_address, :identity, :public_key, :username
Fog::SSH.new(public_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
|
#update ⇒ Object
96
97
98
99
100
101
102
103
104
105
106
107
|
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 96
def update
requires :identity
options = {
'name' => name,
'accessIPv4' => ipv4_address,
'accessIPv6' => ipv6_address
}
data = service.update_server(identity, options)
merge_attributes(data.body['server'])
true
end
|