lorj 1.0.7 → 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cbe0901bbfa07d90519c83339a77a0e283e205d3
4
- data.tar.gz: 813357cfb6091233c16d726148f31745a33bd358
3
+ metadata.gz: 7b230339c53324a35d70056924d04caf83361556
4
+ data.tar.gz: 7e40d7041f4999a803f625a850067199ed1296ab
5
5
  SHA512:
6
- metadata.gz: dcd5cf66499c650e34f0551c43754fb162a6b6dc63dcd0aabec518bfef20d3649b3190ba6b561ef0de70d51b52be1ea6d679d97192496a92318ebc47fa90b66d
7
- data.tar.gz: ceb1b16973daa3daaf3093f6093c5aa28d6f4e20639e2afa1133da21d931d4e3acbfd6bd7f6bd6daba2fcce068bbb7b42bad1e6fcc6f6a24f3e049503f495936
6
+ metadata.gz: 3c4117298308f75daf06230285ec3971e555315c876007f548a3a3207a201655f030f61c52e87ffcb18a9ac10308b9048ee3d1128faff26551da995b573454c5
7
+ data.tar.gz: b945fafa30d2f087c51a008ec3750d5f70fdb7e3bf05e5bbd161a4c073ff69fd466745c0324822d5be03be99094455ba9cf36942fc4d9ca399842a213bce1d70
@@ -89,6 +89,15 @@ module Lorj
89
89
  # - :validate: Regular expression to validate end user input
90
90
  # during setup.
91
91
  # - :list_values: Additional options to get a list of possible values.
92
+ # - :post_step_function Function to call after data asked to the user.
93
+ # This function must return a boolean:
94
+ # - true : The data is accepted and setup will go further.
95
+ # - false: The data is NOT accepted and setup will ask the data again.
96
+ # setup will loop until the function is happy with (return true)
97
+ # - :pre_step_function Function to call before data is asked to the user.
98
+ # This function must return a boolean:
99
+ # - true : setup will ask the data.
100
+ # - false: setup will skip asking the data.
92
101
  #
93
102
  # For details or more options, see core_model.rb
94
103
  #
@@ -159,7 +159,7 @@ module Lorj
159
159
  default = result[:default_value] unless result[:default_value].nil?
160
160
 
161
161
  begin
162
- default = erb(default)
162
+ default = erb(default) unless default.nil?
163
163
  rescue => e
164
164
  PrcLib.warning("ERB error with :%s/:default_value '%s'.\n%s",
165
165
  data, result[:default_value], e.message)
@@ -217,13 +217,13 @@ module Lorj
217
217
  options = _get_meta_data(data)
218
218
  options = {} if options.nil?
219
219
 
220
- data_desc = _setup_display_data(data, options)
221
-
222
220
  if options[:pre_step_function]
223
221
  proc = options[:pre_step_function]
224
222
  next unless @process.method(proc).call(data)
225
223
  end
226
224
 
225
+ data_desc = _setup_display_data(data, options)
226
+
227
227
  _setup_ask_data(data_desc, data, options)
228
228
  end
229
229
  end
@@ -22,7 +22,7 @@
22
22
  class CloudProcess
23
23
  # KeyPair Create Process Handler
24
24
  # The process implemented is:
25
- # * Check local SSH keypairs
25
+ # * Check local SSH keypairs with given ':keypair_name'
26
26
  # * Check remote keypair existence
27
27
  # * Compare and warn if needed.
28
28
  # * Import public key found if missing remotely and name it.
@@ -40,56 +40,120 @@ class CloudProcess
40
40
  #
41
41
  def forj_get_or_create_keypair(sCloudObj, hParams)
42
42
  keypair_name = hParams[:keypair_name]
43
- # setup has configured and copied the appropriate key to forj keypairs.
44
-
45
- loc_kpair = keypair_detect(keypair_name,
46
- File.expand_path(hParams[:keypair_path]))
47
-
48
- private_key_file = File.join(loc_kpair[:keypair_path],
49
- loc_kpair[:private_key_name])
50
- public_key_file = File.join(loc_kpair[:keypair_path],
51
- loc_kpair[:public_key_name])
52
-
53
- PrcLib.info("Found openssh private key file '%s'.",
54
- private_key_file) if loc_kpair[:private_key_exist?]
55
- PrcLib.info("Found openssh public key file '%s'.",
56
- public_key_file) if loc_kpair[:public_key_exist?]
57
-
58
43
  PrcLib.state("Searching for keypair '%s'", keypair_name)
