fog-oneandone 1.0 → 1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +3 -1
- data/Rakefile +24 -0
- data/examples/example_app.rb +39 -12
- data/fog-oneandone.gemspec +2 -1
- data/lib/oneandone/compute.rb +103 -16
- data/lib/oneandone/models/compute/baremetal_model.rb +15 -0
- data/lib/oneandone/models/compute/baremetal_models.rb +24 -0
- data/lib/oneandone/models/compute/block_storage.rb +100 -0
- data/lib/oneandone/models/compute/block_storages.rb +24 -0
- data/lib/oneandone/models/compute/firewall.rb +0 -15
- data/lib/oneandone/models/compute/image.rb +6 -1
- data/lib/oneandone/models/compute/public_ip.rb +2 -1
- data/lib/oneandone/models/compute/recovery_appliance.rb +18 -0
- data/lib/oneandone/models/compute/recovery_appliances.rb +24 -0
- data/lib/oneandone/models/compute/server.rb +44 -105
- data/lib/oneandone/models/compute/server_appliance.rb +25 -0
- data/lib/oneandone/models/compute/server_appliances.rb +24 -0
- data/lib/oneandone/models/compute/ssh_key.rb +67 -0
- data/lib/oneandone/models/compute/ssh_keys.rb +24 -0
- data/lib/oneandone/requests/compute/add_block_storage_server.rb +61 -0
- data/lib/oneandone/requests/compute/add_ports.rb +1 -1
- data/lib/oneandone/requests/compute/create_block_storage.rb +80 -0
- data/lib/oneandone/requests/compute/create_image.rb +9 -3
- data/lib/oneandone/requests/compute/create_server.rb +11 -5
- data/lib/oneandone/requests/compute/create_ssh_key.rb +74 -0
- data/lib/oneandone/requests/compute/delete_block_storage.rb +51 -0
- data/lib/oneandone/requests/compute/delete_ssh_key.rb +51 -0
- data/lib/oneandone/requests/compute/get_baremetal_model.rb +42 -0
- data/lib/oneandone/requests/compute/get_block_storage.rb +50 -0
- data/lib/oneandone/requests/compute/get_block_storage_server.rb +50 -0
- data/lib/oneandone/requests/compute/get_recovery_appliance.rb +41 -0
- data/lib/oneandone/requests/compute/get_ssh_key.rb +50 -0
- data/lib/oneandone/requests/compute/list_baremetal_models.rb +49 -0
- data/lib/oneandone/requests/compute/list_block_storages.rb +56 -0
- data/lib/oneandone/requests/compute/list_recovery_appliances.rb +47 -0
- data/lib/oneandone/requests/compute/list_ssh_keys.rb +56 -0
- data/lib/oneandone/requests/compute/remove_block_storage_server.rb +50 -0
- data/lib/oneandone/requests/compute/update_block_storage.rb +80 -0
- data/lib/oneandone/requests/compute/update_ssh_key.rb +78 -0
- data/tests/oneandone/test_block_storages.rb +82 -0
- data/tests/oneandone/test_firewalls.rb +5 -16
- data/tests/oneandone/test_recovery_appliances.rb +34 -0
- data/tests/oneandone/test_server_appliances.rb +34 -0
- data/tests/oneandone/test_ssh_keys.rb +82 -0
- metadata +58 -13
- data/lib/oneandone/requests/compute/remove_firewall_ip.rb +0 -60
@@ -0,0 +1,25 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class OneAndOne
|
4
|
+
class ServerAppliance < Fog::Model
|
5
|
+
|
6
|
+
# Declare Model Attributes
|
7
|
+
identity :id
|
8
|
+
|
9
|
+
attribute :name
|
10
|
+
attribute :os_family
|
11
|
+
attribute :os
|
12
|
+
attribute :os_version
|
13
|
+
attribute :os_architecture
|
14
|
+
attribute :os_image_type
|
15
|
+
attribute :type
|
16
|
+
attribute :server_type_compatibility
|
17
|
+
attribute :min_hdd_size
|
18
|
+
attribute :licenses
|
19
|
+
attribute :version
|
20
|
+
attribute :categories
|
21
|
+
|
22
|
+
end # ServerAppliance
|
23
|
+
end # OneAndOne
|
24
|
+
end # Compute
|
25
|
+
end # Fog
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative 'server_appliance'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Compute
|
5
|
+
class OneAndOne
|
6
|
+
class ServerAppliances < Fog::Collection
|
7
|
+
model Fog::Compute::OneAndOne::ServerAppliance
|
8
|
+
|
9
|
+
def all
|
10
|
+
response = service.list_server_appliances
|
11
|
+
load(response.body)
|
12
|
+
end
|
13
|
+
|
14
|
+
def get(id)
|
15
|
+
response = service.get_server_appliance(id)
|
16
|
+
new(response.body)
|
17
|
+
rescue Excon::Errors::NotFound
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
|
21
|
+
end # ServerAppliances
|
22
|
+
end # OneAndOne
|
23
|
+
end # Compute
|
24
|
+
end # Fog
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class OneAndOne
|
4
|
+
class SshKey < Fog::Model
|
5
|
+
|
6
|
+
# Declare Model Attributes
|
7
|
+
identity :id
|
8
|
+
|
9
|
+
attribute :name
|
10
|
+
attribute :description
|
11
|
+
attribute :state
|
12
|
+
attribute :servers
|
13
|
+
attribute :md5
|
14
|
+
attribute :public_key
|
15
|
+
attribute :creation_date
|
16
|
+
|
17
|
+
|
18
|
+
def save
|
19
|
+
|
20
|
+
# Perform Request
|
21
|
+
response = service.create_ssh_key(name: name, description: description,
|
22
|
+
public_key: public_key)
|
23
|
+
|
24
|
+
# Merge Attributes
|
25
|
+
merge_attributes(response.body)
|
26
|
+
|
27
|
+
true
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def update(options = {})
|
33
|
+
|
34
|
+
requires :id
|
35
|
+
|
36
|
+
response = service.update_ssh_key(ssh_key_id: id,
|
37
|
+
name: options[:name], description: options[:description])
|
38
|
+
|
39
|
+
# Merge Attributes
|
40
|
+
merge_attributes(response.body)
|
41
|
+
|
42
|
+
true
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
def destroy
|
48
|
+
|
49
|
+
requires :id
|
50
|
+
|
51
|
+
service.delete_ssh_key(id)
|
52
|
+
|
53
|
+
true
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
def ready?
|
59
|
+
|
60
|
+
state == 'ACTIVE'
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end # SshKey
|
65
|
+
end # OneAndOne
|
66
|
+
end # Compute
|
67
|
+
end # Fog
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative 'ssh_key'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Compute
|
5
|
+
class OneAndOne
|
6
|
+
class SshKeys < Fog::Collection
|
7
|
+
model Fog::Compute::OneAndOne::SshKey
|
8
|
+
|
9
|
+
def all
|
10
|
+
response = service.list_ssh_keys
|
11
|
+
load(response.body)
|
12
|
+
end
|
13
|
+
|
14
|
+
def get(id)
|
15
|
+
response = service.get_ssh_key(id)
|
16
|
+
new(response.body)
|
17
|
+
rescue Excon::Errors::NotFound
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
|
21
|
+
end # SshKeys
|
22
|
+
end # OneAndOne
|
23
|
+
end # Compute
|
24
|
+
end # Fog
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class OneAndOne
|
4
|
+
|
5
|
+
class Real
|
6
|
+
|
7
|
+
##
|
8
|
+
# Attach a server to a block storage
|
9
|
+
# URL: [https://cloudpanel-api.1and1.com/documentation/v1/en/api/documentation.html#block_storages__block_storage_id__server_post]
|
10
|
+
##
|
11
|
+
def add_block_storage_server(block_storage_id: nil, server_id: nil)
|
12
|
+
|
13
|
+
# Build POST body
|
14
|
+
add_server = {
|
15
|
+
'server_id' => server_id
|
16
|
+
}
|
17
|
+
|
18
|
+
# Stringify the POST body
|
19
|
+
string_body = Fog::JSON.encode(add_server)
|
20
|
+
|
21
|
+
# Request
|
22
|
+
params = {
|
23
|
+
'method' => :post,
|
24
|
+
'endpoint' => "/block_storages/#{block_storage_id}/server",
|
25
|
+
'body' => string_body
|
26
|
+
}
|
27
|
+
|
28
|
+
request(params)
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end # Real
|
33
|
+
|
34
|
+
|
35
|
+
class Mock
|
36
|
+
|
37
|
+
def add_block_storage_server(block_storage_id: nil, server_id: nil)
|
38
|
+
|
39
|
+
# Search for block storage to return
|
40
|
+
if block_storage = self.data[:block_storages].find {
|
41
|
+
|hash| hash['id'] == block_storage_id
|
42
|
+
}
|
43
|
+
block_storage['server'] << {"id" => server_id}
|
44
|
+
else
|
45
|
+
raise Fog::Errors::NotFound.new('The requested resource could
|
46
|
+
not be found.')
|
47
|
+
end
|
48
|
+
|
49
|
+
# Return Response Object to User
|
50
|
+
response = Excon::Response.new
|
51
|
+
response.status = 202
|
52
|
+
response.body = block_storage
|
53
|
+
response
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end # Mock
|
58
|
+
|
59
|
+
end # OneAndOne
|
60
|
+
end # Compute
|
61
|
+
end # Fog
|
@@ -0,0 +1,80 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class OneAndOne
|
4
|
+
|
5
|
+
class Real
|
6
|
+
|
7
|
+
##
|
8
|
+
# Creates a new block storage
|
9
|
+
# URL: [https://cloudpanel-api.1and1.com/documentation/v1/en/api/documentation.html#block_storages_post]
|
10
|
+
##
|
11
|
+
def create_block_storage(name: nil, description: nil,
|
12
|
+
size: nil, datacenter_id: nil, server_id: nil)
|
13
|
+
|
14
|
+
# Build POST body
|
15
|
+
new_block_storage = {
|
16
|
+
'name' => name,
|
17
|
+
'description' => description,
|
18
|
+
'size' => size,
|
19
|
+
'datacenter_id' => datacenter_id,
|
20
|
+
'server' => server_id
|
21
|
+
}
|
22
|
+
|
23
|
+
# Clean out null values from POST body
|
24
|
+
body = clean_hash(new_block_storage)
|
25
|
+
|
26
|
+
# Stringify the POST body
|
27
|
+
string_body = Fog::JSON.encode(body)
|
28
|
+
|
29
|
+
# Request
|
30
|
+
params = {
|
31
|
+
'method' => :post,
|
32
|
+
'endpoint' => '/block_storages',
|
33
|
+
'body' => string_body
|
34
|
+
}
|
35
|
+
|
36
|
+
request(params)
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end # Real
|
41
|
+
|
42
|
+
|
43
|
+
class Mock
|
44
|
+
|
45
|
+
def create_block_storage(name: nil, description: nil,
|
46
|
+
size: nil, datacenter_id: nil, server_id: nil)
|
47
|
+
|
48
|
+
# Create mock block storage hash
|
49
|
+
mock_block_storage = {
|
50
|
+
"id" => Fog::UUID.uuid,
|
51
|
+
"size" => size,
|
52
|
+
"state" => "ACTIVE",
|
53
|
+
"description" => description,
|
54
|
+
"datacenter" => {
|
55
|
+
"id" => datacenter_id,
|
56
|
+
"location" => "USA",
|
57
|
+
"country_code" => "US"
|
58
|
+
},
|
59
|
+
"name" => name,
|
60
|
+
"creation_date" => "2018-01-06T08:33:25+00:00",
|
61
|
+
"server" => server_id
|
62
|
+
}
|
63
|
+
|
64
|
+
# Save mock block storage to list
|
65
|
+
self.data[:block_storages] << mock_block_storage
|
66
|
+
|
67
|
+
# Return mock response to user
|
68
|
+
response = Excon::Response.new
|
69
|
+
response.status = 202
|
70
|
+
response.body = mock_block_storage
|
71
|
+
|
72
|
+
response
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end # Mock
|
77
|
+
|
78
|
+
end # OneAndOne
|
79
|
+
end # Compute
|
80
|
+
end # Fog
|
@@ -9,7 +9,8 @@ module Fog
|
|
9
9
|
# URL: [https://cloudpanel-api.1and1.com/documentation/1and1/v1/en/documentation.html#images_post]
|
10
10
|
##
|
11
11
|
def create_image(server_id: nil, name: nil, description: nil,
|
12
|
-
frequency: nil, num_images: nil
|
12
|
+
frequency: nil, num_images: nil, source: nil, url: nil,
|
13
|
+
os_id: nil, type: nil)
|
13
14
|
|
14
15
|
# Build POST body
|
15
16
|
new_image = {
|
@@ -17,7 +18,11 @@ module Fog
|
|
17
18
|
'name' => name,
|
18
19
|
'description' => description,
|
19
20
|
'frequency' => frequency,
|
20
|
-
'num_images' => num_images
|
21
|
+
'num_images' => num_images,
|
22
|
+
'source' => source,
|
23
|
+
'url' => url,
|
24
|
+
'os_id' => os_id,
|
25
|
+
'type' => type
|
21
26
|
}
|
22
27
|
|
23
28
|
# Clean out null values from POST body
|
@@ -43,7 +48,8 @@ module Fog
|
|
43
48
|
class Mock
|
44
49
|
|
45
50
|
def create_image(server_id: nil, name: nil, description: nil,
|
46
|
-
frequency: nil, num_images: nil
|
51
|
+
frequency: nil, num_images: nil, source: nil, url: nil,
|
52
|
+
os_id: nil, type: nil)
|
47
53
|
|
48
54
|
# Create mock image hash
|
49
55
|
mock_image = {
|
@@ -12,8 +12,9 @@ module Fog
|
|
12
12
|
fixed_instance_id: nil, vcore: nil, cores_per_processor: nil,
|
13
13
|
ram: nil, appliance_id: nil, datacenter_id: nil, hdds: nil,
|
14
14
|
password: nil, power_on: nil, firewall_id: nil, ip_id: nil,
|
15
|
-
load_balancer_id: nil, monitoring_policy_id: nil
|
16
|
-
|
15
|
+
load_balancer_id: nil, monitoring_policy_id: nil, public_key: nil,
|
16
|
+
server_type: nil, baremetal_model_id: nil)
|
17
|
+
|
17
18
|
# Build hardware hash
|
18
19
|
hardware_params = {
|
19
20
|
'fixed_instance_size_id' => fixed_instance_id,
|
@@ -39,9 +40,13 @@ module Fog
|
|
39
40
|
'firewall_policy_id' => firewall_id,
|
40
41
|
'ip_id' => ip_id,
|
41
42
|
'load_balancer_id' => load_balancer_id,
|
42
|
-
'monitoring_policy_id' => monitoring_policy_id
|
43
|
+
'monitoring_policy_id' => monitoring_policy_id,
|
44
|
+
'public_key' => public_key,
|
45
|
+
'server_type' => server_type
|
43
46
|
}
|
44
47
|
|
48
|
+
new_server['baremetal_model_id'] = baremetal_model_id if baremetal_model_id
|
49
|
+
|
45
50
|
# Clean out null values from POST body
|
46
51
|
body = clean_hash(new_server)
|
47
52
|
|
@@ -68,8 +73,9 @@ module Fog
|
|
68
73
|
fixed_instance_id: nil, vcore: nil, cores_per_processor: nil,
|
69
74
|
ram: nil, appliance_id: nil, datacenter_id: nil, hdds: nil,
|
70
75
|
password: nil, power_on: nil, firewall_id: nil, ip_id: nil,
|
71
|
-
load_balancer_id: nil, monitoring_policy_id: nil
|
72
|
-
|
76
|
+
load_balancer_id: nil, monitoring_policy_id: nil, public_key: nil,
|
77
|
+
server_type: nil, baremetal_model_id: nil)
|
78
|
+
|
73
79
|
# Add UUID to hdds being passed in
|
74
80
|
if hdds
|
75
81
|
hdds.each do |hdd|
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class OneAndOne
|
4
|
+
|
5
|
+
class Real
|
6
|
+
|
7
|
+
##
|
8
|
+
# Creates a new ssh key
|
9
|
+
# URL: [https://cloudpanel-api.1and1.com/documentation/v1/en/api/documentation.html#ssh_keys_post]
|
10
|
+
##
|
11
|
+
def create_ssh_key(name: nil, description: nil,
|
12
|
+
public_key: nil)
|
13
|
+
|
14
|
+
# Build POST body
|
15
|
+
new_ssh_key = {
|
16
|
+
'name' => name,
|
17
|
+
'description' => description,
|
18
|
+
'public_key' => public_key
|
19
|
+
}
|
20
|
+
|
21
|
+
# Clean out null values from POST body
|
22
|
+
body = clean_hash(new_ssh_key)
|
23
|
+
|
24
|
+
# Stringify the POST body
|
25
|
+
string_body = Fog::JSON.encode(body)
|
26
|
+
|
27
|
+
# Request
|
28
|
+
params = {
|
29
|
+
'method' => :post,
|
30
|
+
'endpoint' => '/ssh_keys',
|
31
|
+
'body' => string_body
|
32
|
+
}
|
33
|
+
|
34
|
+
request(params)
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end # Real
|
39
|
+
|
40
|
+
|
41
|
+
class Mock
|
42
|
+
|
43
|
+
def create_ssh_key(name: nil, description: nil,
|
44
|
+
public_key: nil)
|
45
|
+
|
46
|
+
# Create mock ssh key hash
|
47
|
+
mock_ssh_key = {
|
48
|
+
"id" => Fog::UUID.uuid,
|
49
|
+
"name" => name,
|
50
|
+
"description" => description,
|
51
|
+
"state" => "ACTIVE",
|
52
|
+
"servers" => [],
|
53
|
+
"md5" => "5df9f63916ebf8528697b629022993e8",
|
54
|
+
"creation_date" => "2018-01-06T08:33:25+00:00",
|
55
|
+
"public_key" => public_key
|
56
|
+
}
|
57
|
+
|
58
|
+
# Save mock ssh key to list
|
59
|
+
self.data[:ssh_keys] << mock_ssh_key
|
60
|
+
|
61
|
+
# Return mock response to user
|
62
|
+
response = Excon::Response.new
|
63
|
+
response.status = 202
|
64
|
+
response.body = mock_ssh_key
|
65
|
+
|
66
|
+
response
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end # Mock
|
71
|
+
|
72
|
+
end # OneAndOne
|
73
|
+
end # Compute
|
74
|
+
end # Fog
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class OneAndOne
|
4
|
+
|
5
|
+
class Real
|
6
|
+
|
7
|
+
##
|
8
|
+
# Returns information about a block storage
|
9
|
+
# URL: https://cloudpanel-api.1and1.com/documentation/v1/en/api/documentation.html#block_storages__block_storage_id__delete
|
10
|
+
##
|
11
|
+
def delete_block_storage(block_storage_id)
|
12
|
+
|
13
|
+
params = {
|
14
|
+
'method' => :delete,
|
15
|
+
'endpoint' => "/block_storages/#{block_storage_id}"
|
16
|
+
}
|
17
|
+
|
18
|
+
request(params)
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end # Real
|
23
|
+
|
24
|
+
|
25
|
+
class Mock
|
26
|
+
|
27
|
+
def delete_block_storage(block_storage_id)
|
28
|
+
|
29
|
+
# Search for block storage to delete
|
30
|
+
if block_storage = self.data[:block_storages].find {
|
31
|
+
|hash| hash['id'] == block_storage_id
|
32
|
+
}
|
33
|
+
self.data[:block_storages].delete(block_storage)
|
34
|
+
else
|
35
|
+
raise Fog::Errors::NotFound.new('The requested resource could
|
36
|
+
not be found.')
|
37
|
+
end
|
38
|
+
|
39
|
+
# Return Response Object to User
|
40
|
+
response = Excon::Response.new
|
41
|
+
response.status = 202
|
42
|
+
response.body = []
|
43
|
+
response
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end # Mock
|
48
|
+
|
49
|
+
end # OneAndOne
|
50
|
+
end # Compute
|
51
|
+
end # Fog
|