# File lib/fog/aws/models/compute/server.rb, line 50 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) # Ubuntu 10.04 LTS 64bit (EBS) 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
# File lib/fog/aws/models/compute/server.rb, line 73 def addresses requires :id connection.addresses(:server => self) end
# File lib/fog/aws/models/compute/server.rb, line 79 def console_output requires :id connection.get_console_output(id) end
# File lib/fog/aws/models/compute/server.rb, line 85 def destroy requires :id connection.terminate_instances(id) true end
# File lib/fog/aws/models/compute/server.rb, line 101 def flavor @flavor ||= connection.flavors.all.detect {|flavor| flavor.id == flavor_id} end
# File lib/fog/aws/models/compute/server.rb, line 97 def flavor=(new_flavor) @flavor = new_flavor end
# File lib/fog/aws/models/compute/server.rb, line 93 def flavor_id @flavor && @flavor.id || attributes[:flavor_id] end
# File lib/fog/aws/models/compute/server.rb, line 105 def key_pair requires :key_name connection.key_pairs.all(key_name).first end
# File lib/fog/aws/models/compute/server.rb, line 111 def key_pair=(new_keypair) self.key_name = new_keypair && new_keypair.name end
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 238 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
# File lib/fog/aws/models/compute/server.rb, line 120 def private_key @private_key ||= private_key_path && File.read(private_key_path) end
# File lib/fog/aws/models/compute/server.rb, line 115 def private_key_path @private_key_path ||= Fog.credentials[:private_key_path] @private_key_path &&= File.expand_path(@private_key_path) end
# File lib/fog/aws/models/compute/server.rb, line 129 def public_key @public_key ||= public_key_path && File.read(public_key_path) end
# File lib/fog/aws/models/compute/server.rb, line 124 def public_key_path @public_key_path ||= Fog.credentials[:public_key_path] @public_key_path &&= File.expand_path(@public_key_path) end
# File lib/fog/aws/models/compute/server.rb, line 133 def ready? state == 'running' end
# File lib/fog/aws/models/compute/server.rb, line 137 def reboot requires :id connection.reboot_instances(id) true end
# File lib/fog/aws/models/compute/server.rb, line 143 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, '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 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') else options.delete('SubnetId') end data = connection.run_instances(image_id, 1, 1, options) merge_attributes(data.body['instancesSet'].first) if tags = self.tags # expect eventual consistency 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
# File lib/fog/aws/models/compute/server.rb, line 195 def setup(credentials = {}) requires :public_ip_address, :username require 'net/ssh' commands = [ %Q{mkdir .ssh}, %Q{passwd -l #{username}}, %Q{echo "#{Fog::JSON.encode(Fog::JSON.sanitize(attributes))}" >> ~/attributes.json} ] if public_key commands << %Q{echo "#{public_key}" >> ~/.ssh/authorized_keys} end # wait for aws to be ready wait_for { sshable? } Fog::SSH.new(public_ip_address, username, credentials).run(commands) end
# File lib/fog/aws/models/compute/server.rb, line 214 def start requires :id connection.start_instances(id) true end
# File lib/fog/aws/models/compute/server.rb, line 220 def stop(force = false) requires :id connection.stop_instances(id, force) true end
# File lib/fog/aws/models/compute/server.rb, line 226 def username @username ||= 'root' end
# File lib/fog/aws/models/compute/server.rb, line 230 def volumes requires :id connection.volumes(:server => self) end