59
44
 
60
- keypairs = forj_query_keypair(sCloudObj,
61
- { :name => keypair_name }, hParams)
62
-
63
- if keypairs.length == 0
45
+ keypair = forj_get_keypair(sCloudObj, keypair_name, hParams)
46
+ if keypair.empty?
47
+ loc_kpair = keypair_detect(keypair_name, hParams[:keypair_path],
48
+ hParams[:keypair_base])
64
49
  keypair = keypair_import(hParams, loc_kpair)
65
50
  else
66
- keypair = keypairs[0]
67
- keypair[:coherent] = coherent_keypair?(loc_kpair, keypair)
68
- # Adding information about key files.
69
- end
70
- if keypair[:coherent]
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]
51
+ keypair_display(keypair)
74
52
  end
75
53
  keypair
76
54
  end
77
55
 
78
- def forj_query_keypair(sCloudObj, sQuery, hParams)
79
- key_name = hParams[:keypair_name]
56
+ # Query cloud keypairs and check coherence with local files
57
+ # of same name in forj files located by :keypair_path
58
+ def forj_query_keypairs(sCloudObj, sQuery, hParams)
59
+ keypair_path = File.expand_path(hParams[:keypair_path])
60
+ keypair_base = File.expand_path(hParams[:keypair_base])
61
+
80
62
  ssl_error_obj = SSLErrorMgt.new
81
63
  begin
82
- # list = controller_query(sCloudObj, sQuery)
83
- # query_single(sCloudObj, list, sQuery, key_name)
84
- query_single(sCloudObj, sQuery, key_name)
64
+ keypairs = controller_query(sCloudObj, sQuery)
85
65
  rescue => e
86
66
  retry unless ssl_error_obj.error_detected(e.message, e.backtrace, e)
87
67
  end
68
+ # Looping on keypairs to identify if they have a valid local ssh key.
69
+ keypairs.each do |keypair|
70
+ loc_kpair = keypair_detect(keypair_name, keypair_path, keypair_base)
71
+ keypair_files_detected(keypair, loc_kpair)
72
+ end
73
+ keypairs
74
+ end
75
+
76
+ # Get cloud keypair and check coherence with local files
77
+ # of same name in forj files
78
+ def forj_get_keypair(sCloudObj, keypair_name, hParams)
79
+ ssl_error_obj = SSLErrorMgt.new
80
+ begin
81
+ keypair = controller_get(sCloudObj, keypair_name)
82
+ rescue => e
83
+ retry unless ssl_error_obj.error_detected(e.message, e.backtrace, e)
84
+ end
85
+
86
+ keypair_path = File.expand_path(hParams[:keypair_path])
87
+ loc_kpair = keypair_detect(keypair_name, keypair_path, keypair_name)
88
+ keypair_files_detected(keypair, loc_kpair) unless keypair.empty?
89
+ keypair
88
90
  end
89
91
  end
90
92
 
93
+ # ************************************ keypairs Object
94
+ # Identify keypairs
95
+ class Lorj::BaseDefinition
96
+ define_obj(:keypairs,
97
+
98
+ :create_e => :forj_get_or_create_keypair,
99
+ :query_e => :forj_query_keypairs,
100
+ :get_e => :forj_get_keypair
101
+ # :delete_e => :forj_delete_keypair
102
+ )
103
+
104
+ obj_needs :CloudObject, :compute_connection
105
+ obj_needs :data, :keypair_name, :for => [:create_e]
106
+ obj_needs :data, :keypair_path
107
+ obj_needs :data, :keypair_base
108
+
109
+ # By default optional. But required by the import case if needed.
110
+ obj_needs_optional
111
+ obj_needs :data, :public_key, :for => [:create_e]
112
+
113
+ def_attribute :public_key
114
+ end
115
+
91
116
  # Keypair management: Internal process functions
92
117
  class CloudProcess
