knife-cloud 1.2.1 → 1.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/LICENSE +1 -1
- data/lib/chef/knife/cloud/chefbootstrap/bootstrap_distribution.rb +2 -2
- data/lib/chef/knife/cloud/chefbootstrap/bootstrap_options.rb +115 -133
- data/lib/chef/knife/cloud/chefbootstrap/bootstrap_protocol.rb +6 -6
- data/lib/chef/knife/cloud/chefbootstrap/bootstrapper.rb +11 -12
- data/lib/chef/knife/cloud/chefbootstrap/ssh_bootstrap_protocol.rb +49 -54
- data/lib/chef/knife/cloud/chefbootstrap/unix_distribution.rb +3 -3
- data/lib/chef/knife/cloud/chefbootstrap/windows_distribution.rb +3 -3
- data/lib/chef/knife/cloud/chefbootstrap/winrm_bootstrap_protocol.rb +11 -12
- data/lib/chef/knife/cloud/command.rb +24 -27
- data/lib/chef/knife/cloud/exceptions.rb +1 -2
- data/lib/chef/knife/cloud/fog/options.rb +8 -8
- data/lib/chef/knife/cloud/fog/service.rb +54 -60
- data/lib/chef/knife/cloud/helpers.rb +2 -3
- data/lib/chef/knife/cloud/list_resource_command.rb +6 -7
- data/lib/chef/knife/cloud/list_resource_options.rb +5 -5
- data/lib/chef/knife/cloud/server/create_command.rb +30 -35
- data/lib/chef/knife/cloud/server/create_options.rb +33 -34
- data/lib/chef/knife/cloud/server/delete_command.rb +12 -15
- data/lib/chef/knife/cloud/server/delete_options.rb +7 -8
- data/lib/chef/knife/cloud/server/list_command.rb +22 -22
- data/lib/chef/knife/cloud/server/list_options.rb +9 -10
- data/lib/chef/knife/cloud/server/options.rb +7 -7
- data/lib/chef/knife/cloud/server/show_command.rb +5 -5
- data/lib/chef/knife/cloud/server/show_options.rb +5 -6
- data/lib/chef/knife/cloud/service.rb +12 -13
- data/lib/knife-cloud/version.rb +2 -2
- data/lib/test/fixtures/knife.rb +3 -3
- data/lib/test/fixtures/validation.pem +27 -0
- data/lib/test/knife-utils/helper.rb +11 -11
- data/lib/test/knife-utils/knife_test_utils.rb +4 -4
- data/lib/test/knife-utils/matchers.rb +3 -3
- data/lib/test/knife-utils/test_bed.rb +38 -38
- data/lib/test/templates/windows-chef-client-msi.erb +3 -4
- data/lib/test/templates/windows-shell.erb +2 -2
- metadata +12 -152
- data/.gitignore +0 -33
- data/.travis.yml +0 -6
- data/CHANGELOG.md +0 -133
- data/CONTRIBUTING.md +0 -5
- data/Gemfile +0 -9
- data/README.md +0 -421
- data/Rakefile +0 -35
- data/ci.gemfile +0 -18
- data/knife-cloud.gemspec +0 -26
- data/spec/resource_spec_helper.rb +0 -49
- data/spec/server_command_common_spec_helper.rb +0 -48
- data/spec/spec_helper.rb +0 -25
- data/spec/support/shared_examples_for_command.rb +0 -35
- data/spec/support/shared_examples_for_servercreatecommand.rb +0 -144
- data/spec/support/shared_examples_for_serverdeletecommand.rb +0 -77
- data/spec/support/shared_examples_for_service.rb +0 -85
- data/spec/unit/bootstrap_protocol_spec.rb +0 -98
- data/spec/unit/bootstrapper_spec.rb +0 -171
- data/spec/unit/cloud_command_spec.rb +0 -35
- data/spec/unit/command_spec.rb +0 -49
- data/spec/unit/fog_service_spec.rb +0 -163
- data/spec/unit/list_resource_command_spec.rb +0 -140
- data/spec/unit/server_create_command_spec.rb +0 -198
- data/spec/unit/server_delete_command_spec.rb +0 -25
- data/spec/unit/server_list_command_spec.rb +0 -119
- data/spec/unit/server_show_command_spec.rb +0 -64
- data/spec/unit/service_spec.rb +0 -46
- data/spec/unit/ssh_bootstrap_protocol_spec.rb +0 -116
- data/spec/unit/unix_distribution_spec.rb +0 -37
- data/spec/unit/windows_distribution_spec.rb +0 -37
- data/spec/unit/winrm_bootstrap_protocol_spec.rb +0 -108
@@ -1,85 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Mukta Aphale (<mukta.aphale@clogeny.com>)
|
3
|
-
# Author:: Siddheshwar More (<siddheshwar.more@clogeny.com>)
|
4
|
-
# Copyright:: Copyright (c) 2013-2014 Chef Software, Inc.
|
5
|
-
# License:: Apache License, Version 2.0
|
6
|
-
#
|
7
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
-
# you may not use this file except in compliance with the License.
|
9
|
-
# You may obtain a copy of the License at
|
10
|
-
#
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
#
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
-
# See the License for the specific language governing permissions and
|
17
|
-
# limitations under the License.
|
18
|
-
|
19
|
-
require 'chef/knife/cloud/service'
|
20
|
-
|
21
|
-
shared_examples_for Chef::Knife::Cloud::Service do |instance|
|
22
|
-
|
23
|
-
describe "#connection" do
|
24
|
-
it "creates a connection to fog service." do
|
25
|
-
expect(instance).to receive(:add_api_endpoint)
|
26
|
-
expect(Fog::Compute).to receive(:new)
|
27
|
-
instance.connection
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe "#delete_server" do
|
32
|
-
it "deletes the server." do
|
33
|
-
server = double()
|
34
|
-
allow(instance).to receive(:puts)
|
35
|
-
allow(instance).to receive_message_chain(:connection, :servers, :get).and_return(server)
|
36
|
-
expect(server).to receive(:name).ordered
|
37
|
-
expect(server).to receive(:id).ordered
|
38
|
-
allow(instance).to receive_message_chain(:ui, :confirm)
|
39
|
-
expect(server).to receive(:destroy).ordered
|
40
|
-
instance.delete_server(:server_name)
|
41
|
-
end
|
42
|
-
|
43
|
-
it "throws error message when the server cannot be located." do
|
44
|
-
server_name = "invalid_server_name"
|
45
|
-
error_message = "Could not locate server '#{server_name}'."
|
46
|
-
allow(instance).to receive_message_chain(:connection, :servers, :get).and_return(nil)
|
47
|
-
allow(instance).to receive_message_chain(:ui, :error).with(error_message)
|
48
|
-
expect { instance.delete_server(server_name) }.to raise_error(Chef::Knife::Cloud::CloudExceptions::ServerDeleteError)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe "#create_server" do
|
53
|
-
before do
|
54
|
-
allow(instance).to receive(:puts)
|
55
|
-
allow(instance).to receive(:print)
|
56
|
-
end
|
57
|
-
|
58
|
-
it "creates the server." do
|
59
|
-
server = double()
|
60
|
-
allow(instance).to receive_message_chain(:connection, :servers, :create).and_return(server)
|
61
|
-
allow(instance).to receive_message_chain(:ui, :color)
|
62
|
-
expect(server).to receive(:wait_for)
|
63
|
-
instance.create_server({:server_create_timeout => 600})
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
describe "#get_server" do
|
68
|
-
it "return server." do
|
69
|
-
server = double()
|
70
|
-
allow(instance).to receive_message_chain(:connection, :servers, :create).and_return(server)
|
71
|
-
expect(instance.connection.servers).to receive(:get)
|
72
|
-
instance.get_server("instance_id")
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
describe "#server_summary" do
|
77
|
-
it "show server details." do
|
78
|
-
server = double()
|
79
|
-
instance.ui = double()
|
80
|
-
expect(instance.ui).to receive(:list)
|
81
|
-
expect(server).to receive(:id)
|
82
|
-
instance.server_summary(server, [{:label => 'Instance ID', :key => 'id'}])
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
@@ -1,98 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Siddheshwar More (<siddheshwar.more@clogeny.com>)
|
3
|
-
# Copyright:: Copyright (c) 2013-2014 Chef Software, Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
|
18
|
-
require 'spec_helper'
|
19
|
-
require 'chef/knife/cloud/chefbootstrap/bootstrap_protocol'
|
20
|
-
require 'chef/knife/bootstrap'
|
21
|
-
|
22
|
-
describe Chef::Knife::Cloud::BootstrapProtocol do
|
23
|
-
before do
|
24
|
-
@config = {:bootstrap_protocol => 'ssh'}
|
25
|
-
@instance = Chef::Knife::Cloud::BootstrapProtocol.new(@config)
|
26
|
-
end
|
27
|
-
|
28
|
-
context "BootstrapProtocol initializer" do
|
29
|
-
it "asks for compulsory properties while creating @instance" do
|
30
|
-
expect {Chef::Knife::Cloud::BootstrapProtocol.new}.to raise_error(ArgumentError)
|
31
|
-
end
|
32
|
-
|
33
|
-
it "creating @instance" do
|
34
|
-
expect {Chef::Knife::Cloud::BootstrapProtocol.new(@config)}.to_not raise_error
|
35
|
-
expect(Chef::Knife::Cloud::BootstrapProtocol.new(@config).class).to eq(Chef::Knife::Cloud::BootstrapProtocol)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "#send_bootstrap_command" do
|
40
|
-
it "execute with correct method calls" do
|
41
|
-
@instance.bootstrap = double()
|
42
|
-
expect(@instance).to receive(:wait_for_server_ready).ordered
|
43
|
-
expect(@instance).to receive(:init_bootstrap_options).ordered
|
44
|
-
expect(@instance.bootstrap).to receive(:run)
|
45
|
-
@instance.send_bootstrap_command
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe "#init_bootstrap_options" do
|
50
|
-
it "set correct bootstrap config" do
|
51
|
-
@config[:bootstrap_ip_address] = "127.0.0.1"
|
52
|
-
@config[:chef_node_name] = "testnode"
|
53
|
-
@config[:environment] = "_default"
|
54
|
-
@config[:first_boot_attributes] = "{\"foo\":\"bar\"}"
|
55
|
-
@config[:secret] = "secret"
|
56
|
-
@config[:secret_file] = "secret_file"
|
57
|
-
@config[:template_file] = "../template_file"
|
58
|
-
@config[:bootstrap_vault_file] = "/foo/bar/baz"
|
59
|
-
@config[:bootstrap_vault_json] = '{ "vault": "item1" }'
|
60
|
-
@config[:bootstrap_vault_item] = { 'vault' => 'item1' }
|
61
|
-
@config[:bootstrap_template] = "../template_file"
|
62
|
-
@config[:node_ssl_verify_mode] = "none"
|
63
|
-
@config[:node_verify_api_cert] = true
|
64
|
-
@config[:bootstrap_url] = "https://www.chef.io/chef/install.sh"
|
65
|
-
@config[:bootstrap_install_command] = "curl -l https://www.chef.io/chef/install.sh | sudo bash -s --"
|
66
|
-
@config[:bootstrap_wget_options] = "-e use_proxy=yes -e http://myproxy.com:8080"
|
67
|
-
@config[:bootstrap_curl_options] = "--proxy http://myproxy.com:8080"
|
68
|
-
@config[:use_sudo_password] = "true"
|
69
|
-
@config[:msi_url] = "https://opscode-omnibus-packages.s3.amazonaws.com/windows/2008r2/x86_64/chef-client-12.3.0-1.msi"
|
70
|
-
@config[:session_timeout] = "42"
|
71
|
-
@config[:install_as_service] = "true"
|
72
|
-
allow(@config).to receive(:locate_config_value).and_return({})
|
73
|
-
@instance.bootstrap = Chef::Knife::Bootstrap.new
|
74
|
-
@instance.init_bootstrap_options
|
75
|
-
expect(@instance.bootstrap.name_args).to eq([@config[:bootstrap_ip_address]])
|
76
|
-
expect(@instance.bootstrap.config[:chef_node_name]).to eq(@config[:chef_node_name])
|
77
|
-
expect(@instance.bootstrap.config[:environment]).to eq(@config[:environment])
|
78
|
-
expect(@instance.bootstrap.config[:first_boot_attributes]).to eq(@config[:first_boot_attributes])
|
79
|
-
expect(@instance.bootstrap.config[:secret]).to eq(@config[:secret])
|
80
|
-
expect(@instance.bootstrap.config[:secret_file]).to eq(@config[:secret_file])
|
81
|
-
expect(@instance.bootstrap.config[:template_file]).to eq(@config[:template_file])
|
82
|
-
expect(@instance.bootstrap.config[:bootstrap_vault_file]).to eq(@config[:bootstrap_vault_file])
|
83
|
-
expect(@instance.bootstrap.config[:bootstrap_vault_json]).to eq(@config[:bootstrap_vault_json])
|
84
|
-
expect(@instance.bootstrap.config[:bootstrap_vault_item]).to eq(@config[:bootstrap_vault_item])
|
85
|
-
expect(@instance.bootstrap.config[:bootstrap_template]).to eq(@config[:bootstrap_template])
|
86
|
-
expect(@instance.bootstrap.config[:node_ssl_verify_mode]).to eq(@config[:node_ssl_verify_mode])
|
87
|
-
expect(@instance.bootstrap.config[:node_verify_api_cert]).to eq(@config[:node_verify_api_cert])
|
88
|
-
expect(@instance.bootstrap.config[:bootstrap_url]).to eq(@config[:bootstrap_url])
|
89
|
-
expect(@instance.bootstrap.config[:bootstrap_install_command]).to eq(@config[:bootstrap_install_command])
|
90
|
-
expect(@instance.bootstrap.config[:bootstrap_wget_options]).to eq(@config[:bootstrap_wget_options])
|
91
|
-
expect(@instance.bootstrap.config[:bootstrap_curl_options]).to eq(@config[:bootstrap_curl_options])
|
92
|
-
expect(@instance.bootstrap.config[:use_sudo_password]).to eq(@config[:use_sudo_password])
|
93
|
-
expect(@instance.bootstrap.config[:msi_url]).to eq(@config[:msi_url])
|
94
|
-
expect(@instance.bootstrap.config[:install_as_service]).to eq(@config[:install_as_service])
|
95
|
-
expect(@instance.bootstrap.config[:session_timeout]).to eq(@config[:session_timeout])
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
@@ -1,171 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Prabhu Das (<prabhu.das@clogeny.com>)
|
3
|
-
# Author:: Siddheshwar More (<siddheshwar.more@clogeny.com>)
|
4
|
-
# Copyright:: Copyright (c) 2013-2014 Chef Software, Inc.
|
5
|
-
# License:: Apache License, Version 2.0
|
6
|
-
#
|
7
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
-
# you may not use this file except in compliance with the License.
|
9
|
-
# You may obtain a copy of the License at
|
10
|
-
#
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
#
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
-
# See the License for the specific language governing permissions and
|
17
|
-
# limitations under the License.
|
18
|
-
|
19
|
-
require 'spec_helper'
|
20
|
-
require 'chef/knife/cloud/chefbootstrap/bootstrapper'
|
21
|
-
require 'chef/knife/bootstrap_windows_ssh'
|
22
|
-
|
23
|
-
describe Chef::Knife::Cloud::Bootstrapper do
|
24
|
-
before(:each) do
|
25
|
-
@config = {:bootstrap_protocol => 'ssh'}
|
26
|
-
@instance = Chef::Knife::Cloud::Bootstrapper.new(@config)
|
27
|
-
end
|
28
|
-
|
29
|
-
context "Bootstrapper initializer" do
|
30
|
-
it "asks for compulsory properties while creating instance" do
|
31
|
-
expect {Chef::Knife::Cloud::Bootstrapper.new}.to raise_error(ArgumentError)
|
32
|
-
end
|
33
|
-
|
34
|
-
it "creating instance" do
|
35
|
-
expect {Chef::Knife::Cloud::Bootstrapper.new(@config)}.to_not raise_error
|
36
|
-
expect(Chef::Knife::Cloud::Bootstrapper.new(@config).class).to eq(Chef::Knife::Cloud::Bootstrapper)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "#bootstrap Linux machine with ssh" do
|
41
|
-
it "executes with correct method calls" do
|
42
|
-
@ssh_bootstrap_protocol = Chef::Knife::Cloud::SshBootstrapProtocol.new(@config)
|
43
|
-
allow(@instance).to receive(:create_bootstrap_protocol).and_return(@ssh_bootstrap_protocol)
|
44
|
-
@unix_distribution = Chef::Knife::Cloud::UnixDistribution.new(@config)
|
45
|
-
expect(@instance).to receive(:create_bootstrap_protocol).ordered
|
46
|
-
allow(@instance).to receive(:create_bootstrap_distribution).and_return(@unix_distribution)
|
47
|
-
expect(@ssh_bootstrap_protocol).to receive(:send_bootstrap_command).ordered
|
48
|
-
@instance.bootstrap
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe "#bootstrap Windows machine with winrm" do
|
53
|
-
it "executes with correct method calls" do
|
54
|
-
@winrm_bootstrap_protocol = Chef::Knife::Cloud::WinrmBootstrapProtocol.new(@config)
|
55
|
-
allow(@instance).to receive(:create_bootstrap_protocol).and_return(@winrm_bootstrap_protocol)
|
56
|
-
@windows_distribution = Chef::Knife::Cloud::WindowsDistribution.new(@config)
|
57
|
-
expect(@instance).to receive(:create_bootstrap_protocol).ordered
|
58
|
-
allow(@instance).to receive(:create_bootstrap_distribution).and_return(@windows_distribution)
|
59
|
-
expect(@winrm_bootstrap_protocol).to receive(:send_bootstrap_command).ordered
|
60
|
-
@instance.bootstrap
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
describe "#create_bootstrap_distribution" do
|
65
|
-
context "when image_os_type set to windows" do
|
66
|
-
before(:each) do
|
67
|
-
@config[:image_os_type] = "windows"
|
68
|
-
end
|
69
|
-
|
70
|
-
it "instantiates Windows Distribution class." do
|
71
|
-
expect(Chef::Knife::Cloud::WindowsDistribution).to receive(:new).with(@config)
|
72
|
-
@instance.create_bootstrap_distribution
|
73
|
-
end
|
74
|
-
|
75
|
-
it "doesn't instantiate Unix Distribution class." do
|
76
|
-
expect(Chef::Knife::Cloud::UnixDistribution).to_not receive(:new)
|
77
|
-
@instance.create_bootstrap_distribution
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
context "when image_os_type set to linux" do
|
83
|
-
before(:each) do
|
84
|
-
@config[:image_os_type] = "linux"
|
85
|
-
end
|
86
|
-
|
87
|
-
it "instantiates Unix Distribution class." do
|
88
|
-
expect(Chef::Knife::Cloud::UnixDistribution).to receive(:new).with(@config)
|
89
|
-
@instance.create_bootstrap_distribution
|
90
|
-
end
|
91
|
-
|
92
|
-
it "doesn't instantiate Windows Distribution class." do
|
93
|
-
expect(Chef::Knife::Cloud::WindowsDistribution).to_not receive(:new)
|
94
|
-
@instance.create_bootstrap_distribution
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
context "when image_os_type set to invalid" do
|
99
|
-
before(:each) do
|
100
|
-
@config[:image_os_type] = "invalid"
|
101
|
-
end
|
102
|
-
|
103
|
-
it "raise bootstrap error" do
|
104
|
-
ui = double()
|
105
|
-
expect(@instance).to receive(:ui).and_return(ui)
|
106
|
-
allow(ui).to receive(:fatal)
|
107
|
-
expect { @instance.create_bootstrap_distribution }.to raise_error(Chef::Knife::Cloud::CloudExceptions::BootstrapError, "Invalid bootstrap distribution. image_os_type should be either windows or linux.")
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
|
113
|
-
describe "#create_bootstrap_protocol" do
|
114
|
-
context "when bootstrap_protocol set to ssh" do
|
115
|
-
before(:each) do
|
116
|
-
@config[:bootstrap_protocol] = "ssh"
|
117
|
-
end
|
118
|
-
|
119
|
-
it "instantiates SshBootstrapProtocol class." do
|
120
|
-
expect(Chef::Knife::Cloud::SshBootstrapProtocol).to receive(:new)
|
121
|
-
@instance.create_bootstrap_protocol
|
122
|
-
end
|
123
|
-
|
124
|
-
it "doesn't instantiate Windows Distribution class." do
|
125
|
-
expect(Chef::Knife::Cloud::WinrmBootstrapProtocol).to_not receive(:new)
|
126
|
-
@instance.create_bootstrap_protocol
|
127
|
-
end
|
128
|
-
|
129
|
-
end
|
130
|
-
|
131
|
-
context "when bootstrap_protocol set to winrm" do
|
132
|
-
before(:each) do
|
133
|
-
@config[:bootstrap_protocol] = "winrm"
|
134
|
-
end
|
135
|
-
|
136
|
-
it "instantiates WinrmBootstrapProtocol class." do
|
137
|
-
expect(Chef::Knife::Cloud::WinrmBootstrapProtocol).to receive(:new)
|
138
|
-
@instance.create_bootstrap_protocol
|
139
|
-
end
|
140
|
-
|
141
|
-
it "doesn't instantiate SshBootstrapProtocol class." do
|
142
|
-
expect(Chef::Knife::Cloud::SshBootstrapProtocol).to_not receive(:new)
|
143
|
-
@instance.create_bootstrap_protocol
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
context "when bootstrap_protocol set to nil." do
|
148
|
-
before do
|
149
|
-
@config[:bootstrap_protocol] = nil
|
150
|
-
end
|
151
|
-
|
152
|
-
it "instantiates SshBootstrapProtocol class." do
|
153
|
-
expect(Chef::Knife::Cloud::SshBootstrapProtocol).to receive(:new)
|
154
|
-
@instance.create_bootstrap_protocol
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
context "when bootstrap_protocol set to invalid." do
|
159
|
-
before do
|
160
|
-
@config[:bootstrap_protocol] = "invalid"
|
161
|
-
end
|
162
|
-
|
163
|
-
it "instantiates SshBootstrapProtocol class." do
|
164
|
-
ui = double()
|
165
|
-
expect(@instance).to receive(:ui).and_return(ui)
|
166
|
-
allow(ui).to receive(:fatal)
|
167
|
-
expect { @instance.create_bootstrap_protocol }.to raise_error(Chef::Knife::Cloud::CloudExceptions::BootstrapError, "Invalid bootstrap protocol.")
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Mukta Aphale (<mukta.aphale@clogeny.com>)
|
3
|
-
# Author:: Siddheshwar More (<siddheshwar.more@clogeny.com>)
|
4
|
-
# Copyright:: Copyright (c) 2013-2014 Chef Software, Inc.
|
5
|
-
# License:: Apache License, Version 2.0
|
6
|
-
#
|
7
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
-
# you may not use this file except in compliance with the License.
|
9
|
-
# You may obtain a copy of the License at
|
10
|
-
#
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
#
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
-
# See the License for the specific language governing permissions and
|
17
|
-
# limitations under the License.
|
18
|
-
|
19
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
20
|
-
require 'support/shared_examples_for_command'
|
21
|
-
|
22
|
-
describe Chef::Knife::Cloud::Command do
|
23
|
-
it_behaves_like Chef::Knife::Cloud::Command, Chef::Knife::Cloud::Command.new
|
24
|
-
|
25
|
-
let (:instance) { Chef::Knife::Cloud::Command.new }
|
26
|
-
|
27
|
-
it "overrides execute_command" do
|
28
|
-
allow(instance).to receive(:create_service_instance).and_return(Chef::Knife::Cloud::Service.new)
|
29
|
-
expect {instance.run}.to raise_error(Chef::Exceptions::Override, "You must override execute_command in #{instance.to_s}")
|
30
|
-
end
|
31
|
-
|
32
|
-
it { expect {instance.run}.to raise_error(Chef::Exceptions::Override, "You must override create_service_instance in #{instance.to_s} to create cloud specific service") }
|
33
|
-
|
34
|
-
end
|
35
|
-
|
data/spec/unit/command_spec.rb
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Siddheshwar More (<siddheshwar.more@clogeny.com>)
|
3
|
-
# Copyright:: Copyright (c) 2013-2014 Chef Software, Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
|
18
|
-
require 'support/shared_examples_for_command'
|
19
|
-
|
20
|
-
describe Chef::Knife::Cloud::Command do
|
21
|
-
it_behaves_like Chef::Knife::Cloud::Command, Chef::Knife::Cloud::Command.new
|
22
|
-
|
23
|
-
describe "validate!" do
|
24
|
-
before(:each) do
|
25
|
-
# Here following options are used as a test data.
|
26
|
-
Chef::Config[:knife][:cloud_provider_username] = "cloud_provider_username"
|
27
|
-
Chef::Config[:knife][:cloud_provider_password] = "cloud_provider_password"
|
28
|
-
Chef::Config[:knife][:cloud_provider_auth_url] = "cloud_provider_auth_url"
|
29
|
-
@instance = Chef::Knife::Cloud::Command.new
|
30
|
-
allow(@instance.ui).to receive(:error)
|
31
|
-
end
|
32
|
-
|
33
|
-
after(:all) do
|
34
|
-
Chef::Config[:knife].delete(:cloud_provider_username)
|
35
|
-
Chef::Config[:knife].delete(:cloud_provider_password)
|
36
|
-
Chef::Config[:knife].delete(:cloud_provider_auth_url)
|
37
|
-
end
|
38
|
-
|
39
|
-
it "execute with success" do
|
40
|
-
expect { @instance.validate!(:cloud_provider_username, :cloud_provider_password, :cloud_provider_auth_url) }.to_not raise_error
|
41
|
-
end
|
42
|
-
|
43
|
-
it "raise_error on any mandatory option is missing" do
|
44
|
-
# delete cloud_provide_username option.
|
45
|
-
Chef::Config[:knife].delete(:cloud_provider_username)
|
46
|
-
expect { @instance.validate!(:cloud_provider_username, :cloud_provider_password, :cloud_provider_auth_url) }.to raise_error(Chef::Knife::Cloud::CloudExceptions::ValidationError, " You did not provide a valid 'Cloud Provider Username' value..")
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,163 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Prabhu Das (<prabhu.das@clogeny.com>)
|
3
|
-
# Author:: Siddheshwar More (<siddheshwar.more@clogeny.com>)
|
4
|
-
# Copyright:: Copyright (c) 2013-2014 Chef Software, Inc.
|
5
|
-
# License:: Apache License, Version 2.0
|
6
|
-
#
|
7
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
-
# you may not use this file except in compliance with the License.
|
9
|
-
# You may obtain a copy of the License at
|
10
|
-
#
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
#
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
-
# See the License for the specific language governing permissions and
|
17
|
-
# limitations under the License.
|
18
|
-
|
19
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
20
|
-
require 'chef/knife/cloud/fog/service'
|
21
|
-
require 'support/shared_examples_for_service'
|
22
|
-
|
23
|
-
describe Chef::Knife::Cloud::FogService do
|
24
|
-
|
25
|
-
it_behaves_like Chef::Knife::Cloud::Service, Chef::Knife::Cloud::FogService.new
|
26
|
-
|
27
|
-
let (:instance) { Chef::Knife::Cloud::FogService.new({:auth_params => {:provider => 'Any Cloud Provider'}}) }
|
28
|
-
|
29
|
-
context "connection" do
|
30
|
-
before do
|
31
|
-
allow(instance).to receive(:exit)
|
32
|
-
end
|
33
|
-
|
34
|
-
it "creates a connection to fog service with the provided auth params." do
|
35
|
-
expect(instance).to receive(:add_api_endpoint)
|
36
|
-
expect(Fog::Compute).to receive(:new).with({:provider => 'Any Cloud Provider'})
|
37
|
-
instance.connection
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context "network" do
|
42
|
-
it "creates a connection to fog network with the provided auth params." do
|
43
|
-
expect(Fog::Network).to receive(:new).with({:provider => 'Any Cloud Provider'})
|
44
|
-
instance.network
|
45
|
-
end
|
46
|
-
|
47
|
-
context "connection to fog" do
|
48
|
-
before do
|
49
|
-
allow(instance).to receive(:exit)
|
50
|
-
allow(instance).to receive(:ui).and_return(Object.new)
|
51
|
-
expect(instance.ui).to receive(:fatal)
|
52
|
-
end
|
53
|
-
|
54
|
-
it "handles Unauthorized exception." do
|
55
|
-
expect(Fog::Network).to receive(:new).with({:provider => 'Any Cloud Provider'}).and_raise Excon::Errors::Unauthorized.new("Unauthorized")
|
56
|
-
expect {instance.network}.to raise_error(Chef::Knife::Cloud::CloudExceptions::ServiceConnectionError)
|
57
|
-
end
|
58
|
-
|
59
|
-
it "handles SocketError or any other connection exception." do
|
60
|
-
socket_error = Excon::Errors::SocketError.new(Exception.new "Mock Error")
|
61
|
-
expect(Fog::Network).to receive(:new).with({:provider => 'Any Cloud Provider'}).and_raise socket_error
|
62
|
-
expect {instance.network}.to raise_error(Chef::Knife::Cloud::CloudExceptions::ServiceConnectionError)
|
63
|
-
end
|
64
|
-
|
65
|
-
it "handles NetworkNotFoundError exception." do
|
66
|
-
expect(Fog::Network).to receive(:new).with({:provider => 'Any Cloud Provider'}).and_raise Fog::Errors::NotFound.new("NotFound")
|
67
|
-
expect {instance.network}.to raise_error(Chef::Knife::Cloud::CloudExceptions::NetworkNotFoundError)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
context "add_custom_attributes" do
|
73
|
-
before(:each) do
|
74
|
-
Chef::Config[:knife][:custom_attributes] = [{"state"=>"Inactive"}]
|
75
|
-
@server_def = {:name=>"vm-1", :image_ref=>"123",:flavor_ref=>"2", :key_name=>"key"}
|
76
|
-
instance.add_custom_attributes(@server_def)
|
77
|
-
end
|
78
|
-
|
79
|
-
it "adds the custom attributes provided to server_def" do
|
80
|
-
expect(@server_def.include?(:state)).to be true
|
81
|
-
end
|
82
|
-
|
83
|
-
it "sets the provided attributes with supplied values" do
|
84
|
-
expect(@server_def[:state] == "Inactive").to be true
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
["servers", "images", "networks"].each do |resource_type|
|
89
|
-
resource = case resource_type
|
90
|
-
when "networks"
|
91
|
-
:network
|
92
|
-
else
|
93
|
-
:connection
|
94
|
-
end
|
95
|
-
context "list #{resource_type}" do
|
96
|
-
|
97
|
-
it "lists #{resource_type} of the current cloud service provider account." do
|
98
|
-
allow(instance).to receive_message_chain(resource.to_sym, "#{resource_type}".to_sym, :all)
|
99
|
-
instance.method("list_#{resource_type}").call
|
100
|
-
end
|
101
|
-
|
102
|
-
it "handles Excon::Errors::BadRequest exception." do
|
103
|
-
allow(instance).to receive(:ui).and_return(Object.new)
|
104
|
-
allow(instance.ui).to receive(:fatal)
|
105
|
-
allow(instance).to receive_message_chain(resource.to_sym, "#{resource_type}".to_sym, :all).and_raise Excon::Errors::BadRequest.new("Invalid Resource")
|
106
|
-
expect {instance.method("list_#{resource_type}").call}.to raise_error(Chef::Knife::Cloud::CloudExceptions::CloudAPIException)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
context "#delete_server" do
|
112
|
-
before(:each) do
|
113
|
-
@server = TestResource.new({:id => "test-server1"})
|
114
|
-
@server.define_singleton_method(:destroy){}
|
115
|
-
end
|
116
|
-
|
117
|
-
it "delete instance successfully" do
|
118
|
-
server_name = "test-server1"
|
119
|
-
instance.ui = double
|
120
|
-
expect(instance).to receive(:get_server).and_return(@server)
|
121
|
-
expect(instance).to receive(:get_server_name).and_return(server_name)
|
122
|
-
expect(instance).to receive(:msg_pair).with("Instance Name", server_name)
|
123
|
-
expect(instance).to receive(:msg_pair).with("Instance ID", @server.id)
|
124
|
-
expect(instance.ui).to receive(:confirm)
|
125
|
-
expect(@server).to receive(:destroy)
|
126
|
-
instance.delete_server(server_name)
|
127
|
-
end
|
128
|
-
|
129
|
-
it "raise_error on non existence server delete " do
|
130
|
-
server_name = "test-server1"
|
131
|
-
instance.ui = double
|
132
|
-
error_message = "Could not locate server '#{server_name}'."
|
133
|
-
expect(instance).to receive(:get_server).and_return(nil)
|
134
|
-
expect(instance.ui).to receive(:error).with(error_message)
|
135
|
-
expect { instance.delete_server(server_name) }.to raise_error(Chef::Knife::Cloud::CloudExceptions::ServerDeleteError, error_message)
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
context '#release_address' do
|
140
|
-
before(:each) do
|
141
|
-
allow(instance).to receive(:add_api_endpoint)
|
142
|
-
allow(Fog::Compute).to receive(:new).with({:provider => 'Any Cloud Provider'})
|
143
|
-
end
|
144
|
-
|
145
|
-
it 'releases address successfully' do
|
146
|
-
address_id = 'test-addres-id'
|
147
|
-
@address = TestResource.new('body' => { 'floating_ip' =>
|
148
|
-
{ 'instance_id' => nil,
|
149
|
-
'ip' => '127.0.0.1',
|
150
|
-
'fixed_ip' => nil,
|
151
|
-
'id' => 'test-addres-id',
|
152
|
-
'pool' => 'public-110'
|
153
|
-
}
|
154
|
-
})
|
155
|
-
instance.ui = double
|
156
|
-
expect(instance).to receive(:get_address).and_return(@address)
|
157
|
-
expect(instance).to receive(:msg_pair).with('IP address', '127.0.0.1')
|
158
|
-
expect(instance.ui).to receive(:confirm)
|
159
|
-
allow(instance.connection).to receive(:release_address)
|
160
|
-
instance.release_address(address_id)
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|