lorj 0.1.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 +7 -0
- data/.gitignore +14 -0
- data/.gitreview +4 -0
- data/Gemfile +25 -0
- data/Gemfile.lock +34 -0
- data/LICENSE.txt +14 -0
- data/README.md +652 -0
- data/Rakefile +24 -0
- data/bin/cloud_test.rb +81 -0
- data/example/students_1/process/Students.rb +20 -0
- data/example/students_1/students.rb +16 -0
- data/example/students_2/process/Students.rb +27 -0
- data/example/students_2/students.rb +36 -0
- data/example/students_3/controller/yaml_students.rb +94 -0
- data/example/students_3/controller/yaml_students_controller.rb +123 -0
- data/example/students_3/process/students.rb +118 -0
- data/example/students_3/students.rb +93 -0
- data/example/students_4/controller/yaml_students.rb +82 -0
- data/example/students_4/controller/yaml_students_controller.rb +141 -0
- data/example/students_4/process/students.rb +112 -0
- data/example/students_4/students.rb +103 -0
- data/example/yaml_students/students.rb +78 -0
- data/example/yaml_students/yaml_students.rb +115 -0
- data/lib/concept.md +111 -0
- data/lib/core/core.rb +723 -0
- data/lib/core/definition.rb +505 -0
- data/lib/core/definition_internal.rb +338 -0
- data/lib/core/lorj-basecontroller.rb +90 -0
- data/lib/core/lorj-basedefinition.rb +1079 -0
- data/lib/core/lorj-baseprocess.rb +231 -0
- data/lib/core/lorj-data.rb +567 -0
- data/lib/core/lorj-keypath.rb +115 -0
- data/lib/core_process/CloudProcess.rb +334 -0
- data/lib/core_process/global_process.rb +406 -0
- data/lib/core_process/network_process.rb +603 -0
- data/lib/img/.directory +4 -0
- data/lib/img/account_data_access.png +0 -0
- data/lib/img/config_data_access.png +0 -0
- data/lib/img/forj-lib-concept.png +0 -0
- data/lib/lorj/version.rb +3 -0
- data/lib/lorj.rb +51 -0
- data/lib/prc-account.rb +339 -0
- data/lib/prc-config.rb +1023 -0
- data/lib/prc-logging.rb +183 -0
- data/lib/prc.rb +108 -0
- data/lib/providers/hpcloud/Hpcloud.rb +419 -0
- data/lib/providers/hpcloud/compute.rb +108 -0
- data/lib/providers/hpcloud/network.rb +117 -0
- data/lib/providers/hpcloud/security_groups.rb +67 -0
- data/lib/providers/mock/Mock.rb +141 -0
- data/lib/providers/openstack/Openstack.rb +47 -0
- data/lib/providers/templates/compute.rb +42 -0
- data/lib/providers/templates/core.rb +61 -0
- data/lib/providers/templates/network.rb +33 -0
- data/lorj-spec/defaults.yaml +26 -0
- data/lorj.gemspec +39 -0
- data/spec/forj-account_spec.rb +75 -0
- data/spec/forj-config_spec.rb +196 -0
- metadata +164 -0
@@ -0,0 +1,334 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
# (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
|
18
|
+
# It requires Core objects to be defined + default ForjProcess functions.
|
19
|
+
|
20
|
+
require File.join($CORE_PROCESS_PATH, "global_process.rb")
|
21
|
+
require File.join($CORE_PROCESS_PATH, "network_process.rb")
|
22
|
+
|
23
|
+
# Define framework object on BaseDefinition
|
24
|
+
class BaseDefinition
|
25
|
+
|
26
|
+
# All objects used by this process are built from a Controller
|
27
|
+
process_default :use_controller => true
|
28
|
+
|
29
|
+
# predefined list of objects.
|
30
|
+
# Links between objects is not predefined. To do it, use needs declaration in your provider class.
|
31
|
+
|
32
|
+
# object to get list of services
|
33
|
+
# Defines Process handler to call
|
34
|
+
define_obj(:services,
|
35
|
+
{
|
36
|
+
:create_e => :connect
|
37
|
+
})
|
38
|
+
obj_needs :data, :auth_uri
|
39
|
+
obj_needs :data, :account_id
|
40
|
+
obj_needs :data, :account_key
|
41
|
+
obj_needs :data, :tenant
|
42
|
+
|
43
|
+
undefine_attribute :id # Do not return any predefined ID
|
44
|
+
undefine_attribute :name # Do not return any predefined NAME
|
45
|
+
|
46
|
+
|
47
|
+
# compute_connection
|
48
|
+
define_obj(:compute_connection,
|
49
|
+
{
|
50
|
+
:create_e => :connect # Will call ForjProcess connect
|
51
|
+
})
|
52
|
+
obj_needs :data, :account_id
|
53
|
+
obj_needs :data, :account_key
|
54
|
+
obj_needs :data, :auth_uri
|
55
|
+
obj_needs :data, :tenant
|
56
|
+
obj_needs :data, :compute
|
57
|
+
|
58
|
+
undefine_attribute :id # Do not return any predefined ID
|
59
|
+
undefine_attribute :name # Do not return any predefined NAME
|
60
|
+
|
61
|
+
# network_connection
|
62
|
+
define_obj(:network_connection,
|
63
|
+
{
|
64
|
+
:create_e => :connect
|
65
|
+
})
|
66
|
+
obj_needs :data, :account_id
|
67
|
+
obj_needs :data, :account_key
|
68
|
+
obj_needs :data, :auth_uri
|
69
|
+
obj_needs :data, :tenant
|
70
|
+
obj_needs :data, :network
|
71
|
+
|
72
|
+
undefine_attribute :id # Do not return any predefined ID
|
73
|
+
undefine_attribute :name # Do not return any predefined NAME
|
74
|
+
|
75
|
+
# ************************************ Network Object
|
76
|
+
# Identify the network
|
77
|
+
|
78
|
+
define_obj(:network,
|
79
|
+
:create_e => :forj_get_or_create_network,
|
80
|
+
:query_e => :forj_query_network,
|
81
|
+
:get_e => :forj_get_network,
|
82
|
+
:delete_e => :forj_delete_network
|
83
|
+
)
|
84
|
+
obj_needs :CloudObject, :network_connection
|
85
|
+
obj_needs :data, :network_name, { :for => [:create_e] }
|
86
|
+
|
87
|
+
obj_needs_optional
|
88
|
+
obj_needs :data, :subnetwork_name, { :for => [:create_e] }
|
89
|
+
|
90
|
+
def_query_attribute :external # true if network is external or not.
|
91
|
+
|
92
|
+
# ************************************ SubNetwork Object
|
93
|
+
# Identify subnetwork as part of network.
|
94
|
+
define_obj(:subnetwork,
|
95
|
+
:create_e => :forj_get_or_create_subnetwork
|
96
|
+
)
|
97
|
+
|
98
|
+
obj_needs :CloudObject, :network_connection
|
99
|
+
obj_needs :CloudObject, :network
|
100
|
+
obj_needs :data, :subnetwork_name
|
101
|
+
|
102
|
+
def_query_attribute :network_id
|
103
|
+
|
104
|
+
# ************************************ Port Object
|
105
|
+
# Identify port attached to network
|
106
|
+
define_obj :port, :nohandler => true
|
107
|
+
|
108
|
+
obj_needs :CloudObject, :network_connection
|
109
|
+
def_attribute :device_id
|
110
|
+
|
111
|
+
def_query_attribute :network_id
|
112
|
+
def_query_attribute :device_owner
|
113
|
+
|
114
|
+
|
115
|
+
# ************************************ Router Object
|
116
|
+
# Identify the router of a network.
|
117
|
+
define_obj(:router,
|
118
|
+
{
|
119
|
+
:create_e => :forj_get_or_create_router,
|
120
|
+
# :query_e => :forj_query_router,
|
121
|
+
# :get_e => :forj_get_router,
|
122
|
+
:update_e => :forj_update_router
|
123
|
+
# :delete_e => :forj_delete_router
|
124
|
+
})
|
125
|
+
obj_needs :CloudObject, :network_connection
|
126
|
+
obj_needs :CloudObject, :network, { :for => [:create_e] }
|
127
|
+
obj_needs :CloudObject, :subnetwork, { :for => [:create_e] }
|
128
|
+
obj_needs_optional
|
129
|
+
obj_needs :data, :router_name, { :for => [:create_e] }
|
130
|
+
|
131
|
+
def_attribute :gateway_network_id
|
132
|
+
|
133
|
+
# ************************************ Router interface Object
|
134
|
+
# Identify interface attached to a router
|
135
|
+
# This object will probably be moved to controller task
|
136
|
+
# To keep the network model more generic.
|
137
|
+
|
138
|
+
# No process handler defined. Just Controller object
|
139
|
+
define_obj :router_interface, :nohandler => true
|
140
|
+
|
141
|
+
obj_needs :CloudObject, :network_connection
|
142
|
+
obj_needs :CloudObject, :router, { :for => [:create_e] }
|
143
|
+
obj_needs :CloudObject, :subnetwork, { :for => [:create_e] }
|
144
|
+
|
145
|
+
undefine_attribute :name
|
146
|
+
undefine_attribute :id
|
147
|
+
|
148
|
+
# Identify an external network thanks to the network router.
|
149
|
+
define_obj(:external_network,
|
150
|
+
{
|
151
|
+
:create_e => :forj_get_or_create_ext_net,
|
152
|
+
:query_e => :forj_query_external_network
|
153
|
+
})
|
154
|
+
|
155
|
+
obj_needs :CloudObject, :network_connection
|
156
|
+
obj_needs :CloudObject, :router
|
157
|
+
|
158
|
+
|
159
|
+
# ************************************ Security groups Object
|
160
|
+
# Identify security_groups
|
161
|
+
define_obj(:security_groups,
|
162
|
+
{
|
163
|
+
:create_e => :forj_get_or_create_sg,
|
164
|
+
:query_e => :forj_query_sg,
|
165
|
+
:delete_e => :forj_delete_sg
|
166
|
+
})
|
167
|
+
|
168
|
+
obj_needs :CloudObject, :network_connection
|
169
|
+
obj_needs :data, :security_group, { :for => [:create_e] }
|
170
|
+
obj_needs_optional
|
171
|
+
obj_needs :data, :sg_desc, { :for => [:create_e] }
|
172
|
+
|
173
|
+
# ************************************ Security group rules Object
|
174
|
+
# Identify Rules attached to the security group
|
175
|
+
define_obj(:rule,
|
176
|
+
{
|
177
|
+
:create_e => :forj_get_or_create_rule,
|
178
|
+
:query_e => :forj_query_rule
|
179
|
+
# :delete_e => :forj_delete_rule
|
180
|
+
})
|
181
|
+
|
182
|
+
undefine_attribute :name # Do not return any predefined name attribute
|
183
|
+
|
184
|
+
obj_needs :CloudObject, :network_connection
|
185
|
+
obj_needs :CloudObject, :security_groups, { :for => [:create_e] }
|
186
|
+
obj_needs :data, :sg_id, { :for => [:create_e], :extract_from => [:security_groups, :attrs, :id] }
|
187
|
+
obj_needs :data, :dir, { :for => [:create_e] }
|
188
|
+
predefine_data_value :IN, { :desc => "Input NAT/firewall rule map type" }
|
189
|
+
predefine_data_value :OUT, { :desc => "Output NAT/firewall rule map type" }
|
190
|
+
obj_needs :data, :proto, { :for => [:create_e] }
|
191
|
+
obj_needs :data, :port_min, { :for => [:create_e] }
|
192
|
+
obj_needs :data, :port_max, { :for => [:create_e] }
|
193
|
+
obj_needs :data, :addr_map, { :for => [:create_e] }
|
194
|
+
|
195
|
+
# ************************************ keypairs Object
|
196
|
+
# Identify keypairs
|
197
|
+
define_obj(:keypairs,
|
198
|
+
{
|
199
|
+
:create_e => :forj_get_or_create_keypair,
|
200
|
+
:query_e => :forj_query_keypair
|
201
|
+
# :delete_e => :forj_delete_keypair
|
202
|
+
})
|
203
|
+
|
204
|
+
obj_needs :CloudObject, :compute_connection
|
205
|
+
obj_needs :data, :keypair_name, { :for => [:create_e] }
|
206
|
+
obj_needs :data, :keypair_path, { :for => [:create_e] }
|
207
|
+
|
208
|
+
obj_needs_optional
|
209
|
+
obj_needs :data, :public_key, { :for => [:create_e] }
|
210
|
+
|
211
|
+
def_attribute :public_key
|
212
|
+
|
213
|
+
# ************************************ Image Object
|
214
|
+
# Identify image
|
215
|
+
define_obj(:image,
|
216
|
+
{
|
217
|
+
:create_e => :forj_get_or_create_image,
|
218
|
+
:query_e => :forj_query_image
|
219
|
+
# :get_e => :forj_get_image
|
220
|
+
# :update_e => :forj_update_image
|
221
|
+
# :delete_e => :forj_delete_image
|
222
|
+
})
|
223
|
+
|
224
|
+
obj_needs :CloudObject, :compute_connection
|
225
|
+
obj_needs :data, :image_name, { :for => [:create_e] }
|
226
|
+
|
227
|
+
# ************************************ Flavor Object
|
228
|
+
# Identify flavor
|
229
|
+
define_obj(:flavor,
|
230
|
+
{
|
231
|
+
:create_e => :forj_get_or_create_flavor,
|
232
|
+
:query_e => :forj_query_flavor
|
233
|
+
# :get_e => :forj_get_flavor,
|
234
|
+
# :update_e => :forj_update_flavor,
|
235
|
+
# :delete_e => :forj_delete_flavor
|
236
|
+
})
|
237
|
+
|
238
|
+
obj_needs :CloudObject, :compute_connection
|
239
|
+
obj_needs :data, :flavor_name, { :for => [:create_e] }
|
240
|
+
# Cloud provider will need to map to one of those predefined flavors.
|
241
|
+
# limitation values may match exactly or at least ensure those limitation
|
242
|
+
# are under provider limitation
|
243
|
+
# ie, at least the CloudProcess limitation can less than the Cloud provider defines.
|
244
|
+
# CloudProcess EHD = 160, then Provider EHD = 200 is ok
|
245
|
+
# but Provider EHD = 150 is not ok.
|
246
|
+
predefine_data_value('tiny', { :desc => "VCU: 1, RAM:512M, HD:1G, EHD: 0G, Swap: 0G" })
|
247
|
+
predefine_data_value('xsmall', { :desc => "VCU: 1, RAM:1G, HD:10G, EHD: 10G, Swap: 0G" })
|
248
|
+
predefine_data_value('small', { :desc => "VCU: 2, RAM:2G, HD:30G, EHD: 10G, Swap: 0G" })
|
249
|
+
predefine_data_value('medium', { :desc => "VCU: 2, RAM:4G, HD:30G, EHD: 50G, Swap: 0G" })
|
250
|
+
predefine_data_value('large', { :desc => "VCU: 4, RAM:8G, HD:30G, EHD: 100G, Swap: 0G" })
|
251
|
+
predefine_data_value('xlarge', { :desc => "VCU: 8, RAM:16G, HD:30G, EHD: 200G, Swap: 0G" })
|
252
|
+
|
253
|
+
# ************************************ Internet network Object
|
254
|
+
# Define Internet network
|
255
|
+
#
|
256
|
+
# This object contains the logic to ensure the router's network has a gateway to the external network (internet)
|
257
|
+
# is capable to connect to internet
|
258
|
+
# And to create this connection if possible.
|
259
|
+
|
260
|
+
define_obj(:internet_network, :nohandler => true )
|
261
|
+
|
262
|
+
obj_needs :CloudObject, :external_network # External network to connect if needed.
|
263
|
+
|
264
|
+
# ************************************ SERVER Object
|
265
|
+
# Identify the server to use/build on the network/...
|
266
|
+
define_obj(:server,
|
267
|
+
{
|
268
|
+
:create_e => :forj_get_or_create_server,
|
269
|
+
:query_e => :forj_query_server,
|
270
|
+
:get_e => :forj_get_server
|
271
|
+
# :update_e => :forj_update_server,
|
272
|
+
# :delete_e => :forj_delete_server
|
273
|
+
})
|
274
|
+
|
275
|
+
obj_needs :CloudObject, :compute_connection
|
276
|
+
obj_needs :CloudObject, :flavor, { :for => [:create_e] }
|
277
|
+
obj_needs :CloudObject, :network, { :for => [:create_e] }
|
278
|
+
obj_needs :CloudObject, :security_groups, { :for => [:create_e] }
|
279
|
+
obj_needs :CloudObject, :keypairs, { :for => [:create_e] }
|
280
|
+
obj_needs :CloudObject, :image, { :for => [:create_e] }
|
281
|
+
obj_needs :data, :server_name, { :for => [:create_e] }
|
282
|
+
|
283
|
+
obj_needs_optional
|
284
|
+
obj_needs :data, :user_data, { :for => [:create_e] }
|
285
|
+
obj_needs :data, :meta_data, { :for => [:create_e] }
|
286
|
+
|
287
|
+
def_attribute :status
|
288
|
+
predefine_data_value :create, { :desc => "Server is creating." }
|
289
|
+
predefine_data_value :boot, { :desc => "Server is booting." }
|
290
|
+
predefine_data_value :active, { :desc => "Server is started." }
|
291
|
+
def_attribute :private_ip_address
|
292
|
+
def_attribute :public_ip_address
|
293
|
+
|
294
|
+
# ************************************ SERVER Addresses Object
|
295
|
+
# Object representing the list of IP addresses attached to a server.
|
296
|
+
define_obj(:public_ip,
|
297
|
+
:create_e => :forj_get_or_assign_public_address,
|
298
|
+
:query_e => :forj_query_public_address
|
299
|
+
# :get_e => :forj_get_address
|
300
|
+
# :update_e => :forj_update_address
|
301
|
+
# :delete_e => :forj_delete_address
|
302
|
+
)
|
303
|
+
|
304
|
+
obj_needs :CloudObject, :compute_connection
|
305
|
+
obj_needs :CloudObject, :server
|
306
|
+
|
307
|
+
def_attribute :server_id
|
308
|
+
def_attribute :public_ip
|
309
|
+
undefine_attribute :name # No name to extract
|
310
|
+
|
311
|
+
# ************************************ SERVER Console Object
|
312
|
+
# Object representing the console log attached to a server
|
313
|
+
|
314
|
+
define_obj(:server_log,
|
315
|
+
{
|
316
|
+
:get_e => :forj_get_server_log
|
317
|
+
})
|
318
|
+
|
319
|
+
obj_needs :CloudObject, :server
|
320
|
+
obj_needs :data, :log_lines
|
321
|
+
undefine_attribute :name
|
322
|
+
undefine_attribute :id
|
323
|
+
def_attribute :output
|
324
|
+
|
325
|
+
# ************************************ Internet SERVER Object
|
326
|
+
# internet server is a server connected to the internet network.
|
327
|
+
define_obj(:internet_server, :nohandler => true )
|
328
|
+
|
329
|
+
obj_needs :CloudObject, :internet_network
|
330
|
+
obj_needs :CloudObject, :server
|
331
|
+
obj_needs :CloudObject, :public_ip
|
332
|
+
|
333
|
+
|
334
|
+
end
|