mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
Rackspace: add keypair support
This commit is contained in:
parent
b9c58fbc3a
commit
54709b8677
10 changed files with 199 additions and 10 deletions
|
@ -54,6 +54,8 @@ module Fog
|
||||||
collection :attachments
|
collection :attachments
|
||||||
model :network
|
model :network
|
||||||
collection :networks
|
collection :networks
|
||||||
|
model :keypair
|
||||||
|
collection :keypairs
|
||||||
|
|
||||||
request_path 'fog/rackspace/requests/compute_v2'
|
request_path 'fog/rackspace/requests/compute_v2'
|
||||||
request :list_servers
|
request :list_servers
|
||||||
|
@ -97,6 +99,11 @@ module Fog
|
||||||
request :create_network
|
request :create_network
|
||||||
request :delete_network
|
request :delete_network
|
||||||
|
|
||||||
|
request :list_keypairs
|
||||||
|
request :create_keypair
|
||||||
|
request :delete_keypair
|
||||||
|
request :get_keypair
|
||||||
|
|
||||||
class Mock < Fog::Rackspace::Service
|
class Mock < Fog::Rackspace::Service
|
||||||
include Fog::Rackspace::MockData
|
include Fog::Rackspace::MockData
|
||||||
|
|
||||||
|
|
|
@ -109,7 +109,7 @@ module Fog
|
||||||
:flavors => Hash.new { |h,k| h[k] = flavor unless k == NOT_FOUND_ID},
|
:flavors => Hash.new { |h,k| h[k] = flavor unless k == NOT_FOUND_ID},
|
||||||
:images => Hash.new { |h,k| h[k] = image unless k == NOT_FOUND_ID },
|
:images => Hash.new { |h,k| h[k] = image unless k == NOT_FOUND_ID },
|
||||||
:networks => Hash.new { |h,k| h[k] = network unless k == NOT_FOUND_ID },
|
:networks => Hash.new { |h,k| h[k] = network unless k == NOT_FOUND_ID },
|
||||||
|
:keys => [],
|
||||||
:servers => {},
|
:servers => {},
|
||||||
|
|
||||||
#Block Storage
|
#Block Storage
|
||||||
|
|
28
lib/fog/rackspace/models/compute_v2/keypair.rb
Normal file
28
lib/fog/rackspace/models/compute_v2/keypair.rb
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
require 'fog/core/model'
|
||||||
|
|
||||||
|
module Fog
|
||||||
|
module Compute
|
||||||
|
class RackspaceV2
|
||||||
|
class Keypair < Fog::Model
|
||||||
|
attribute :public_key
|
||||||
|
attribute :private_key
|
||||||
|
attribute :user_id
|
||||||
|
identity :name
|
||||||
|
attribute :fingerprint
|
||||||
|
|
||||||
|
def save
|
||||||
|
requires :name
|
||||||
|
data = service.create_keypair(name, public_key)
|
||||||
|
merge_attributes(data.body['keypair'])
|
||||||
|
data.body['keypair']['name'] == name
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
data = service.delete_keypair(identity)
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
31
lib/fog/rackspace/models/compute_v2/keypairs.rb
Normal file
31
lib/fog/rackspace/models/compute_v2/keypairs.rb
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
require 'fog/core/collection'
|
||||||
|
require 'fog/rackspace/models/compute_v2/keypair'
|
||||||
|
|
||||||
|
module Fog
|
||||||
|
module Compute
|
||||||
|
class RackspaceV2
|
||||||
|
|
||||||
|
class Keypairs < Fog::Collection
|
||||||
|
|
||||||
|
model Fog::Compute::RackspaceV2::Keypair
|
||||||
|
|
||||||
|
def all
|
||||||
|
data = []
|
||||||
|
service.list_keypairs.body['keypairs'].each do |kp|
|
||||||
|
data << kp['keypair'] if kp['keypair']
|
||||||
|
end
|
||||||
|
load(data)
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(key_id)
|
||||||
|
begin
|
||||||
|
new(service.get_keypair(key_id).body['keypair'])
|
||||||
|
rescue Fog::Compute::Rackspace::NotFound
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -51,6 +51,11 @@ module Fog
|
||||||
# @return [String] server status.
|
# @return [String] server status.
|
||||||
# @see http://docs.rackspace.com/servers/api/v2/cs-devguide/content/List_Servers-d1e2078.html#server_status
|
# @see http://docs.rackspace.com/servers/api/v2/cs-devguide/content/List_Servers-d1e2078.html#server_status
|
||||||
attribute :state, :aliases => 'status'
|
attribute :state, :aliases => 'status'
|
||||||
|
|
||||||
|
# @!attribute [r] state_ext
|
||||||
|
# @return [String] server (extended) status.
|
||||||
|
# @see http://docs.rackspace.com/servers/api/v2/cs-devguide/content/List_Servers-d1e2078.html#server_status
|
||||||
|
attribute :state_ext, :aliases => 'OS-EXT-STS:task_state'
|
||||||
|
|
||||||
# @!attribute [r] progress
|
# @!attribute [r] progress
|
||||||
# @return [Fixnum] The build completion progress, as a percentage. Value is from 0 to 100.
|
# @return [Fixnum] The build completion progress, as a percentage. Value is from 0 to 100.
|
||||||
|
@ -198,11 +203,11 @@ module Fog
|
||||||
options[:disk_config] = disk_config unless disk_config.nil?
|
options[:disk_config] = disk_config unless disk_config.nil?
|
||||||
options[:metadata] = metadata.to_hash unless @metadata.nil?
|
options[:metadata] = metadata.to_hash unless @metadata.nil?
|
||||||
options[:personality] = personality unless personality.nil?
|
options[:personality] = personality unless personality.nil?
|
||||||
|
options[:keypair] ||= attributes[:keypair]
|
||||||
|
|
||||||
if options[:networks]
|
if options[:networks]
|
||||||
options[:networks].map! { |id| { :uuid => id } }
|
options[:networks].map! { |id| { :uuid => id } }
|
||||||
end
|
end
|
||||||
|
|
||||||
data = service.create_server(name, image_id, flavor_id, 1, 1, options)
|
data = service.create_server(name, image_id, flavor_id, 1, 1, options)
|
||||||
merge_attributes(data.body['server'])
|
merge_attributes(data.body['server'])
|
||||||
true
|
true
|
||||||
|
@ -331,7 +336,7 @@ module Fog
|
||||||
# Server's private IPv4 address
|
# Server's private IPv4 address
|
||||||
# @return [String] private IPv4 address
|
# @return [String] private IPv4 address
|
||||||
def private_ip_address
|
def private_ip_address
|
||||||
addresses['private'].select{|a| a["version"] == 4}[0]["addr"]
|
addresses['private'].select{|a| a["version"] == 4}[0]["addr"] rescue ''
|
||||||
end
|
end
|
||||||
|
|
||||||
# Server's public IPv4 address
|
# Server's public IPv4 address
|
||||||
|
|
36
lib/fog/rackspace/requests/compute_v2/create_keypair.rb
Normal file
36
lib/fog/rackspace/requests/compute_v2/create_keypair.rb
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
module Fog
|
||||||
|
module Compute
|
||||||
|
class RackspaceV2
|
||||||
|
class Real
|
||||||
|
|
||||||
|
# Requests a new keypair to be created
|
||||||
|
#
|
||||||
|
# ==== Parameters
|
||||||
|
# * name<~String> - name to give new key
|
||||||
|
#
|
||||||
|
# ==== Returns
|
||||||
|
# * response<~Excon::Response>:
|
||||||
|
# * keypair<~Hash>:
|
||||||
|
# * 'fingerprint'<~String>:
|
||||||
|
# * 'name'<~String>:
|
||||||
|
# * 'private_key'<~String>:
|
||||||
|
# * 'public_key'<~String>:
|
||||||
|
# * 'user_id'<~String>:
|
||||||
|
def create_keypair(name, public_key=nil)
|
||||||
|
data = {
|
||||||
|
'keypair' => {
|
||||||
|
'name' => name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
request(
|
||||||
|
:method => 'POST',
|
||||||
|
:expects => 200,
|
||||||
|
:path => '/os-keypairs',
|
||||||
|
:body => Fog::JSON.encode(data)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -43,11 +43,11 @@ module Fog
|
||||||
def create_server(name, image_id, flavor_id, min_count, max_count, options = {})
|
def create_server(name, image_id, flavor_id, min_count, max_count, options = {})
|
||||||
data = {
|
data = {
|
||||||
'server' => {
|
'server' => {
|
||||||
'name' => name,
|
'name' => name,
|
||||||
'imageRef' => image_id,
|
'imageRef' => image_id,
|
||||||
'flavorRef' => flavor_id,
|
'flavorRef' => flavor_id,
|
||||||
'minCount' => min_count,
|
'minCount' => min_count,
|
||||||
'maxCount' => max_count
|
'maxCount' => max_count
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,12 +58,13 @@ module Fog
|
||||||
{ :uuid => '00000000-0000-0000-0000-000000000000' },
|
{ :uuid => '00000000-0000-0000-0000-000000000000' },
|
||||||
{ :uuid => '11111111-1111-1111-1111-111111111111' }
|
{ :uuid => '11111111-1111-1111-1111-111111111111' }
|
||||||
]
|
]
|
||||||
|
data['server']['key_name'] = options[:keypair][:name] unless options[:keypair].nil?
|
||||||
|
|
||||||
request(
|
request(
|
||||||
:body => Fog::JSON.encode(data),
|
:body => Fog::JSON.encode(data),
|
||||||
:expects => [202],
|
:expects => [202],
|
||||||
:method => 'POST',
|
:method => 'POST',
|
||||||
:path => "servers"
|
:path => "servers"
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
26
lib/fog/rackspace/requests/compute_v2/delete_keypair.rb
Normal file
26
lib/fog/rackspace/requests/compute_v2/delete_keypair.rb
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
module Fog
|
||||||
|
module Compute
|
||||||
|
class RackspaceV2
|
||||||
|
class Real
|
||||||
|
|
||||||
|
# Deletes the key specified with key_name
|
||||||
|
#
|
||||||
|
# ==== Parameters
|
||||||
|
# * key_name<~String> - name of key to be deleted
|
||||||
|
#
|
||||||
|
# ==== Returns
|
||||||
|
# * response<~Excon::Response>:
|
||||||
|
# * body<~Hash>:
|
||||||
|
# *'success'<~Bool>: true or false for success
|
||||||
|
def delete_keypair(key_name)
|
||||||
|
request(
|
||||||
|
:method => 'DELETE',
|
||||||
|
:expects => 202,
|
||||||
|
:path => "/os-keypairs/#{key_name}"
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
29
lib/fog/rackspace/requests/compute_v2/get_keypair.rb
Normal file
29
lib/fog/rackspace/requests/compute_v2/get_keypair.rb
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
module Fog
|
||||||
|
module Compute
|
||||||
|
class RackspaceV2
|
||||||
|
class Real
|
||||||
|
|
||||||
|
# Returns details of key by name specified
|
||||||
|
#
|
||||||
|
# ==== Parameters
|
||||||
|
# 'key_name'<~String>: name of key to request
|
||||||
|
#
|
||||||
|
# ==== Returns
|
||||||
|
# * response<~Excon::Response>:
|
||||||
|
# * body<~Hash>:
|
||||||
|
# * 'keypair'<~Hash>: Name of key
|
||||||
|
# * 'public_key'<~String>: public key
|
||||||
|
# * 'name'<~String>: key name
|
||||||
|
# * 'fingerprint'<~String>: id
|
||||||
|
#
|
||||||
|
def get_key(key_name)
|
||||||
|
request(
|
||||||
|
:method => 'GET',
|
||||||
|
:expects => 200,
|
||||||
|
:path => "/os-keypairs/#{key_name}"
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
26
lib/fog/rackspace/requests/compute_v2/list_keypairs.rb
Normal file
26
lib/fog/rackspace/requests/compute_v2/list_keypairs.rb
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
module Fog
|
||||||
|
module Compute
|
||||||
|
class RackspaceV2
|
||||||
|
class Real
|
||||||
|
|
||||||
|
# Returns list of instances that the authenticated user manages.
|
||||||
|
#
|
||||||
|
# ==== Parameters
|
||||||
|
# No parameters
|
||||||
|
#
|
||||||
|
# ==== Returns
|
||||||
|
# * response<~Excon::Response>:
|
||||||
|
# * body<~Hash>:
|
||||||
|
# * 'keypairs'<~Array>: list of keypairs
|
||||||
|
# * 'keypair'<~Hash>: fingerprint, name, public_key
|
||||||
|
def list_keypairs
|
||||||
|
request(
|
||||||
|
:method => 'GET',
|
||||||
|
:expects => 200,
|
||||||
|
:path => '/os-keypairs'
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Add table
Add a link
Reference in a new issue