118
+ # Function to display information about keypair object found.
119
+ #
120
+ def keypair_display(keypair)
121
+ PrcLib.info("Found keypair '%s'.", keypair[:name])
122
+
123
+ private_key_file = File.join(keypair[:keypair_path],
124
+ keypair[:private_key_name])
125
+ public_key_file = File.join(keypair[:keypair_path],
126
+ keypair[:public_key_name])
127
+
128
+ PrcLib.info("Found openssh private key file '%s'.",
129
+ private_key_file) if keypair[:private_key_exist?]
130
+ PrcLib.info("Found openssh public key file '%s'.",
131
+ public_key_file) if keypair[:public_key_exist?]
132
+ if keypair[:coherent]
133
+ PrcLib.info("keypair '%s' local files are coherent with keypair in "\
134
+ 'your cloud service. You will be able to use your local '\
135
+ 'keys to connect to any box configured with this keypair '\
136
+ 'name, over SSH.', keypair[:name])
137
+ else
138
+ PrcLib.warning("Your local public key file '%s' is incoherent with "\
139
+ "public key attached to the keypair '%s' in your cloud."\
140
+ " You won't be able to access your box with this keypair."\
141
+ "\nPublic key found in the cloud:\n%s",
142
+ public_key_file, keypair[:name], keypair[:public_key])
143
+ end
144
+ end
145
+
146
+ # Function to update a keypair object with ssh files found in :keypair_path
147
+ #
148
+ def keypair_files_detected(keypair, loc_kpair)
149
+ keypair[:private_key_exist?] = loc_kpair[:private_key_exist?]
150
+ keypair[:public_key_exist?] = loc_kpair[:public_key_exist?]
151
+ keypair[:private_key_name] = loc_kpair[:private_key_name]
152
+ keypair[:public_key_name] = loc_kpair[:public_key_name]
153
+ keypair[:keypair_path] = loc_kpair[:keypair_path]
154
+ keypair[:coherent] = coherent_keypair?(loc_kpair, keypair)
155
+ end
156
+
93
157
  def keypair_import(hParams, loc_kpair)
94
158
  PrcLib.fatal(1, "Unable to import keypair '%s'. "\
95
159
  'Public key file is not found. '\
@@ -100,22 +164,20 @@ class CloudProcess
100
164
  loc_kpair[:public_key_name])
101
165
 
102
166
  begin
103
- config[:public_key] = File.read(public_key_file)
167
+ public_key = File.read(public_key_file)
104
168
  rescue => e
105
169
  PrcLib.fatal(1, "Unable to import keypair '%s'. '%s' is "\
106
170
  "unreadable.\n%s", hParams[:keypair_name],
107
171
  loc_kpair[:public_key_file],
108
172
  e.message)
109
173
  end
110
- keypair = create_keypair(:keypairs, hParams)
174
+ keypair = create_keypair(:keypairs, :public_key => public_key)
111
175
 
112
176
  return nil if keypair.nil?
113
177
 
114
- if !loc_kpair[:private_key_exist?]
115
- keypair[:coherent] = false
116
- else
117
- keypair[:coherent] = true
118
- end
178
+ # Adding information about SSH key files.
179
+ keypair_files_detected(keypair, loc_kpair)
180
+
119
181
  keypair
120
182
  end
121
183
 
@@ -124,7 +186,7 @@ class CloudProcess
124
186
  PrcLib.state("Importing keypair '%s'", key_name)
125
187
  ssl_error_obj = SSLErrorMgt.new
126
188
  begin
127
- keypair = controller_create(sCloudObj)
189
+ keypair = controller_create(sCloudObj, hParams)
128
190
  PrcLib.info("Keypair '%s' imported.", keypair[:name])
129
191
  rescue StandardError => e
130
192
  retry unless ssl_error_obj.error_detected(e.message, e.backtrace, e)
@@ -136,9 +198,18 @@ class CloudProcess
136
198
  # Build keypair data information structure with files found in
137
199
  # local filesystem. Take care of priv with or without .pem
138
200
  # and pubkey with pub.
139
- def keypair_detect(keypair_name, key_fullpath)
140
- key_basename = File.basename(key_fullpath)
141
- key_path = File.expand_path(File.dirname(key_fullpath))
201
+ # :keypair_path data settings is changing to become just a path to
202
+ # the keypair files, the base keypair.
203
+ # Which will introduce a :keypair_base in the setup.
204
+ def keypair_detect(keypair_name, key_fullpath, key_basename = nil)
205
+ # When uses key_basename, we switch to the new model
206
+ # using :keypair_path and :keypair_base in setup
207
+ if key_basename.nil?
208
+ key_basename = File.basename(key_fullpath)
209
+ key_path = File.expand_path(File.dirname(key_fullpath))
210
+ else
211
+ key_path = File.expand_path(key_fullpath)
212
+ end
142
213
 
