class Haas::Aws
Constants
- CENTOS_IMAGES
- UBUNTU_IMAGES
Public Class Methods
connect()
click to toggle source
# File lib/haas/aws.rb, line 54 def self.connect @region = Haas::Config.options[:aws_region] || 'us-east-1' AWS.config( access_key_id: ENV['AWS_KEY'], secret_access_key: ENV['AWS_SECRET'], region: region ) @ec2 = AWS::EC2.new end
create_key_pair()
click to toggle source
# File lib/haas/aws.rb, line 91 def self.create_key_pair key_pair = Haas::KeyPair.create(name: Haas.cluster.name) File.write(Haas.cluster.identity_file_path, key_pair.private_key) File.chmod(0600, Haas.cluster.identity_file_path) end
ec2()
click to toggle source
# File lib/haas/aws.rb, line 64 def self.ec2 @ec2 end
is_cluster_ssh_open?(instances)
click to toggle source
# File lib/haas/aws.rb, line 165 def self.is_cluster_ssh_open?(instances) instances.each do |instance| return false unless Haas::Utils.is_port_open?(instance.public_dns_name,22) end return true end
launch_instances()
click to toggle source
# File lib/haas/aws.rb, line 97 def self.launch_instances image_id = UBUNTU_IMAGES["12.04"][region] if !ec2.security_groups.filter('group-name', 'haas-security-group').first security_group = ec2.security_groups.create('haas-security-group') security_group.authorize_ingress(:tcp, 22) security_group.authorize_ingress(:tcp, 80) security_group.authorize_ingress(:tcp, 443) security_group.authorize_ingress(:tcp, 8080) security_group.authorize_ingress(:tcp, 0..65535, security_group) security_group.authorize_ingress(:udp, 0..65535, security_group) security_group.authorize_ingress(:icmp, -1, security_group) end instances = ec2.instances.create({ :image_id => image_id, :instance_type => Haas::Config.options[:instance_type], :key_name => Haas.cluster.name, :security_groups => ['haas-security-group'], :block_device_mappings => [ { :device_name => "/dev/sda1", :ebs => { :volume_size => 8, # 8 GiB :delete_on_termination => true } }, { :device_name => "/dev/sdf", :virtual_name => "ephemeral0" } ], :count => Haas::Config.options[:nb_instances].to_i }) print "Waiting for the instances to start " while instances.any? {|i| i.status == :pending; } do print '.' sleep 1 end puts " done" print "Waiting for the instances to be initialized and accessible " while !is_cluster_ssh_open?(instances) do print '.' sleep 1 end puts " done" instances.each do |instance| Haas::Node.create( cluster_id: Haas.cluster.id, instance_id: instance.id, public_ip_address: instance.ip_address, public_dns_name: instance.public_dns_name, private_ip_address: instance.private_ip_address, private_dns_name: instance.private_dns_name ) end end def self.terminate_cluster cluster ec2.client.terminate_instances({ instance_ids: cluster.nodes.map(&:instance_id) }) cluster.destroy end def self.is_cluster_ssh_open?(instances) instances.each do |instance| return false unless Haas::Utils.is_port_open?(instance.public_dns_name,22) end return true end end
nb_instance_available()
click to toggle source
# File lib/haas/aws.rb, line 76 def self.nb_instance_available account_attributes = ec2.client.describe_account_attributes\ .data[:account_attribute_set]\ .inject({}) do |m, i| m[i[:attribute_name]] = i[:attribute_value_set].first[:attribute_value]; m end max_instances = account_attributes["max-instances"].to_i return max_instances - nb_running_instances end
nb_running_instances()
click to toggle source
# File lib/haas/aws.rb, line 87 def self.nb_running_instances ec2.instances.inject({}) { |m, i| i.status == :running ? m[i.id] = i.status : nil; m }.length end
region()
click to toggle source
# File lib/haas/aws.rb, line 68 def self.region @region end
ssh_user()
click to toggle source
# File lib/haas/aws.rb, line 72 def self.ssh_user UBUNTU_IMAGES["12.04"]["config"]["ssh_user"] end
terminate_cluster(cluster)
click to toggle source
# File lib/haas/aws.rb, line 158 def self.terminate_cluster cluster ec2.client.terminate_instances({ instance_ids: cluster.nodes.map(&:instance_id) }) cluster.destroy end