lorj 1.0.3 → 1.0.4

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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/example/students_1/students.rb +5 -6
  3. data/example/students_2/students.rb +4 -5
  4. data/example/students_3/students.rb +4 -5
  5. data/example/students_4/students.rb +4 -5
  6. data/example/students_5/students.rb +5 -5
  7. data/lib/core/core.rb +6 -1
  8. data/lib/core/core_controller.rb +1 -9
  9. data/lib/core/core_internal.rb +2 -1
  10. data/lib/core/core_model.rb +2 -10
  11. data/lib/core/core_object_data.rb +18 -0
  12. data/lib/core/core_object_params.rb +43 -4
  13. data/lib/core/core_process.rb +1 -9
  14. data/lib/core/core_process_setup.rb +32 -6
  15. data/lib/core/core_setup_ask.rb +41 -33
  16. data/lib/core/core_setup_encrypt.rb +29 -6
  17. data/lib/core/core_setup_init.rb +2 -2
  18. data/lib/core/definition.rb +33 -10
  19. data/lib/core/definition_internal.rb +10 -14
  20. data/lib/core/lorj_basedefinition.rb +16 -24
  21. data/lib/core/lorj_baseprocess.rb +113 -44
  22. data/lib/core/lorj_data.rb +2 -9
  23. data/lib/core/lorj_keypath.rb +5 -2
  24. data/lib/core_process/cloud/process/common.rb +4 -7
  25. data/lib/core_process/cloud/process/connection.rb +44 -45
  26. data/lib/core_process/cloud/process/external_network.rb +24 -28
  27. data/lib/core_process/cloud/process/flavor.rb +31 -34
  28. data/lib/core_process/cloud/process/images.rb +12 -15
  29. data/lib/core_process/cloud/process/internet_network.rb +13 -14
  30. data/lib/core_process/cloud/process/internet_server.rb +9 -10
  31. data/lib/core_process/cloud/process/keypairs.rb +34 -27
  32. data/lib/core_process/cloud/process/network.rb +21 -23
  33. data/lib/core_process/cloud/process/public_ip.rb +17 -18
  34. data/lib/core_process/cloud/process/router.rb +86 -92
  35. data/lib/core_process/cloud/process/rules.rb +30 -31
  36. data/lib/core_process/cloud/process/security_groups.rb +21 -22
  37. data/lib/core_process/cloud/process/server.rb +30 -31
  38. data/lib/core_process/cloud/process/server_log.rb +13 -14
  39. data/lib/core_process/cloud/process/subnetwork.rb +25 -40
  40. data/lib/logging.rb +4 -17
  41. data/lib/lorj/version.rb +1 -1
  42. data/lib/lorj.rb +2 -1
  43. data/lib/lorj_account.rb +137 -90
  44. data/lib/lorj_config.rb +13 -19
  45. data/lib/lorj_defaults.rb +46 -292
  46. data/lib/lorj_meta.rb +729 -0
  47. data/lib/prc.rb +119 -30
  48. data/lib/prc_base_config.rb +53 -47
  49. data/lib/prc_core_config.rb +837 -565
  50. data/lib/prc_section_config.rb +44 -16
  51. data/lib/providers/hpcloud/hpcloud.rb +1 -1
  52. data/lib/providers/openstack/openstack.rb +278 -21
  53. data/lib/providers/openstack/openstack_create.rb +205 -0
  54. data/lib/providers/openstack/openstack_delete.rb +28 -0
  55. data/lib/providers/openstack/openstack_get.rb +39 -0
  56. data/lib/providers/openstack/openstack_process.rb +26 -0
  57. data/lib/providers/openstack/openstack_query.rb +96 -0
  58. data/lib/providers/openstack/openstack_update.rb +35 -0
  59. data/lib/rh.rb +91 -6
  60. data/lorj-spec/defaults.yaml +18 -12
  61. data/lorj.gemspec +1 -0
  62. data/spec/01_hash_rh_spec.rb +41 -2
  63. data/spec/02_prc_base_config_spec.rb +1 -1
  64. data/spec/03_prc_section_config_spec.rb +1 -1
  65. data/spec/04_prc_core_config_spec.rb +148 -4
  66. data/spec/09_prc_spec.rb +104 -0
  67. data/spec/{00_lorj_log_spec.rb → 10_lorj_log_spec.rb} +23 -2
  68. data/spec/11_lorj_config_spec.rb +9 -27
  69. data/spec/12_lorj_account_spec.rb +36 -20
  70. data/spec/20_lorj_meta_spec.rb +271 -0
  71. data/spec/21_lorj_defaults_spec.rb +85 -0
  72. metadata +31 -4
