chef-provisioning-oneview 1.1.3 → 1.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 +4 -4
- data/README.md +23 -16
- data/lib/chef/provisioning/create_machine.rb +3 -4
- data/lib/chef/provisioning/customize_machine.rb +1 -15
- data/lib/chef/provisioning/oneview/oneview_api.rb +23 -3
- data/lib/chef/provisioning/oneview_driver.rb +55 -50
- data/lib/chef/provisioning/rest.rb +2 -1
- data/lib/chef/provisioning/version.rb +1 -1
- data/spec/shared_context.rb +1 -0
- data/spec/unit/oneview_driver_spec.rb +17 -9
- data/spec/unit/oneview_login_spec.rb +0 -6
- metadata +17 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6e2ebd112f8cb2206a8129177013c86dcf7c5a3
|
4
|
+
data.tar.gz: 08b98d7116f8f185dff1c56f1d4cae90a6121352
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b085577a2d4a4a2679de0376d86f7d2ebaf095ec5181140550028c19bfebfb083b24dee139c3d40eceacc0a9977bded027ade2f4d679bc4b0c46e79b5794463e
|
7
|
+
data.tar.gz: 8edd83dcebba1e142d15da9abfece53fa0a945292570eb75bac79f882c4f136ce016036335ab512de2cacbcd99f89d6d493b3cb7e0aa2ce172223cbc6766db3b
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# chef-provisioning-oneview
|
2
|
-
Chef Provisioning driver for
|
2
|
+
Chef Provisioning driver for HPE OneView
|
3
3
|
|
4
4
|
|
5
5
|
[](https://travis-ci.org/HewlettPackard/chef-provisioning-oneview)
|
@@ -14,17 +14,16 @@ Currently supports:
|
|
14
14
|
|
15
15
|
# Installation
|
16
16
|
|
17
|
-
-
|
18
|
-
|
19
|
-
- Require the gem in your Gemfile: `gem 'chef-provisioning-oneview'`
|
20
|
-
|
21
|
-
Then run `$ bundle install`
|
22
|
-
- Or run the command:
|
23
|
-
|
17
|
+
- This program is meant to run inside the chef-client, so to install it, add the following to a Chef recipe and run it:
|
24
18
|
```ruby
|
25
|
-
|
19
|
+
chef_gem 'chef-provisioning-oneview'
|
26
20
|
```
|
27
|
-
|
21
|
+
|
22
|
+
- To install it on your system Ruby for development purposes:
|
23
|
+
- Install Ruby and the `ruby-devel` or `ruby-dev` package for your system.
|
24
|
+
|
25
|
+
- Option 1: Require the gem in your Gemfile: `gem 'chef-provisioning-oneview'`, then run `$ bundle install`
|
26
|
+
- Option 2: Run the command: `$ gem install chef-provisioning-oneview`
|
28
27
|
|
29
28
|
|
30
29
|
# Prerequisites
|
@@ -37,6 +36,7 @@ Currently supports:
|
|
37
36
|
knife[:oneview_username] = 'Administrator'
|
38
37
|
knife[:oneview_password] = 'password123'
|
39
38
|
knife[:oneview_ignore_ssl] = true # For self-signed certs
|
39
|
+
knife[:oneview_timeout] = 10 # Optional. 10 (seconds) is the default
|
40
40
|
|
41
41
|
knife[:icsp_url] = 'https://my-icsp.my-domain.com'
|
42
42
|
knife[:icsp_username] = 'Administrator'
|
@@ -53,6 +53,8 @@ Currently supports:
|
|
53
53
|
- Your OneView, Insight Controll Server Provisioning(ICSP), and Chef server must be trusted by your certificate stores. See [examples/ssl_issues.md](examples/ssl_issues.md) for more info on how to do this.
|
54
54
|
- Your OneView and ICSP servers must be set up beforehand. Unfortunately, this driver doesn't do that for you too.
|
55
55
|
|
56
|
+
Note: ICSP is no longer required, so if you don't want to use it, you can leave those config options from your knife.rb.
|
57
|
+
|
56
58
|
# Usage
|
57
59
|
|
58
60
|
Example recipe:
|
@@ -69,17 +71,18 @@ machine 'web01' do
|
|
69
71
|
recipe 'my_server_cookbook::default'
|
70
72
|
|
71
73
|
machine_options :driver_options => {
|
72
|
-
:server_template => 'Web Server Template',
|
73
|
-
:os_build => 'CHEF-RHEL-6.5-x64',
|
74
|
+
:server_template => 'Web Server Template', # Name of Template OR Server Profile
|
75
|
+
:os_build => 'CHEF-RHEL-6.5-x64', # Name of OS Build Plan on ICSP. Supports array of strings also.
|
76
|
+
:server_location => 'Encl1, bay 16', # Optional. Use to provision a specific server
|
77
|
+
|
74
78
|
:host_name => 'chef-web01',
|
75
79
|
:ip_address => 'xx.xx.xx.xx', # For bootstrapping. Deprecated in favor of { bootstrap: true } in connection; see below
|
76
|
-
|
77
80
|
:domainType => 'workgroup',
|
78
81
|
:domainName => 'sub.domain.com',
|
79
82
|
:mask => '255.255.255.0', # Can set here or in individual connections below
|
80
|
-
:dhcp => false,
|
81
|
-
:gateway => 'xx.xx.xx.1',
|
82
|
-
:dns => 'xx.xx.xx.xx,xx.xx.xx.xx,xx.xx.xx.xx',
|
83
|
+
:dhcp => false, # Can set here or in individual connections below
|
84
|
+
:gateway => 'xx.xx.xx.1', # Can set here or in individual connections below
|
85
|
+
:dns => 'xx.xx.xx.xx,xx.xx.xx.xx,xx.xx.xx.xx', # Can set here or in individual connections below
|
83
86
|
:connections => {
|
84
87
|
#1 => { ... } (Reserved for PXE on our setup)
|
85
88
|
2 => {
|
@@ -172,6 +175,10 @@ Add `:team => 'TeamName'` into a connection in your connections hash. Make sure
|
|
172
175
|
This repo contains everything you need to get started, including example recipes and knife configuration files. See the README in the [examples](examples/) directory for how to begin provisioning.
|
173
176
|
|
174
177
|
|
178
|
+
# Troubleshooting
|
179
|
+
See the [Trouleshooting wiki page](https://github.com/HewlettPackard/chef-provisioning-oneview/wiki/Troubleshooting)
|
180
|
+
|
181
|
+
|
175
182
|
# Contributing
|
176
183
|
You know the drill. Fork it, branch it, change it, commit it, pull-request it. We're passionate about improving this driver, and glad to accept help to make it better.
|
177
184
|
|
@@ -5,8 +5,6 @@ module CreateMachine
|
|
5
5
|
def create_machine(action_handler, machine_spec, machine_options)
|
6
6
|
host_name = machine_options[:driver_options][:host_name]
|
7
7
|
|
8
|
-
auth_tokens # Login (to both ICSP and OneView)
|
9
|
-
|
10
8
|
# Check if profile exists first
|
11
9
|
matching_profiles = rest_api(:oneview, :get, "/rest/server-profiles?filter=name matches '#{host_name}'&sort=name:asc")
|
12
10
|
if matching_profiles['count'] > 0
|
@@ -18,7 +16,8 @@ module CreateMachine
|
|
18
16
|
template = get_oneview_template(machine_options[:driver_options][:server_template])
|
19
17
|
|
20
18
|
# Get first availabe (and compatible) HP OV server blade
|
21
|
-
|
19
|
+
# If a server_location has been specified, uses that
|
20
|
+
chosen_blade = available_hardware_for_template(template, machine_options[:driver_options][:server_location])
|
22
21
|
|
23
22
|
power_off(action_handler, machine_spec, chosen_blade['uri'])
|
24
23
|
|
@@ -38,7 +37,7 @@ module CreateMachine
|
|
38
37
|
task = rest_api(:oneview, :post, '/rest/server-profiles', options)
|
39
38
|
task_uri = task['uri']
|
40
39
|
raise "Failed to create OneView server profile #{host_name}. Details: " unless task_uri
|
41
|
-
# Wait for profile to
|
40
|
+
# Wait for profile to appear
|
42
41
|
60.times do # Wait for up to 5 min
|
43
42
|
matching_profiles = rest_api(:oneview, :get, "/rest/server-profiles?filter=name matches '#{host_name}'&sort=name:asc")
|
44
43
|
return matching_profiles['members'].first if matching_profiles['members'].first
|
@@ -3,22 +3,8 @@ module CustomizeMachine
|
|
3
3
|
|
4
4
|
# Use ICSP to install OS
|
5
5
|
def customize_machine(action_handler, machine_spec, machine_options, profile)
|
6
|
-
auth_tokens # Login (to both ICSP and OneView)
|
7
|
-
|
8
6
|
# Wait for server profile to finish building
|
9
|
-
|
10
|
-
action_handler.perform_action "Wait for #{machine_spec.name} server to start and profile to be applied" do
|
11
|
-
action_handler.report_progress "INFO: Waiting for #{machine_spec.name} server to start and profile to be applied"
|
12
|
-
task = oneview_wait_for(profile['taskUri'], 360) # Wait up to 60 min for profile to be created
|
13
|
-
raise 'Timed out waiting for server to start and profile to be applied' if task == false
|
14
|
-
unless task == true
|
15
|
-
server_template = machine_options[:driver_options][:server_template]
|
16
|
-
raise "Error creating server profile from template #{server_template}: #{task['taskErrors'].first['message']}"
|
17
|
-
end
|
18
|
-
end
|
19
|
-
profile = get_oneview_profile_by_sn(machine_spec.reference['serial_number']) # Refresh profile
|
20
|
-
raise "Server profile state '#{profile['state']}' not 'Normal'" unless profile['state'] == 'Normal'
|
21
|
-
end
|
7
|
+
wait_for_profile(action_handler, machine_spec, machine_options, profile)
|
22
8
|
|
23
9
|
# Configure SAN storage (if applicable)
|
24
10
|
enable_boot_from_san(action_handler, machine_spec, profile) unless machine_spec.reference['network_personalitation_finished']
|
@@ -16,7 +16,7 @@ module OneViewAPI
|
|
16
16
|
raise 'API version type mismatch' if !version > 0
|
17
17
|
end
|
18
18
|
rescue
|
19
|
-
|
19
|
+
Chef::Log.warn 'Failed to get OneView API version. Setting to default (120)'
|
20
20
|
version = 120
|
21
21
|
end
|
22
22
|
version
|
@@ -69,7 +69,7 @@ module OneViewAPI
|
|
69
69
|
raise "Template '#{template_name}' not found! Please match the template name with one that exists on OneView."
|
70
70
|
end
|
71
71
|
|
72
|
-
def available_hardware_for_template(template)
|
72
|
+
def available_hardware_for_template(template, location = nil)
|
73
73
|
server_hardware_type_uri = template['serverHardwareTypeUri']
|
74
74
|
enclosure_group_uri = template['enclosureGroupUri']
|
75
75
|
raise 'Template must specify a valid hardware type uri!' if server_hardware_type_uri.nil? || server_hardware_type_uri.empty?
|
@@ -77,8 +77,11 @@ module OneViewAPI
|
|
77
77
|
params = "sort=name:asc&filter=serverHardwareTypeUri='#{server_hardware_type_uri}'&filter=serverGroupUri='#{enclosure_group_uri}'"
|
78
78
|
blades = rest_api(:oneview, :get, "/rest/server-hardware?#{params}")
|
79
79
|
raise 'Error! No available blades that are compatible with the server template!' unless blades['count'] > 0
|
80
|
+
Chef::Log.debug "Specific hardware requested: #{location}" if location
|
80
81
|
blades['members'].each do |member|
|
81
|
-
|
82
|
+
next unless member['state'] == 'NoProfileApplied'
|
83
|
+
next if location && member['name'] != location
|
84
|
+
return member
|
82
85
|
end
|
83
86
|
raise 'No more blades are available for provisioning!' # Every bay is full and no more machines can be allocated
|
84
87
|
end
|
@@ -100,6 +103,23 @@ module OneViewAPI
|
|
100
103
|
false
|
101
104
|
end
|
102
105
|
|
106
|
+
def wait_for_profile(action_handler, machine_spec, machine_options, profile)
|
107
|
+
unless profile['state'] == 'Normal'
|
108
|
+
action_handler.perform_action "Wait for #{machine_spec.name} server to start and profile to be applied" do
|
109
|
+
action_handler.report_progress "INFO: Waiting for #{machine_spec.name} server to start and profile to be applied"
|
110
|
+
task = oneview_wait_for(profile['taskUri'], 360) # Wait up to 60 min for profile to be created
|
111
|
+
raise 'Timed out waiting for server to start and profile to be applied' if task == false
|
112
|
+
unless task == true
|
113
|
+
server_template = machine_options[:driver_options][:server_template]
|
114
|
+
raise "Error creating server profile from template #{server_template}: #{task['taskErrors'].first['message']}"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
profile = get_oneview_profile_by_sn(machine_spec.reference['serial_number']) # Refresh profile
|
118
|
+
raise "Server profile state '#{profile['state']}' not 'Normal'" unless profile['state'] == 'Normal'
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
|
103
123
|
def power_on(action_handler, machine_spec, hardware_uri = nil)
|
104
124
|
set_power_state(action_handler, machine_spec, 'on', hardware_uri)
|
105
125
|
end
|
@@ -6,7 +6,6 @@ require 'chef/provisioning/driver'
|
|
6
6
|
require 'chef/provisioning/transport/ssh'
|
7
7
|
require 'chef/provisioning/machine/unix_machine'
|
8
8
|
require 'json'
|
9
|
-
require 'ridley'
|
10
9
|
require_relative 'driver_init/oneview'
|
11
10
|
require_relative 'version'
|
12
11
|
require_relative 'rest'
|
@@ -23,6 +22,7 @@ module Chef::Provisioning
|
|
23
22
|
include OneViewAPI
|
24
23
|
include ICspAPI
|
25
24
|
|
25
|
+
|
26
26
|
def self.canonicalize_url(url, config)
|
27
27
|
_scheme, oneview_url = url.split(':', 2)
|
28
28
|
if oneview_url.nil? || oneview_url == ''
|
@@ -40,26 +40,35 @@ module Chef::Provisioning
|
|
40
40
|
super(canonical_url, config)
|
41
41
|
|
42
42
|
@oneview_base_url = config[:knife][:oneview_url]
|
43
|
-
raise 'Must set the knife[:oneview_url] attribute!' if @oneview_base_url.nil? || @oneview_base_url.empty?
|
44
43
|
@oneview_username = config[:knife][:oneview_username]
|
45
|
-
raise 'Must set the knife[:oneview_username] attribute!' if @oneview_username.nil? || @oneview_username.empty?
|
46
44
|
@oneview_password = config[:knife][:oneview_password]
|
47
|
-
raise 'Must set the knife[:oneview_password] attribute!' if @oneview_password.nil? || @oneview_password.empty?
|
48
45
|
@oneview_disable_ssl = config[:knife][:oneview_ignore_ssl]
|
46
|
+
@api_timeout = config[:knife][:oneview_timeout] || 10 # Default timeout: 10 seconds
|
47
|
+
raise 'Must set knife[:oneview_url] attribute!' if @oneview_base_url.nil? || @oneview_base_url.empty?
|
48
|
+
raise 'Must set knife[:oneview_username] attribute!' if @oneview_username.nil? || @oneview_username.empty?
|
49
|
+
raise 'Must set knife[:oneview_password] attribute!' if @oneview_password.nil? || @oneview_password.empty?
|
49
50
|
@oneview_api_version = 120 # Use this version for all calls that don't override it
|
50
51
|
@current_oneview_api_version = get_oneview_api_version
|
52
|
+
Chef::Log.debug("Logging into OneView at #{@oneview_base_url}")
|
51
53
|
@oneview_key = login_to_oneview
|
52
54
|
|
53
55
|
@icsp_base_url = config[:knife][:icsp_url]
|
54
|
-
raise 'Must set the knife[:icsp_url] attribute!' if @icsp_base_url.nil? || @icsp_base_url.empty?
|
55
56
|
@icsp_username = config[:knife][:icsp_username]
|
56
|
-
raise 'Must set the knife[:icsp_username] attribute!' if @icsp_username.nil? || @icsp_username.empty?
|
57
57
|
@icsp_password = config[:knife][:icsp_password]
|
58
|
-
raise 'Must set the knife[:icsp_password] attribute!' if @icsp_password.nil? || @icsp_password.empty?
|
59
58
|
@icsp_disable_ssl = config[:knife][:icsp_ignore_ssl]
|
60
59
|
@icsp_api_version = 102 # Use this version for all calls that don't override it
|
61
|
-
|
62
|
-
@
|
60
|
+
|
61
|
+
Chef::Log.warn 'knife[:icsp_url] not set in knife.rb!' if @icsp_base_url.nil?
|
62
|
+
Chef::Log.warn 'knife[:icsp_username] not set in knife.rb!' if @icsp_username.nil?
|
63
|
+
Chef::Log.warn 'knife[:icsp_password] not set in knife.rb!' if @icsp_password.nil?
|
64
|
+
|
65
|
+
@icsp_ignore = @icsp_base_url.nil? || @icsp_username.nil? || @icsp_password.nil?
|
66
|
+
# If the config is not specified, skip ICSP
|
67
|
+
unless @icsp_ignore
|
68
|
+
Chef::Log.debug("Logging into ICSP at #{@icsp_base_url}")
|
69
|
+
@current_icsp_api_version = get_icsp_api_version
|
70
|
+
@icsp_key = login_to_icsp
|
71
|
+
end
|
63
72
|
end
|
64
73
|
|
65
74
|
|
@@ -93,12 +102,19 @@ module Chef::Provisioning
|
|
93
102
|
end
|
94
103
|
end
|
95
104
|
|
96
|
-
|
97
105
|
def ready_machine(action_handler, machine_spec, machine_options)
|
98
106
|
profile = get_oneview_profile_by_sn(machine_spec.reference['serial_number'])
|
99
107
|
raise "Failed to retrieve Server Profile for #{machine_spec.name}. Serial Number used to search: #{machine_spec.reference['serial_number']}" unless profile
|
100
|
-
|
101
|
-
|
108
|
+
if @icsp_ignore == true
|
109
|
+
wait_for_profile(action_handler, machine_spec, machine_options, profile)
|
110
|
+
Chef::Log.warn('Action converge action being used, without an ICSP configuration')
|
111
|
+
Machine::BasicMachine.new(machine_spec, OneViewNilTransport.new, OneViewNilConvergence.new)
|
112
|
+
else
|
113
|
+
# This function takes care of installing the operating system etc. to the machine (blade)
|
114
|
+
customize_machine(action_handler, machine_spec, machine_options, profile)
|
115
|
+
# This is a provisining function and handles installing a chef-client
|
116
|
+
machine_for(machine_spec, machine_options) # Return the Machine object
|
117
|
+
end
|
102
118
|
end
|
103
119
|
|
104
120
|
|
@@ -130,60 +146,39 @@ module Chef::Provisioning
|
|
130
146
|
ssh_pty_enable: true
|
131
147
|
}
|
132
148
|
options = machine_options[:transport_options][:options] || default_options rescue default_options
|
133
|
-
|
134
149
|
transport = Chef::Provisioning::Transport::SSH.new(bootstrap_ip_address, username, ssh_options, options, config)
|
135
150
|
convergence_strategy = Chef::Provisioning::ConvergenceStrategy::InstallSh.new(
|
136
|
-
machine_options[:convergence_options], {}
|
151
|
+
machine_options[:convergence_options], {}
|
152
|
+
)
|
137
153
|
Chef::Provisioning::Machine::UnixMachine.new(machine_spec, transport, convergence_strategy)
|
138
154
|
end
|
139
155
|
|
140
|
-
|
141
156
|
def stop_machine(action_handler, machine_spec, _machine_options)
|
142
157
|
power_off(action_handler, machine_spec) if machine_spec.reference
|
143
158
|
end
|
144
159
|
|
145
160
|
|
146
|
-
def destroy_machine(action_handler, machine_spec,
|
161
|
+
def destroy_machine(action_handler, machine_spec, _machine_options)
|
147
162
|
if machine_spec.reference
|
148
163
|
power_off(action_handler, machine_spec) # Power off server
|
149
|
-
destroy_icsp_server(action_handler, machine_spec) # Delete os deployment server from ICSP
|
164
|
+
destroy_icsp_server(action_handler, machine_spec) unless @icsp_ignore # Delete os deployment server from ICSP
|
150
165
|
destroy_oneview_profile(action_handler, machine_spec) # Delete server profile from OneView
|
151
166
|
|
152
167
|
name = machine_spec.name # Save for next steps
|
153
168
|
|
154
|
-
# Delete the node from the Chef server
|
155
|
-
action_handler.perform_action "Release machine #{machine_spec.reference['serial_number']}" do
|
156
|
-
machine_spec.reference = nil
|
157
|
-
machine_spec.delete(action_handler)
|
158
|
-
end
|
159
|
-
|
160
|
-
# Delete client from the Chef server
|
161
|
-
action_handler.perform_action "Delete client '#{name}' from Chef server" do
|
162
|
-
begin
|
163
|
-
ridley = Ridley.new(
|
164
|
-
server_url: machine_options[:convergence_options][:chef_server][:chef_server_url],
|
165
|
-
client_name: machine_options[:convergence_options][:chef_server][:options][:client_name],
|
166
|
-
client_key: machine_options[:convergence_options][:chef_server][:options][:signing_key_filename]
|
167
|
-
)
|
168
|
-
ridley.client.delete(name)
|
169
|
-
rescue Exception => e
|
170
|
-
action_handler.report_progress "WARN: Failed to delete client #{name} from server!"
|
171
|
-
puts "Error: #{e.message}"
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
169
|
# Remove entry from known_hosts file(s)
|
176
|
-
|
177
|
-
|
170
|
+
ip_address = machine_spec.data['automatic']['ipaddress'] rescue nil
|
171
|
+
if ip_address
|
172
|
+
action_handler.perform_action "Delete entry for #{name} (#{ip_address}) from known_hosts file(s)" do
|
178
173
|
files = [File.expand_path('~/.ssh/known_hosts'), File.expand_path('/etc/ssh/known_hosts')]
|
179
174
|
files.each do |f|
|
180
|
-
next
|
175
|
+
next unless File.exist?(f)
|
181
176
|
begin
|
182
177
|
text = File.read(f)
|
183
|
-
text.gsub!(/#{
|
178
|
+
text.gsub!(/#{ip_address} ssh-rsa.*(\n|\r\n)/, '')
|
184
179
|
File.open(f, 'w') {|file| file.puts text } if text
|
185
180
|
rescue Exception => e
|
186
|
-
action_handler.report_progress "WARN: Failed to delete entry for
|
181
|
+
action_handler.report_progress "WARN: Failed to delete entry for #{name} (#{ip_address}) from known_hosts file: '#{f}'! "
|
187
182
|
puts "Error: #{e.message}"
|
188
183
|
end
|
189
184
|
end
|
@@ -198,14 +193,24 @@ module Chef::Provisioning
|
|
198
193
|
machine_for(machine_spec, machine_options)
|
199
194
|
end
|
200
195
|
|
201
|
-
|
196
|
+
end # class end
|
202
197
|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
198
|
+
# Additional No-Op classes to nil return when a :converge is called
|
199
|
+
# Returns a OneViewTransport::disconnect (nil)
|
200
|
+
class OneViewNilTransport
|
201
|
+
def disconnect(*_args, &_block)
|
202
|
+
nil
|
208
203
|
end
|
204
|
+
end
|
209
205
|
|
210
|
-
|
206
|
+
# Additional Converge class that nils the called methods under a :converge action
|
207
|
+
class OneViewNilConvergence
|
208
|
+
def setup_convergence(*_args, &_block)
|
209
|
+
nil
|
210
|
+
end
|
211
|
+
|
212
|
+
def converge(*_args, &_block)
|
213
|
+
nil
|
214
|
+
end
|
215
|
+
end
|
211
216
|
end # module end
|
@@ -18,9 +18,10 @@ module RestAPI
|
|
18
18
|
end
|
19
19
|
|
20
20
|
http = Net::HTTP.new(uri.host, uri.port)
|
21
|
+
http.read_timeout = @api_timeout # timeout for a request
|
22
|
+
http.open_timeout = @api_timeout # timeout for a connection
|
21
23
|
http.use_ssl = true if uri.scheme == 'https'
|
22
24
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE if disable_ssl
|
23
|
-
|
24
25
|
case type.downcase
|
25
26
|
when 'get', :get
|
26
27
|
request = Net::HTTP::Get.new(uri.request_uri)
|
data/spec/shared_context.rb
CHANGED
@@ -24,11 +24,13 @@ RSpec.describe Chef::Provisioning::OneViewDriver do
|
|
24
24
|
expect(@instance.instance_variable_get('@oneview_username')).to eq('Administrator')
|
25
25
|
expect(@instance.instance_variable_get('@oneview_password')).to eq('password12')
|
26
26
|
expect(@instance.instance_variable_get('@oneview_disable_ssl')).to eq(true)
|
27
|
+
expect(@instance.instance_variable_get('@api_timeout')).to eq(15)
|
27
28
|
|
28
29
|
expect(@instance.instance_variable_get('@icsp_base_url')).to eq('https://my-icsp.my-domain.com')
|
29
30
|
expect(@instance.instance_variable_get('@icsp_username')).to eq('administrator')
|
30
31
|
expect(@instance.instance_variable_get('@icsp_password')).to eq('password123')
|
31
32
|
expect(@instance.instance_variable_get('@icsp_disable_ssl')).to eq(nil)
|
33
|
+
expect(@instance.instance_variable_get('@icsp_ignore')).to eq(false)
|
32
34
|
end
|
33
35
|
|
34
36
|
it 'uses the correct api versions' do
|
@@ -40,32 +42,38 @@ RSpec.describe Chef::Provisioning::OneViewDriver do
|
|
40
42
|
|
41
43
|
it 'requires the oneview_url knife param' do
|
42
44
|
knife_config[:knife].delete(:oneview_url)
|
43
|
-
expect { Chef::Provisioning::OneViewDriver.new(@canonical_url, knife_config) }.to raise_error('Must set
|
45
|
+
expect { Chef::Provisioning::OneViewDriver.new(@canonical_url, knife_config) }.to raise_error('Must set knife[:oneview_url] attribute!')
|
44
46
|
end
|
45
47
|
|
46
48
|
it 'requires the oneview_username knife param' do
|
47
49
|
knife_config[:knife].delete(:oneview_username)
|
48
|
-
expect { Chef::Provisioning::OneViewDriver.new(@canonical_url, knife_config) }.to raise_error('Must set
|
50
|
+
expect { Chef::Provisioning::OneViewDriver.new(@canonical_url, knife_config) }.to raise_error('Must set knife[:oneview_username] attribute!')
|
49
51
|
end
|
50
52
|
|
51
53
|
it 'requires the oneview_password knife param' do
|
52
54
|
knife_config[:knife].delete(:oneview_password)
|
53
|
-
expect { Chef::Provisioning::OneViewDriver.new(@canonical_url, knife_config) }.to raise_error('Must set
|
55
|
+
expect { Chef::Provisioning::OneViewDriver.new(@canonical_url, knife_config) }.to raise_error('Must set knife[:oneview_password] attribute!')
|
54
56
|
end
|
55
57
|
|
56
|
-
it '
|
58
|
+
it 'gives a warning if the knife[:icsp_url] is not set' do
|
57
59
|
knife_config[:knife].delete(:icsp_url)
|
58
|
-
expect
|
60
|
+
expect(Chef::Log).to receive(:warn).with('knife[:icsp_url] not set in knife.rb!')
|
61
|
+
driver = Chef::Provisioning::OneViewDriver.new(@canonical_url, knife_config)
|
62
|
+
expect(driver.instance_variable_get('@icsp_ignore')).to eq(true)
|
59
63
|
end
|
60
64
|
|
61
|
-
it '
|
65
|
+
it 'gives a warning if the knife[:icsp_username] is not set' do
|
62
66
|
knife_config[:knife].delete(:icsp_username)
|
63
|
-
expect
|
67
|
+
expect(Chef::Log).to receive(:warn).with('knife[:icsp_username] not set in knife.rb!')
|
68
|
+
driver = Chef::Provisioning::OneViewDriver.new(@canonical_url, knife_config)
|
69
|
+
expect(driver.instance_variable_get('@icsp_ignore')).to eq(true)
|
64
70
|
end
|
65
71
|
|
66
|
-
it '
|
72
|
+
it 'gives a warning if the knife[:icsp_password] is not set' do
|
67
73
|
knife_config[:knife].delete(:icsp_password)
|
68
|
-
expect
|
74
|
+
expect(Chef::Log).to receive(:warn).with('knife[:icsp_password] not set in knife.rb!')
|
75
|
+
driver = Chef::Provisioning::OneViewDriver.new(@canonical_url, knife_config)
|
76
|
+
expect(driver.instance_variable_get('@icsp_ignore')).to eq(true)
|
69
77
|
end
|
70
78
|
end
|
71
79
|
end
|
@@ -12,12 +12,6 @@ RSpec.describe Chef::Provisioning::OneViewDriver do
|
|
12
12
|
it 'can parse the icsp sessionID' do
|
13
13
|
expect(@instance.instance_eval { login_to_icsp }).to match(@icsp_key)
|
14
14
|
end
|
15
|
-
|
16
|
-
it 'gets both auth tokens via the auth_tokens method' do
|
17
|
-
@instance.instance_eval { auth_tokens }
|
18
|
-
expect(@instance.instance_variable_get('@oneview_key')).to match(@oneview_key)
|
19
|
-
expect(@instance.instance_variable_get('@icsp_key')).to match(@icsp_key)
|
20
|
-
end
|
21
15
|
end
|
22
16
|
|
23
17
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-provisioning-oneview
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hewlett Packard Enterprise
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: ridley
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '4.2'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '4.2'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: rspec
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -124,6 +110,20 @@ dependencies:
|
|
124
110
|
version: '0'
|
125
111
|
- !ruby/object:Gem::Dependency
|
126
112
|
name: rubocop
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.40.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 0.40.0
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: pry
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - ">="
|
@@ -232,7 +232,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
232
232
|
version: '0'
|
233
233
|
requirements: []
|
234
234
|
rubyforge_project:
|
235
|
-
rubygems_version: 2.
|
235
|
+
rubygems_version: 2.5.2
|
236
236
|
signing_key:
|
237
237
|
specification_version: 4
|
238
238
|
summary: Chef Provisioning driver for OneView
|