143
214
  obj_match = key_basename.match(/^(.*?)(\.pem|\.pub)?$/)
144
215
  key_basename = obj_match[1]
@@ -184,15 +255,6 @@ class CloudProcess
184
255
  [found_ext, files]
185
256
  end
186
257
 
187
- def forj_get_keypair(sCloudObj, sName, _hParams)
188
- ssl_error_obj = SSLErrorMgt.new
189
- begin
190
- controller_get(sCloudObj, sName)
191
- rescue => e
192
- retry unless ssl_error_obj.error_detected(e.message, e.backtrace, e)
193
- end
194
- end
195
-
196
258
  def get_keypairs_path(hParams, hKeys)
197
259
  keypair_name = hParams[:keypair_name]
198
260
 
@@ -225,8 +287,6 @@ class CloudProcess
225
287
  # - coherent : Boolean. True if same public key.
226
288
  def coherent_keypair?(loc_kpair, keypair)
227
289
  # send keypairs by parameter
228
-
229
- keypair_name = loc_kpair[:keypair_name]
230
290
  is_coherent = false
231
291
 
232
292
  pub_keypair = keypair[:public_key]
@@ -241,17 +301,7 @@ class CloudProcess
241
301
  loc_kpair[:public_key_file], e.message)
242
302
  else
243
303
  if loc_pubkey.split(' ')[1].strip == pub_keypair.split(' ')[1].strip
244
- PrcLib.info("keypair '%s' local files are coherent with keypair in "\
245
- 'your cloud service. You will be able to connect to '\
246
- 'your box over SSH.', keypair_name)
247
304
  is_coherent = true
248
- else
249
- PrcLib.warning("Your local keypair file '%s' are incoherent with "\
250
- "public key '%s' found in your cloud. You won't be "\
251
- "able to access your box with this keypair.\nPublic "\
252
- "key found in the cloud:\n%s",
253
- loc_kpair[:public_key_file], keypair_name,
254
- keypair[:public_key])
255
305
  end
256
306
  end
257
307
  else
@@ -261,24 +311,3 @@ class CloudProcess
261
311
  is_coherent
262
312
  end
263
313
  end
264
-
265
- # ************************************ keypairs Object
266
- # Identify keypairs
267
- class Lorj::BaseDefinition
268
- define_obj(:keypairs,
269
-
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
- )
275
-
276
- obj_needs :CloudObject, :compute_connection
277
- obj_needs :data, :keypair_name, :for => [:create_e]
278
- obj_needs :data, :keypair_path, :for => [:create_e]
279
-
280
- obj_needs_optional
281
- obj_needs :data, :public_key, :for => [:create_e]
282
-
283
- def_attribute :public_key
284
- end
@@ -34,6 +34,7 @@ class CloudProcess
34
34
  end
35
35
  end
36
36
 
37
+ # Function to query the list of addresses for one server
37
38
  def forj_query_public_address(sCloudObj, sQuery, hParams)
38
39
  server_name = hParams[:server, :name]
39
40
  ssl_error_obj = SSLErrorMgt.new
@@ -54,6 +55,7 @@ class CloudProcess
54
55
  end
55
56
  end
56
57
 
58
+ # Function to get the IP address
57
59
  def forj_get_public_address(sCloudObj, sId, _hParams)
58
60
  ssl_error_obj = SSLErrorMgt.new
59
61
  begin
data/lib/lorj/version.rb CHANGED
@@ -16,5 +16,5 @@
16
16
 
17
17
  # Lorj version
18
18
  module Lorj
19
- VERSION = '1.0.7'
19
+ VERSION = '1.0.8'
20
20
  end
data/lib/lorj_account.rb CHANGED
@@ -161,7 +161,9 @@ module Lorj
161
161
  # - +options+ : Options for get:
162
162
  # - +:section+ : Get will use this section name instead of searching it.
163
163
  # - +:names+ : array of layers name to exclusively get data.
