class Fog::AWS::Compute::Server

Attributes

architecture[RW]
iam_instance_profile_arn[W]
iam_instance_profile_name[W]
instance_initiated_shutdown_behavior[RW]
password[RW]

Public Class Methods

new(attributes={}) click to toggle source
Calls superclass method
# File lib/fog/aws/models/compute/server.rb, line 61
def initialize(attributes={})
  self.groups     ||= ["default"] unless (attributes[:subnet_id] || attributes[:security_group_ids] || attributes[:network_interfaces])
  self.flavor_id  ||= 't1.micro'

  # Old 'connection' is renamed as service and should be used instead
  prepare_service_value(attributes)

  self.image_id   ||= begin
    self.username ||= 'ubuntu'
    case @service.instance_variable_get(:@region) # Ubuntu 10.04 LTS 64bit (EBS)
    when 'ap-northeast-1'
      'ami-5e0fa45f'
    when 'ap-southeast-1'
      'ami-f092eca2'
    when 'ap-southeast-2'
      'ami-fb8611c1' # Ubuntu 12.04 LTS 64bit (EBS)
    when 'eu-west-1'
      'ami-3d1f2b49'
    when 'sa-east-1'
      'ami-d0429ccd'
    when 'us-east-1'
      'ami-3202f25b'
    when 'us-west-1'
      'ami-f5bfefb0'
    when 'us-west-2'
      'ami-e0ec60d0'
    end
  end
  super
end

Public Instance Methods

addresses() click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 92
def addresses
  requires :id

  service.addresses(:server => self)
end
console_output() click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 98
def console_output
  requires :id

  service.get_console_output(id)
end
destroy() click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 104
def destroy
  requires :id

  service.terminate_instances(id)
  true
end
flavor() click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 120
def flavor
  @flavor ||= service.flavors.all.find {|flavor| flavor.id == flavor_id}
end
flavor=(new_flavor) click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 116
def flavor=(new_flavor)
  @flavor = new_flavor
end
flavor_id() click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 112
def flavor_id
  @flavor && @flavor.id || attributes[:flavor_id]
end
key_pair() click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 124
def key_pair
  requires :key_name
  service.key_pairs.all({'key-name' => key_name}).first
end
key_pair=(new_keypair) click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 129
def key_pair=(new_keypair)
  self.key_name = new_keypair && new_keypair.name
end
monitor=(new_monitor) click to toggle source

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

# File lib/fog/aws/models/compute/server.rb, line 248
def monitor=(new_monitor)
  if persisted?
    case new_monitor
    when true
      response = service.monitor_instances(identity)
    when false
      response = service.unmonitor_instances(identity)
    else
      raise ArgumentError.new("only Boolean allowed here")
    end
  end
  self.monitoring = new_monitor
end
ready?() click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 133
def ready?
  state == 'running'
end
reboot() click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 137
def reboot
  requires :id
  service.reboot_instances(id)
  true
end
run_instance_options() click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 143
def run_instance_options
  raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
  requires :image_id

  options = {
    'BlockDeviceMapping'          => block_device_mapping,
    'HibernationOptions'          => hibernation_options,
    'NetworkInterfaces'           => network_interfaces,
    'ClientToken'                 => client_token,
    'DisableApiTermination'       => disable_api_termination,
    'EbsOptimized'                => ebs_optimized,
    '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,
    'TagSpecifications'           => tag_specifications,
  }
  options.delete_if {|key, value| value.nil?}

  # If subnet is defined then this is a Virtual Private Cloud.
  # subnet & security group cannot co-exist. Attempting to specify
  # both subnet and groups will cause an error.  Instead please make
  # use of Security Group Ids when working in a VPC.
  if subnet_id
    options.delete('SecurityGroup')
    if associate_public_ip
      options['NetworkInterface.0.DeviceIndex'] = 0
      options['NetworkInterface.0.AssociatePublicIpAddress'] = associate_public_ip
      options['NetworkInterface.0.SubnetId'] = options['SubnetId']
      options.delete('SubnetId')
      if options['SecurityGroupId'].kind_of?(Array)
        options['SecurityGroupId'].each {|id|
          options["NetworkInterface.0.SecurityGroupId.#{options['SecurityGroupId'].index(id)}"] = id
        }
      else
        options["NetworkInterface.0.SecurityGroupId.0"] = options['SecurityGroupId']
      end
      options.delete('SecurityGroupId')
      if private_ip_address
        options.delete('PrivateIpAddress')
        options['NetworkInterface.0.PrivateIpAddress'] = private_ip_address
      end
    end
  else
    options.delete('SubnetId')
  end
  options
end
save() click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 204
def save
  servers = service.servers.save_many(self, 1, 1)
  merge_attributes(servers.first.attributes)
  true
end
setup(credentials = {}) click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 210
def setup(credentials = {})
  requires :ssh_ip_address, :username

  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 aws to be ready
  wait_for { sshable?(credentials) }

  Fog::SSH.new(ssh_ip_address, username, credentials).run(commands)
end
start() click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 228
def start
  requires :id
  service.start_instances(id)
  true
end
stop(options = {}) click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 234
def stop(options = {})
  requires :id
  service.stop_instances(id, options)
  true
end
volumes() click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 240
def volumes
  requires :id
  service.volumes(:server => self)
end

Private Instance Methods

placement=(new_placement) click to toggle source
# File lib/fog/aws/models/compute/server.rb, line 264
def placement=(new_placement)
  if new_placement.is_a?(Hash)
    merge_attributes(new_placement)
  else
    self.attributes[:placement] = new_placement
  end
end