lorj_cloud 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/bin/console +13 -0
  3. data/bin/lorj_cloud +67 -0
  4. data/bin/setup +15 -0
  5. data/lib/lorj_cloud/version.rb +2 -1
  6. data/lib/process/cloud/data.yaml +136 -0
  7. data/lib/process/cloud/defaults.yaml +17 -0
  8. data/lib/process/cloud/process/connection.rb +17 -20
  9. data/lib/process/cloud/process/flavor.rb +4 -4
  10. data/lib/process/cloud/process/images.rb +3 -3
  11. data/lib/process/cloud/process/keypairs.rb +9 -7
  12. data/lib/{providers → process/cloud/providers}/hpcloud/hpcloud.rb +26 -26
  13. data/lib/{providers → process/cloud/providers}/openstack/openstack.rb +165 -61
  14. data/lib/{providers → process/cloud/providers}/openstack/openstack_create.rb +7 -3
  15. data/lib/{providers → process/cloud/providers}/openstack/openstack_process.rb +6 -1
  16. data/lorj_cloud.gemspec +3 -3
  17. metadata +24 -38
  18. data/lib/data.yaml +0 -0
  19. data/lib/defaults.yaml +0 -0
  20. /data/lib/{providers → process/cloud/providers}/hpcloud/compute.rb +0 -0
  21. /data/lib/{providers → process/cloud/providers}/hpcloud/network.rb +0 -0
  22. /data/lib/{providers → process/cloud/providers}/hpcloud/security_groups.rb +0 -0
  23. /data/lib/{providers → process/cloud/providers}/mock/mock.rb +0 -0
  24. /data/lib/{providers → process/cloud/providers}/openstack/openstack_delete.rb +0 -0
  25. /data/lib/{providers → process/cloud/providers}/openstack/openstack_get.rb +0 -0
  26. /data/lib/{providers → process/cloud/providers}/openstack/openstack_query.rb +0 -0
  27. /data/lib/{providers → process/cloud/providers}/openstack/openstack_update.rb +0 -0
  28. /data/lib/{providers → process/cloud/providers}/templates/compute.rb +0 -0
  29. /data/lib/{providers → process/cloud/providers}/templates/mycloud.rb +0 -0
  30. /data/lib/{providers → process/cloud/providers}/templates/network.rb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4233f4744a02510e08773415b97e9e2c1d22a573
4
- data.tar.gz: 65f7e65ab5b524739d081bfd6fac667a0b92e815
3
+ metadata.gz: c97d1a526cc33c76ce049d26943adab2c485c976
4
+ data.tar.gz: acfd3212f964e401b51dd8b03d6dabe631e6a1ac
5
5
  SHA512:
6
- metadata.gz: 6942511c15d7ca200f7994f3e78db471cc1d051aef996d68118694e2512e6decae0310f14b1b470aa725cc3079cdeaf5b037d5986f0db54d6e5afcd8a2c748f2
7
- data.tar.gz: b6e027ec8f848aec4be5ad2bd8a241c2f1e65699bcf5234b0c815b85f2979230336b0960503deb2dd442e8a114d21e4d7267a164ab50d84571ab99475c5400f5
6
+ metadata.gz: 7f84ffe8eb4fc5d91b8148e3d7779c3416d721f3021ca691b40ef97094ddb456368992f6dd1708d4d1ad42836bd9d848f96e90b5a3962b17decc2a2290c7e0b6
7
+ data.tar.gz: 9e0aecb2ca0c8c8a93b124d8ab4dbba4433b8bcc7b2647d2ffc24b1712f6b3fa2745cd2aae91c9ff884bccab832a4fbcd918d2158228fd68ca040ab7b39f9057
data/bin/console CHANGED
@@ -1,5 +1,18 @@
1
1
  #!/usr/bin/env ruby
2
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.
3
16
  require 'bundler/setup'
4
17
  require 'lorj_cloud'
5
18
 
data/bin/lorj_cloud ADDED
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env ruby
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
+ # require 'byebug'
17
+
18
+ require 'bundler/setup'
19
+ require 'lorj_cloud'
20
+
21
+ process_module = 'cloud'
22
+
23
+ PrcLib.log_object = Logger.new(STDOUT)
24
+ PrcLib.level = Logger::DEBUG
25
+ PrcLib.core_level = 5
26
+
27
+ unless Lorj.processes.key?(process_module)
28
+ PrcLib.fatal(1, "Unable to found the process module '%s'. \n"\
29
+ 'Modules loaded:', process_module, Lorj.processes.keys)
30
+ end
31
+
32
+ if Lorj.processes[process_module].controllers.nil?
33
+ PrcLib.fatal(1, "no controllers found in module '%s'.\n", process_module)
34
+ end
35
+
36
+ PrcLib.high_level_msg('Welcome to lorj_cloud - Simple process to build a '\
37
+ "cloud box\n"\
38
+ 'This simple script uses lorj_cloud process to guide you'\
39
+ ' setup and create a server in your cloud.')
40
+
41
+ # say("Please choose your cloud provider:")
42
+ # provider = choose do |q|
43
+ # controllers = Lorj.processes[process_module].controllers.keys
44
+ # q.choices(*controllers)
45
+ # end
46
+
47
+ provider = 'openstack'
48
+
49
+ processes = [{ :process_module => process_module,
50
+ :controller_name => provider }]
51
+
52
+ core = Lorj::Core.new(nil, processes)
53
+
54
+ PrcLib.message('You are going to create a server')
55
+
56
+ # server = ask('Enter a server name:') do |q|
57
+ # q.validate = /\w+/
58
+ # end
59
+ server = 'test'
60
+
61
+ PrcLib.message('Now, we are going to ask you some data about your cloud and '\
62
+ 'information to create your server')
63
+ # byebug
64
+
65
+ core.setup(:server)
66
+
67
+ core.create(:server, :server_name => server)
data/bin/setup CHANGED
@@ -1,4 +1,19 @@
1
1
  #!/bin/bash
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
+
2
17
  set -euo pipefail
3
18
  IFS=$'\n\t'
4
19
 
@@ -1,4 +1,5 @@
1
1
  # LorjCloud module
2
2
  module LorjCloud
3
- VERSION = '0.1.0'
3
+ VERSION = '0.1.1'
4
+ DATE = '2015-05-20'
4
5
  end