@@ -16,6 +16,8 @@
16
16
 
17
17
  # It requires Core objects to be defined + default ForjProcess functions.
18
18
 
19
+ # rubocop: disable Style/ClassAndModuleChildren
20
+
19
21
  # External network process attached to a network
20
22
  class CloudProcess
21
23
  def forj_get_or_create_ext_net(sCloudObj, hParams)
@@ -38,7 +40,7 @@ class CloudProcess
38
40
  external_network = forj_query_external_network(:network, {}, hParams)
39
41
  if !external_network.empty?
40
42
  router_obj[:gateway_network_id] = external_network[:id]
41
- forj_update_router(:router, hParams)
43
+ controller_update(:router, router_obj)
42
44
  PrcLib.info("Router '%s' attached to the "\
43
45
  "external network '%s'.",
44
46
  router_name, external_network[:name])
@@ -58,37 +60,31 @@ class CloudProcess
58
60
  PrcLib.state('Identifying External gateway')
59
61
  begin
60
62
  # Searching for external network
61
- networks = controller_query(:network, sQuery.merge(:external => true))
62
-
63
- case networks.length
64
- when 0
65
- PrcLib.info('No external network')
66
- nil
67
- when 1
68
- PrcLib.info("Found external network '%s'.", networks[0, :name])
69
- networks[0]
70
- else
71
- PrcLib.warning('Found several external networks. '\
72
- "Selecting the first one '%s'", networks[0, :name])
73
- networks[0]
74
- end
75
- rescue => e
76
- PrcLib.error("%s\n%s", e.message, e.backtrace.join("\n"))
63
+ query = sQuery.merge(:external => true)
64
+ info = {
65
+ :notfound => 'No external network found',
66
+ :checkmatch => 'Found 1 %s. Checking if it is an %s.',
67
+ :nomatch => 'No %s identified as %s match',
68
+ :found => "Found external %s '%s'.",
69
+ :more => 'Found several %s. Searching for the first one to be an %s.'
70
+ }
71
+ networks = query_single(:network, query, 'external network', info)
72
+ return Lorj::Data.new if networks.length == 0
73
+ networks[0]
74
+ rescue => e
75
+ PrcLib.error("%s\n%s", e.message, e.backtrace.join("\n"))
77
76
  end
78
77
  end
79
78
  end
80
79
 
81
- # Define framework object on BaseDefinition
82
- module Lorj
83
- # Identify an external network thanks to the network router.
84
- class BaseDefinition
85
- define_obj(:external_network,
80
+ # Identify an external network thanks to the network router.
81
+ class Lorj::BaseDefinition
82
+ define_obj(:external_network,
86
83
 
87
- :create_e => :forj_get_or_create_ext_net,
88
- :query_e => :forj_query_external_network
89
- )
84
+ :create_e => :forj_get_or_create_ext_net,
85
+ :query_e => :forj_query_external_network
86
+ )
90
87
 
91
- obj_needs :CloudObject, :network_connection
92
- obj_needs :CloudObject, :router
93
- end
88
+ obj_needs :CloudObject, :network_connection
89
+ obj_needs :CloudObject, :router
94
90
  end
@@ -61,40 +61,37 @@ class CloudProcess
61
61
  end
62
62
  end
63
63
 
64
- # Define framework object on BaseDefinition
65
- module Lorj
66
- # ************************************ Flavor Object
67
- # Identify flavor
68
- class BaseDefinition # rubocop: disable ClassAndModuleChildren
69
- define_obj(:flavor,
64
+ # Flavor Object
65
+ # Identify flavor
66
+ class Lorj::BaseDefinition # rubocop: disable ClassAndModuleChildren
67
+ define_obj(:flavor,
70
68
 
71
- :create_e => :forj_get_or_create_flavor,
72
- :query_e => :forj_query_flavor
73
- # :get_e => :forj_get_flavor,
74
- # :update_e => :forj_update_flavor,
75
- # :delete_e => :forj_delete_flavor
76
- )
69
+ :create_e => :forj_get_or_create_flavor,
70
+ :query_e => :forj_query_flavor
71
+ # :get_e => :forj_get_flavor,
72
+ # :update_e => :forj_update_flavor,
73
+ # :delete_e => :forj_delete_flavor
74
+ )
77
75
 
