mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
[slicehost][compute] get first pass of bootstrap working
This commit is contained in:
parent
9de9069433
commit
99ba20f411
3 changed files with 52 additions and 3 deletions
|
@ -18,8 +18,8 @@ module Fog
|
||||||
attribute :progress
|
attribute :progress
|
||||||
attribute :status
|
attribute :status
|
||||||
|
|
||||||
attr_accessor :password, :username
|
attr_reader :password
|
||||||
attr_writer :private_key, :private_key_path, :public_key, :public_key_path
|
attr_writer :private_key, :private_key_path, :public_key, :public_key_path, :username
|
||||||
|
|
||||||
def initialize(attributes={})
|
def initialize(attributes={})
|
||||||
@flavor_id ||= 1
|
@flavor_id ||= 1
|
||||||
|
|
|
@ -15,10 +15,13 @@ module Fog
|
||||||
attribute :flavor_id, :aliases => 'flavor-id'
|
attribute :flavor_id, :aliases => 'flavor-id'
|
||||||
attribute :image_id, :aliases => 'image-id'
|
attribute :image_id, :aliases => 'image-id'
|
||||||
attribute :name
|
attribute :name
|
||||||
attribute :password, :aliases => 'root-password'
|
|
||||||
attribute :progress
|
attribute :progress
|
||||||
attribute :status
|
attribute :status
|
||||||
|
|
||||||
|
attr_accessor :password
|
||||||
|
alias_method :'root-password=', :password=
|
||||||
|
attr_writer :private_key, :private_key_path, :public_key, :public_key_path, :username
|
||||||
|
|
||||||
def initialize(attributes={})
|
def initialize(attributes={})
|
||||||
@flavor_id ||= 1
|
@flavor_id ||= 1
|
||||||
super
|
super
|
||||||
|
@ -40,6 +43,22 @@ module Fog
|
||||||
connection.images.get(@image_id)
|
connection.images.get(@image_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def private_key_path
|
||||||
|
File.expand_path(@private_key_path ||= Fog.credentials[:private_key_path])
|
||||||
|
end
|
||||||
|
|
||||||
|
def private_key
|
||||||
|
@private_key ||= File.read(private_key_path)
|
||||||
|
end
|
||||||
|
|
||||||
|
def public_key_path
|
||||||
|
File.expand_path(@public_key_path ||= Fog.credentials[:public_key_path])
|
||||||
|
end
|
||||||
|
|
||||||
|
def public_key
|
||||||
|
@public_key ||= File.read(public_key_path)
|
||||||
|
end
|
||||||
|
|
||||||
def ready?
|
def ready?
|
||||||
@status == 'active'
|
@status == 'active'
|
||||||
end
|
end
|
||||||
|
@ -57,6 +76,29 @@ module Fog
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def setup(credentials = {})
|
||||||
|
requires :addresses, :identity, :public_key, :username
|
||||||
|
Fog::SSH.new(addresses.first, username, credentials).run([
|
||||||
|
%{mkdir .ssh},
|
||||||
|
%{echo "#{public_key}" >> ~/.ssh/authorized_keys},
|
||||||
|
%{passwd -l root},
|
||||||
|
%{echo "#{attributes.to_json}" >> ~/attributes.json}
|
||||||
|
])
|
||||||
|
rescue Errno::ECONNREFUSED
|
||||||
|
sleep(1)
|
||||||
|
retry
|
||||||
|
end
|
||||||
|
|
||||||
|
def ssh(commands)
|
||||||
|
requires :addresses, :identity, :private_key, :username
|
||||||
|
@ssh ||= Fog::SSH.new(addresses.first, username, :key_data => [private_key])
|
||||||
|
@ssh.run(commands)
|
||||||
|
end
|
||||||
|
|
||||||
|
def username
|
||||||
|
@username ||= 'root'
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -14,6 +14,13 @@ module Fog
|
||||||
load(data)
|
load(data)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def bootstrap(new_attributes = {})
|
||||||
|
server = create(new_attributes)
|
||||||
|
server.wait_for { ready? }
|
||||||
|
server.setup(:password => server.password)
|
||||||
|
server
|
||||||
|
end
|
||||||
|
|
||||||
def get(server_id)
|
def get(server_id)
|
||||||
if server_id && server = connection.get_slice(server_id).body
|
if server_id && server = connection.get_slice(server_id).body
|
||||||
new(server)
|
new(server)
|
||||||
|
|
Loading…
Reference in a new issue