164
+ # - +:name+ : layer name to exclusively get data.
164
165
  # - +:indexes+ : array of layers index to exclusively get data.
166
+ # - +:index+ : layer index to exclusively get data.
165
167
  # If neither :name or :index is set, get will search
166
168
  # data on all predefined layers, first found.
167
169
  # * *Returns* :
@@ -175,9 +177,9 @@ module Lorj
175
177
  section = options[:section]
176
178
  section = Lorj.data.first_section(key) if section.nil?
177
179
 
178
- options = { :keys => [key], :section => section }
180
+ options = options.merge(:keys => [key], :section => section)
179
181
 
180
- indexes = _identify_array_indexes(options, exclusive?(key, section))
182
+ indexes = _identify_indexes(options, exclusive?(key, section))
181
183
  names = []
182
184
  indexes.each { |index| names << @config_layers[index][:name] }
183
185
 
@@ -205,11 +207,13 @@ module Lorj
205
207
  # - +options+ : possible options:
206
208
  # - +:section+ : Force to use a specific section name.
207
209
  # - +:names+ : array of layers name to exclusively get data.
210
+ # - +:name+ : layer name to exclusively get data.
208
211
  # - +:indexes+ : array of layers index to exclusively get data.
212
+ # - +:index+ : layer index to exclusively get data.
209
213
  # If neither :name or :index is set, get will search data on all
210
214
  # predefined layers, first found, first listed.
211
215
  # * *Returns* :
212
- # - key value.
216
+ # - config name found.
213
217
  # * *Raises* :
214
218
  # Nothing
215
219
  def where?(key, options = {})
@@ -217,9 +221,9 @@ module Lorj
217
221
  options = {} unless options.is_a?(Hash)
218
222
 
219
223
  section = options[:section]
220
- section = Lorj.defaults.get_meta_section(key) if section.nil?
224
+ section = Lorj.data.first_section(key) if section.nil?
221
225
 
222
- indexes = _identify_array_indexes(options, exclusive?(key, section))
226
+ indexes = _identify_indexes(options, exclusive?(key, section))
223
227
 
224
228
  names = []
225
229
  indexes.each { |index| names << @config_layers[index][:name] }
@@ -242,17 +246,20 @@ module Lorj
242
246
  # - +options+ : possible options:
243
247
  # - +:section+ : Force to use a specific section name.
244
248
  # - +:names+ : array of layers name to exclusively get data.
249
+ # - +:name+ : layer name to exclusively get data.
245
250
  # - +:indexes+ : array of layers index to exclusively get data.
251
+ # - +:index+ : layer index to exclusively get data.
246
252
  # If neither :name or :index is set, get will search data on all
247
253
  # predefined layers, first found.
248
254
  #
249
255
  # * *Returns* :
250
- # - 'runtime' : if found in runtime.
251
- # - '<AccountName>' : if found in the Account data structure.
252
- # - 'local' : if found in the local configuration file.
253
- # Usually ~/.forj/config.yaml
254
- # - 'default' : if found in the Application default
255
- # (File 'defaults.yaml') (class Default)
256
+ # - true : if found in runtime.
257
+ # - true : if found in the Account data structure.
258
+ # - true : if found in the local configuration file.
259
+ # Usually ~/.forj/config.yaml
260
+ # - true : if found in the Application default
261
+ # (File 'defaults.yaml') (class Default)
262
+ # - false otherwise.
256
263
  # * *Raises* :
257
264
  # Nothing
258
265
  def exist?(key, options = nil)
@@ -261,9 +268,9 @@ module Lorj
261
268
 
262
269
  section = options[:section]
263
270
  section = Lorj.data.first_section(key) if section.nil?
264
- options = { :keys => [key], :section => section }
271
+ options = options.merge(:keys => [key], :section => section)
265
272
 
266
- indexes = _identify_array_indexes(options, exclusive?(key, section))
273
+ indexes = _identify_indexes(options, exclusive?(key, section))
267
274
 
268
275
  names = []
269
276
  indexes.each { |index| names << @config_layers[index][:name] }
@@ -550,6 +557,8 @@ module Lorj
550
557
  indexes = exclusive_indexes(account_exclusive)
551
558
  indexes = [index] if !index.nil? && indexes.include?(index)
552
559
 
560
+ return _identify_array_indexes(options, account_exclusive) if index.nil?
561
+
553
562
  options[:indexes] = indexes
554
563
  indexes
555
564
  end
@@ -424,7 +424,7 @@ module PRC
424
424
  return nil if keys.length == 0 || keys[0].nil? || config_layers[0].nil?
425
425
 
426
426
  config_layers.each_index do |index|
427
- config = @config_layers[index][:config]
427
+ config = config_layers[index][:config]
428
428
 
429
429
  data_options = options.clone
430
430
  data_options.delete_if do |key|
@@ -57,6 +57,10 @@ describe 'class: PRC::CoreConfig,' do
57
57
  initialize_layers(layers)
58
58
  end
59
59
 
60
+ def iexist?(options)
61
+ p_exist?(options)
62
+ end
63
+
60
64
  def set(options)
61
65
  p_set(options)
62
66
  end
@@ -77,6 +81,26 @@ describe 'class: PRC::CoreConfig,' do
77
81
  expect(@config.exist?(:test)).to equal(true)
78
82
  end
79
83
 
84
+ it 'config.p_exist?(:keys => [:test]) returns true' do
85
+ expect(@config.iexist?(:keys => [:test])).to equal(true)
86
+ end
87
+
88
+ it 'config.p_exist?(:keys => [:test], :name => "runtime") returns false' do
89
+ expect(@config.iexist?(:keys => [:test],
90
+ :name => 'runtime')).to equal(false)
91
+ end
92
+
93
+ it 'config.p_exist?(:keys => [:test], :names => ["runtime"])'\
94
+ ' returns false' do
95
+ expect(@config.iexist?(:keys => [:test],
96
+ :names => ['runtime'])).to equal(false)
97
+ end
98
+
99
+ it 'config.p_exist?(:keys => [:test], :names => ["local"]) returns true' do
100
+ expect(@config.iexist?(:keys => [:test],
101
+ :names => ['local'])).to equal(true)
102
+ end
103
+
80
104
  it 'config.exist?(:test2, :test) returns true' do
81
105
  expect(@config.exist?(:test2, :test)).to equal(true)
82
106
  end
@@ -172,11 +172,35 @@ describe 'class: Lorj::Account,' do
172
172
  expect(@account.where?(:keypair_name)).to eq(%w(account local default))
173
173
  end
174
174
 
175
+ it "account.set(:keypair_name, 'nova_test3') return "\
176
+ " 'nova_test3'" do
177
+ expect(@account.set(:keypair_name, 'nova_test3')).to eq('nova_test3')
178
+ expect(@account.where?(:keypair_name)).to eq(%w(runtime account
179
+ local default))
180
+ end
181
+
175
182
  it "account.get(:keypair_name, :name => 'account') return 'nova_test2'" do
176
- expect(@account.get(:keypair_name,
183
+ expect(@account.get(:keypair_name, nil,
177
184
  :name => 'account')).to eq('nova_test2')
178
185
  end
179
186
 
187
+ it "account.get(:keypair_name, :names => ['account']) return "\
188
+ "'nova_test2'" do
189
+ expect(@account.get(:keypair_name, nil,
190
+ :names => ['account'])).to eq('nova_test2')
191
+ end
192
+
193
+ it "account.get(:keypair_name, :name => 'runtime') return 'nova_test3'" do
194
+ expect(@account.get(:keypair_name, nil,
195
+ :name => 'runtime')).to eq('nova_test3')
196
+ end
197
+
198
+ it "account.get(:keypair_name, :names => ['runtime']) return "\
199
+ "'nova_test3'" do
200
+ expect(@account.get(:keypair_name, nil,
201
+ :names => ['runtime'])).to eq('nova_test3')
202
+ end
203
+
180
204
  it 'account.ac_save return true' do
181
205
  expect(@account.ac_save).to equal(true)
182
206
  end
@@ -193,7 +217,7 @@ describe 'class: Lorj::Account,' do
193
217
 
194
218
  it "account.get(:keypair_name, :name => 'account') return "\
195
219
  "saved 'nova_test2'" do
196
- expect(@account.get(:keypair_name,
220
+ expect(@account.get(:keypair_name, nil,
197
221
  :name => 'account')).to eq('nova_test2')
198
222
  end
199
223
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lorj
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 1.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - forj team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-24 00:00:00.000000000 Z
11
+ date: 2015-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler