kitchen-vra 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d970c0fc31cd5c31e9a8f58730685566ddd6966e
4
- data.tar.gz: 37afb04eae13147372daab1b369384b488eb8501
3
+ metadata.gz: b6cc3c25b21a83eac8d374f6a9210d7ceefc7043
4
+ data.tar.gz: b17fd352f4cd7f095d87dcecd24f391e58abb1fd
5
5
  SHA512:
6
- metadata.gz: f3e138de6690364ba22d75ec989a64e50c7544dc6c62333369c55c61f0adc8928679761a770c06c85a72e9dc68a6b2a967cd37c1af9777b49be01c721548efa4
7
- data.tar.gz: e5d69ab680453bbcdff3ceb63f8cb9c06dde78b851afb3a87549dd153781d1377980d230dc14671366f2a6e9ae0f74a42c2e1ecd62c25e8fedf1b7ba2606c997
6
+ metadata.gz: e6b8a50b00f03eda8fcc38dad7355dcaa87b3728d0b4876b5f324ce52c3b484c8a568d7055fa67751894a32dade67896cbe4ebe659d24f95d8bc9ba27cc15831
7
+ data.tar.gz: 1a7fc733c6d13253d0a93affa3ba6fdacd262011704eed4467d9f6fb2b89dfc397999b73cf292a60d413e9461d9f7ea985b1d7e92ce015c6e011a7c7c5df6f61
data/README.md CHANGED
@@ -97,7 +97,7 @@ platforms:
97
97
 
98
98
  Author:: Chef Partner Engineering (<partnereng@chef.io>)
99
99
 
100
- Copyright:: Copyright (c) 2015 Chef Software, Inc.
100
+ Copyright:: Copyright (c) 2015-2017 Chef Software, Inc.
101
101
 
102
102
  License:: Apache License, Version 2.0
103
103
 
@@ -20,7 +20,9 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency 'test-kitchen'
22
22
  spec.add_dependency 'vmware-vra', '~> 2'
23
-
23
+ spec.add_dependency 'highline'
24
+ spec.add_dependency 'rack', '~> 1.6' unless RUBY_VERSION.index('2.0.').nil?
25
+ spec.add_dependency 'ffi-yajl', '~> 2.2.3' unless RUBY_VERSION.index('2.0.').nil?
24
26
  spec.add_development_dependency 'bundler', '~> 1.7'
25
27
  spec.add_development_dependency 'rake', '~> 10.0'
26
28
  spec.add_development_dependency 'rspec', '~> 3.2'
@@ -17,6 +17,10 @@
17
17
  #
18
18
 
19
19
  require 'kitchen'
20
+ require 'highline/import'
21
+ require 'openssl'
22
+ require 'base64'
23
+ require 'digest/sha1'
20
24
  require 'vra'
21
25
  require_relative 'vra_version'
22
26
 
@@ -26,8 +30,8 @@ module Kitchen
26
30
  kitchen_driver_api_version 2
27
31
  plugin_version Kitchen::Driver::VRA_VERSION
28
32
 
29
- required_config :username
30
- required_config :password
33
+ default_config :username, ''
34
+ default_config :password, ''
31
35
  required_config :base_url
32
36
  required_config :tenant
33
37
  required_config :catalog_id
@@ -44,6 +48,7 @@ module Kitchen
44
48
  end
45
49
  default_config :lease_days, nil
46
50
  default_config :notes, nil
51
+ default_config :cache_credentials, false
47
52
  default_config :extra_parameters, {}
48
53
  default_config :private_key_path do
49
54
  %w(id_rsa id_dsa).map do |key|
@@ -58,6 +63,46 @@ module Kitchen
58
63
  'vRA'
59
64
  end
60
65
 
66
+ def check_config(force_change = false)
67
+ c_load
68
+ config[:username] = ask('Enter Username: ') if config[:username].eql?('') || force_change
69
+ config[:password] = ask('Enter password: ') { |q| q.echo = '*' } if config[:password].eql?('') || force_change
70
+ c_save
71
+ end
72
+
73
+ def c_save
74
+ cipher = OpenSSL::Cipher::Cipher.new('aes-256-cbc')
75
+ cipher.encrypt
76
+ cipher.key = Digest::SHA1.hexdigest(config[:base_url])
77
+ iv = cipher.random_iv
78
+ cipher.iv = iv
79
+ username = cipher.update(config[:username]) + cipher.final
80
+ password = cipher.update(config[:password]) + cipher.final
81
+ output = "#{Base64.encode64(iv).strip!}:#{Base64.encode64(username).strip!}:#{Base64.encode64(password).strip!}"
82
+ file = File.open('.kitchen/cached_vra', 'w')
83
+ file.write(output)
84
+ file.close
85
+ rescue
86
+ puts 'Unable to save credentials'
87
+ end
88
+
89
+ def c_load
90
+ if File.exist? '.kitchen/cached_vra'
91
+ encrypted = File.read('.kitchen/cached_vra')
92
+ iv = Base64.decode64(encrypted.split(':')[0] + '\n')
93
+ username = Base64.decode64(encrypted.split(':')[1] + "\n")
94
+ password = Base64.decode64(encrypted.split(':')[2] + "\n")
95
+ cipher = OpenSSL::Cipher::Cipher.new('aes-256-cbc')
96
+ cipher.decrypt
97
+ cipher.key = Digest::SHA1.hexdigest(config[:base_url])
98
+ cipher.iv = iv
99
+ config[:username] = cipher.update(username) + cipher.final
100
+ config[:password] = cipher.update(password) + cipher.final
101
+ end
102
+ rescue
103
+ puts 'Failed to load cached credentials'
104
+ end
105
+
61
106
  def create(state)
62
107
  return if state[:resource_id]
63
108
 
@@ -95,7 +140,7 @@ module Kitchen
95
140
 
96
141
  servers = submitted_request.resources.select(&:vm?)
97
142
  raise 'The vRA request created more than one server. The catalog blueprint should only return one.' if servers.size > 1
98
- raise 'the vRA request did not create any servers.' if servers.empty?
143
+ raise 'the vRA request did not create any servers.' if servers.size.zero?
99
144
 
100
145
  servers.first
101
146
  end
@@ -165,6 +210,7 @@ module Kitchen
165
210
  end
166
211
 
167
212
  def vra_client
213
+ check_config false if config[:cache_credentials]
168
214
  @client ||= ::Vra::Client.new(
169
215
  base_url: config[:base_url],
170
216
  username: config[:username],
@@ -172,9 +218,13 @@ module Kitchen
172
218
  tenant: config[:tenant],
173
219
  verify_ssl: config[:verify_ssl]
174
220
  )
221
+ rescue => _e
222
+ check_config true
175
223
  end
176
224
 
177
225
  def wait_for_request(request)
226
+ # config = check_config config
227
+
178
228
  last_status = ''
179
229
  wait_time = config[:request_timeout]
180
230
  sleep_time = config[:request_refresh_rate]
@@ -18,6 +18,6 @@
18
18
 
19
19
  module Kitchen
20
20
  module Driver
21
- VRA_VERSION = '2.1.0'.freeze
21
+ VRA_VERSION = '2.2.0'.freeze
22
22
  end
23
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen-vra
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chef Partner Engineering
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-13 00:00:00.000000000 Z
11
+ date: 2017-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-kitchen
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: highline
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement