Class: Fog::Compute::AWS::Server
  
  
  
  Instance Attribute Summary collapse
  
  
  
  Attributes inherited from Model
  #collection, #connection
  
    
      Instance Method Summary
      collapse
    
    
  
  
  
  
  
  
  
  
  
  
  deprecate, self_deprecate
  
  
  
  
  
  
  
  
  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
  
  
  
  
  
  
  
  
  
  #_dump, #attributes, #dup, #identity, #identity=, #merge_attributes, #new_record?, #requires, #requires_one
  Constructor Details
  
    
  
  
    #initialize(attributes = {})  ⇒ Server 
  
  
  
  
    
Returns a new instance of Server.
   
 
  
  
    | 
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 53
def initialize(attributes={})
  self.groups     ||= ["default"] unless (attributes[:subnet_id] || attributes[:security_group_ids])
  self.flavor_id  ||= 't1.micro'
  self.image_id   ||= begin
    self.username = 'ubuntu'
    case attributes[:connection].instance_variable_get(:@region)     when 'ap-northeast-1'
      'ami-5e0fa45f'
    when 'ap-southeast-1'
      'ami-f092eca2'
    when 'eu-west-1'
      'ami-3d1f2b49'
    when 'us-east-1'
      'ami-3202f25b'
    when 'us-west-1'
      'ami-f5bfefb0'
    when 'us-west-2'
      'ami-e0ec60d0'
    end
  end
  super
end | 
 
  
 
  
    Instance Attribute Details
    
      
      
      
  
  
    #architecture  ⇒ Object 
  
  
  
  
    
Returns the value of attribute architecture.
   
 
  
  
    | 
13
14
15 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 13
def architecture
  @architecture
end | 
 
    
      
      
      
  
  
    #iam_instance_profile_arn=(value)  ⇒ Object  
  
  
  
  
    
Sets the attribute iam_instance_profile_arn
   
 
  
    | 
50
51
52 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 50
def iam_instance_profile_arn=(value)
  @iam_instance_profile_arn = value
end | 
 
    
      
      
      
  
  
    #iam_instance_profile_name=(value)  ⇒ Object  
  
  
  
  
    
Sets the attribute iam_instance_profile_name
   
 
  
    | 
50
51
52 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 50
def iam_instance_profile_name=(value)
  @iam_instance_profile_name = value
end | 
 
    
      
      
      
  
  
    #instance_initiated_shutdown_behavior  ⇒ Object 
  
  
  
  
    
Returns the value of attribute instance_initiated_shutdown_behavior.
   
 
  
  
    | 
24
25
26 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 24
def instance_initiated_shutdown_behavior
  @instance_initiated_shutdown_behavior
end | 
 
    
      
      
      
  
  
    #password  ⇒ Object 
  
  
  
  
    
Returns the value of attribute password.
   
 
  
  
    | 
48
49
50 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 48
def password
  @password
end | 
 
    
      
      
      
  
  
    #private_key  ⇒ Object 
  
  
  
  
    | 
123
124
125 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 123
def private_key
  @private_key ||= private_key_path && File.read(private_key_path)
end | 
 
    
      
      
      
  
  
    #private_key_path  ⇒ Object 
  
  
  
  
    | 
118
119
120
121 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 118
def private_key_path
  @private_key_path ||= Fog.credentials[:private_key_path]
  @private_key_path &&= File.expand_path(@private_key_path)
end | 
 
    
      
      
      
  
  
    #public_key  ⇒ Object 
  
  
  
  
    | 
132
133
134 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 132
def public_key
  @public_key ||= public_key_path && File.read(public_key_path)
end | 
 
    
      
      
      
  
  
    #public_key_path  ⇒ Object 
  
  
  
  
    | 
127
128
129
130 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 127
def public_key_path
  @public_key_path ||= Fog.credentials[:public_key_path]
  @public_key_path &&= File.expand_path(@public_key_path)
end | 
 
    
      
      
      
  
  
    #username  ⇒ Object 
  
  
  
  
    | 
231
232
233 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 231
def username
  @username ||= 'root'
end | 
 
    
   
  
    Instance Method Details
    
      
  
  
    #addresses  ⇒ Object 
  
  
  
  
    | 
76
77
78
79
80 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 76
def addresses
  requires :id
  connection.addresses(:server => self)
end | 
 
    
      
  
  
    #console_output  ⇒ Object 
  
  
  
  
    | 
82
83
84
85
86 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 82
def console_output
  requires :id
  connection.get_console_output(id)
end | 
 
    
      
  
  
    #destroy  ⇒ Object 
  
  
  
  
    | 
88
89
90
91
92
93 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 88
def destroy
  requires :id
  connection.terminate_instances(id)
  true
end | 
 
    
      
  
  
    #flavor  ⇒ Object 
  
  
  
  
    | 
104
105
106 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 104
def flavor
  @flavor ||= connection.flavors.all.detect {|flavor| flavor.id == flavor_id}
end | 
 
    
      
  
  
    #flavor=(new_flavor)  ⇒ Object 
  
  
  
  
    | 
100
101
102 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 100
def flavor=(new_flavor)
  @flavor = new_flavor
end | 
 
    
      
  
  
    #flavor_id  ⇒ Object 
  
  
  
  
    | 
96
97
98 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 96
def flavor_id
  @flavor && @flavor.id || attributes[:flavor_id]
end | 
 
    
      
  
  
    #key_pair  ⇒ Object 
  
  
  
  
    | 
108
109
110
111
112 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 108
def key_pair
  requires :key_name
  connection.key_pairs.all(key_name).first
end | 
 
    
      
  
  
    #key_pair=(new_keypair)  ⇒ Object 
  
  
  
  
    | 
114
115
116 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 114
def key_pair=(new_keypair)
  self.key_name = new_keypair && new_keypair.name
end | 
 
    
      
  
  
    #monitor=(new_monitor)  ⇒ Object 
  
  
  
  
    
I tried to call it monitoring= and be smart with attributes[] but in #save a merge_attribute is called after run_instance thus making an un-necessary request. Use this until finding a clever solution
   
 
  
  
    | 
243
244
245
246
247
248
249
250
251
252
253
254
255 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 243
def monitor=(new_monitor)
  if identity
    case new_monitor
    when true
      response = connection.monitor_instances(identity)
    when false
      response = connection.unmonitor_instances(identity)
    else
      raise ArgumentError.new("only Boolean allowed here")
    end
  end
  self.monitoring = new_monitor
end | 
 
    
      
  
  
    #ready?  ⇒ Boolean 
  
  
  
  
    | 
136
137
138 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 136
def ready?
  state == 'running'
end | 
 
    
      
  
  
    #reboot  ⇒ Object 
  
  
  
  
    | 
140
141
142
143
144 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 140
def reboot
  requires :id
  connection.reboot_instances(id)
  true
end | 
 
    
      
  
  
    #save  ⇒ Object 
  
  
  
  
    | 
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 146
def save
  raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if identity
  requires :image_id
  options = {
    'BlockDeviceMapping'          => block_device_mapping,
    'ClientToken'                 => client_token,
    'IamInstanceProfile.Arn'      => @iam_instance_profile_arn,
    'IamInstanceProfile.Name'     => @iam_instance_profile_name,
    'InstanceInitiatedShutdownBehavior' => instance_initiated_shutdown_behavior,
    'InstanceType'                => flavor_id,
    'KernelId'                    => kernel_id,
    'KeyName'                     => key_name,
    'Monitoring.Enabled'          => monitoring,
    'Placement.AvailabilityZone'  => availability_zone,
    'Placement.GroupName'         => placement_group,
    'Placement.Tenancy'           => tenancy,
    'PrivateIpAddress'            => private_ip_address,
    'RamdiskId'                   => ramdisk_id,
    'SecurityGroup'               => groups,
    'SecurityGroupId'             => security_group_ids,
    'SubnetId'                    => subnet_id,
    'UserData'                    => user_data,
  }
  options.delete_if {|key, value| value.nil?}
          if subnet_id
    options.delete('SecurityGroup')
  else
    options.delete('SubnetId')
  end
  data = connection.run_instances(image_id, 1, 1, options)
  merge_attributes(data.body['instancesSet'].first)
  if tags = self.tags
        Fog.wait_for { self.reload rescue nil }
    for key, value in (self.tags = tags)
      connection.tags.create(
        :key          => key,
        :resource_id  => self.identity,
        :value        => value
      )
    end
  end
  true
end | 
 
    
      
  
  
    #setup(credentials = {})  ⇒ Object 
  
  
  
  
    | 
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 200
def setup(credentials = {})
  requires :public_ip_address, :username
  require 'net/ssh'
  commands = [
    %{mkdir .ssh},
    %{passwd -l #{username}},
    %{echo "#{Fog::JSON.encode(Fog::JSON.sanitize(attributes))}" >> ~/attributes.json}
  ]
  if public_key
    commands << %{echo "#{public_key}" >> ~/.ssh/authorized_keys}
  end
    wait_for { sshable? }
  Fog::SSH.new(public_ip_address, username, credentials).run(commands)
end | 
 
    
      
  
  
    #start  ⇒ Object 
  
  
  
  
    | 
219
220
221
222
223 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 219
def start
  requires :id
  connection.start_instances(id)
  true
end | 
 
    
      
  
  
    #stop(force = false)  ⇒ Object 
  
  
  
  
    | 
225
226
227
228
229 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 225
def stop(force = false)
  requires :id
  connection.stop_instances(id, force)
  true
end | 
 
    
      
  
  
    #volumes  ⇒ Object 
  
  
  
  
    | 
235
236
237
238 | # File 'lib/rackspace-fog/aws/models/compute/server.rb', line 235
def volumes
  requires :id
  connection.volumes(:server => self)
end |