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,140 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Kaustubh Deorukhkar (<kaustubh@clogeny.com>)
|
3
|
-
# Author:: Prabhu Das (<prabhu.das@clogeny.com>)
|
4
|
-
# Author:: Siddheshwar More (<siddheshwar.more@clogeny.com>)
|
5
|
-
# Copyright:: Copyright (c) 2013-2014 Chef Software, Inc.
|
6
|
-
# License:: Apache License, Version 2.0
|
7
|
-
#
|
8
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
-
# you may not use this file except in compliance with the License.
|
10
|
-
# You may obtain a copy of the License at
|
11
|
-
#
|
12
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
-
#
|
14
|
-
# Unless required by applicable law or agreed to in writing, software
|
15
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
17
|
-
# See the License for the specific language governing permissions and
|
18
|
-
# limitations under the License.
|
19
|
-
|
20
|
-
require 'spec_helper'
|
21
|
-
require 'chef/knife/cloud/list_resource_command'
|
22
|
-
require 'support/shared_examples_for_command'
|
23
|
-
require 'excon/errors'
|
24
|
-
|
25
|
-
describe Chef::Knife::Cloud::ResourceListCommand do
|
26
|
-
it_behaves_like Chef::Knife::Cloud::Command, Chef::Knife::Cloud::ResourceListCommand.new
|
27
|
-
|
28
|
-
let (:instance) {Chef::Knife::Cloud::ResourceListCommand.new}
|
29
|
-
let (:resources) {[ TestResource.new({:id => "resource-1", :os => "ubuntu"}),
|
30
|
-
TestResource.new({:id => "resource-2", :os => "windows"})]}
|
31
|
-
|
32
|
-
context "Basic tests:" do
|
33
|
-
it "raises exception to override #query_resource method" do
|
34
|
-
allow(instance).to receive(:create_service_instance).and_return(Chef::Knife::Cloud::Service.new)
|
35
|
-
expect {instance.run}.to raise_error(Chef::Exceptions::Override, "You must override query_resource in #{instance.to_s} to return resources.")
|
36
|
-
end
|
37
|
-
|
38
|
-
it "responds to #list method" do
|
39
|
-
allow(instance).to receive(:query_resource)
|
40
|
-
expect(instance).to respond_to(:list)
|
41
|
-
end
|
42
|
-
|
43
|
-
context "responds to #list method" do
|
44
|
-
let(:test_resource) { "test" }
|
45
|
-
before(:each) do
|
46
|
-
expect(instance.ui).to receive(:fatal)
|
47
|
-
instance.config[:format] = "summary"
|
48
|
-
end
|
49
|
-
|
50
|
-
it "handle generic exception" do
|
51
|
-
allow(test_resource).to receive(:sort_by).and_raise StandardError
|
52
|
-
expect {instance.list(test_resource)}.to raise_error(StandardError)
|
53
|
-
end
|
54
|
-
|
55
|
-
it "handle Excon::Errors::BadRequest exception." do
|
56
|
-
allow(test_resource).to receive(:sort_by).and_raise Excon::Errors::BadRequest.new("excon error message")
|
57
|
-
expect {instance.list(test_resource)}.to raise_error(Excon::Errors::BadRequest)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
context "Without columns_with_info parameter in #list:" do
|
63
|
-
before do
|
64
|
-
allow(instance).to receive(:query_resource).and_return(resources)
|
65
|
-
allow(instance).to receive(:create_service_instance).and_return(Chef::Knife::Cloud::Service.new)
|
66
|
-
allow(instance).to receive(:puts)
|
67
|
-
instance.config[:format] = "summary"
|
68
|
-
end
|
69
|
-
|
70
|
-
it "lists resources in json format when columns_with_info parameter is empty" do
|
71
|
-
expect(instance).to receive(:puts).with(resources[0].to_json)
|
72
|
-
expect(instance).to receive(:puts).with(resources[1].to_json)
|
73
|
-
expect(instance).to receive(:puts).with("\n").twice
|
74
|
-
instance.run
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
context "With columns_with_info parameter in #list:" do
|
79
|
-
context "#value_callback not specified in columns_with_info" do
|
80
|
-
before do
|
81
|
-
class Derived < Chef::Knife::Cloud::ResourceListCommand
|
82
|
-
attr_accessor :resource_filters
|
83
|
-
def before_exec_command
|
84
|
-
@columns_with_info = [ { :key => 'id', :label => 'Instance ID' },
|
85
|
-
{ :key => 'os', :label => 'Operating system' } ]
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
@derived_instance = Derived.new
|
90
|
-
allow(@derived_instance).to receive(:query_resource).and_return(resources)
|
91
|
-
allow(@derived_instance).to receive(:puts)
|
92
|
-
allow(@derived_instance).to receive(:create_service_instance).and_return(Chef::Knife::Cloud::Service.new)
|
93
|
-
@derived_instance.config[:format] = "summary"
|
94
|
-
end
|
95
|
-
|
96
|
-
it "lists all resources" do
|
97
|
-
expect(@derived_instance.ui).to receive(:list).with(["Instance ID", "Operating system", "resource-1", "ubuntu", "resource-2", "windows"], :uneven_columns_across, 2)
|
98
|
-
@derived_instance.run
|
99
|
-
end
|
100
|
-
|
101
|
-
it "excludes resource when filter is specified" do
|
102
|
-
@derived_instance.resource_filters = [{:attribute => 'id', :regex => /^resource-1$/}]
|
103
|
-
expect(@derived_instance.ui).to receive(:list).with(["Instance ID", "Operating system", "resource-2", "windows"], :uneven_columns_across, 2)
|
104
|
-
@derived_instance.run
|
105
|
-
end
|
106
|
-
|
107
|
-
it "lists all resources when disable filter" do
|
108
|
-
@derived_instance.config[:disable_filter] = true
|
109
|
-
@derived_instance.resource_filters = [{:attribute => 'id', :regex => /^resource-1$/}]
|
110
|
-
expect(@derived_instance.ui).to receive(:list).with(["Instance ID", "Operating system", "resource-1", "ubuntu", "resource-2", "windows"], :uneven_columns_across, 2)
|
111
|
-
@derived_instance.run
|
112
|
-
end
|
113
|
-
end
|
114
|
-
context "#value_callback specified in columns_with_info" do
|
115
|
-
before do
|
116
|
-
class Derived < Chef::Knife::Cloud::ResourceListCommand
|
117
|
-
attr_accessor :resource_filters
|
118
|
-
def before_exec_command
|
119
|
-
@columns_with_info = [ { :key => 'id', :label => 'Instance ID' },
|
120
|
-
{ :key => 'os', :label => 'Operating system', :value_callback => method(:format_os) } ]
|
121
|
-
end
|
122
|
-
def format_os(os)
|
123
|
-
(os == 'ubuntu') ? "ubuntu - operating system with Linux kernel" : os
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
@derived_instance = Derived.new
|
128
|
-
allow(@derived_instance).to receive(:query_resource).and_return(resources)
|
129
|
-
allow(@derived_instance).to receive(:puts)
|
130
|
-
allow(@derived_instance).to receive(:create_service_instance).and_return(Chef::Knife::Cloud::Service.new)
|
131
|
-
@derived_instance.config[:format] = "summary"
|
132
|
-
end
|
133
|
-
|
134
|
-
it "lists formatted list of resources" do
|
135
|
-
expect(@derived_instance.ui).to receive(:list).with(["Instance ID", "Operating system", "resource-1", "ubuntu - operating system with Linux kernel", "resource-2", "windows"], :uneven_columns_across, 2)
|
136
|
-
@derived_instance.run
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
@@ -1,198 +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 'support/shared_examples_for_command'
|
20
|
-
require 'support/shared_examples_for_servercreatecommand'
|
21
|
-
require 'net/ssh'
|
22
|
-
require 'chef/knife/cloud/server/create_options'
|
23
|
-
|
24
|
-
describe Chef::Knife::Cloud::ServerCreateCommand do
|
25
|
-
it_behaves_like Chef::Knife::Cloud::Command, Chef::Knife::Cloud::ServerCreateCommand.new
|
26
|
-
it_behaves_like Chef::Knife::Cloud::ServerCreateCommand, Chef::Knife::Cloud::ServerCreateCommand.new
|
27
|
-
|
28
|
-
describe "#validate_params!" do
|
29
|
-
before(:each) do
|
30
|
-
@instance = Chef::Knife::Cloud::ServerCreateCommand.new
|
31
|
-
allow(@instance.ui).to receive(:error)
|
32
|
-
Chef::Config[:knife][:bootstrap_protocol] = "ssh"
|
33
|
-
Chef::Config[:knife][:identity_file] = "identity_file"
|
34
|
-
Chef::Config[:knife][:ssh_password] = "ssh_password"
|
35
|
-
Chef::Config[:knife][:chef_node_name] = "chef_node_name"
|
36
|
-
Chef::Config[:knife][:winrm_password] = "winrm_password"
|
37
|
-
end
|
38
|
-
after(:all) do
|
39
|
-
Chef::Config[:knife].delete(:bootstrap_protocol)
|
40
|
-
Chef::Config[:knife].delete(:identity_file)
|
41
|
-
Chef::Config[:knife].delete(:chef_node_name)
|
42
|
-
Chef::Config[:knife].delete(:ssh_password)
|
43
|
-
Chef::Config[:knife].delete(:winrm_password)
|
44
|
-
end
|
45
|
-
|
46
|
-
it "run sucessfully on all params exist" do
|
47
|
-
expect { @instance.validate_params! }.to_not raise_error
|
48
|
-
expect(@instance.config[:chef_node_name]).to eq(Chef::Config[:knife][:chef_node_name])
|
49
|
-
end
|
50
|
-
|
51
|
-
context "when bootstrap_protocol ssh" do
|
52
|
-
it "raise error on ssh_password and identity_file are missing" do
|
53
|
-
Chef::Config[:knife].delete(:identity_file)
|
54
|
-
Chef::Config[:knife].delete(:ssh_password)
|
55
|
-
expect { @instance.validate_params! }.to raise_error(Chef::Knife::Cloud::CloudExceptions::ValidationError, " You must provide either Identity file or SSH Password..")
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
context "when bootstrap_protocol winrm" do
|
60
|
-
it "raise error on winrm_password is missing" do
|
61
|
-
Chef::Config[:knife][:bootstrap_protocol] = "winrm"
|
62
|
-
Chef::Config[:knife].delete(:winrm_password)
|
63
|
-
expect { @instance.validate_params! }.to raise_error(Chef::Knife::Cloud::CloudExceptions::ValidationError, " You must provide Winrm Password..")
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
describe "#after_exec_command" do
|
69
|
-
it "calls bootstrap" do
|
70
|
-
instance = Chef::Knife::Cloud::ServerCreateCommand.new
|
71
|
-
expect(instance).to receive(:bootstrap)
|
72
|
-
instance.after_exec_command
|
73
|
-
end
|
74
|
-
|
75
|
-
it "delete server on bootstrap failure" do
|
76
|
-
instance = Chef::Knife::Cloud::ServerCreateCommand.new
|
77
|
-
instance.service = Chef::Knife::Cloud::Service.new
|
78
|
-
allow(instance).to receive(:raise)
|
79
|
-
allow(instance.ui).to receive(:fatal)
|
80
|
-
instance.config[:delete_server_on_failure] = true
|
81
|
-
allow(instance).to receive(:bootstrap).and_raise(Chef::Knife::Cloud::CloudExceptions::BootstrapError)
|
82
|
-
expect(instance.service).to receive(:delete_server_dependencies)
|
83
|
-
expect(instance.service).to receive(:delete_server_on_failure)
|
84
|
-
instance.after_exec_command
|
85
|
-
end
|
86
|
-
|
87
|
-
# Currently the RangeError is occured when image_os_type is set to linux and bootstrap-protocol is set to ssh before windows server bootstrap.
|
88
|
-
it "raise error message when bootstrap fails due to image_os_type not exist" do
|
89
|
-
instance = Chef::Knife::Cloud::ServerCreateCommand.new
|
90
|
-
instance.service = Chef::Knife::Cloud::Service.new
|
91
|
-
allow(instance.ui).to receive(:fatal)
|
92
|
-
instance.config[:delete_server_on_failure] = true
|
93
|
-
allow(instance).to receive(:bootstrap).and_raise(RangeError)
|
94
|
-
expect(instance.service).to receive(:delete_server_dependencies)
|
95
|
-
expect(instance.service).to receive(:delete_server_on_failure)
|
96
|
-
expect { instance.after_exec_command }.to raise_error(RangeError, "Check if --bootstrap-protocol and --image-os-type is correct. RangeError")
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
describe "#set_default_config" do
|
101
|
-
it "set valid image os type" do
|
102
|
-
instance = Chef::Knife::Cloud::ServerCreateCommand.new
|
103
|
-
instance.config[:bootstrap_protocol] = 'winrm'
|
104
|
-
instance.set_default_config
|
105
|
-
expect(instance.config[:image_os_type]).to eq('windows')
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
class ServerCreate < Chef::Knife::Cloud::ServerCreateCommand
|
110
|
-
include Chef::Knife::Cloud::ServerCreateOptions
|
111
|
-
end
|
112
|
-
|
113
|
-
describe "#bootstrap options" do
|
114
|
-
|
115
|
-
it "set chef config knife options" do
|
116
|
-
instance = ServerCreate.new
|
117
|
-
bootstrap_url = "bootstrap_url"
|
118
|
-
bootstrap_install_command = "bootstrap_install_command"
|
119
|
-
bootstrap_wget_options = "bootstrap_wget_options"
|
120
|
-
bootstrap_curl_options = "bootstrap_curl_options"
|
121
|
-
bootstrap_no_proxy = "bootstrap_no_proxy"
|
122
|
-
|
123
|
-
instance.options[:bootstrap_url][:proc].call bootstrap_url
|
124
|
-
expect(Chef::Config[:knife][:bootstrap_url]).to eq(bootstrap_url)
|
125
|
-
|
126
|
-
instance.options[:bootstrap_install_command][:proc].call bootstrap_install_command
|
127
|
-
expect(Chef::Config[:knife][:bootstrap_install_command]).to eq(bootstrap_install_command)
|
128
|
-
|
129
|
-
instance.options[:bootstrap_wget_options][:proc].call bootstrap_wget_options
|
130
|
-
expect(Chef::Config[:knife][:bootstrap_wget_options]).to eq(bootstrap_wget_options)
|
131
|
-
|
132
|
-
instance.options[:bootstrap_curl_options][:proc].call bootstrap_curl_options
|
133
|
-
expect(Chef::Config[:knife][:bootstrap_curl_options]).to eq(bootstrap_curl_options)
|
134
|
-
|
135
|
-
instance.options[:bootstrap_no_proxy][:proc].call bootstrap_no_proxy
|
136
|
-
expect(Chef::Config[:knife][:bootstrap_no_proxy]).to eq(bootstrap_no_proxy)
|
137
|
-
|
138
|
-
expect(instance.options[:auth_timeout][:default]).to eq(25)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
describe "#before_bootstrap" do
|
143
|
-
|
144
|
-
before(:all) { @instance = ServerCreate.new }
|
145
|
-
|
146
|
-
context "bootstrap_protocol shh" do
|
147
|
-
before {@instance.config[:bootstrap_protocol] = "ssh"}
|
148
|
-
|
149
|
-
it "set ssh_user value by using -x option for ssh bootstrap protocol or linux image" do
|
150
|
-
# Currently -x option set config[:winrm_user]
|
151
|
-
# default value of config[:ssh_user] is root
|
152
|
-
@instance.config[:winrm_user] = "ubuntu"
|
153
|
-
@instance.config[:ssh_user] = "root"
|
154
|
-
|
155
|
-
@instance.before_bootstrap
|
156
|
-
expect(@instance.config[:ssh_user]).to eq("ubuntu")
|
157
|
-
end
|
158
|
-
|
159
|
-
it "set ssh_password value by using -P option for ssh bootstrap protocol or linux image" do
|
160
|
-
# Currently -P option set config[:winrm_password]
|
161
|
-
# default value of config[:ssh_password] is nil
|
162
|
-
@instance.config[:winrm_password] = "winrm_password"
|
163
|
-
@instance.config[:ssh_password] = nil
|
164
|
-
|
165
|
-
@instance.before_bootstrap
|
166
|
-
expect(@instance.config[:ssh_password]).to eq("winrm_password")
|
167
|
-
end
|
168
|
-
|
169
|
-
it "set ssh_port value by using -p option for ssh bootstrap protocol or linux image" do
|
170
|
-
# Currently -p option set config[:winrm_port]
|
171
|
-
# default value of config[:ssh_port] is 22
|
172
|
-
@instance.config[:winrm_port] = "1234"
|
173
|
-
@instance.config[:ssh_port] = "22"
|
174
|
-
|
175
|
-
@instance.before_bootstrap
|
176
|
-
expect(@instance.config[:ssh_port]).to eq("1234")
|
177
|
-
end
|
178
|
-
|
179
|
-
it "set identity_file value by using -i option for ssh bootstrap protocol or linux image" do
|
180
|
-
# Currently -i option set config[:kerberos_keytab_file]
|
181
|
-
# default value of config[:identity_file] is nil
|
182
|
-
@instance.config[:kerberos_keytab_file] = "kerberos_keytab_file"
|
183
|
-
@instance.config[:identity_file] = nil
|
184
|
-
|
185
|
-
@instance.before_bootstrap
|
186
|
-
expect(@instance.config[:identity_file]).to eq("kerberos_keytab_file")
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
context "bootstrap_protocol winrm" do
|
191
|
-
it "skip ssh_override_winrm" do
|
192
|
-
@instance.config[:bootstrap_protocol] = "winrm"
|
193
|
-
expect(@instance).to_not receive(:ssh_override_winrm)
|
194
|
-
@instance.before_bootstrap
|
195
|
-
end
|
196
|
-
end
|
197
|
-
end
|
198
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Kaustubh Deorukhkar (<kaustubh@clogeny.com>)
|
3
|
-
# Copyright:: Copyright (c) 2013 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 'support/shared_examples_for_command'
|
20
|
-
require 'support/shared_examples_for_serverdeletecommand'
|
21
|
-
|
22
|
-
describe Chef::Knife::Cloud::ServerDeleteCommand do
|
23
|
-
it_behaves_like Chef::Knife::Cloud::Command, Chef::Knife::Cloud::ServerDeleteCommand.new
|
24
|
-
it_behaves_like Chef::Knife::Cloud::ServerDeleteCommand, Chef::Knife::Cloud::ServerDeleteCommand.new
|
25
|
-
end
|
@@ -1,119 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Siddheshwar More (<siddheshwar.more@clogeny.com>)
|
3
|
-
# Author:: Prabhu Das (<prabhu.das@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 'support/shared_examples_for_command'
|
21
|
-
require 'chef/knife/cloud/server/list_command'
|
22
|
-
require 'chef/node'
|
23
|
-
|
24
|
-
describe Chef::Knife::Cloud::ServerListCommand do
|
25
|
-
it_behaves_like Chef::Knife::Cloud::Command, Chef::Knife::Cloud::ServerListCommand.new
|
26
|
-
|
27
|
-
describe "#before_exec_command" do
|
28
|
-
it "set chef data columns info on chef data options" do
|
29
|
-
instance = Chef::Knife::Cloud::ServerListCommand.new
|
30
|
-
instance.config[:chef_data] = true
|
31
|
-
expect(Chef::Node).to receive(:list).with(true)
|
32
|
-
expect(instance.before_exec_command).to include({:label => "Chef Node Name", :key => "name"})
|
33
|
-
end
|
34
|
-
|
35
|
-
it "set chef data columns info on chef-data and chef-node-attribute options" do
|
36
|
-
chef_node_attribute = "platform_family"
|
37
|
-
instance = Chef::Knife::Cloud::ServerListCommand.new
|
38
|
-
instance.config[:chef_data] = true
|
39
|
-
instance.config[:chef_node_attribute] = chef_node_attribute
|
40
|
-
expect(Chef::Node).to receive(:list).with(true)
|
41
|
-
expect(instance.before_exec_command).to include({:label => chef_node_attribute, :key => chef_node_attribute})
|
42
|
-
end
|
43
|
-
|
44
|
-
it "not set chef data columns info if chef-data option is not set" do
|
45
|
-
instance = Chef::Knife::Cloud::ServerListCommand.new
|
46
|
-
expect(Chef::Node).to_not receive(:list).with(true)
|
47
|
-
expect(instance.before_exec_command).to be(nil)
|
48
|
-
end
|
49
|
-
|
50
|
-
it "not set chef data columns info on chef-node-attribute option set but chef-data option is not set" do
|
51
|
-
instance = Chef::Knife::Cloud::ServerListCommand.new
|
52
|
-
instance.config[:chef_node_attribute] = "platform_family"
|
53
|
-
expect(Chef::Node).to_not receive(:list).with(true)
|
54
|
-
expect(instance.before_exec_command).to be(nil)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe "#get_resource_col_val" do
|
59
|
-
let (:resources) {[ TestResource.new({:id => "server-1", :name => "server-1", :os => "ubuntu"})]}
|
60
|
-
before do
|
61
|
-
class DerivedServerList < Chef::Knife::Cloud::ServerListCommand
|
62
|
-
attr_accessor :node
|
63
|
-
def before_exec_command
|
64
|
-
@columns_with_info = [ { :key => 'id', :label => 'Instance ID' }, {:label => 'Environment', :key => 'chef_environment'}, {:label => 'platform_family', :key => 'platform_family'} ]
|
65
|
-
@chef_data_col_info = [ {:label => 'Environment', :key => 'chef_environment'}, {:label => 'platform_family', :key => 'platform_family'} ]
|
66
|
-
@node = TestResource.new({:id => "server-1", :name => "server-1",
|
67
|
-
:chef_environment => "_default", :platform_family => "debian"})
|
68
|
-
@node.define_singleton_method(:attribute?) do |attribute|
|
69
|
-
end
|
70
|
-
@node_list = {"server-1" => @node}
|
71
|
-
end
|
72
|
-
end
|
73
|
-
@derived_instance = DerivedServerList.new
|
74
|
-
@derived_instance.config[:chef_data] = true
|
75
|
-
@derived_instance.config[:chef_node_attribute] = "platform_family"
|
76
|
-
@derived_instance.before_exec_command
|
77
|
-
@derived_instance.service = double Chef::Knife::Cloud::Service.new
|
78
|
-
allow(@derived_instance.service).to receive(:get_server_name).with(resources.first).and_return("server-1")
|
79
|
-
end
|
80
|
-
|
81
|
-
it "return columns_with_info values" do
|
82
|
-
expect(@derived_instance.node).to receive(:attribute?).with("platform_family").and_return(true)
|
83
|
-
expect(@derived_instance.get_resource_col_val(resources.first)).to eq(["server-1", "_default", "debian"])
|
84
|
-
end
|
85
|
-
|
86
|
-
it "raise error on invalide chef_node_attribute" do
|
87
|
-
allow(@derived_instance.ui).to receive(:error)
|
88
|
-
expect(@derived_instance.node).to receive(:attribute?).with("platform_family").and_return(false)
|
89
|
-
expect { @derived_instance.get_resource_col_val(resources.first) }.to raise_error(Chef::Knife::Cloud::CloudExceptions::CloudAPIException, "The Node does not have a platform_family attribute.")
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
describe "#format_server_state" do
|
94
|
-
before(:each) do
|
95
|
-
@instance = Chef::Knife::Cloud::ServerListCommand.new
|
96
|
-
end
|
97
|
-
|
98
|
-
%w{ shutting-down terminated stopping stopped error shutoff }.each do |state|
|
99
|
-
it "set state color red on server state is in #{state}" do
|
100
|
-
expect(@instance.ui).to receive(:color).with(state, :red)
|
101
|
-
@instance.format_server_state(state)
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
%w{ pending build paused suspended hard_reboot }.each do |state|
|
106
|
-
it "set state color yellow on server state is in #{state}" do
|
107
|
-
expect(@instance.ui).to receive(:color).with(state, :yellow)
|
108
|
-
@instance.format_server_state(state)
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
%w{ running }.each do |state|
|
113
|
-
it "set state color green on server state is #{state}" do
|
114
|
-
expect(@instance.ui).to receive(:color).with(state, :green)
|
115
|
-
@instance.format_server_state(state)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|