Skip to content
This repository has been archived by the owner on May 17, 2019. It is now read-only.

Commit

Permalink
add support for auto-assigning Elastic IPs
Browse files Browse the repository at this point in the history
  • Loading branch information
eden committed May 22, 2012
1 parent 7a010cf commit bc0e55b
Showing 1 changed file with 24 additions and 2 deletions.
26 changes: 24 additions & 2 deletions lib/chef/knife/ec2_server_create.rb
Expand Up @@ -160,6 +160,12 @@ class Ec2ServerCreate < Knife
:proc => Proc.new { |m| Chef::Config[:knife][:aws_user_data] = m }, :proc => Proc.new { |m| Chef::Config[:knife][:aws_user_data] = m },
:default => nil :default => nil


option :assign_eip,
:long => "--assign-eip",
:description => "Auto-assign an Elastic IP (only in VPC mode)",
:default => false


def tcp_test_ssh(hostname) def tcp_test_ssh(hostname)
tcp_socket = TCPSocket.new(hostname, config[:ssh_port]) tcp_socket = TCPSocket.new(hostname, config[:ssh_port])
readable = IO.select([tcp_socket], nil, nil, 5) readable = IO.select([tcp_socket], nil, nil, 5)
Expand Down Expand Up @@ -227,8 +233,21 @@ def run


puts("\n") puts("\n")


elastic_ip = nil
if config[:assign_eip] and vpc_mode?
address = Fog::Compute::AWS::Address.new(
connection.allocate_address('vpc').body)
connection.associate_address(server.id, address.public_ip,
address.network_interface_id,
address.allocation_id)
elastic_ip = address.public_ip
end

if vpc_mode? if vpc_mode?
msg_pair("Subnet ID", server.subnet_id) msg_pair("Subnet ID", server.subnet_id)
if elastic_ip
msg_pair("Public IP", elastic_ip)
end
else else
msg_pair("Public DNS Name", server.dns_name) msg_pair("Public DNS Name", server.dns_name)
msg_pair("Public IP Address", server.public_ip_address) msg_pair("Public IP Address", server.public_ip_address)
Expand All @@ -239,6 +258,9 @@ def run
print "\n#{ui.color("Waiting for sshd", :magenta)}" print "\n#{ui.color("Waiting for sshd", :magenta)}"


fqdn = vpc_mode? ? server.private_ip_address : server.dns_name fqdn = vpc_mode? ? server.private_ip_address : server.dns_name
if config[:assign_eip] and elastic_ip
fqdn = elastic_ip
end


print(".") until tcp_test_ssh(fqdn) { print(".") until tcp_test_ssh(fqdn) {
sleep @initial_sleep_delay ||= (vpc_mode? ? 40 : 10) sleep @initial_sleep_delay ||= (vpc_mode? ? 40 : 10)
Expand Down Expand Up @@ -336,10 +358,10 @@ def tags
def create_server_def def create_server_def
server_def = { server_def = {
:image_id => locate_config_value(:image), :image_id => locate_config_value(:image),
:groups => config[:security_groups],
:flavor_id => locate_config_value(:flavor), :flavor_id => locate_config_value(:flavor),
:key_name => Chef::Config[:knife][:aws_ssh_key_id], :key_name => Chef::Config[:knife][:aws_ssh_key_id],
:availability_zone => locate_config_value(:availability_zone) :availability_zone => locate_config_value(:availability_zone),
:groups => config[:security_groups]
} }
server_def[:subnet_id] = config[:subnet_id] if config[:subnet_id] server_def[:subnet_id] = config[:subnet_id] if config[:subnet_id]


Expand Down

0 comments on commit bc0e55b

Please sign in to comment.