lorj 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
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