lorj 0.2.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +46 -0
- data/Gemfile +15 -15
- data/README.md +22 -17
- data/Rakefile +12 -2
- data/bin/cloud_test.rb +13 -65
- data/example/students_1/process/students.rb +39 -0
- data/example/students_1/students.rb +22 -5
- data/example/students_2/process/students.rb +48 -0
- data/example/students_2/students.rb +39 -16
- data/example/students_3/controller/yaml_students.rb +50 -43
- data/example/students_3/controller/yaml_students_controller.rb +100 -87
- data/example/students_3/process/students.rb +161 -97
- data/example/students_3/students.rb +85 -56
- data/example/yaml_students/students.rb +40 -40
- data/example/yaml_students/yaml_students.rb +103 -90
- data/lib/core/core.rb +356 -696
- data/lib/core/core_controller.rb +227 -0
- data/lib/core/core_internal.rb +339 -0
- data/lib/core/core_model.rb +328 -0
- data/lib/core/core_object_data.rb +330 -0
- data/lib/core/core_object_params.rb +230 -0
- data/lib/core/core_process.rb +391 -0
- data/lib/core/core_process_setup.rb +353 -0
- data/lib/core/core_setup_ask.rb +241 -0
- data/lib/core/core_setup_encrypt.rb +146 -0
- data/lib/core/core_setup_init.rb +229 -0
- data/lib/core/core_setup_list.rb +160 -0
- data/lib/core/definition.rb +647 -469
- data/lib/core/definition_internal.rb +264 -308
- data/lib/core/lorj_basecontroller.rb +95 -0
- data/lib/core/lorj_basedefinition.rb +307 -0
- data/lib/core/lorj_baseprocess.rb +265 -0
- data/lib/core/lorj_data.rb +583 -0
- data/lib/core/lorj_keypath.rb +119 -0
- data/lib/core_process/cloud/process/common.rb +63 -0
- data/lib/core_process/cloud/process/connection.rb +93 -0
- data/lib/core_process/cloud/process/external_network.rb +94 -0
- data/lib/core_process/cloud/process/flavor.rb +99 -0
- data/lib/core_process/cloud/process/images.rb +87 -0
- data/lib/core_process/cloud/process/internet_network.rb +34 -0
- data/lib/core_process/cloud/process/internet_server.rb +30 -0
- data/lib/core_process/cloud/process/keypairs.rb +276 -0
- data/lib/core_process/cloud/process/network.rb +108 -0
- data/lib/core_process/cloud/process/public_ip.rb +100 -0
- data/lib/core_process/cloud/process/router.rb +260 -0
- data/lib/core_process/cloud/process/rules.rb +120 -0
- data/lib/core_process/cloud/process/security_groups.rb +121 -0
- data/lib/core_process/cloud/process/server.rb +127 -0
- data/lib/core_process/cloud/process/server_log.rb +35 -0
- data/lib/core_process/cloud/process/subnetwork.rb +108 -0
- data/lib/core_process/cloud_process.rb +30 -0
- data/lib/logging.rb +298 -0
- data/lib/lorj/version.rb +18 -1
- data/lib/lorj.rb +58 -18
- data/lib/lorj_account.rb +556 -0
- data/lib/lorj_config.rb +468 -0
- data/lib/lorj_defaults.rb +278 -0
- data/lib/prc.rb +136 -104
- data/lib/prc_base_config.rb +285 -0
- data/lib/prc_core_config.rb +878 -0
- data/lib/prc_section_config.rb +57 -0
- data/lib/providers/hpcloud/compute.rb +81 -93
- data/lib/providers/hpcloud/hpcloud.rb +462 -0
- data/lib/providers/hpcloud/network.rb +96 -98
- data/lib/providers/hpcloud/security_groups.rb +41 -40
- data/lib/providers/mock/mock.rb +144 -0
- data/lib/providers/openstack/openstack.rb +45 -0
- data/lib/providers/templates/compute.rb +21 -23
- data/lib/providers/templates/mycloud.rb +72 -0
- data/lib/providers/templates/network.rb +11 -12
- data/lib/rh.rb +339 -0
- data/lorj-spec/defaults.yaml +4 -0
- data/lorj.gemspec +6 -0
- data/spec/00_lorj_log_spec.rb +53 -0
- data/spec/01_hash_rh_spec.rb +243 -0
- data/spec/02_prc_base_config_spec.rb +216 -0
- data/spec/04_prc_core_config_spec.rb +83 -0
- data/spec/11_lorj_config_spec.rb +263 -0
- data/spec/12_lorj_account_spec.rb +181 -0
- metadata +76 -28
- data/Gemfile.lock +0 -37
- data/example/students_1/process/Students.rb +0 -20
- data/example/students_2/process/Students.rb +0 -27
- data/example/students_4/controller/yaml_students.rb +0 -82
- data/example/students_4/controller/yaml_students_controller.rb +0 -141
- data/example/students_4/process/students.rb +0 -112
- data/example/students_4/students.rb +0 -103
- data/lib/core/lorj-basecontroller.rb +0 -90
- data/lib/core/lorj-basedefinition.rb +0 -1139
- data/lib/core/lorj-baseprocess.rb +0 -236
- data/lib/core/lorj-data.rb +0 -567
- data/lib/core/lorj-keypath.rb +0 -115
- data/lib/core_process/CloudProcess.rb +0 -337
- data/lib/core_process/global_process.rb +0 -502
- data/lib/core_process/network_process.rb +0 -605
- data/lib/prc-account.rb +0 -339
- data/lib/prc-config.rb +0 -1030
- data/lib/prc-logging.rb +0 -261
- data/lib/providers/hpcloud/Hpcloud.rb +0 -426
- data/lib/providers/mock/Mock.rb +0 -141
- data/lib/providers/openstack/Openstack.rb +0 -47
- data/lib/providers/templates/core.rb +0 -61
- data/spec/forj-account_spec.rb +0 -75
- data/spec/forj-config_spec.rb +0 -196
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
# (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
# This class describes how to process some actions, and will do everything prior
|
|
18
|
+
# this task to make it to work.
|
|
19
|
+
|
|
20
|
+
require 'fog' # We use fog to access HPCloud
|
|
21
|
+
|
|
22
|
+
hpcloud_path = File.expand_path(File.dirname(__FILE__))
|
|
23
|
+
|
|
24
|
+
require File.join(hpcloud_path, 'compute.rb')
|
|
25
|
+
require File.join(hpcloud_path, 'network.rb')
|
|
26
|
+
require File.join(hpcloud_path, 'security_groups.rb')
|
|
27
|
+
|
|
28
|
+
# Defines Meta HPCloud object
|
|
29
|
+
class Hpcloud
|
|
30
|
+
define_obj :services
|
|
31
|
+
obj_needs :data, :account_id, :mapping => :hp_access_key
|
|
32
|
+
obj_needs :data, :account_key, :mapping => :hp_secret_key
|
|
33
|
+
obj_needs :data, :auth_uri, :mapping => :hp_auth_uri
|
|
34
|
+
obj_needs :data, :tenant, :mapping => :hp_tenant_id
|
|
35
|
+
obj_needs :data, ':excon_opts/:connect_timeout', :default_value => 30
|
|
36
|
+
obj_needs :data, ':excon_opts/:read_timeout', :default_value => 240
|
|
37
|
+
obj_needs :data, ':excon_opts/:write_timeout', :default_value => 240
|
|
38
|
+
|
|
39
|
+
# Defines Object structure and function stored on the Hpcloud class object.
|
|
40
|
+
# Compute Object
|
|
41
|
+
define_obj :compute_connection
|
|
42
|
+
# Defines Data used by compute.
|
|
43
|
+
|
|
44
|
+
obj_needs :data, :account_id, :mapping => :hp_access_key
|
|
45
|
+
obj_needs :data, :account_key, :mapping => :hp_secret_key
|
|
46
|
+
obj_needs :data, :auth_uri, :mapping => :hp_auth_uri
|
|
47
|
+
obj_needs :data, :tenant, :mapping => :hp_tenant_id
|
|
48
|
+
obj_needs :data, :compute, :mapping => :hp_avl_zone
|
|
49
|
+
|
|
50
|
+
define_obj :network_connection
|
|
51
|
+
obj_needs :data, :account_id, :mapping => :hp_access_key
|
|
52
|
+
obj_needs :data, :account_key, :mapping => :hp_secret_key
|
|
53
|
+
obj_needs :data, :auth_uri, :mapping => :hp_auth_uri
|
|
54
|
+
obj_needs :data, :tenant, :mapping => :hp_tenant_id
|
|
55
|
+
obj_needs :data, :network, :mapping => :hp_avl_zone
|
|
56
|
+
|
|
57
|
+
# Forj predefine following query mapping, used by ForjProcess
|
|
58
|
+
# id => id, name => name
|
|
59
|
+
# If we need to add another mapping, add
|
|
60
|
+
# query_mapping :id => :MyID
|
|
61
|
+
# If the query is not push through and Hash object, the Provider
|
|
62
|
+
# will needs to create his own mapping function.
|
|
63
|
+
define_obj :network
|
|
64
|
+
query_mapping :external, :router_external
|
|
65
|
+
|
|
66
|
+
define_obj :rule
|
|
67
|
+
obj_needs :data, :dir, :mapping => :direction
|
|
68
|
+
attr_value_mapping :IN, 'ingress'
|
|
69
|
+
attr_value_mapping :OUT, 'egress'
|
|
70
|
+
|
|
71
|
+
obj_needs :data, :proto, :mapping => :protocol
|
|
72
|
+
obj_needs :data, :port_min, :mapping => :port_range_min
|
|
73
|
+
obj_needs :data, :port_max, :mapping => :port_range_max
|
|
74
|
+
obj_needs :data, :addr_map, :mapping => :remote_ip_prefix
|
|
75
|
+
obj_needs :data, :sg_id, :mapping => :security_group_id
|
|
76
|
+
|
|
77
|
+
get_attr_mapping :dir, :direction
|
|
78
|
+
get_attr_mapping :proto, :protocol
|
|
79
|
+
get_attr_mapping :port_min, :port_range_min
|
|
80
|
+
get_attr_mapping :port_max, :port_range_max
|
|
81
|
+
get_attr_mapping :addr_map, :remote_ip_prefix
|
|
82
|
+
get_attr_mapping :sg_id, :security_group_id
|
|
83
|
+
|
|
84
|
+
define_obj :keypairs
|
|
85
|
+
|
|
86
|
+
undefine_attribute :id # Do not return any predefined ID
|
|
87
|
+
|
|
88
|
+
# ************************************ Router Object
|
|
89
|
+
define_obj :router
|
|
90
|
+
|
|
91
|
+
obj_needs_optional
|
|
92
|
+
obj_needs :data, :router_name, :mapping => :name
|
|
93
|
+
# The FORJ gateway_network_id is extracted from
|
|
94
|
+
# Fog::HP::Network::Router[:external_gateway_info][:network_id]
|
|
95
|
+
obj_needs :data, :external_gateway_id, :mapping => [:external_gateway_info,
|
|
96
|
+
'network_id']
|
|
97
|
+
|
|
98
|
+
get_attr_mapping :gateway_network_id, [:external_gateway_info, 'network_id']
|
|
99
|
+
|
|
100
|
+
# ************************************ SERVER Object
|
|
101
|
+
define_obj :server
|
|
102
|
+
get_attr_mapping :status, :state
|
|
103
|
+
attr_value_mapping :create, 'BUILD'
|
|
104
|
+
attr_value_mapping :boot, :boot
|
|
105
|
+
attr_value_mapping :active, 'ACTIVE'
|
|
106
|
+
|
|
107
|
+
# ************************************ SERVER log Object
|
|
108
|
+
define_obj :server_log
|
|
109
|
+
|
|
110
|
+
# Excon::Response object type
|
|
111
|
+
get_attr_mapping :output, 'output'
|
|
112
|
+
|
|
113
|
+
# ************************************* Public IP Object
|
|
114
|
+
define_obj :public_ip
|
|
115
|
+
get_attr_mapping :server_id, :instance_id
|
|
116
|
+
get_attr_mapping :public_ip, :ip
|
|
117
|
+
|
|
118
|
+
# defines setup Cloud data (:account => true for setup)
|
|
119
|
+
define_data(:account_id,
|
|
120
|
+
:account => true,
|
|
121
|
+
:desc => 'HPCloud Access Key (From horizon, user drop down, '\
|
|
122
|
+
'manage keys)',
|
|
123
|
+
:validate => /^[A-Z0-9]*$/
|
|
124
|
+
)
|
|
125
|
+
define_data(:account_key,
|
|
126
|
+
:account => true,
|
|
127
|
+
:desc => 'HPCloud secret Key (From horizon, user drop down, '\
|
|
128
|
+
'manage keys)',
|
|
129
|
+
:encrypted => false,
|
|
130
|
+
:validate => /^.+/
|
|
131
|
+
)
|
|
132
|
+
define_data(:auth_uri,
|
|
133
|
+
:account => true,
|
|
134
|
+
:desc => 'HPCloud Authentication service URL (default is HP '\
|
|
135
|
+
'Public cloud)',
|
|
136
|
+
:validate => %r{^http(s)?://.*$},
|
|
137
|
+
:default_value => 'https://region-a.geo-1.identity.hpcloudsvc'\
|
|
138
|
+
'.com:35357/v2.0/'
|
|
139
|
+
)
|
|
140
|
+
define_data(:tenant,
|
|
141
|
+
:account => true,
|
|
142
|
+
:desc => 'HPCloud Tenant ID (from horizon, identity, projecs,'\
|
|
143
|
+
' Project ID)',
|
|
144
|
+
:validate => /^[0-9]+$/
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
define_data(:compute,
|
|
148
|
+
:account => true,
|
|
149
|
+
:desc => 'HPCloud Compute service zone (Ex: region-a.geo-1)',
|
|
150
|
+
:depends_on => [:account_id, :account_key, :auth_uri, :tenant],
|
|
151
|
+
:list_values => {
|
|
152
|
+
:query_type => :controller_call,
|
|
153
|
+
:object => :services,
|
|
154
|
+
:query_call => :get_services,
|
|
155
|
+
:query_params => { :list_services => [:Compute, :compute] },
|
|
156
|
+
:validate => :list_strict
|
|
157
|
+
}
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
define_data(:network,
|
|
161
|
+
:account => true,
|
|
162
|
+
:desc => 'HPCloud Network service zone (Ex: region-a.geo-1)',
|
|
163
|
+
:depends_on => [:account_id, :account_key, :auth_uri, :tenant],
|
|
164
|
+
:list_values => {
|
|
165
|
+
:query_type => :controller_call,
|
|
166
|
+
:object => :services,
|
|
167
|
+
:query_call => :get_services,
|
|
168
|
+
:query_params => { :list_services => [:Networking, :network] },
|
|
169
|
+
:validate => :list_strict
|
|
170
|
+
}
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
data_value_mapping 'xsmall', 'standard.xsmall'
|
|
174
|
+
data_value_mapping 'small', 'standard.small'
|
|
175
|
+
data_value_mapping 'medium', 'standard.medium'
|
|
176
|
+
data_value_mapping 'large', 'standard.large'
|
|
177
|
+
data_value_mapping 'xlarge', 'standard.xlarge'
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# Following class describe how FORJ should handle HP Cloud objects.
|
|
181
|
+
# Except Cloud connection, all HPCloud objects management are described/called
|
|
182
|
+
# in HP* modules.
|
|
183
|
+
class HpcloudController # rubocop: disable Metrics/ClassLength
|
|
184
|
+
def connect(sObjectType, hParams)
|
|
185
|
+
case sObjectType
|
|
186
|
+
when :services
|
|
187
|
+
Fog::HP.authenticate_v2(hParams[:hdata], hParams[:excon_opts])
|
|
188
|
+
when :compute_connection
|
|
189
|
+
Fog::Compute.new hParams[:hdata].merge(:provider => :hp, :version => 'v2')
|
|
190
|
+
when :network_connection
|
|
191
|
+
Fog::HP::Network.new(hParams[:hdata])
|
|
192
|
+
else
|
|
193
|
+
controller_error "'%s' is not a valid object for 'connect'", sObjectType
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
# rubocop: disable MethodLength, CyclomaticComplexity, AbcSize
|
|
198
|
+
|
|
199
|
+
# Create controller for Hpcloud
|
|
200
|
+
def create(sObjectType, hParams)
|
|
201
|
+
case sObjectType
|
|
202
|
+
when :public_ip
|
|
203
|
+
required?(hParams, :compute_connection)
|
|
204
|
+
required?(hParams, :server)
|
|
205
|
+
HPCompute.server_assign_address(hParams[:compute_connection],
|
|
206
|
+
hParams[:server])
|
|
207
|
+
when :server
|
|
208
|
+
required?(hParams, :compute_connection)
|
|
209
|
+
required?(hParams, :image)
|
|
210
|
+
required?(hParams, :network)
|
|
211
|
+
required?(hParams, :flavor)
|
|
212
|
+
required?(hParams, :keypairs)
|
|
213
|
+
required?(hParams, :security_groups)
|
|
214
|
+
required?(hParams, :server_name)
|
|
215
|
+
|
|
216
|
+
options = {
|
|
217
|
+
:name => hParams[:server_name],
|
|
218
|
+
:flavor_id => hParams[:flavor].id,
|
|
219
|
+
:image_id => hParams[:image].id,
|
|
220
|
+
:key_name => hParams[:keypairs].name,
|
|
221
|
+
:security_groups => [hParams[:security_groups].name],
|
|
222
|
+
:networks => [hParams[:network].id]
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
HPCompute.create_server(hParams[:compute_connection], options,
|
|
226
|
+
hParams[:user_data], hParams[:meta_data])
|
|
227
|
+
when :image
|
|
228
|
+
required?(hParams, :compute_connection)
|
|
229
|
+
required?(hParams, :image_name)
|
|
230
|
+
|
|
231
|
+
HPCompute.get_image(hParams[:compute_connection], hParams[:image_name])
|
|
232
|
+
when :network
|
|
233
|
+
required?(hParams, :network_connection)
|
|
234
|
+
required?(hParams, :network_name)
|
|
235
|
+
|
|
236
|
+
HPNetwork.create_network(hParams[:network_connection],
|
|
237
|
+
hParams[:network_name])
|
|
238
|
+
when :subnetwork
|
|
239
|
+
required?(hParams, :network_connection)
|
|
240
|
+
required?(hParams, :network)
|
|
241
|
+
required?(hParams, :subnetwork_name)
|
|
242
|
+
|
|
243
|
+
HPNetwork.create_subnetwork(hParams[:network_connection],
|
|
244
|
+
hParams[:network],
|
|
245
|
+
hParams[:subnetwork_name])
|
|
246
|
+
when :security_groups
|
|
247
|
+
required?(hParams, :network_connection)
|
|
248
|
+
required?(hParams, :security_group)
|
|
249
|
+
|
|
250
|
+
HPSecurityGroups.create_sg(hParams[:network_connection],
|
|
251
|
+
hParams[:security_group], hParams[:sg_desc])
|
|
252
|
+
when :keypairs
|
|
253
|
+
required?(hParams, :compute_connection)
|
|
254
|
+
required?(hParams, :keypair_name)
|
|
255
|
+
required?(hParams, :public_key)
|
|
256
|
+
|
|
257
|
+
HPKeyPairs.create_keypair(hParams[:compute_connection],
|
|
258
|
+
hParams[:keypair_name], hParams[:public_key])
|
|
259
|
+
when :router
|
|
260
|
+
required?(hParams, :network_connection)
|
|
261
|
+
required?(hParams, :router_name)
|
|
262
|
+
|
|
263
|
+
# Forcelly used admin_status_up to true.
|
|
264
|
+
hParams[:hdata] = hParams[:hdata].merge(:admin_state_up => true)
|
|
265
|
+
|
|
266
|
+
HPNetwork.create_router(hParams[:network_connection], hParams[:hdata])
|
|
267
|
+
when :rule
|
|
268
|
+
required?(hParams, :network_connection)
|
|
269
|
+
required?(hParams, :security_groups)
|
|
270
|
+
HPSecurityGroups.create_rule(hParams[:network_connection],
|
|
271
|
+
hParams[:hdata])
|
|
272
|
+
when :router_interface
|
|
273
|
+
required?(hParams, :router)
|
|
274
|
+
required?(hParams, :subnetwork)
|
|
275
|
+
HPNetwork.add_interface(hParams[:router], hParams[:subnetwork])
|
|
276
|
+
else
|
|
277
|
+
controller_error "'%s' is not a valid object for 'create'", sObjectType
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
# This function return a collection which have to provide:
|
|
282
|
+
# functions: [], length, each
|
|
283
|
+
# Used by network process.
|
|
284
|
+
def query(sObjectType, sQuery, hParams)
|
|
285
|
+
case sObjectType
|
|
286
|
+
when :public_ip
|
|
287
|
+
required?(hParams, :compute_connection)
|
|
288
|
+
required?(hParams, :server)
|
|
289
|
+
HPCompute.query_server_assigned_addresses(hParams[:compute_connection],
|
|
290
|
+
hParams[:server], sQuery)
|
|
291
|
+
when :server
|
|
292
|
+
required?(hParams, :compute_connection)
|
|
293
|
+
HPCompute.query_server(hParams[:compute_connection], sQuery)
|
|
294
|
+
when :image
|
|
295
|
+
required?(hParams, :compute_connection)
|
|
296
|
+
HPCompute.query_image(hParams[:compute_connection], sQuery)
|
|
297
|
+
when :network
|
|
298
|
+
required?(hParams, :network_connection)
|
|
299
|
+
HPNetwork.query_network(hParams[:network_connection], sQuery)
|
|
300
|
+
when :subnetwork
|
|
301
|
+
required?(hParams, :network_connection)
|
|
302
|
+
HPNetwork.query_subnetwork(hParams[:network_connection], sQuery)
|
|
303
|
+
when :router
|
|
304
|
+
required?(hParams, :network_connection)
|
|
305
|
+
HPNetwork.query_router(hParams[:network_connection], sQuery)
|
|
306
|
+
when :port
|
|
307
|
+
required?(hParams, :network_connection)
|
|
308
|
+
HPNetwork.query_port(hParams[:network_connection], sQuery)
|
|
309
|
+
when :security_groups
|
|
310
|
+
required?(hParams, :network_connection)
|
|
311
|
+
HPSecurityGroups.query_sg(hParams[:network_connection], sQuery)
|
|
312
|
+
when :rule
|
|
313
|
+
required?(hParams, :network_connection)
|
|
314
|
+
HPSecurityGroups.query_rule(hParams[:network_connection], sQuery)
|
|
315
|
+
when :keypairs
|
|
316
|
+
required?(hParams, :compute_connection)
|
|
317
|
+
HPKeyPairs.query_keypair(hParams[:compute_connection], sQuery)
|
|
318
|
+
when :flavor
|
|
319
|
+
required?(hParams, :compute_connection)
|
|
320
|
+
HPCompute.query_flavor(hParams[:compute_connection], sQuery)
|
|
321
|
+
else
|
|
322
|
+
controller_error "'%s' is not a valid object for 'query'", sObjectType
|
|
323
|
+
end
|
|
324
|
+
end
|
|
325
|
+
# rubocop: enable CyclomaticComplexity, MethodLength
|
|
326
|
+
|
|
327
|
+
def delete(sObjectType, hParams)
|
|
328
|
+
case sObjectType
|
|
329
|
+
when :network
|
|
330
|
+
HPNetwork.delete_network(hParams[:network_connection],
|
|
331
|
+
hParams[:network])
|
|
332
|
+
when :rule
|
|
333
|
+
HPSecurityGroups.delete_rule(hParams[:network_connection],
|
|
334
|
+
hParams[:id])
|
|
335
|
+
obj = hParams[:network_connection]
|
|
336
|
+
obj.security_group_rules.get(hParams[:id]).destroy
|
|
337
|
+
when :server
|
|
338
|
+
required?(hParams, :compute_connection)
|
|
339
|
+
required?(hParams, :server)
|
|
340
|
+
HPCompute.delete_server(hParams[:compute_connection],
|
|
341
|
+
hParams[:server])
|
|
342
|
+
end
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
def get(sObjectType, sUniqId, hParams)
|
|
346
|
+
case sObjectType
|
|
347
|
+
when :server_log
|
|
348
|
+
required?(hParams, :server)
|
|
349
|
+
|
|
350
|
+
hParams[:server].console_output(sUniqId)
|
|
351
|
+
when :server
|
|
352
|
+
required?(hParams, :compute_connection)
|
|
353
|
+
HPCompute.get_server(hParams[:compute_connection], sUniqId)
|
|
354
|
+
when :image
|
|
355
|
+
required?(hParams, :compute_connection)
|
|
356
|
+
HPCompute.get_image(hParams[:compute_connection], sUniqId)
|
|
357
|
+
when :network
|
|
358
|
+
required?(hParams, :network_connection)
|
|
359
|
+
HPNetwork.get_network(hParams[:network_connection], sUniqId)
|
|
360
|
+
when :keypairs
|
|
361
|
+
required?(hParams, :compute_connection)
|
|
362
|
+
HPKeyPairs.get_keypair(hParams[:compute_connection], sUniqId)
|
|
363
|
+
else
|
|
364
|
+
forjError "'%s' is not a valid object for 'get'", sObjectType
|
|
365
|
+
end
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
def query_each(oFogObject)
|
|
369
|
+
case oFogObject.class.to_s
|
|
370
|
+
when 'Fog::HP::Network::Networks'
|
|
371
|
+
oFogObject.each { | value | yield(value) }
|
|
372
|
+
else
|
|
373
|
+
controller_error "'%s' is not a valid list for 'each'",
|
|
374
|
+
oFogObject.class
|
|
375
|
+
end
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
def get_attr(oControlerObject, key)
|
|
379
|
+
if oControlerObject.is_a?(Excon::Response)
|
|
380
|
+
oControlerObject.data.rh_get(:body, key)
|
|
381
|
+
else
|
|
382
|
+
attributes = oControlerObject.attributes
|
|
383
|
+
def_attributes = oControlerObject.class.attributes
|
|
384
|
+
controller_error "attribute '%s' is unknown in '%s'. "\
|
|
385
|
+
"Valid one are : '%s'",
|
|
386
|
+
key[0], oControlerObject.class,
|
|
387
|
+
def_attributes unless def_attributes.include?(key[0])
|
|
388
|
+
attributes.rh_get(key)
|
|
389
|
+
end
|
|
390
|
+
rescue => e
|
|
391
|
+
controller_error "Unable to map '%s'. %s", key, e.message
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
def set_attr(oControlerObject, key, value)
|
|
395
|
+
controller_class = oControlerObject.class
|
|
396
|
+
|
|
397
|
+
controller_error "No set feature for '%s'",
|
|
398
|
+
controller_class if oControlerObject.is_a?(Excon::Response)
|
|
399
|
+
|
|
400
|
+
attributes = oControlerObject.attributes
|
|
401
|
+
def_attributes = oControlerObject.class.attributes
|
|
402
|
+
controller_error "attribute '%s' is unknown in '%s'. Valid one are : '%s'",
|
|
403
|
+
key[0], oControlerObject.class,
|
|
404
|
+
def_attributes unless def_attributes.include?(key[0])
|
|
405
|
+
attributes.rh_set(value, key)
|
|
406
|
+
rescue => e
|
|
407
|
+
controller_error "Unable to map '%s' on '%s'\n%s",
|
|
408
|
+
key, sObjectType, e.message
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
def update(sObjectType, oObject, _hParams)
|
|
412
|
+
case sObjectType
|
|
413
|
+
when :router
|
|
414
|
+
controller_error 'Object to update is nil' if oObject.nil?
|
|
415
|
+
|
|
416
|
+
HPNetwork.update_router(oObject[:object])
|
|
417
|
+
else
|
|
418
|
+
controller_error "'%s' is not a valid list for 'update'",
|
|
419
|
+
oFogObject.class
|
|
420
|
+
end
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
# This function requires to return an Array of values or nil.
|
|
424
|
+
def get_services(sObjectType, oParams)
|
|
425
|
+
case sObjectType
|
|
426
|
+
when :services
|
|
427
|
+
# oParams[sObjectType] will provide the controller object.
|
|
428
|
+
# This one can be interpreted only by controller code,
|
|
429
|
+
# except if controller declares how to map with this object.
|
|
430
|
+
# Processes can deal only process mapped data.
|
|
431
|
+
# Currently there is no services process function. No need to map.
|
|
432
|
+
services = oParams[:services]
|
|
433
|
+
if !oParams[:list_services].is_a?(Array)
|
|
434
|
+
service_to_find = [oParams[:list_services]]
|
|
435
|
+
else
|
|
436
|
+
service_to_find = oParams[:list_services]
|
|
437
|
+
end
|
|
438
|
+
# Search for service. Ex: Can be :Networking or network. I currently do
|
|
439
|
+
# not know why...
|
|
440
|
+
search_services = services.rh_get(:service_catalog)
|
|
441
|
+
service = nil
|
|
442
|
+
service_to_find.each do | sServiceElem |
|
|
443
|
+
if search_services.key?(sServiceElem)
|
|
444
|
+
service = sServiceElem
|
|
445
|
+
break
|
|
446
|
+
end
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
controller_error 'Unable to find services %s',
|
|
450
|
+
service_to_find if service.nil?
|
|
451
|
+
result = services.rh_get(:service_catalog, service).keys
|
|
452
|
+
result.delete('name')
|
|
453
|
+
result.each_index do | iIndex |
|
|
454
|
+
result[iIndex] = result[iIndex].to_s if result[iIndex].is_a?(Symbol)
|
|
455
|
+
end
|
|
456
|
+
return result
|
|
457
|
+
else
|
|
458
|
+
controller_error "'%s' is not a valid object for 'get_services'",
|
|
459
|
+
sObjectType
|
|
460
|
+
end
|
|
461
|
+
end
|
|
462
|
+
end
|
|
@@ -14,104 +14,102 @@
|
|
|
14
14
|
# See the License for the specific language governing permissions and
|
|
15
15
|
# limitations under the License.
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
# HPcloud network class
|
|
18
18
|
module HPNetwork
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
break
|
|
77
|
-
end
|
|
78
|
-
count += 1
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
if gap
|
|
82
|
-
new_cidr = '10.0.%s.0/24' % [count]
|
|
83
|
-
else
|
|
84
|
-
max_value = range_used.max
|
|
85
|
-
new_subnet = max_value.to_i + 1
|
|
86
|
-
new_cidr = '10.0.%s.0/24' % [new_subnet]
|
|
87
|
-
end
|
|
88
|
-
new_cidr
|
|
89
|
-
rescue => e
|
|
90
|
-
Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
|
|
19
|
+
# Network driver
|
|
20
|
+
def self.query_network(oNetworkConnect, sQuery)
|
|
21
|
+
oNetworkConnect.networks.all(sQuery)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.create_network(oNetworkConnect, name)
|
|
25
|
+
oNetworkConnect.networks.create(:name => name)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.delete_network(oNetworkConnect, oNetwork)
|
|
29
|
+
oNetworkConnect.networks.get(oNetwork.id).destroy
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# SubNetwork driver
|
|
33
|
+
def self.query_subnetwork(oNetworkConnect, sQuery)
|
|
34
|
+
oNetworkConnect.subnets.all(sQuery)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.create_subnetwork(oNetworkConnect, oNetwork, name)
|
|
38
|
+
oNetworkConnect.subnets.create(
|
|
39
|
+
:network_id => oNetwork.id,
|
|
40
|
+
:name => name,
|
|
41
|
+
:cidr => get_next_subnet(oNetworkConnect),
|
|
42
|
+
:ip_version => '4'
|
|
43
|
+
)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.delete_subnetwork(oNetworkConnect, oSubNetwork)
|
|
47
|
+
oNetworkConnect.subnets.get(oSubNetwork.id).destroy
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def self.get_next_subnet(oNetworkConnect)
|
|
51
|
+
subnet_values = []
|
|
52
|
+
subnets = oNetworkConnect.subnets.all
|
|
53
|
+
|
|
54
|
+
subnets.each do|s|
|
|
55
|
+
subnet_values.push(s.cidr)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
gap = false
|
|
59
|
+
count = 0
|
|
60
|
+
range_used = []
|
|
61
|
+
new_subnet = 0
|
|
62
|
+
new_cidr = ''
|
|
63
|
+
|
|
64
|
+
subnet_values = subnet_values.sort!
|
|
65
|
+
|
|
66
|
+
subnet_values.each do|value|
|
|
67
|
+
range_used.push(value[5])
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
range_used.each do |n|
|
|
71
|
+
if count.to_i == n.to_i
|
|
72
|
+
else
|
|
73
|
+
new_subnet = count
|
|
74
|
+
gap = true
|
|
75
|
+
break
|
|
91
76
|
end
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
77
|
+
count += 1
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
if gap
|
|
81
|
+
new_cidr = format('10.0.%s.0/24', count)
|
|
82
|
+
else
|
|
83
|
+
max_value = range_used.max
|
|
84
|
+
new_subnet = max_value.to_i + 1
|
|
85
|
+
new_cidr = format('10.0.%s.0/24', new_subnet)
|
|
86
|
+
end
|
|
87
|
+
new_cidr
|
|
88
|
+
rescue => e
|
|
89
|
+
Logging.error("%s\n%s", e.message, e.backtrace.join("\n"))
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# router driver
|
|
93
|
+
def self.query_router(oNetworkConnect, sQuery)
|
|
94
|
+
oNetworkConnect.routers.all(sQuery)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def self.update_router(oRouters)
|
|
98
|
+
oRouters.save
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def self.create_router(oNetwork, hOptions)
|
|
102
|
+
oNetwork.routers.create(hOptions)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# router interface
|
|
106
|
+
|
|
107
|
+
def self.add_interface(oRouter, oSubNetwork)
|
|
108
|
+
oRouter.add_interface(oSubNetwork.id, nil)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Port driver
|
|
112
|
+
def self.query_port(oNetworkConnect, sQuery)
|
|
113
|
+
oNetworkConnect.ports.all(sQuery)
|
|
114
|
+
end
|
|
117
115
|
end
|