@@ -0,0 +1,136 @@
1
+ # (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # Following declares generic FORJ data to handle Fog object (compute/network/dns/...)
16
+ # It defines the account file structure. section/key=value
17
+ # All data can be predefined by default value (config.yaml/defaults.yaml) except
18
+ # those identified by :account_exclusive: true
19
+ :setup:
20
+ :steps:
21
+ :provider_config:
22
+ :desc: "Provider configuration:"
23
+ :cloud_config:
24
+ :desc: "Cloud configuration:"
25
+ :add:
26
+ - :keypair_path
27
+ - :keypair_base
28
+ :sections:
29
+ # This section define updatable data available from config.yaml. But will never be added in an account file.
30
+ # Used by forj set/get functions
31
+ :default:
32
+ :account_name:
33
+ :desc: "Default account name used by forj cli"
34
+ :provider_name:
35
+ :desc: "Default provider name while running forj setup. By default, hpcloud is selected."
36
+ # Defines account credentials data
37
+ :account:
38
+ :name:
39
+ :desc: "Account Name"
40
+ :readonly: true
41
+ :account_exclusive: true
42
+ :provider:
43
+ :desc: "Cloud provider name."
44
+ :readonly: true
45
+ :account_exclusive: true
46
+
47
+ # Defines services
48
+ :services:
49
+ :compute:
50
+ :desc: "Service identification for compute"
51
+ :account_exclusive: true
52
+ :account: true
53
+ :step: :provider_config
54
+ :network:
55
+ :desc: "Service identification for network"
56
+ :account_exclusive: true
57
+ :account: true
58
+ :step: :provider_config
59
+
60
+ # Defines ssh keys credentials
61
+ :credentials:
62
+ :keypair_path:
63
+ :desc: "Contains the full path to the :keypair_base."
64
+ :ask_step: :provider_config
65
+ :keypair_base:
66
+ :desc: "Contains the key file base name without .pem/.pub."
67
+ :ask_step: :provider_config
68
+ :keypair_name:
69
+ :desc: "keypair name defined in your cloud to access your server."
70
+ :ask_step: :provider_config
71
+ :auth_uri:
72
+ :desc: "Generic service auth url"
73
+ :ask_step: :provider_config
74
+ :account_exclusive: true
75
+ :account: true
76
+ :required: true
77
+ :user_domain:
78
+ :ask_step: :provider_config
79
+ :account_exclusive: true
80
+ :account: true
81
+ :required: false
82
+ :account_id:
83
+ :desc: "Generic Cloud Account name."
84
+ :ask_step: :provider_config
85
+ :account_exclusive: true
86
+ :account: true
87
+ :required: true
88
+ :account_key:
89
+ :desc: "Generic cloud account key"
90
+ :ask_step: :provider_config
91
+ :account_exclusive: true
92
+ :account: true
93
+ :required: true
94
+ :encrypted: true
95
+ :tenant:
96
+ :desc: "Tenant Name (Project name)"
97
+ :ask_step: :provider_config
98
+ :account_exclusive: true
99
+ :account: true
100
+ :required: true
101
+ :prj_domain:
102
+ :ask_step: :provider_config
103
+ :account_exclusive: true
104
+ :account: true
105
+ :required: false
106
+
107
+ :server:
108
+ :network_name:
109
+ :ask_step: :cloud_config
110
+ :desc: "Network name to attach to each forge boxes. By default we use 'forj'. If it doesn't exist, it will be created."
111
+ :security_group:
112
+ :desc: "Security group name to configure and attach to each forge boxes."
113
+ :ask_step: :cloud_config
114
+ :box_name:
115
+ :desc: "Box name"
116
+ :flavor_name:
117
+ :desc: "Server Flavor name"
118
+ :ask_step: :cloud_config
119
+ :account: true
120
+ :list_values:
121
+ :query_type: :query_call # Will execute a query on flavor, query_params is empty for all.
122
+ :object: :flavor
123
+ :value: :name
124
+ :validate: :list_strict
125
+ :image_name:
126
+ :desc: "Image name"
127
+ :ask_step: :cloud_config
128
+ :account: true
129
+ :list_values:
130
+ :query_type: :query_call # Will execute a query on flavor, query_params is empty for all. No filter currently working.
131
+ :object: :image
132
+ :value: :name
133
+ :validate: :list_strict
134
+ :ports:
135
+ :desc: "List of security group rules (1 port or range of ports) to open to the external network."
136
+ :ask_step: :cloud_config
@@ -0,0 +1,17 @@
1
+ # (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ :default:
16
+ # Users: Default user for ssh connection, if user doesn't exits, forj cli will try to get the user from the server image on it's name attribute
17
+ :users: ['ubuntu', 'fedora', 'cloud-user', 'cirros', 'centos', 'cloud', 'root']
@@ -23,9 +23,9 @@
23
23
  class CloudProcess
24
24
  def connect(sCloudObj, hParams)
25
25
  ssl_error_obj = SSLErrorMgt.new # Retry object
26
- PrcLib.debug("%s:%s Connecting to '%s' "\
27
- "- Project '%s'",
28
- self.class, sCloudObj, config[:provider], hParams[:tenant])
26
+ PrcLib.debug("%s:%s Connecting to '%s' - Project '%s'",
27
+ self.class, sCloudObj, config[:provider],
28
+ hParams['credentials#tenant'])
29
29
  begin
30
30
  controller_connect(sCloudObj)
31
31
  rescue => e
@@ -47,13 +47,12 @@ class Lorj::BaseDefinition
47
47
  # object to get list of services
48
48
  # Defines Process handler to call
49
49
  define_obj(:services,
50
-
51
50
  :create_e => :connect
52
51
  )
53
- obj_needs :data, :auth_uri
54
- obj_needs :data, :account_id
55
- obj_needs :data, :account_key
56
- obj_needs :data, :tenant
52
+ obj_needs :data, 'credentials#auth_uri'
53
+ obj_needs :data, 'credentials#account_id'
54
+ obj_needs :data, 'credentials#account_key'
55
+ obj_needs :data, 'credentials#tenant'
57
56
 
58
57
  undefine_attribute :id # Do not return any predefined ID
59
58
  undefine_attribute :name # Do not return any predefined NAME
@@ -62,14 +61,13 @@ end
62
61
  # compute_connection
63
62
  class Lorj::BaseDefinition
