diff --git a/lib/fog/rackspace/models/compute_v2/server.rb b/lib/fog/rackspace/models/compute_v2/server.rb index edbc35574..b5283e51a 100644 --- a/lib/fog/rackspace/models/compute_v2/server.rb +++ b/lib/fog/rackspace/models/compute_v2/server.rb @@ -97,6 +97,14 @@ module Fog }) end end + + def private_ip_address + addresses['private'].select{|a| a["version"] == 4}[0]["addr"] + end + + def public_ip_address + ipv4_address + end def ready? state == ACTIVE @@ -142,6 +150,20 @@ module Fog @password = password true end + + def setup(credentials = {}) + requires :public_ip_address, :identity, :public_key, :username + Fog::SSH.new(public_ip_address, username, credentials).run([ + %{mkdir .ssh}, + %{echo "#{public_key}" >> ~/.ssh/authorized_keys}, + %{passwd -l #{username}}, + %{echo "#{Fog::JSON.encode(attributes)}" >> ~/attributes.json}, + %{echo "#{Fog::JSON.encode(metadata)}" >> ~/metadata.json} + ]) + rescue Errno::ECONNREFUSED + sleep(1) + retry + end private diff --git a/lib/fog/rackspace/models/compute_v2/servers.rb b/lib/fog/rackspace/models/compute_v2/servers.rb index 76e0b0edc..ad4288e45 100644 --- a/lib/fog/rackspace/models/compute_v2/servers.rb +++ b/lib/fog/rackspace/models/compute_v2/servers.rb @@ -4,6 +4,7 @@ require 'fog/rackspace/models/compute_v2/server' module Fog module Compute class RackspaceV2 + class Servers < Fog::Collection model Fog::Compute::RackspaceV2::Server @@ -16,6 +17,7 @@ module Fog def bootstrap(new_attributes = {}) server = create(new_attributes) server.wait_for { ready? } + server.setup(:password => server.password) server end