fog-openstack 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -0
- data/.travis.yml +6 -2
- data/README.md +4 -0
- data/Rakefile +10 -2
- data/fog-openstack.gemspec +2 -3
- data/gemfiles/Gemfile-1.9 +1 -1
- data/lib/fog/openstack.rb +14 -6
- data/lib/fog/openstack/baremetal.rb +1 -1
- data/lib/fog/openstack/common.rb +0 -2
- data/lib/fog/openstack/compute.rb +78 -75
- data/lib/fog/openstack/core.rb +2 -1
- data/lib/fog/openstack/docs/compute.md +1 -1
- data/lib/fog/openstack/docs/network.md +283 -0
- data/lib/fog/openstack/docs/nfv.md +144 -0
- data/lib/fog/openstack/examples/compute/block_device_mapping_v2.rb +4 -4
- data/lib/fog/openstack/examples/network/network_add_port.rb +21 -0
- data/lib/fog/openstack/examples/network/network_rbac.rb +69 -0
- data/lib/fog/openstack/identity.rb +14 -22
- data/lib/fog/openstack/identity_v2.rb +1 -1
- data/lib/fog/openstack/image_v1.rb +13 -28
- data/lib/fog/openstack/image_v2.rb +15 -17
- data/lib/fog/openstack/introspection.rb +1 -1
- data/lib/fog/openstack/metering.rb +1 -1
- data/lib/fog/openstack/models/collection.rb +4 -1
- data/lib/fog/openstack/models/compute/availability_zone.rb +5 -0
- data/lib/fog/openstack/models/compute/flavor.rb +21 -9
- data/lib/fog/openstack/models/compute/server.rb +64 -77
- data/lib/fog/openstack/models/compute/snapshot.rb +6 -6
- data/lib/fog/openstack/models/compute/volume_attachment.rb +15 -0
- data/lib/fog/openstack/models/compute/volume_attachments.rb +20 -0
- data/lib/fog/openstack/models/identity_v3/projects.rb +1 -1
- data/lib/fog/openstack/models/identity_v3/users.rb +2 -2
- data/lib/fog/openstack/models/image_v2/image.rb +41 -22
- data/lib/fog/openstack/models/network/floating_ip.rb +1 -0
- data/lib/fog/openstack/models/network/rbac_policies.rb +33 -0
- data/lib/fog/openstack/models/network/rbac_policy.rb +35 -0
- data/lib/fog/openstack/models/nfv/vnf.rb +58 -0
- data/lib/fog/openstack/models/nfv/vnfd.rb +53 -0
- data/lib/fog/openstack/models/nfv/vnfds.rb +28 -0
- data/lib/fog/openstack/models/nfv/vnfs.rb +28 -0
- data/lib/fog/openstack/models/volume/snapshot.rb +38 -0
- data/lib/fog/openstack/models/volume/snapshots.rb +26 -0
- data/lib/fog/openstack/models/volume/volume.rb +32 -2
- data/lib/fog/openstack/models/volume/volume_type.rb +3 -4
- data/lib/fog/openstack/models/volume_v1/snapshot.rb +43 -0
- data/lib/fog/openstack/models/volume_v1/snapshots.rb +16 -0
- data/lib/fog/openstack/models/volume_v1/volume.rb +12 -2
- data/lib/fog/openstack/models/volume_v2/snapshot.rb +43 -0
- data/lib/fog/openstack/models/volume_v2/snapshots.rb +16 -0
- data/lib/fog/openstack/models/volume_v2/volume.rb +12 -3
- data/lib/fog/openstack/network.rb +53 -46
- data/lib/fog/openstack/nfv.rb +158 -0
- data/lib/fog/openstack/orchestration.rb +1 -1
- data/lib/fog/openstack/planning.rb +1 -1
- data/lib/fog/openstack/requests/compute/create_server.rb +1 -1
- data/lib/fog/openstack/requests/compute/{create_volume_snapshot.rb → create_snapshot.rb} +16 -16
- data/lib/fog/openstack/requests/compute/delete_flavor_metadata.rb +30 -0
- data/lib/fog/openstack/requests/compute/evacuate_server.rb +8 -7
- data/lib/fog/openstack/requests/compute/get_key_pair.rb +49 -0
- data/lib/fog/openstack/requests/compute/list_availability_zones.rb +23 -0
- data/lib/fog/openstack/requests/compute/list_volume_attachments.rb +31 -0
- data/lib/fog/openstack/requests/compute/update_flavor_metadata.rb +33 -0
- data/lib/fog/openstack/requests/network/create_rbac_policy.rb +42 -0
- data/lib/fog/openstack/requests/network/delete_rbac_policy.rb +28 -0
- data/lib/fog/openstack/requests/network/get_rbac_policy.rb +28 -0
- data/lib/fog/openstack/requests/network/list_rbac_policies.rb +25 -0
- data/lib/fog/openstack/requests/network/update_port.rb +8 -7
- data/lib/fog/openstack/requests/network/update_rbac_policy.rb +41 -0
- data/lib/fog/openstack/requests/nfv/create_vnf.rb +37 -0
- data/lib/fog/openstack/requests/nfv/create_vnfd.rb +35 -0
- data/lib/fog/openstack/requests/nfv/delete_vnf.rb +23 -0
- data/lib/fog/openstack/requests/nfv/delete_vnfd.rb +23 -0
- data/lib/fog/openstack/requests/nfv/get_vnf.rb +24 -0
- data/lib/fog/openstack/requests/nfv/get_vnfd.rb +24 -0
- data/lib/fog/openstack/requests/nfv/list_vnfds.rb +25 -0
- data/lib/fog/openstack/requests/nfv/list_vnfs.rb +25 -0
- data/lib/fog/openstack/requests/nfv/update_vnf.rb +35 -0
- data/lib/fog/openstack/requests/volume/action.rb +16 -0
- data/lib/fog/openstack/requests/volume/create_snapshot.rb +18 -0
- data/lib/fog/openstack/requests/volume/delete_metadata.rb +15 -0
- data/lib/fog/openstack/requests/volume/delete_snapshot.rb +5 -5
- data/lib/fog/openstack/requests/volume/delete_snapshot_metadata.rb +15 -0
- data/lib/fog/openstack/requests/volume/replace_metadata.rb +20 -0
- data/lib/fog/openstack/requests/volume/update_metadata.rb +20 -0
- data/lib/fog/openstack/requests/volume/update_snapshot.rb +37 -0
- data/lib/fog/openstack/requests/volume/update_snapshot_metadata.rb +20 -0
- data/lib/fog/openstack/requests/volume/update_volume.rb +25 -0
- data/lib/fog/openstack/requests/volume_v1/action.rb +2 -0
- data/lib/fog/openstack/requests/volume_v1/create_snapshot.rb +45 -0
- data/lib/fog/openstack/requests/volume_v1/delete_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v1/delete_snapshot_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v1/replace_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v1/update_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v1/update_snapshot.rb +2 -0
- data/lib/fog/openstack/requests/volume_v1/update_snapshot_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v1/update_volume.rb +2 -0
- data/lib/fog/openstack/requests/volume_v2/action.rb +2 -0
- data/lib/fog/openstack/requests/volume_v2/create_snapshot.rb +45 -0
- data/lib/fog/openstack/requests/volume_v2/delete_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v2/delete_snapshot_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v2/replace_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v2/update_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v2/update_snapshot.rb +2 -0
- data/lib/fog/openstack/requests/volume_v2/update_snapshot_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v2/update_volume.rb +2 -0
- data/lib/fog/openstack/storage.rb +1 -1
- data/lib/fog/openstack/version.rb +1 -1
- data/lib/fog/openstack/volume.rb +1 -1
- data/lib/fog/openstack/volume_v1.rb +29 -21
- data/lib/fog/openstack/volume_v2.rb +29 -21
- data/supported.md +54 -0
- data/tests/openstack/models/identity/ec2_credential_tests.rb +1 -1
- data/tests/openstack/models/identity/ec2_credentials_tests.rb +1 -1
- data/tests/openstack/models/identity/role_tests.rb +8 -3
- data/tests/openstack/models/identity/roles_tests.rb +5 -4
- data/tests/openstack/models/identity/tenant_tests.rb +7 -4
- data/tests/openstack/models/identity/tenants_tests.rb +10 -5
- data/tests/openstack/models/identity/user_tests.rb +4 -3
- data/tests/openstack/models/identity/users_tests.rb +10 -6
- data/tests/openstack/models/nfv/vnf_tests.rb +35 -0
- data/tests/openstack/models/nfv/vnfd_tests.rb +23 -0
- data/tests/openstack/models/nfv/vnfds_tests.rb +31 -0
- data/tests/openstack/models/nfv/vnfs_tests.rb +38 -0
- data/tests/openstack/requests/identity/ec2_credentials_tests.rb +6 -9
- data/tests/openstack/requests/identity/helper.rb +12 -4
- data/tests/openstack/requests/identity/role_tests.rb +13 -10
- data/tests/openstack/requests/identity/tenant_tests.rb +10 -9
- data/tests/openstack/requests/identity/user_tests.rb +11 -6
- data/tests/openstack/requests/image/image_tests.rb +1 -0
- data/tests/openstack/requests/nfv/vnf_tests.rb +70 -0
- data/tests/openstack/requests/nfv/vnfd_tests.rb +44 -0
- metadata +81 -31
- data/lib/fog/openstack/requests/volume/create_volume_snapshot.rb +0 -26
- data/lib/fog/openstack/requests/volume_v1/create_volume_snapshot.rb +0 -44
- data/lib/fog/openstack/requests/volume_v2/create_volume_snapshot.rb +0 -43
- data/tests/openstack/authenticate_tests.rb +0 -200
- data/tests/openstack/identity_version_tests.rb +0 -25
- data/tests/openstack/storage_tests.rb +0 -18
- data/tests/openstack/version_tests.rb +0 -55
- data/tests/openstack/volume_tests.rb +0 -18
@@ -0,0 +1,158 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module NFV
|
5
|
+
class OpenStack < Fog::Service
|
6
|
+
SUPPORTED_VERSIONS = /v1.0/
|
7
|
+
|
8
|
+
requires :openstack_auth_url
|
9
|
+
recognizes :openstack_auth_token, :openstack_management_url,
|
10
|
+
:persistent, :openstack_service_type, :openstack_service_name,
|
11
|
+
:openstack_tenant, :openstack_tenant_id,
|
12
|
+
:openstack_api_key, :openstack_username, :openstack_identity_endpoint,
|
13
|
+
:current_user, :current_tenant, :openstack_region,
|
14
|
+
:openstack_endpoint_type,
|
15
|
+
:openstack_project_name, :openstack_project_id,
|
16
|
+
:openstack_project_domain, :openstack_user_domain, :openstack_domain_name,
|
17
|
+
:openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id
|
18
|
+
|
19
|
+
## REQUESTS
|
20
|
+
#
|
21
|
+
request_path 'fog/openstack/requests/nfv'
|
22
|
+
|
23
|
+
# vnfds requests
|
24
|
+
request :list_vnfds
|
25
|
+
request :get_vnfd
|
26
|
+
request :create_vnfd
|
27
|
+
request :delete_vnfd
|
28
|
+
|
29
|
+
# vfns requests
|
30
|
+
request :list_vnfs
|
31
|
+
request :get_vnf
|
32
|
+
request :create_vnf
|
33
|
+
request :update_vnf
|
34
|
+
request :delete_vnf
|
35
|
+
|
36
|
+
## MODELS
|
37
|
+
#
|
38
|
+
model_path 'fog/openstack/models/nfv'
|
39
|
+
model :vnfd
|
40
|
+
collection :vnfds
|
41
|
+
model :vnf
|
42
|
+
collection :vnfs
|
43
|
+
|
44
|
+
class Mock
|
45
|
+
def self.data
|
46
|
+
@data ||= Hash.new do |hash, key|
|
47
|
+
hash[key] = {
|
48
|
+
:vnfs => [
|
49
|
+
{
|
50
|
+
"status" => "ACTIVE",
|
51
|
+
"description" => "demo-example",
|
52
|
+
"tenant_id" => "943b6ff8229a4ec2bed0a306f869a0ea",
|
53
|
+
"instance_id" => "5a9a7d3b-24f5-4226-8d43-262972a1776e",
|
54
|
+
"mgmt_url" => "{\"vdu1\": \"192.168.0.8\"}",
|
55
|
+
"attributes" => {"monitoring_policy" => "{\"vdus\": {}}"},
|
56
|
+
"id" => "cb4cdbd8-cf1a-4758-8d36-40db788a37a1",
|
57
|
+
"name" => "LadasTest"
|
58
|
+
}
|
59
|
+
],
|
60
|
+
:vnfds => [
|
61
|
+
{
|
62
|
+
"service_types" => [{"service_type" => "vnfd", "id" => "f9211d81-b58a-4849-8d38-e25376c421bd"}],
|
63
|
+
"description" => "demo-example",
|
64
|
+
"tenant_id" => "943b6ff8229a4ec2bed0a306f869a0ea",
|
65
|
+
"mgmt_driver" => "noop",
|
66
|
+
"infra_driver" => "heat",
|
67
|
+
"attributes" => {"vnfd" => "template_name: sample-vnfd"},
|
68
|
+
"id" => "1f8f33cf-8c94-427e-a040-f3e393b773b7",
|
69
|
+
"name" => "sample-vnfd"
|
70
|
+
}
|
71
|
+
]
|
72
|
+
}
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.reset
|
77
|
+
@data = nil
|
78
|
+
end
|
79
|
+
|
80
|
+
include Fog::OpenStack::Core
|
81
|
+
|
82
|
+
def initialize(options = {})
|
83
|
+
@auth_token = Fog::Mock.random_base64(64)
|
84
|
+
@auth_token_expiration = (Time.now.utc + 86_400).iso8601
|
85
|
+
|
86
|
+
initialize_identity options
|
87
|
+
end
|
88
|
+
|
89
|
+
def data
|
90
|
+
self.class.data[@openstack_username]
|
91
|
+
end
|
92
|
+
|
93
|
+
def reset_data
|
94
|
+
self.class.data.delete(@openstack_username)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
class Real
|
99
|
+
include Fog::OpenStack::Core
|
100
|
+
|
101
|
+
def initialize(options = {})
|
102
|
+
initialize_identity options
|
103
|
+
|
104
|
+
@openstack_service_type = options[:openstack_service_type] || ['servicevm']
|
105
|
+
@openstack_service_name = options[:openstack_service_name]
|
106
|
+
|
107
|
+
@connection_options = options[:connection_options] || {}
|
108
|
+
|
109
|
+
authenticate
|
110
|
+
|
111
|
+
unless @path.match(SUPPORTED_VERSIONS)
|
112
|
+
@path = "/" + Fog::OpenStack.get_supported_version(
|
113
|
+
SUPPORTED_VERSIONS,
|
114
|
+
@openstack_management_uri,
|
115
|
+
@auth_token,
|
116
|
+
@connection_options
|
117
|
+
)
|
118
|
+
end
|
119
|
+
|
120
|
+
@persistent = options[:persistent] || false
|
121
|
+
@connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
|
122
|
+
end
|
123
|
+
|
124
|
+
def request(params)
|
125
|
+
response = @connection.request(
|
126
|
+
params.merge(
|
127
|
+
:headers => {
|
128
|
+
'Content-Type' => 'application/json',
|
129
|
+
'X-Auth-Token' => @auth_token
|
130
|
+
}.merge!(params[:headers] || {}),
|
131
|
+
:path => "#{@path}/#{params[:path]}"
|
132
|
+
)
|
133
|
+
)
|
134
|
+
rescue Excon::Errors::Unauthorized => error
|
135
|
+
if error.response.body != "Bad username or password" # token expiration
|
136
|
+
@openstack_must_reauthenticate = true
|
137
|
+
authenticate
|
138
|
+
retry
|
139
|
+
else # bad credentials
|
140
|
+
raise error
|
141
|
+
end
|
142
|
+
rescue Excon::Errors::HTTPStatusError => error
|
143
|
+
raise case error
|
144
|
+
when Excon::Errors::NotFound
|
145
|
+
Fog::NFV::OpenStack::NotFound.slurp(error)
|
146
|
+
else
|
147
|
+
error
|
148
|
+
end
|
149
|
+
else
|
150
|
+
unless response.body.empty?
|
151
|
+
response.body = Fog::JSON.decode(response.body)
|
152
|
+
end
|
153
|
+
response
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
@@ -9,7 +9,7 @@ module Fog
|
|
9
9
|
:openstack_tenant, :openstack_tenant_id,
|
10
10
|
:openstack_api_key, :openstack_username, :openstack_identity_endpoint,
|
11
11
|
:current_user, :current_tenant, :openstack_region,
|
12
|
-
:openstack_endpoint_type,
|
12
|
+
:openstack_endpoint_type, :openstack_cache_ttl,
|
13
13
|
:openstack_project_name, :openstack_project_id,
|
14
14
|
:openstack_project_domain, :openstack_user_domain, :openstack_domain_name,
|
15
15
|
:openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id,
|
@@ -11,7 +11,7 @@ module Fog
|
|
11
11
|
:openstack_tenant, :openstack_tenant_id,
|
12
12
|
:openstack_api_key, :openstack_username, :openstack_identity_endpoint,
|
13
13
|
:current_user, :current_tenant, :openstack_region,
|
14
|
-
:openstack_endpoint_type,
|
14
|
+
:openstack_endpoint_type, :openstack_cache_ttl,
|
15
15
|
:openstack_project_name, :openstack_project_id,
|
16
16
|
:openstack_project_domain, :openstack_user_domain, :openstack_domain_name,
|
17
17
|
:openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id,
|
@@ -2,7 +2,7 @@ module Fog
|
|
2
2
|
module Compute
|
3
3
|
class OpenStack
|
4
4
|
class Real
|
5
|
-
def
|
5
|
+
def create_snapshot(volume_id, name, description, force = false)
|
6
6
|
data = {
|
7
7
|
'snapshot' => {
|
8
8
|
'volume_id' => volume_id,
|
@@ -13,36 +13,36 @@ module Fog
|
|
13
13
|
}
|
14
14
|
|
15
15
|
request(
|
16
|
-
:body
|
17
|
-
:expects
|
18
|
-
:method
|
19
|
-
:path
|
16
|
+
:body => Fog::JSON.encode(data),
|
17
|
+
:expects => [200, 202],
|
18
|
+
:method => 'POST',
|
19
|
+
:path => "os-snapshots"
|
20
20
|
)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
class Mock
|
25
|
-
def
|
25
|
+
def create_snapshot(volume_id, name, description, _force = false)
|
26
26
|
volume_response = get_volume_details(volume_id)
|
27
27
|
volume = volume_response.data[:body]['volume']
|
28
|
-
|
28
|
+
if volume.nil?
|
29
|
+
raise Fog::Compute::OpenStack::NotFound
|
30
|
+
else
|
29
31
|
response = Excon::Response.new
|
30
32
|
data = {
|
31
|
-
"status"
|
32
|
-
"name"
|
33
|
-
"created_at"
|
33
|
+
"status" => "availble",
|
34
|
+
"name" => name,
|
35
|
+
"created_at" => Time.now,
|
34
36
|
"description" => description,
|
35
|
-
"volume_id"
|
36
|
-
"id"
|
37
|
-
"size"
|
37
|
+
"volume_id" => volume_id,
|
38
|
+
"id" => Fog::Mock.random_numbers(2),
|
39
|
+
"size" => volume['size']
|
38
40
|
}
|
39
41
|
|
40
42
|
self.data[:snapshots][data['id']] = data
|
41
|
-
response.body = {
|
43
|
+
response.body = {"snapshot" => data}
|
42
44
|
response.status = 202
|
43
45
|
response
|
44
|
-
else
|
45
|
-
raise Fog::Compute::OpenStack::NotFound
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class OpenStack
|
4
|
+
class Real
|
5
|
+
def delete_flavor_metadata(flavor_ref, key)
|
6
|
+
request(
|
7
|
+
:expects => 200,
|
8
|
+
:method => 'DELETE',
|
9
|
+
:path => "flavors/#{flavor_ref}/os-extra_specs/#{key}"
|
10
|
+
)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Mock
|
15
|
+
def delete_flavor_metadata(_flavor_ref, _key)
|
16
|
+
response = Excon::Response.new
|
17
|
+
response.status = 200
|
18
|
+
response.headers = {
|
19
|
+
"X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf",
|
20
|
+
"Content-Type" => "application/json",
|
21
|
+
"Content-Length" => "356",
|
22
|
+
"Date" => Date.new
|
23
|
+
}
|
24
|
+
response.body = nil
|
25
|
+
response
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -2,11 +2,12 @@ module Fog
|
|
2
2
|
module Compute
|
3
3
|
class OpenStack
|
4
4
|
class Real
|
5
|
-
def evacuate_server(server_id, host = nil, on_shared_storage =
|
6
|
-
evacuate
|
7
|
-
evacuate['host']
|
8
|
-
evacuate['
|
9
|
-
|
5
|
+
def evacuate_server(server_id, host = nil, on_shared_storage = nil, admin_password = nil)
|
6
|
+
evacuate = {}
|
7
|
+
evacuate['host'] = host if host
|
8
|
+
evacuate['onSharedStorage'] = on_shared_storage if on_shared_storage
|
9
|
+
evacuate['adminPass'] = admin_password if admin_password
|
10
|
+
body = {
|
10
11
|
'evacuate' => evacuate
|
11
12
|
}
|
12
13
|
server_action(server_id, body)
|
@@ -14,8 +15,8 @@ module Fog
|
|
14
15
|
end
|
15
16
|
|
16
17
|
class Mock
|
17
|
-
def evacuate_server(
|
18
|
-
response
|
18
|
+
def evacuate_server(_server_id, _host, _on_shared_storage, _admin_password = nil)
|
19
|
+
response = Excon::Response.new
|
19
20
|
response.status = 202
|
20
21
|
response
|
21
22
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class OpenStack
|
4
|
+
class Real
|
5
|
+
def get_key_pair(key_name)
|
6
|
+
request(
|
7
|
+
:expects => 200,
|
8
|
+
:method => 'GET',
|
9
|
+
:path => "os-keypairs/#{key_name}"
|
10
|
+
)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Mock
|
15
|
+
def delete_key_pair(key_name)
|
16
|
+
response = Excon::Response.new
|
17
|
+
response.status = 200
|
18
|
+
response.headers = {
|
19
|
+
"X-Compute-Request-Id" => "req-c373a42c-2825-4e60-8d34-99416ea850be",
|
20
|
+
"Content-Type" => "application/json",
|
21
|
+
"Content-Length" => "1289",
|
22
|
+
"Date" => Date.new}
|
23
|
+
response.body = {
|
24
|
+
"keypair" => {
|
25
|
+
"public_key" => "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDCdAZLjljntJbLVVkNHjWFSoKen2nZbk39ZfqhZJOMdeFdz"\
|
26
|
+
"02GWBS45rcuboeGg/gozKRwsLu4N6NLPlYtbK/NapJIvgO/djBp+FQG1QZNtLPsx7j4hVJac3yISGms+Xtu4c"\
|
27
|
+
"Ev6j5sFDzAgTQbWez0Z1+9qOq9ngdaoW+YClfQ== vagrant@nova\n",
|
28
|
+
"private_key" => "-----BEGIN RSA PRIVATE KEY-----\nMIICXgIBAAKBgQDCdAZLjljn1tJbLVVkNHjWFSoKen2nZbk39Zfq"\
|
29
|
+
"hZJOMdeFdz02\nGWBS45rcuHboeGg/gozKRwsLu4N6NLPlYtbK/NapJIvgO/djBp+FQG1QZNtLPsx7\nj4hVJ"\
|
30
|
+
"ac3yISGms+Xtu4cEv6j5sFDzAgTQbWez0Z1+9qOq9ngdaoW+YClfQIDAQAB\nAoGBALBoT9m1vuQ82EONQf2R"\
|
31
|
+
"ONqHAsfUzi/SMhEZRgOlv9AemXZkcWyl4uPvxmtd\nEcreiTystAtCHjw7lhCExXthipevUjtIAAt+b3pMn6O"\
|
32
|
+
"yjad3IRvde6atMdjrje43\n/nftYtuXYyJTsvwEvLYqSioLQ0Nn/XDKhOpcM5tejDHOH35lAkEA+H4r7y9X52"\
|
33
|
+
"1u\nIABVAezBWaT/wvdMjx5cwfyYEQjnI1bxfRIqkgoY5gDDBdVbT75UTsHHbHLORQcw\nRjRvS2zgewJBAMh"\
|
34
|
+
"T6eyMonJvHHvC5RcchcY+dWkscIKoOzeyUKMb+7tERQa9/UN2\njYb+jdM0VyL0ruLFwYtl2m34gfmhcXgIvG"\
|
35
|
+
"cCQGzKMEnjHEUBr7jq7EyPbobkqeSd\niDMQQ+PZxmmO0EK0ib0L+v881HG926PuKK/cz+Q7Cif8iznFT+ksg"\
|
36
|
+
"50t6YkCQQC9\nwfcAskqieSuS9A9LcCIrojhXctf0e+T0Ij2N89DlF4sHEuqXf/IZ4IB5gsfTfdE3\nUDnAkK"\
|
37
|
+
"9yogaEbu/r0uKbAkEAy5kl71bIqvKTKsY2mES9ziVxfftl/9UIi5LI+QHb\nmC/c6cTrGVCM71fi2GMxGgBeE"\
|
38
|
+
"ea4+7xwoWTL4CxA00kmTg==\n-----END RSA PRIVATE KEY-----\n",
|
39
|
+
"user_id" => "admin",
|
40
|
+
"name" => key_name,
|
41
|
+
"fingerprint" => "97:86:f4:15:68:0c:7b:a7:e5:8f:f0:bd:1f:27:65:ad"
|
42
|
+
}
|
43
|
+
}
|
44
|
+
response
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class OpenStack
|
4
|
+
class Real
|
5
|
+
def list_availability_zones(options = {})
|
6
|
+
params = options
|
7
|
+
|
8
|
+
request(
|
9
|
+
:expects => [200],
|
10
|
+
:method => 'GET',
|
11
|
+
:path => "os-availability-zone",
|
12
|
+
:query => params
|
13
|
+
)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class Mock
|
18
|
+
def list_endpoints
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class OpenStack
|
4
|
+
class Real
|
5
|
+
def list_volume_attachments(server_id)
|
6
|
+
request(
|
7
|
+
expects: 200,
|
8
|
+
method: 'GET',
|
9
|
+
path: format('servers/%s/os-volume_attachments', server_id)
|
10
|
+
)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Mock
|
15
|
+
def list_volume_attachments(server_id)
|
16
|
+
Excon::Response.new(
|
17
|
+
body: {
|
18
|
+
volumeAttachments: [{
|
19
|
+
device: '/dev/vdd',
|
20
|
+
serverId: server_id,
|
21
|
+
id: '24011ca7-9937-41e4-b19b-141307d1b656',
|
22
|
+
volumeId: '24011ca7-9937-41e4-b19b-141307d1b656'
|
23
|
+
}]
|
24
|
+
},
|
25
|
+
status: 200
|
26
|
+
)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class OpenStack
|
4
|
+
class Real
|
5
|
+
def update_flavor_metadata(flavor_ref, key, value)
|
6
|
+
data = {key => value}
|
7
|
+
|
8
|
+
request(
|
9
|
+
:body => Fog::JSON.encode(data),
|
10
|
+
:expects => 200,
|
11
|
+
:method => 'PUT',
|
12
|
+
:path => "flavors/#{flavor_ref}/os-extra_specs/#{key}"
|
13
|
+
)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class Mock
|
18
|
+
def update_flavor_metadata(_flavor_ref, key, value)
|
19
|
+
response = Excon::Response.new
|
20
|
+
response.status = 200
|
21
|
+
response.headers = {
|
22
|
+
"X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf",
|
23
|
+
"Content-Type" => "application/json",
|
24
|
+
"Content-Length" => "356",
|
25
|
+
"Date" => Date.new
|
26
|
+
}
|
27
|
+
response.body = {key => value}
|
28
|
+
response
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|