78
- obj_needs :CloudObject, :compute_connection
79
- obj_needs :data, :flavor_name, :for => [:create_e]
80
- # Cloud provider will need to map to one of those predefined flavors.
81
- # limitation values may match exactly or at least ensure those limitation
82
- # are under provider limitation
83
- # ie, at least the CloudProcess limitation can less than the
84
- # Cloud provider defines.
85
- # CloudProcess EHD = 160, then Provider EHD = 200 is ok
86
- # but Provider EHD = 150 is not ok.
87
- predefine_data_value('tiny', :desc => 'VCU: 1, RAM:512M, HD:1G, '\
88
- 'EHD: 0G, Swap: 0G')
89
- predefine_data_value('xsmall', :desc => 'VCU: 1, RAM:1G, HD:10G, '\
90
- 'EHD: 10G, Swap: 0G')
91
- predefine_data_value('small', :desc => 'VCU: 2, RAM:2G, HD:30G, '\
92
- 'EHD: 10G, Swap: 0G')
93
- predefine_data_value('medium', :desc => 'VCU: 2, RAM:4G, HD:30G, '\
94
- 'EHD: 50G, Swap: 0G')
95
- predefine_data_value('large', :desc => 'VCU: 4, RAM:8G, HD:30G, '\
96
- 'EHD: 100G, Swap: 0G')
97
- predefine_data_value('xlarge', :desc => 'VCU: 8, RAM:16G, HD:30G, '\
98
- 'EHD: 200G, Swap: 0G')
99
- end
76
+ obj_needs :CloudObject, :compute_connection
77
+ obj_needs :data, :flavor_name, :for => [:create_e]
78
+ # Cloud provider will need to map to one of those predefined flavors.
79
+ # limitation values may match exactly or at least ensure those limitation
80
+ # are under provider limitation
81
+ # ie, at least the CloudProcess limitation can less than the
82
+ # Cloud provider defines.
83
+ # CloudProcess EHD = 160, then Provider EHD = 200 is ok
84
+ # but Provider EHD = 150 is not ok.
85
+ predefine_data_value('tiny', :desc => 'VCU: 1, RAM:512M, HD:1G, '\
86
+ 'EHD: 0G, Swap: 0G')
87
+ predefine_data_value('xsmall', :desc => 'VCU: 1, RAM:1G, HD:10G, '\
88
+ 'EHD: 10G, Swap: 0G')
89
+ predefine_data_value('small', :desc => 'VCU: 2, RAM:2G, HD:30G, '\
90
+ 'EHD: 10G, Swap: 0G')
91
+ predefine_data_value('medium', :desc => 'VCU: 2, RAM:4G, HD:30G, '\
92
+ 'EHD: 50G, Swap: 0G')
93
+ predefine_data_value('large', :desc => 'VCU: 4, RAM:8G, HD:30G, '\
94
+ 'EHD: 100G, Swap: 0G')
95
+ predefine_data_value('xlarge', :desc => 'VCU: 8, RAM:16G, HD:30G, '\
96
+ 'EHD: 200G, Swap: 0G')
100
97
  end
@@ -82,21 +82,18 @@ class CloudProcess
82
82
  end
83
83
  end
84
84
 
85
- # Define framework object on BaseDefinition
86
- module Lorj
87
- # ************************************ Image Object
88
- # Identify image
89
- class BaseDefinition
90
- define_obj(:image,
85
+ # ************************************ Image Object
86
+ # Identify image
87
+ class Lorj::BaseDefinition # rubocop: disable Style/ClassAndModuleChildren
88
+ define_obj(:image,
91
89
 
92
- :create_e => :forj_get_or_create_image,
93
- :query_e => :forj_query_image,
94
- :get_e => :forj_get_image
95
- # :update_e => :forj_update_image
96
- # :delete_e => :forj_delete_image
97
- )
90
+ :create_e => :forj_get_or_create_image,
91
+ :query_e => :forj_query_image,
92
+ :get_e => :forj_get_image
93
+ # :update_e => :forj_update_image
94
+ # :delete_e => :forj_delete_image
95
+ )
98
96
 
99
- obj_needs :CloudObject, :compute_connection
100
- obj_needs :data, :image_name, :for => [:create_e]
101
- end
97
+ obj_needs :CloudObject, :compute_connection
98
+ obj_needs :data, :image_name, :for => [:create_e]
102
99
  end
@@ -16,19 +16,18 @@
16
16
 
17
17
  # It requires Core objects to be defined + default ForjProcess functions.
18
18
 
19
- # Define framework object on BaseDefinition
20
- module Lorj
21
- # ************************************ Internet network Object
22
- # Define Internet network
23
- #
24
- # This object contains the logic to ensure the router's network has a gateway
25
- # to the external network (internet)
26
- # is capable to connect to internet
27
- # And to create this connection if possible.
28
- class BaseDefinition # rubocop: disable ClassAndModuleChildren
29
- define_obj(:internet_network, :nohandler => true)
19
+ # rubocop: disable Style/ClassAndModuleChildren
30
20
 
31
- obj_needs :CloudObject, :external_network # External network to connect if
32
- # needed.
33
- end
21
+ # Internet network Object
22
+ # Define Internet network
23
+ #
24
+ # This object contains the logic to ensure the router's network has a gateway
25
+ # to the external network (internet)
26
+ # is capable to connect to internet
27
+ # And to create this connection if possible.
28
+ class Lorj::BaseDefinition # rubocop: disable ClassAndModuleChildren
29
+ define_obj(:internet_network, :nohandler => true)
30
+
31
+ obj_needs :CloudObject, :external_network # External network to connect if
32
+ # needed.
34
33
  end
@@ -16,15 +16,14 @@
16
16
 
17
17
  # It requires Core objects to be defined + default ForjProcess functions.
18
18
 
19
- # Define framework object on BaseDefinition
20
- module Lorj
21
- # ************************************ Internet SERVER Object
22
- # internet server is a server connected to the internet network.
23
- class BaseDefinition
24
- define_obj(:internet_server, :nohandler => true)
19
+ # rubocop: disable Style/ClassAndModuleChildren
25
20
 
26
- obj_needs :CloudObject, :internet_network
27
- obj_needs :CloudObject, :server
28
- obj_needs :CloudObject, :public_ip
29
- end
21
+ # Internet SERVER Object
22
+ # internet server is a server connected to the internet network.
23
+ class Lorj::BaseDefinition
24
+ define_obj(:internet_server, :nohandler => true)
25
+
26
+ obj_needs :CloudObject, :internet_network
27
+ obj_needs :CloudObject, :server
28
+ obj_needs :CloudObject, :public_ip
30
29
  end
@@ -16,6 +16,8 @@
16
16
 
17
17
  # It requires Core objects to be defined + default ForjProcess functions.
18
18
 
19
+ # rubocop: disable Style/ClassAndModuleChildren
20
+
19
21
  # Keypair management
20
22
  class CloudProcess
21
23
  # KeyPair Create Process Handler
@@ -59,15 +61,16 @@ class CloudProcess
59
61
  { :name => keypair_name }, hParams)
60
62
 
61
63
  if keypairs.length == 0
62
- keypair = keypair_import(keypair_name, loc_kpair)
64
+ keypair = keypair_import(hParams, loc_kpair)
63
65
  else
64
66
  keypair = keypairs[0]
65
67
  keypair[:coherent] = coherent_keypair?(loc_kpair, keypair)
66
68
  # Adding information about key files.
67
69
  end
68
70
  if keypair[:coherent]
69
- keypair[:private_key_file] = loc_kpair[:private_key_file]
70
- keypair[:public_key_file] = loc_kpair[:public_key_file]
71
+ keypair[:private_key_name] = loc_kpair[:private_key_name]
72
+ keypair[:public_key_name] = loc_kpair[:public_key_name]
73
+ keypair[:keypair_path] = loc_kpair[:keypair_path]
71
74
  end
72
75
  keypair
73
76
  end
@@ -87,20 +90,27 @@ end
87
90
 
88
91
  # Keypair management: Internal process functions
89
92
  class CloudProcess
90
- def keypair_import(keypair_name, loc_kpair)
93
+ def keypair_import(hParams, loc_kpair)
91
94
  PrcLib.fatal(1, "Unable to import keypair '%s'. "\
92
95
  'Public key file is not found. '\
93
96
  "Please run 'forj setup %s'",
94
- keypair_name,
97
+ hParams[:keypair_name],
95
98
  config[:account_name]) unless loc_kpair[:public_key_exist?]
99
+ public_key_file = File.join(loc_kpair[:keypair_path],
100
+ loc_kpair[:public_key_name])
101
+
96
102
  begin
97
- config[:public_key] = File.read(loc_kpair[:public_key_file])
103
+ config[:public_key] = File.read(public_key_file)
98
104
  rescue => e
99
105
  PrcLib.fatal(1, "Unable to import keypair '%s'. '%s' is "\
100
- "unreadable.\n%s", keypair_name,
101
- loc_kpair[:public_key_file], e.message)
106
+ "unreadable.\n%s", hParams[:keypair_name],
107
+ loc_kpair[:public_key_file],
108
+ e.message)
102
109
  end
103
- keypair = create_keypair(sCloudObj, hParams)
110
+ keypair = create_keypair(:keypairs, hParams)
111
+
112
+ return nil if keypair.nil?
113
+
104
114
  if !loc_kpair[:private_key_exist?]
105
115
  keypair[:coherent] = false
106
116
  else
@@ -252,26 +262,23 @@ class CloudProcess
252
262
  end
253
263
  end
254
264
 
255
- # Define framework object on BaseDefinition
256
- module Lorj
257
- # ************************************ keypairs Object
258
- # Identify keypairs
259
- class BaseDefinition
260
- define_obj(:keypairs,
265
+ # ************************************ keypairs Object
266
+ # Identify keypairs
267
+ class Lorj::BaseDefinition
268
+ define_obj(:keypairs,
261
269
 
262
- :create_e => :forj_get_or_create_keypair,
263
- :query_e => :forj_query_keypair,
264
- :get_e => :forj_get_keypair
265
- # :delete_e => :forj_delete_keypair
266
- )
270
+ :create_e => :forj_get_or_create_keypair,
271
+ :query_e => :forj_query_keypair,
272
+ :get_e => :forj_get_keypair
273
+ # :delete_e => :forj_delete_keypair
274
+ )
267
275
 
268
- obj_needs :CloudObject, :compute_connection
269
- obj_needs :data, :keypair_name, :for => [:create_e]
270
- obj_needs :data, :keypair_path, :for => [:create_e]
276
+ obj_needs :CloudObject, :compute_connection
277
+ obj_needs :data, :keypair_name, :for => [:create_e]
278
+ obj_needs :data, :keypair_path, :for => [:create_e]
271
279
 
272
- obj_needs_optional
273
- obj_needs :data, :public_key, :for => [:create_e]
280
+ obj_needs_optional
281
+ obj_needs :data, :public_key, :for => [:create_e]
274
282
 
275
- def_attribute :public_key
276
- end
283
+ def_attribute :public_key
277
284
  end
@@ -16,6 +16,8 @@
16
16
 
17
17
  # It requires Core objects to be defined + default ForjProcess functions.
18
18
 
19
+ # rubocop: disable Style/ClassAndModuleChildren
20
+
19
21
  # Network Management
20
22
  class CloudProcess
21
23
  # Process Create handler
@@ -31,13 +33,12 @@ class CloudProcess
31
33
 
32
34
  # Attaching if missing the subnet.
33
35
  # Creates an object subnet, attached to the network.
36
+ params = {}
34
37
  unless hParams[:subnetwork_name]
35
- hParams[:subnetwork_name] = 'sub-' + hParams[:network_name]
36
- config[:subnetwork_name] = hParams[:subnetwork_name]
38
+ params[:subnetwork_name] = 'sub-' + hParams[:network_name]
37
39
  end
38
40
 
39
- # object.Create(:subnetwork)
40
- process_create(:subnetwork)
41
+ process_create(:subnetwork, params)
41
42
 
42
43
  network
43
44
  end
@@ -56,25 +57,23 @@ class CloudProcess
56
57
  end
57
58
  end
58
59
 
59
- # Define framework object on BaseDefinition
60
- module Lorj
61
- # ************************************ Network Object
62
- # Identify the network
63
- class BaseDefinition
64
- define_obj(:network,
65
- :create_e => :forj_get_or_create_network,
66
- :query_e => :controller_query,
67
- :get_e => :forj_get_network,
68
- :delete_e => :forj_delete_network
69
- )
70
- obj_needs :CloudObject, :network_connection
71
- obj_needs :data, :network_name, :for => [:create_e]
60
+ # Network Object
61
+ # Identify the network
62
+ class Lorj::BaseDefinition
63
+ define_obj(:network,
64
+ :create_e => :forj_get_or_create_network,
65
+ :query_e => :controller_query,
66
+ :get_e => :forj_get_network,
67
+ :delete_e => :forj_delete_network
68
+ )
69
+ obj_needs :CloudObject, :network_connection
70
+ obj_needs :data, :network_name, :for => [:create_e]
72
71
 
73
- obj_needs_optional
74
- obj_needs :data, :subnetwork_name, :for => [:create_e]
72
+ obj_needs_optional
73
+ obj_needs :data, :subnetwork_name, :for => [:create_e]
75
74
 
76
- def_query_attribute :external # true if network is external or not.
77
- end
75
+ # Any attribute are queriable
76
+ def_attribute :external # true if network is external or not.
78
77
  end
79
78
 
80
79
  # Network Process internal functions #
@@ -100,8 +99,7 @@ class CloudProcess
100
99
  # nil or Provider Object
101
100
  def find_network(sCloudObj, hParams)
102
101
  query = { :name => hParams[:network_name] }
103
- # list = controller_query(sCloudObj, query)
104
- # query_single(sCloudObj, list, query, hParams[:network_name])
102
+
105
103
  query_single(sCloudObj, query, hParams[:network_name])
106
104
  rescue => e
107
105
  PrcLib.error("%s\n%s", e.message, e.backtrace.join("\n"))
@@ -16,6 +16,8 @@
16
16
 
17
17
  # It requires Core objects to be defined + default ForjProcess functions.
18
18
 
19
+ # rubocop: disable Style/ClassAndModuleChildren
20
+
19
21
  # Addresses management
20
22
  class CloudProcess
21
23
  # Process Handler functions
@@ -62,26 +64,23 @@ class CloudProcess
62
64
  end
63
65
  end
64
66
 
65
- # Define framework object on BaseDefinition
66
- module Lorj
67
- # ************************************ SERVER Addresses Object
68
- # Object representing the list of IP addresses attached to a server.
69
- class BaseDefinition
70
- define_obj(:public_ip,
71
- :create_e => :forj_get_or_assign_public_address,
72
- :query_e => :forj_query_public_address
73
- # :get_e => :forj_get_address
74
- # :update_e => :forj_update_address
75
- # :delete_e => :forj_delete_address
76
- )
67
+ # SERVER Addresses Object
68
+ # Object representing the list of IP addresses attached to a server.
69
+ class Lorj::BaseDefinition
70
+ define_obj(:public_ip,
71
+ :create_e => :forj_get_or_assign_public_address,
72
+ :query_e => :forj_query_public_address
73
+ # :get_e => :forj_get_address
74
+ # :update_e => :forj_update_address
75
+ # :delete_e => :forj_delete_address
76
+ )
77
77
 
78
- obj_needs :CloudObject, :compute_connection
79
- obj_needs :CloudObject, :server
78
+ obj_needs :CloudObject, :compute_connection
79
+ obj_needs :CloudObject, :server
80
80
 
81
- def_attribute :server_id
82
- def_attribute :public_ip
83
- undefine_attribute :name # No name to extract
84
- end
81
+ def_attribute :server_id
82
+ def_attribute :public_ip
83
+ undefine_attribute :name # No name to extract
85
84
  end
86
85
 
87
86
  # Internal Process function