64
63
  define_obj(:compute_connection,
65
-
66
64
  :create_e => :connect # Will call ForjProcess connect
67
65
  )
68
- obj_needs :data, :account_id
69
- obj_needs :data, :account_key
70
- obj_needs :data, :auth_uri
71
- obj_needs :data, :tenant
72
- obj_needs :data, :compute
66
+ obj_needs :data, 'credentials#account_id'
67
+ obj_needs :data, 'credentials#account_key'
68
+ obj_needs :data, 'credentials#auth_uri'
69
+ obj_needs :data, 'credentials#tenant'
70
+ obj_needs :data, 'services#compute'
73
71
 
74
72
  undefine_attribute :id # Do not return any predefined ID
75
73
  undefine_attribute :name # Do not return any predefined NAME
@@ -78,14 +76,13 @@ end
78
76
  # network_connection
79
77
  class Lorj::BaseDefinition
80
78
  define_obj(:network_connection,
81
-
82
79
  :create_e => :connect
83
80
  )
84
- obj_needs :data, :account_id
85
- obj_needs :data, :account_key
86
- obj_needs :data, :auth_uri
87
- obj_needs :data, :tenant
88
- obj_needs :data, :network
81
+ obj_needs :data, 'credentials#account_id'
82
+ obj_needs :data, 'credentials#account_key'
83
+ obj_needs :data, 'credentials#auth_uri'
84
+ obj_needs :data, 'credentials#tenant'
85
+ obj_needs :data, 'services#network'
89
86
 
90
87
  undefine_attribute :id # Do not return any predefined ID
91
88
  undefine_attribute :name # Do not return any predefined NAME
@@ -24,7 +24,7 @@ class CloudProcess
24
24
  # Usually, flavor records already exists, and the controller may map them
25
25
  # CloudProcess predefines some values. Consult CloudProcess.rb for details
26
26
  def forj_get_or_create_flavor(sCloudObj, hParams)
27
- flavor_name = hParams[:flavor_name]
27
+ flavor_name = hParams['server#flavor_name']
28
28
  PrcLib.state("Searching for flavor '%s'", flavor_name)
29
29
 
30
30
  flavors = query_flavor(sCloudObj, { :name => flavor_name }, hParams)
@@ -43,7 +43,7 @@ class CloudProcess
43
43
 
44
44
  # Should return 1 or 0 flavor.
45
45
  def query_flavor(sCloudObj, sQuery, hParams)
46
- flavor_name = hParams[:flavor_name]
46
+ flavor_name = hParams['server#flavor_name']
47
47
  # list = forj_query_flavor(sCloudObj, sQuery, hParams)
48
48
  # query_single(sCloudObj, list, sQuery, flavor_name)
49
49
  query_single(sCloudObj, sQuery, flavor_name)
@@ -73,8 +73,8 @@ class Lorj::BaseDefinition # rubocop: disable ClassAndModuleChildren
73
73
  # :delete_e => :forj_delete_flavor
74
74
  )
75
75
 
76
- obj_needs :CloudObject, :compute_connection
77
- obj_needs :data, :flavor_name, :for => [:create_e]
76
+ obj_needs :CloudObject, :compute_connection
77
+ obj_needs :data, 'server#flavor_name', :for => [:create_e]
78
78
  # Cloud provider will need to map to one of those predefined flavors.
79
79
  # limitation values may match exactly or at least ensure those limitation
80
80
  # are under provider limitation
@@ -21,7 +21,7 @@
21
21
  # ---------------------------------------------------------------------------
22
22
  class CloudProcess
23
23
  def forj_get_or_create_image(sCloudObj, hParams)
24
- image_name = hParams[:image_name]
24
+ image_name = hParams['server#image_name']
25
25
  PrcLib.state("Searching for image '%s'", image_name)
26
26
 
27
27
  search_the_image(sCloudObj, { :name => image_name }, hParams)
@@ -29,7 +29,7 @@ class CloudProcess
29
29
  end
30
30
 
31
31
  def search_the_image(sCloudObj, sQuery, hParams)
32
- image_name = hParams[:image_name]
32
+ image_name = hParams['server#image_name']
33
33
  images = forj_query_image(sCloudObj, sQuery, hParams)
34
34
  case images.length
35
35
  when 0
@@ -95,5 +95,5 @@ class Lorj::BaseDefinition # rubocop: disable Style/ClassAndModuleChildren
95
95
  )
96
96
 
97
97
  obj_needs :CloudObject, :compute_connection
98
- obj_needs :data, :image_name, :for => [:create_e]
98
+ obj_needs :data, 'server#image_name', :for => [:create_e]
99
99
  end
@@ -39,7 +39,7 @@ class CloudProcess
39
39
  # also set - Used to import it)
40
40
  #
41
41
  def forj_get_or_create_keypair(sCloudObj, hParams)
42
- keypair_name = hParams[:keypair_name]
42
+ keypair_name = hParams['credentials#keypair_name']
43
43
  PrcLib.state("Searching for keypair '%s'", keypair_name)
44
44
 
45
45
  keypair = forj_get_keypair(sCloudObj, keypair_name, hParams)
@@ -102,7 +102,7 @@ class Lorj::BaseDefinition
102
102
  )
103
103
 
104
104
  obj_needs :CloudObject, :compute_connection
105
- obj_needs :data, :keypair_name, :for => [:create_e]
105
+ obj_needs :data, 'credentials#keypair_name', :for => [:create_e]
106
106
  obj_needs :data, :keypair_path
107
107
  obj_needs :data, :keypair_base
108
108
 
@@ -174,9 +174,11 @@ class CloudProcess
174
174
 
175
175
  def keypair_import(hParams, loc_kpair)
176
176
  PrcLib.fatal(1, "Unable to import keypair '%s'. "\
177
- 'Public key file is not found. '\
177
+ "Public key file '%s' is not found. "\
178
178
  "Please run 'forj setup %s'",
179
- hParams[:keypair_name],
179
+ hParams['credentials#keypair_name'],
180
+ File.join(loc_kpair[:keypair_path],
181
+ loc_kpair[:public_key_name]),
180
182
  config[:account_name]) unless loc_kpair[:public_key_exist?]
181
183
  public_key_file = File.join(loc_kpair[:keypair_path],
182
184
  loc_kpair[:public_key_name])
