mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
Merge pull request #3500 from tnn2/glesys_sshkeys
[GleSYS] add support for SSH key management
This commit is contained in:
commit
8a54eabdb2
8 changed files with 189 additions and 0 deletions
|
@ -14,6 +14,8 @@ module Fog
|
||||||
model :template
|
model :template
|
||||||
collection :ips
|
collection :ips
|
||||||
model :ip
|
model :ip
|
||||||
|
collection :ssh_keys
|
||||||
|
model :ssh_key
|
||||||
|
|
||||||
request_path 'fog/glesys/requests/compute'
|
request_path 'fog/glesys/requests/compute'
|
||||||
|
|
||||||
|
@ -40,6 +42,11 @@ module Fog
|
||||||
request :ip_add
|
request :ip_add
|
||||||
request :ip_remove
|
request :ip_remove
|
||||||
|
|
||||||
|
# SSH keys
|
||||||
|
request :ssh_key_list
|
||||||
|
request :ssh_key_add
|
||||||
|
request :ssh_key_remove
|
||||||
|
|
||||||
class Mock
|
class Mock
|
||||||
def initialize(options={})
|
def initialize(options={})
|
||||||
@api_url = options[:glesys_api_url] || API_URL
|
@api_url = options[:glesys_api_url] || API_URL
|
||||||
|
|
28
lib/fog/glesys/models/compute/ssh_key.rb
Normal file
28
lib/fog/glesys/models/compute/ssh_key.rb
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
module Fog
|
||||||
|
module Compute
|
||||||
|
class Glesys
|
||||||
|
class SshKey < Fog::Model
|
||||||
|
identity :id
|
||||||
|
|
||||||
|
attribute :description
|
||||||
|
attribute :data
|
||||||
|
|
||||||
|
def save
|
||||||
|
requires :description, :data
|
||||||
|
|
||||||
|
merge_attributes(service.ssh_key_add(:description => description,
|
||||||
|
:sshkey => data
|
||||||
|
).body["response"]["sshkey"])
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
requires :id
|
||||||
|
|
||||||
|
service.ssh_key_remove(:sshkeyids => id)
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
21
lib/fog/glesys/models/compute/ssh_keys.rb
Normal file
21
lib/fog/glesys/models/compute/ssh_keys.rb
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
require "fog/glesys/models/compute/ssh_key"
|
||||||
|
|
||||||
|
module Fog
|
||||||
|
module Compute
|
||||||
|
class Glesys
|
||||||
|
class SshKeys < Fog::Collection
|
||||||
|
model Fog::Compute::Glesys::SshKey
|
||||||
|
|
||||||
|
def all
|
||||||
|
data = service.ssh_key_list.body["response"]["sshkeys"]
|
||||||
|
load(data)
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(id)
|
||||||
|
hash = service.ssh_key_list.body["response"]["sshkeys"].find{|a| a["id"] == id}
|
||||||
|
hash.nil? ? nil : new(hash)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
11
lib/fog/glesys/requests/compute/ssh_key_add.rb
Normal file
11
lib/fog/glesys/requests/compute/ssh_key_add.rb
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
module Fog
|
||||||
|
module Compute
|
||||||
|
class Glesys
|
||||||
|
class Real
|
||||||
|
def ssh_key_add(options)
|
||||||
|
request("sshkey/add", options)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
11
lib/fog/glesys/requests/compute/ssh_key_list.rb
Normal file
11
lib/fog/glesys/requests/compute/ssh_key_list.rb
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
module Fog
|
||||||
|
module Compute
|
||||||
|
class Glesys
|
||||||
|
class Real
|
||||||
|
def ssh_key_list(options = {})
|
||||||
|
request("sshkey/list", options)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
11
lib/fog/glesys/requests/compute/ssh_key_remove.rb
Normal file
11
lib/fog/glesys/requests/compute/ssh_key_remove.rb
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
module Fog
|
||||||
|
module Compute
|
||||||
|
class Glesys
|
||||||
|
class Real
|
||||||
|
def ssh_key_remove(options)
|
||||||
|
request("sshkey/remove", options)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -240,6 +240,59 @@ class Glesys
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
module SshKeys
|
||||||
|
ADD = {
|
||||||
|
'debug' => {
|
||||||
|
'input' => {
|
||||||
|
'sshkey' => String,
|
||||||
|
'description' => String
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'sshkey' => {
|
||||||
|
'id' => Integer,
|
||||||
|
'account' => String,
|
||||||
|
'description' => String,
|
||||||
|
'data' => String
|
||||||
|
},
|
||||||
|
'status' => {
|
||||||
|
'timestamp' => String,
|
||||||
|
'code' => Integer,
|
||||||
|
'text' => String,
|
||||||
|
'transactionid' => Fog::Nullable::String
|
||||||
|
}
|
||||||
|
}
|
||||||
|
REMOVE = {
|
||||||
|
'debug' => {
|
||||||
|
'input' => {
|
||||||
|
'sshkeyids' => String,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'status' => {
|
||||||
|
'timestamp' => String,
|
||||||
|
'code' => Integer,
|
||||||
|
'text' => String,
|
||||||
|
'transactionid' => Fog::Nullable::String
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LIST = {
|
||||||
|
'debug' => {
|
||||||
|
'input' => []
|
||||||
|
},
|
||||||
|
'sshkeys' => [
|
||||||
|
{
|
||||||
|
'id' => Integer,
|
||||||
|
'account' => String,
|
||||||
|
'description' => String,
|
||||||
|
'data' => String,
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'status' => {
|
||||||
|
'timestamp' => String,
|
||||||
|
'code' => Integer,
|
||||||
|
'text' => String
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
module Templates
|
module Templates
|
||||||
LIST = {
|
LIST = {
|
||||||
'debug' => {
|
'debug' => {
|
||||||
|
|
47
tests/glesys/requests/compute/ssh_key_tests.rb
Normal file
47
tests/glesys/requests/compute/ssh_key_tests.rb
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
Shindo.tests("Fog::Compute[:glesys] | ssh_key requests", ["glesys", "compute"]) do
|
||||||
|
@testdescription = "My test key to be removed"
|
||||||
|
@testdata = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDv+r/dCIDv+YazWsyc1WCixR+iOeaswTx1U45h6vh4/ fog-unittest@GleSYS"
|
||||||
|
@testdata_malformed = "ssh-rot13 AAAAthis_is_not_an_ssh_key fog-unittest@GleSYS"
|
||||||
|
|
||||||
|
tests("success") do
|
||||||
|
tests("#ssh_key_add").formats(Glesys::Compute::Formats::SshKeys::ADD) do
|
||||||
|
pending if Fog.mocking?
|
||||||
|
@resp = Fog::Compute[:glesys].ssh_key_add(:description => @testdescription, :sshkey => @testdata)
|
||||||
|
@resp.body["response"]
|
||||||
|
end
|
||||||
|
|
||||||
|
unless Fog.mocking?
|
||||||
|
Fog::Compute[:glesys].ssh_keys.destroy(@resp.body["response"]["sshkey"]["id"])
|
||||||
|
@key = Fog::Compute[:glesys].ssh_keys.create(:description => @testdescription, :data => @testdata)
|
||||||
|
end
|
||||||
|
|
||||||
|
tests("#ssh_key_list").formats(Glesys::Compute::Formats::SshKeys::LIST) do
|
||||||
|
pending if Fog.mocking?
|
||||||
|
@resp = Fog::Compute[:glesys].ssh_key_list
|
||||||
|
@resp.body["response"]
|
||||||
|
end
|
||||||
|
|
||||||
|
unless Fog.mocking?
|
||||||
|
Fog::Compute[:glesys].ssh_keys.destroy(@key.id)
|
||||||
|
@key = Fog::Compute[:glesys].ssh_keys.create(:description => @testdescription, :data => @testdata)
|
||||||
|
end
|
||||||
|
|
||||||
|
tests("#ssh_key_remove").formats(Glesys::Compute::Formats::SshKeys::REMOVE) do
|
||||||
|
pending if Fog.mocking?
|
||||||
|
@resp = Fog::Compute[:glesys].ssh_key_remove(:sshkeyids => @key.id)
|
||||||
|
@resp.body["response"]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
tests("failure") do
|
||||||
|
tests("#ssh_key_add with malformed key data").raises(Excon::Errors::HTTPStatusError) do
|
||||||
|
pending if Fog.mocking?
|
||||||
|
Fog::Compute[:glesys].ssh_key_add(:description => @testdescription, :data => @testdata_malformed)
|
||||||
|
end
|
||||||
|
|
||||||
|
tests("#ssh_key_remove with nonexistent/invalid key id").raises(Excon::Errors::HTTPStatusError) do
|
||||||
|
pending if Fog.mocking?
|
||||||
|
Fog::Compute[:glesys].ssh_key_remove(:id => -1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Add table
Reference in a new issue