@@ -185,7 +187,7 @@ class CloudProcess
185
187
  public_key = File.read(public_key_file)
186
188
  rescue => e
187
189
  PrcLib.fatal(1, "Unable to import keypair '%s'. '%s' is "\
188
- "unreadable.\n%s", hParams[:keypair_name],
190
+ "unreadable.\n%s", hParams['credentials#keypair_name'],
189
191
  loc_kpair[:public_key_file],
190
192
  e.message)
191
193
  end
@@ -200,7 +202,7 @@ class CloudProcess
200
202
  end
201
203
 
202
204
  def create_keypair(sCloudObj, hParams)
203
- key_name = hParams[:keypair_name]
205
+ key_name = hParams['credentials#keypair_name']
204
206
  PrcLib.state("Importing keypair '%s'", key_name)
205
207
  ssl_error_obj = SSLErrorMgt.new
206
208
  begin
@@ -274,7 +276,7 @@ class CloudProcess
274
276
  end
275
277
 
276
278
  def get_keypairs_path(hParams, hKeys)
277
- keypair_name = hParams[:keypair_name]
279
+ keypair_name = hParams['credentials#keypair_name']
278
280
 
279
281
  if hKeys[:private_key_exist?]
280
282
  hParams[:private_key_file] = File.join(hKeys[:keypair_path],
@@ -28,10 +28,10 @@ load File.join(hpcloud_path, 'security_groups.rb')
28
28
  # Defines Meta HPCloud object
29
29
  class Hpcloud
30
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
31
+ obj_needs :data, 'credentials#account_id', :mapping => :hp_access_key
32
+ obj_needs :data, 'credentials#account_key', :mapping => :hp_secret_key
33
+ obj_needs :data, 'credentials#auth_uri', :mapping => :hp_auth_uri
34
+ obj_needs :data, 'credentials#tenant', :mapping => :hp_tenant_id
35
35
  obj_needs :data, ':excon_opts/:connect_timeout', :default_value => 30
36
36
  obj_needs :data, ':excon_opts/:read_timeout', :default_value => 240
37
37
  obj_needs :data, ':excon_opts/:write_timeout', :default_value => 240
@@ -41,18 +41,18 @@ class Hpcloud
41
41
  define_obj :compute_connection
42
42
  # Defines Data used by compute.
43
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
44
+ obj_needs :data, 'credentials#account_id', :mapping => :hp_access_key
45
+ obj_needs :data, 'credentials#account_key', :mapping => :hp_secret_key
46
+ obj_needs :data, 'credentials#auth_uri', :mapping => :hp_auth_uri
47
+ obj_needs :data, 'credentials#tenant', :mapping => :hp_tenant_id
48
+ obj_needs :data, 'services#compute', :mapping => :hp_avl_zone
49
49
 
50
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
51
+ obj_needs :data, 'credentials#account_id', :mapping => :hp_access_key
52
+ obj_needs :data, 'credentials#account_key', :mapping => :hp_secret_key
53
+ obj_needs :data, 'credentials#auth_uri', :mapping => :hp_auth_uri
54
+ obj_needs :data, 'credentials#tenant', :mapping => :hp_tenant_id
55
+ obj_needs :data, 'services#network', :mapping => :hp_avl_zone
56
56
 
57
57
  # Forj predefine following query mapping, used by ForjProcess
58
58
  # id => id, name => name
@@ -117,20 +117,20 @@ class Hpcloud
117
117
  def_attr_mapping :public_ip, :ip
118
118
 
119
119
  # defines setup Cloud data (:account => true for setup)
120
- define_data(:account_id,
120
+ define_data('credentials#account_id',
121
121
  :account => true,
122
122
  :desc => 'HPCloud Access Key (From horizon, user drop down, '\
123
123
  'manage keys)',
124
124
  :validate => /^[A-Z0-9]*$/
125
125
  )
126
- define_data(:account_key,
126
+ define_data('credentials#account_key',
127
127
  :account => true,
128
128
  :desc => 'HPCloud secret Key (From horizon, user drop down, '\
129
129
  'manage keys)',
130
130
  :encrypted => false,
131
131
  :validate => /^.+/
132
132
  )
133
- define_data(:auth_uri,
133
+ define_data('credentials#auth_uri',
134
134
  :account => true,
135
135
  :desc => 'HPCloud Authentication service URL (default is HP '\
136
136
  'Public cloud)',
@@ -138,17 +138,16 @@ class Hpcloud
138
138
  :default_value => 'https://region-a.geo-1.identity.hpcloudsvc'\
139
139
  '.com:35357/v2.0/'
140
140
  )
141
- define_data(:tenant,
141
+ define_data('credentials#tenant',
142
142
  :account => true,
143
143
  :desc => 'HPCloud Tenant ID (from horizon, identity, projecs,'\
144
144
  ' Project ID)',
145
145
  :validate => /^[0-9]+$/
146
146
  )
147
147
 
148
- define_data(:compute,
148
+ define_data('services#compute',
149
149
  :account => true,
150
150
  :desc => 'HPCloud Compute service zone (Ex: region-a.geo-1)',
151
- :depends_on => [:account_id, :account_key, :auth_uri, :tenant],
152
151
  :list_values => {
153
152
  :query_type => :controller_call,
154
153
  :object => :services,
@@ -158,10 +157,9 @@ class Hpcloud
158
157
  }
159
158
  )
160
159
 
161
- define_data(:network,
160
+ define_data('services#network',
162
161
  :account => true,
163
162
  :desc => 'HPCloud Network service zone (Ex: region-a.geo-1)',
164
- :depends_on => [:account_id, :account_key, :auth_uri, :tenant],
165
163
  :list_values => {
166
164
  :query_type => :controller_call,
167
165
  :object => :services,
@@ -227,9 +225,10 @@ class HpcloudController # rubocop: disable Metrics/ClassLength
227
225
  hParams[:user_data], hParams[:meta_data])
228
226
  when :image
229
227
  required?(hParams, :compute_connection)
230
- required?(hParams, :image_name)
228
+ required?(hParams, 'server#image_name')
231
229
 
232
- HPCompute.get_image(hParams[:compute_connection], hParams[:image_name])
230
+ HPCompute.get_image(hParams[:compute_connection],
231
+ hParams['server#image_name'])
233
232
  when :network
234
233
  required?(hParams, :network_connection)
235
234
  required?(hParams, :network_name)
@@ -252,11 +251,12 @@ class HpcloudController # rubocop: disable Metrics/ClassLength
252
251
  hParams[:security_group], hParams[:sg_desc])
253
252
  when :keypairs
254
253
  required?(hParams, :compute_connection)
255
- required?(hParams, :keypair_name)
254
+ required?(hParams, 'credentials#keypair_name')
256
255
  required?(hParams, :public_key)
257
256
 
258
257
  HPKeyPairs.create_keypair(hParams[:compute_connection],
259
- hParams[:keypair_name], hParams[:public_key])
258
+ hParams['credentials#keypair_name'],
259
+ hParams[:public_key])
260
260
  when :router
261
261
  required?(hParams, :network_connection)
262
262
  required?(hParams, :router_name)
@@ -21,11 +21,11 @@ require 'uri'
21
21
 
22
22
  hpcloud_path = File.expand_path(File.dirname(__FILE__))
23
23
 
24
- require File.join(hpcloud_path, 'openstack_query.rb')
25
- require File.join(hpcloud_path, 'openstack_get.rb')
26
- require File.join(hpcloud_path, 'openstack_delete.rb')
27
- require File.join(hpcloud_path, 'openstack_create.rb')
28
- require File.join(hpcloud_path, 'openstack_update.rb')
24
+ load File.join(hpcloud_path, 'openstack_query.rb')
25
+ load File.join(hpcloud_path, 'openstack_get.rb')
26
+ load File.join(hpcloud_path, 'openstack_delete.rb')
27
+ load File.join(hpcloud_path, 'openstack_create.rb')
28
+ load File.join(hpcloud_path, 'openstack_update.rb')
29
29
 
30
30
  # Defines Meta Openstack object
31
31
  class Openstack
@@ -34,37 +34,49 @@ class Openstack
34
34
  define_obj :services
35
35
  # Define Data used by service
36
36
 
37
- obj_needs :data, :account_id, :mapping => :openstack_username
38
- obj_needs :data, :account_key, :mapping => :openstack_api_key,
39
- :decrypt => true
40
- obj_needs :data, :auth_uri, :mapping => :openstack_auth_uri
41
- obj_needs :data, :tenant, :mapping => :openstack_tenant
37
+ obj_needs :data, 'credentials#account_id', :mapping => :openstack_username
38
+ obj_needs :data, 'credentials#account_key', :mapping => :openstack_api_key,
39
+ :decrypt => true
40
+ obj_needs :data, 'credentials#auth_uri', :mapping => :openstack_auth_url
41
+ obj_needs :data, 'credentials#tenant', :mapping => :openstack_tenant
42
42
  obj_needs :data, ':excon_opts/:connect_timeout', :default_value => 30
43
43
  obj_needs :data, ':excon_opts/:read_timeout', :default_value => 240
44
44
  obj_needs :data, ':excon_opts/:write_timeout', :default_value => 240
45
45
 
46
+ obj_needs_optional # Data required if uri contains v3
47
+ obj_needs :data, :user_domain, :mapping => :openstack_user_domain
48
+ obj_needs :data, :prj_domain, :mapping => :openstack_project_domain
49
+
46
50
  define_obj :compute_connection
47
51
  # Defines Data used by compute.
48
52
 
49
- obj_needs :data, :account_id, :mapping => :openstack_username
50
- obj_needs :data, :account_key, :mapping => :openstack_api_key,
51
- :decrypt => true
52
- obj_needs :data, :auth_uri, :mapping => :openstack_auth_url
53
- obj_needs :data, :tenant, :mapping => :openstack_tenant
54
- obj_needs :data, :compute, :mapping => :openstack_region
53
+ obj_needs :data, 'credentials#account_id', :mapping => :openstack_username
54
+ obj_needs :data, 'credentials#account_key', :mapping => :openstack_api_key,
55
+ :decrypt => true
56
+ obj_needs :data, 'credentials#auth_uri', :mapping => :openstack_auth_url
57
+ obj_needs :data, 'credentials#tenant', :mapping => :openstack_tenant
58
+ obj_needs :data, 'services#compute', :mapping => :openstack_region
59
+
60
+ obj_needs_optional # Data required if uri contains v3
61
+ obj_needs :data, :user_domain, :mapping => :openstack_user_domain
62
+ obj_needs :data, :prj_domain, :mapping => :openstack_project_domain
55
63
 
56
64
  define_obj :network_connection
57
- obj_needs :data, :account_id, :mapping => :openstack_username
58
- obj_needs :data, :account_key, :mapping => :openstack_api_key,
59
- :decrypt => true
60
- obj_needs :data, :auth_uri, :mapping => :openstack_auth_url
61
- obj_needs :data, :tenant, :mapping => :openstack_tenant
62
- obj_needs :data, :network, :mapping => :openstack_region
65
+ obj_needs :data, 'credentials#account_id', :mapping => :openstack_username
66
+ obj_needs :data, 'credentials#account_key', :mapping => :openstack_api_key,
67
+ :decrypt => true
68
+ obj_needs :data, 'credentials#auth_uri', :mapping => :openstack_auth_url
69
+ obj_needs :data, 'credentials#tenant', :mapping => :openstack_tenant
70
+ obj_needs :data, 'services#network', :mapping => :openstack_region
71
+
72
+ obj_needs_optional # Data required if uri contains v3
73
+ obj_needs :data, :user_domain, :mapping => :openstack_user_domain
74
+ obj_needs :data, :prj_domain, :mapping => :openstack_project_domain
63
75
 
64
76
  # Openstack tenants object
65
77
  define_obj(:tenants, :create_e => :openstack_get_tenant)
66
78
  obj_needs :CloudObject, :compute_connection
67
- obj_needs :data, :tenant
79
+ obj_needs :data, 'credentials#tenant'
68
80
 
69
81
  # Openstack Network
70
82
  define_obj :network
@@ -101,28 +113,32 @@ class Openstack
101
113
  def_attr_mapping :port_max, :port_range_max
102
114
  def_attr_mapping :addr_map, :remote_ip_prefix
103
115
  def_attr_mapping :sg_id, :security_group_id
116
+ end
104
117
 
105
- define_data(:account_id,
118
+ # Defines Meta Openstack object
119
+ class Openstack
120
+ define_data('credentials#account_id',
106
121
  :account => true,
107
122
  :desc => 'Openstack Username',
108
123
  :validate => /^.+/
109
124
  )
110
125
 
111
- define_data(:account_key,
126
+ define_data('credentials#account_key',
112
127
  :account => true,
113
128
  :desc => 'Openstack Password',
114
129
  :validate => /^.+/
115
130
  )
116
- define_data(:auth_uri,
131
+ define_data('credentials#auth_uri',
117
132
  :account => true,
118
133
  :explanation => "The authentication service is identified as '"\
119
134
  "identity' under your horizon UI - Project/Compute then "\
120
135
  'Access & security.',
121
136
  :desc => 'Openstack Authentication service URL. '\
122
- 'Ex: https://mycloud:5000/v2.0/tokens',
137
+ 'Ex: https://mycloud:5000/v2.0/tokens, '\
138
+ 'https://mycloud:5000/v3/auth/tokens, ...',
123
139
  :validate => %r{^http(s)?:\/\/.*\/tokens$}
124
140
  )
125
- define_data(:tenant,
141
+ define_data('credentials#tenant',
126
142
  :account => true,
127
143
  :explanation => 'The Project name is shown from your horizon UI'\
128
144
  ', on top left, close to the logo',
@@ -130,9 +146,30 @@ class Openstack
130
146
  :validate => /^.+/
131
147
  )
132
148
 
133
- define_data(:compute,
149
+ define_data(:user_domain,
150
+ :account => true,
151
+ :explanation => 'Openstack authentication (v3) requires your '\
152
+ 'user domain.',
153
+ :desc => 'User domain name',
154
+ :validate => /^.+/,
155
+ :pre_step_function => :openstack_domain_required?,
156
+ :before => 'credentials#account_id',
157
+ :after => 'credentials#auth_uri'
158
+ )
159
+
160
+ define_data(:prj_domain,
161
+ :account => true,
162
+ :desc => 'Tenant domain name',
163
+ :default_value => 'Default',
164
+ :validate => /^.+/,
165
+ :pre_step_function => :openstack_domain_required?,
166
+ :before => 'credentials#tenant',
167
+ :after => 'credentials#auth_uri'
168
+ )
169
+
170
+ define_data('services#compute',
134
171
  :account => true,
135
- :default_value => '<%= config[:network] %>',
172
+ :default_value => "<%= config['services#network'] %>",
136
173
  :explanation => 'Depending on your installation, you may need to'\
137
174
  ' provide a Region name. This information is shown under your '\
138
175
  'horizon UI - close right to the project name (top left).'\
@@ -141,19 +178,18 @@ class Openstack
141
178
  'set as OS_REGION_NAME.'\
142
179
  "\nIf there is no region shown, you can ignore it.",
143
180
  :desc => 'Openstack Compute Region (Ex: RegionOne)',
144
- :depends_on => [:account_id, :account_key, :auth_uri, :tenant],
145
181
  :list_values => {
146
182
  :query_type => :controller_call,
147
183
  :object => :services,
148
- :query_call => :get_services,
184
+ :query_call => :list_services,
149
185
  :query_params => { :list_services => [:Compute, :compute] },
150
186
  :validate => :list_strict
151
187
  }
152
188
  )
153
189
 
154
- define_data(:network,
190
+ define_data('services#network',
155
191
  :account => true,
156
- :default_value => '<%= config[:compute] %>',
192
+ :default_value => "<%= config['services#compute'] %>",
157
193
  :desc => 'Openstack Network Region (Ex: RegionOne)',
158
194
  :explanation => 'Depending on your installation, you may need to'\
159
195
  ' provide a Region name. This information is shown under your '\
@@ -162,11 +198,10 @@ class Openstack
162
198
  'API, then download the Openstack RC file. The Region name is '\
163
199
  'set as OS_REGION_NAME.'\
164
200
  "\nIf there is no region shown, you can ignore it.",
165
- :depends_on => [:account_id, :account_key, :auth_uri, :tenant],
166
201
  :list_values => {
167
202
  :query_type => :controller_call,
168
203
  :object => :services,
169
- :query_call => :get_services,
204
+ :query_call => :list_services,
170
205
  :query_params => { :list_services => [:Networking, :network] },
171
206
  :validate => :list_strict
172
207
  }
@@ -177,7 +212,7 @@ class Openstack
177
212
  attr_value_mapping :create, 'BUILD'
178
213
  attr_value_mapping :boot, :boot
179
214
  attr_value_mapping :active, 'ACTIVE'
180
- attr_value_mapping :error, 'ERROR'
215
+ attr_value_mapping :error, 'ERROR'
181
216
 
182
217
  def_attr_mapping :private_ip_address, :accessIPv4
183
218
  def_attr_mapping :public_ip_address, :accessIPv4
@@ -266,15 +301,7 @@ class OpenstackController
266
301
  def connect(sObjectType, hParams)
267
302
  case sObjectType
268
303
  when :services
269
- # Fog use URI type for auth uri: URI.parse(:auth_uri)
270
- # Convert openstack_auth_uri to type URI
271
- hParams[:hdata][:openstack_auth_uri] =
272
- URI.parse(hParams[:hdata][:openstack_auth_uri])
273
- retrieve_result =
274
- Fog::OpenStack.retrieve_tokens_v2(hParams[:hdata],
275
- hParams[:excon_opts])
276
- creds = format_retrieve_result(retrieve_result)
277
- return creds
304
+ get_services(hParams)
278
305
  when :compute_connection
279
306
  Fog::Compute.new(
280
307
  hParams[:hdata].merge(:provider => :openstack)
@@ -333,7 +360,7 @@ end
333
360
  # Following class describe how FORJ should handle Openstack Cloud objects.
334
361
  class OpenstackController
335
362
  # This function requires to return an Array of values or nil.
336
- def get_services(sObjectType, oParams)
363
+ def list_services(sObjectType, oParams)
337
364
  case sObjectType
338
365
  when :services
339
366
  # oParams[sObjectType] will provide the controller object.
@@ -367,22 +394,88 @@ class OpenstackController
367
394
  end
368
395
  return result
369
396
  else
370
- controller_error "'%s' is not a valid object for 'get_services'",
397
+ controller_error "'%s' is not a valid object for 'list_services'",
371
398
  sObjectType
372
399
  end
373
400
  end
374
401
 
375
- def format_retrieve_result(retrieve_result)
376
- {
377
- :auth_token => retrieve_result['access']['token']['id'],
378
- :expires => retrieve_result['access']['token']['expires'],
379
- :service_catalog =>
380
- get_service_catalog(retrieve_result['access']['serviceCatalog']),
381
- :endpoint_url => nil,
382
- :cdn_endpoint_url => nil
383
- }
402
+ # function to return a well formatted data for list of services
403
+ def get_services(hParams)
404
+ # Fog use URI type for auth uri: URI.parse('credentials#auth_uri')
405
+ # Convert openstack_auth_uri to type URI
406
+ openstack_auth_url = hParams[:hdata][:openstack_auth_url]
407
+ hParams[:hdata][:openstack_auth_uri] = URI.parse(openstack_auth_url)
408
+
409
+ case openstack_auth_url
410
+ when /v1(\.\d+)?/
411
+ version = :v1
412
+ body = Fog::OpenStack.retrieve_tokens_v1(hParams[:hdata],
413
+ hParams[:excon_opts])
414
+ when /v2(\.\d+)?/
415
+ version = :v2
416
+ body = Fog::OpenStack.retrieve_tokens_v2(hParams[:hdata],
417
+ hParams[:excon_opts])
418
+ when /v3(\.\d+)?/
419
+ version = :v3
420
+ body = Fog::OpenStack.retrieve_tokens_v3(hParams[:hdata],
421
+ hParams[:excon_opts])
422
+ else
423
+ version = :v2
424
+ body = Fog::OpenStack.retrieve_tokens_v2(hParams[:hdata],
425
+ hParams[:excon_opts])
426
+ end
427
+ build_result(version, body)
428
+ end
429
+ # Function to provide a wel formatted standard data, usable by openstack
430
+ # provider
431
+ #
432
+ # * *args*:
433
+ # - version: :v1, :v2 or :v3. Based on openstack authentication version
434
+ # - body: result of Internal Fog::OpenStack.retrieve_tokens_v?
435
+ # * *returns*:
436
+ # - Hash: Requires at least:
437
+ # - :service_catalog : Hash of services available.
438
+ #
439
+ def build_result(version, body)
440
+ case version
441
+ when :v1 # Not supported
442
+ { :service_catalog => {} }
443
+ when :v2 #
444
+ {
445
+ :auth_token => body['access']['token']['id'],
446
+ :expires => body['access']['token']['expires'],
447
+ :service_catalog =>
448
+ get_service_catalog(body['access']['serviceCatalog']),
449
+ :endpoint_url => nil,
450
+ :cdn_endpoint_url => nil
451
+ }
452
+ when :v3 # body is an Array: 0 is the body, and 1 is the header
453
+ {
454
+ :auth_token => body[1]['X-Subject-Token'],
455
+ :expires => body[0]['token']['expires'],
456
+ :service_catalog =>
457
+ get_service_catalog(body[0]['token']['catalog']),
458
+ :endpoint_url => nil,
459
+ :cdn_endpoint_url => nil
460
+ }
461
+ end
384
462
  end
385
463
 
464
+ # Build service catalog at the following format:
465
+ #
466
+ # :<type>:
467
+ # 'name': <name>
468
+ # :<region> : <url>
469
+ #
470
+ # where:
471
+ # - type : Can be :identity, :orchestration, :volume, ...
472
+ # - name : Is the name of the service like 'swift', 'heat', 'cinder', ...
473
+ # - region: Is the region name. Can be any string like 'regionOne'
474
+ # - url : is the exposed url of that service
475
+ # like https://swift.company.com/v1/HOSP_...
476
+ #
477
+ # It supports V2/V3 service auth response.
478
+ #
386
479
  def get_service_catalog(body)
387
480
  fail 'Unable to parse service catalog.' unless body
388
481
  service_catalog = {}
@@ -392,19 +485,30 @@ class OpenstackController
392
485
  type = type.to_sym
393
486
  next if s['endpoints'].nil?
394
487
  service_catalog[type] = {}
488
+ # V2/V3 auth output
395
489
  service_catalog[type]['name'] = s['name']
396
- service_catalog = parse_service_catalog_endpoint(s, type, service_catalog)
490
+ parse_service_catalog_endpoint(s, type, service_catalog)
397
491
  end
398
492
  service_catalog
399
493
  end
400
494
 
495
+ # function which read a list of endpoints of a service to extract the url
496
+ #
497
+ # v2: Get 'endpoints'[]/'publicURL'
498
+ # v3: Get 'endpoints'[]/'url' if 'endpoints'[]/'interface' == 'public'
401
499
  def parse_service_catalog_endpoint(s, type, service_catalog)
402
500
  s['endpoints'].each do |ep|
403
501
  next if ep['region'].nil?
404
- next if ep['publicURL'].nil?
405
- next if ep['publicURL'].empty?
502
+
503
+ if ep['interface'] == 'public' # V3 auth output
504
+ service_catalog[type][ep['region'].to_sym] = ep['url']
505
+ break
506
+ end
507
+
508
+ next if ep['publicURL'].nil? || ep['publicURL'].empty?
509
+ # V2 auth output
406
510
  service_catalog[type][ep['region'].to_sym] = ep['publicURL']
511
+ break
407
512
  end
408
- service_catalog
409
513
  end
410
514
  end
@@ -78,13 +78,13 @@ class OpenstackController
78
78
 
79
79
  def create_keypairs(hParams)
80
80
  required?(hParams, :compute_connection)
81
- required?(hParams, :keypair_name)
81
+ required?(hParams, 'credentials#keypair_name')
82
82
  required?(hParams, :public_key)
83
83
 
84
84
  # API:
85
85
  # https://github.com/fog/fog/blob/master/lib/fog/openstack/docs/compute.md
86
86
  service = hParams[:compute_connection]
87
- service.key_pairs.create(:name => hParams[:keypair_name],
87
+ service.key_pairs.create(:name => hParams['credentials#keypair_name'],
88
88
  :public_key => hParams[:public_key])
89
89
  end
90
90
 
@@ -126,7 +126,11 @@ class OpenstackController
126
126
  while server.state != 'ACTIVE'
127
127
  sleep(5)
128
128
  server = compute_connect.servers.get(server.id)
129
- return if server.state == 'ERROR'
129
+
130
+ if server.state == 'Error'
131
+ controller_error('Unable to assign a Public IP to a server '\
132
+ "in error '%s'", server.name)
133
+ end
130
134
  end
131
135
 
132
136
  addresses = compute_connect.addresses.all
@@ -17,10 +17,15 @@
17
17
  # Specific openstack process added to the application process.
18
18
  class OpenstackProcess
19
19
  def openstack_get_tenant(sObjectType, hParams)
20
- tenant_name = hParams[:tenant]
20
+ tenant_name = hParams['credentials#tenant']
21
21
  query = { :name => tenant_name }
22
22
  PrcLib.state("searching for tenant '%s'", tenant_name)
23
23
  list = query_single(sObjectType, query, tenant_name)
24
24
  return list[0] if list.length > 0
25
25
  end
26
+
27
+ def openstack_domain_required?(_data)
28
+ return true if config[:auth_uri].match(%r{/v3/})
29
+ false
30
+ end
26
31
  end
data/lorj_cloud.gemspec CHANGED
@@ -8,6 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = LorjCloud::VERSION
9
9
  spec.authors = ["Christophe Larsonneur"]
10
10
  spec.email = ["clarsonneur@gmail.com"]
11
+ spec.date = LorjCloud::DATE
11
12
 
12
13
  spec.summary = %q{Lorj cloud process.}
13
14
  spec.description = %q{simplify cloud management, thanks to predefined process to manage cloud obj and make it work. }
@@ -25,8 +26,7 @@ Gem::Specification.new do |spec|
25
26
  spec.add_development_dependency "bundler", "~> 1.9"
26
27
  spec.add_development_dependency "rake", "~> 10.0"
27
28
 
28
- spec.add_runtime_dependency "lorj", "~> 1.0.10"
29
- spec.add_runtime_dependency "fog", "~> 1.26.0"
29
+ spec.add_runtime_dependency "lorj", "~> 1.0.11"
30
+ spec.add_runtime_dependency "fog", "~> 1.30.0"
30
31
  spec.add_development_dependency "rspec", "~> 3.1.0"
31
- spec.add_development_dependency "rubocop", "~> 0.30.0"
32
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lorj_cloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christophe Larsonneur
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-04-17 00:00:00.000000000 Z
11
+ date: 2015-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,28 +44,28 @@ dependencies:
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 1.0.10
47
+ version: 1.0.11
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 1.0.10
54
+ version: 1.0.11
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: fog
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 1.26.0
61
+ version: 1.30.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: 1.26.0
68
+ version: 1.30.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -80,20 +80,6 @@ dependencies:
80
80
  - - ~>
81
81
  - !ruby/object:Gem::Version
82
82
  version: 3.1.0
83
- - !ruby/object:Gem::Dependency
84
- name: rubocop
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ~>
88
- - !ruby/object:Gem::Version
89
- version: 0.30.0
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ~>
95
- - !ruby/object:Gem::Version
96
- version: 0.30.0
97
83
  description: 'simplify cloud management, thanks to predefined process to manage cloud
98
84
  obj and make it work. '
99
85
  email:
@@ -110,11 +96,12 @@ files:
110
96
  - README.md
111
97
  - Rakefile
112
98
  - bin/console
99
+ - bin/lorj_cloud
113
100
  - bin/setup
114
- - lib/data.yaml
115
- - lib/defaults.yaml
116
101
  - lib/lorj_cloud.rb
117
102
  - lib/lorj_cloud/version.rb
103
+ - lib/process/cloud/data.yaml
104
+ - lib/process/cloud/defaults.yaml
118
105
  - lib/process/cloud/process/common.rb
119
106
  - lib/process/cloud/process/connection.rb
120
107
  - lib/process/cloud/process/external_network.rb
@@ -131,22 +118,22 @@ files:
131
118
  - lib/process/cloud/process/server.rb
132
119
  - lib/process/cloud/process/server_log.rb
133
120
  - lib/process/cloud/process/subnetwork.rb
121
+ - lib/process/cloud/providers/hpcloud/compute.rb
122
+ - lib/process/cloud/providers/hpcloud/hpcloud.rb
123
+ - lib/process/cloud/providers/hpcloud/network.rb
124
+ - lib/process/cloud/providers/hpcloud/security_groups.rb
125
+ - lib/process/cloud/providers/mock/mock.rb
126
+ - lib/process/cloud/providers/openstack/openstack.rb
127
+ - lib/process/cloud/providers/openstack/openstack_create.rb
128
+ - lib/process/cloud/providers/openstack/openstack_delete.rb
129
+ - lib/process/cloud/providers/openstack/openstack_get.rb
130
+ - lib/process/cloud/providers/openstack/openstack_process.rb
131
+ - lib/process/cloud/providers/openstack/openstack_query.rb
132
+ - lib/process/cloud/providers/openstack/openstack_update.rb
133
+ - lib/process/cloud/providers/templates/compute.rb
134
+ - lib/process/cloud/providers/templates/mycloud.rb
135
+ - lib/process/cloud/providers/templates/network.rb
134
136
  - lib/process/cloud_process.rb
135
- - lib/providers/hpcloud/compute.rb
136
- - lib/providers/hpcloud/hpcloud.rb
137
- - lib/providers/hpcloud/network.rb
138
- - lib/providers/hpcloud/security_groups.rb
139
- - lib/providers/mock/mock.rb
140
- - lib/providers/openstack/openstack.rb
141
- - lib/providers/openstack/openstack_create.rb
142
- - lib/providers/openstack/openstack_delete.rb
143
- - lib/providers/openstack/openstack_get.rb
144
- - lib/providers/openstack/openstack_process.rb
145
- - lib/providers/openstack/openstack_query.rb
146
- - lib/providers/openstack/openstack_update.rb
147
- - lib/providers/templates/compute.rb
148
- - lib/providers/templates/mycloud.rb
149
- - lib/providers/templates/network.rb
150
137
  - lorj_cloud.gemspec
151
138
  homepage: https://github.com/forj-oss/lorj_cloud
152
139
  licenses: []
@@ -172,4 +159,3 @@ signing_key:
172
159
  specification_version: 4
173
160
  summary: Lorj cloud process.
174
161
  test_files: []
175
- has_rdoc:
data/lib/data.yaml DELETED
File without changes
data/lib/defaults.yaml DELETED
File without changes