knife-vcair 0.6.1

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.
@@ -0,0 +1,51 @@
1
+ #
2
+ # Author:: Matt Ray (<matt@getchef.com>)
3
+ # Copyright:: Copyright (c) 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
+
19
+ require 'chef/knife/cloud/server/delete_options'
20
+ require 'chef/knife/cloud/server/delete_command'
21
+ require 'chef/knife/cloud/vcair_service'
22
+ require 'chef/knife/cloud/vcair_service_options'
23
+ require 'chef/knife/vcair_helpers'
24
+
25
+ class Chef
26
+ class Knife
27
+ class Cloud
28
+ class VcairVmDelete < ServerDeleteCommand
29
+ include ServerDeleteOptions
30
+ include VcairServiceOptions
31
+ include VcairHelpers
32
+
33
+ banner "knife vcair vm delete INSTANCEID [INSTANCEID] (options)"
34
+
35
+ def execute_command
36
+ @name_args.each do |server_name|
37
+ vapp = vdc.vapps.get_by_name(server_name)
38
+ if vapp
39
+ vapp.power_off
40
+ vapp.undeploy
41
+ vapp.destroy
42
+ else
43
+ ui.warn("No VApp named '#{server_name}' was found.")
44
+ end
45
+ delete_from_chef(server_name)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,62 @@
1
+ #
2
+ # Author:: Matt Ray (<matt@getchef.com>)
3
+ # Author:: Seth Thomas (<sthomas@getchef.com>)
4
+ # Copyright:: Copyright (c) 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
+
20
+ require 'chef/knife/cloud/list_resource_command'
21
+ require 'chef/knife/vcair_helpers'
22
+ require 'chef/knife/cloud/vcair_service_options'
23
+
24
+ class Chef
25
+ class Knife
26
+ class Cloud
27
+ class VcairVmList < ResourceListCommand
28
+ include VcairHelpers
29
+ include VcairServiceOptions
30
+
31
+ banner "knife vcair vm list (options)"
32
+
33
+ def query_resource
34
+ vms = []
35
+ vdc.vapps.all.each do |vapp|
36
+ vms << vapp.vms.all
37
+ end
38
+ vms.flatten
39
+ end
40
+
41
+ def before_exec_command
42
+ @columns_with_info = [
43
+ {:label => 'vAPP', :key => 'vapp_name'},
44
+ {:label => 'Name', :key => 'name'},
45
+ {:label => 'IP', :key => 'ip_address'},
46
+ {:label => 'CPU', :key => 'cpu'},
47
+ {:label => 'Memory', :key => 'memory'},
48
+ {:label => 'OS', :key => 'operating_system'},
49
+ {:label => 'Owner', :key => 'vapp', :value_callback => method(:owner) },
50
+ {:label => 'Status', :key => 'status'}
51
+ ]
52
+ @sort_by_field = 'vapp_name'
53
+ end
54
+
55
+ def owner(vapp)
56
+ vapp.owner[0][:name]
57
+ end
58
+
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,6 @@
1
+ module Knife
2
+ module Vcair
3
+ VERSION = "0.6.1"
4
+ MAJOR, MINOR, TINY = VERSION.split('.')
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ current_dir = File.dirname(__FILE__)
2
+ node_name "chef0"
3
+ client_key "#{current_dir}/validation.pem"
4
+ validation_client_name "validation"
5
+ validation_key "#{current_dir}/validation.pem"
6
+ chef_server_url "http://localhost:8889"
7
+ cache_type 'BasicFile'
8
+ cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
9
+ cookbook_path ["#{current_dir}/chef-repo/cookbooks"]
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEogIBAAKCAQEA7TfhToresZudM5gaBfzM/eHrGuJtN8uMaG51fLk9rNVwOxIw
3
+ eb9AmWJSQgftRj4AJSnt8Jv+QyAafjg79rEmCpd2K+toN1fXiVsf/ld/VdMI5vCd
4
+ usJc8aC4OFIVrLetm9eq+joXiCSLfEYP1w4d1gc9wqr54rnGVgQdWv31NhqXX7Tl
5
+ 2bHRoEsfIFM7Vr5zC9Rv6XEtrwezSpzQ+ru707UOCOHNnH1TDxNDz+L71xJnGXD6
6
+ uh596hVm2GiXJ8lyCVJTs/RZ+HKtRuxYOJztdCQAXbd6DDjTBax/cCEzzoxK/LMc
7
+ 1K/zWCKN8yM/XpiFqNuBB0yrqS5Y4zlROY0ssQIDAQABAoIBAQDmC1HYvD1YGePq
8
+ O+/IrK8S6jr4WGq4OBIS2EPhTzbrXBU5g9s0xe7ckIfa9xr4CnpTkATqWCzMZd6r
9
+ Vtd31bVhgh6cWu829F3WG2O8YJfg4AX7B46+pWxC+qyMGbZhR8L5pb1ualWVtnL6
10
+ cms8D7mJbH5NQUeRwrz/f4AEVNGuw165PhglXnRq3zxs97jdNH6av0na1VLAmUeR
11
+ vmYToLoIsK5yLeNzMfRRrQkq4ndUvad2ahqsz+p/xUjfYneBz4uujE/PcCgi423Q
12
+ FMH1NtPpzmuZuABU53wUMW4BXsSGv+34UMhRTazcBPRBYjKT6l6F7Tt9wPFxrtVn
13
+ KYI9dI0tAoGBAPzBwLsUuyEJtSd2zW63f7EhhG/2rSBm1g9Bcs1sHZtXIX3JN51X
14
+ hd+ckXQcLgQYn8syGW1+WcuaHGyp7v3G0yr6b38FWwEnmD85Mq5da1dyio2udBdK
15
+ Xm8MfY94yP8qSH3bUDKEl+cV9X5rtzbQAorMXb/Qkc4vErWfABVBKeLPAoGBAPBD
16
+ FjGxER9YU4hFV2vn5qElfxa799Vl0uSvao0lSkTpA/sHFxAkRQc/mo1PBClaH0ba
17
+ Hqr141o5pGUDgLqpO3kEY5vYBOaFXLFdFCcL+1YUR6t0bX+WCHuq21Cs6Gu4+qNA
18
+ D4dpsSPDXfatyXWM5PF2d4FwO2XnL25Yt+rg6dh/AoGAbEfk9UCQWjr6bImswH3E
19
+ KnIddonK6VKk6aw0LmTe2imdo3GMbc+M/prohUF9RSv3aOlxk0LJ3TuMadDzHa0L
20
+ 0iGvmk8FCZ2Yz50FZUWIMtJTIRdXjJLDmfdT4x7vnMDUhXZrCPlcyhbSMPKcbtL2
21
+ A9hBYWdMz3PDJCOVuYVNGGkCgYEAhSxKUwTYfs1Qj8oPqOoDdfL4vLs3pfsoqEVr
22
+ BA1VW1jlMfE+IV5ZPKlOm2De56TijT09nnloqYwlyS/l3JENPAjoxWs5XCUzucPj
23
+ 9bi4eYAIMcr5Hq0kypdrtQ4CTiNcGbzaXq6A11fk72RotFWCWSzXFNIGuncoXTuj
24
+ xfcg5zUCf3TQrwpcBB1Hf9hm6lUVpptvUZJAQtkWoaWXUPRY0CjcVdDc5ak4xqL2
25
+ FcAuJwV95b3qLyPESJ8zUBLOg3DcT1X9mrvRuKgC/Ie6k4R+oxU/nXi4vsPXlvg4
26
+ yap6MUYSjPOa7eCrhg2zFZiqO6VLEogPc1nsjb9Zl2UWLLYyCVz=
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,108 @@
1
+ # Copyright: Copyright (c) 2012 Opscode, Inc.
2
+ # License: Apache License, Version 2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ # Author:: Ameya Varade (<ameya.varade@clogeny.com>)
17
+
18
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
19
+
20
+ def init_test
21
+ #We may not need knife.rb for now but we might need while writing create, list, delete test cases.
22
+ puts "\nCreating Test Data\n"
23
+ create_file("#{temp_dir}", "validation.pem", "../integration/config/validation.pem" )
24
+ create_file("#{temp_dir}", "knife.rb", "../integration/config/knife.rb")
25
+ end
26
+
27
+ def cleanup_test_data
28
+ puts "\nCleaning Test Data\n"
29
+ FileUtils.rm_rf("#{temp_dir}")
30
+ puts "\nDone\n"
31
+ end
32
+
33
+ def get_gem_file_name
34
+ "knife-vcair-" + Knife::Vcair::VERSION + ".gem"
35
+ end
36
+
37
+ describe 'knife-vcair' do
38
+ include RSpec::KnifeUtils
39
+ before(:all) { init_test }
40
+ after(:all) { cleanup_test_data }
41
+ context 'gem' do
42
+ # context 'build' do
43
+ # let(:command) { "gem build knife-vcair.gemspec" }
44
+ # it 'should succeed' do
45
+ # match_status("should succeed")
46
+ # end
47
+ # end
48
+ #
49
+ # context 'install ' do
50
+ # let(:command) { "gem install " + get_gem_file_name }
51
+ # it 'should succeed' do
52
+ # match_status("should succeed")
53
+ # end
54
+ # end
55
+
56
+ describe 'knife' do
57
+ #context 'vcair' do
58
+ # context 'image list --help' do
59
+ # let(:command) { "knife vcair image list --help" }
60
+ # it 'should succeed' do
61
+ # should have_outcome :stdout => /--help/
62
+ # end
63
+ # end
64
+ # context 'network list --help' do
65
+ # let(:command) { "knife vcair network list --help" }
66
+ # it 'should succeed' do
67
+ # should have_outcome :stdout => /--help/
68
+ # end
69
+ # end
70
+
71
+ # context 'server create --help' do
72
+ # let(:command) { "knife vcair server create --help" }
73
+ # it 'should succeed' do
74
+ # should have_outcome :stdout => /--help/
75
+ # end
76
+ # end
77
+
78
+ # context 'server create --help' do
79
+ # let(:command) { "knife vcair server create" }
80
+ # it 'should succeed' do
81
+ # should have_outcome :stdout => /--help/
82
+ # end
83
+ # end
84
+
85
+ # context 'server delete --help' do
86
+ # let(:command) { "knife vcair server delete --help" }
87
+ # it 'should succeed' do
88
+ # should have_outcome :stdout => /--help/
89
+ # end
90
+ # end
91
+
92
+ # context 'server list --help' do
93
+ # let(:command) { "knife vcair server list --help" }
94
+ # it 'should succeed' do
95
+ # should have_outcome :stdout => /--help/
96
+ # end
97
+ # end
98
+ #end
99
+ end
100
+
101
+ context 'uninstall ' do
102
+ let(:command) { "gem uninstall knife-vcair -v '#{KnifeVCloud::VERSION}'" }
103
+ it 'should succeed' do
104
+ match_status("should succeed")
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,73 @@
1
+ #
2
+ # Author:: Chirag Jog (<chirag@clogeny.com>)
3
+ # Copyright:: Copyright (c) 2013 Opscode
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
+
19
+ $:.unshift File.expand_path('../../lib', __FILE__)
20
+
21
+ require 'chef/knife/bootstrap'
22
+ require 'chef/knife/vcair_helpers'
23
+ # require 'winrm'
24
+ # require 'em-winrm'
25
+ require 'chef'
26
+ require 'fog'
27
+ require 'dotenv'
28
+ #Dotenv.load unless ENV['VCLOUD_DIRECTOR_USERNAME']
29
+ Dotenv.load
30
+
31
+
32
+ # require 'chef/knife/vcloud_base'
33
+ # require 'chef/knife/vcloud_server_create'
34
+ # require 'chef/knife/vcloud_server_delete'
35
+ # require 'chef/knife/vcloud_server_list'
36
+ # require 'knife-vcloud/version'
37
+ require 'chef/knife/winrm_base'
38
+ require 'chef/knife/bootstrap_windows_winrm'
39
+ require 'chef/knife/vcair_server_create'
40
+ require 'chef/knife/vcair_server_delete'
41
+ require 'chef/knife/bootstrap_windows_ssh'
42
+ require 'knife-vcair/version'
43
+
44
+ require 'test/knife-utils/test_bed'
45
+ require 'resource_spec_helper'
46
+
47
+ require "securerandom"
48
+ require 'tmpdir'
49
+ require 'fileutils'
50
+ require File.expand_path(File.dirname(__FILE__) +'/utils/knifeutils')
51
+ require File.expand_path(File.dirname(__FILE__) +'/utils/matchers')
52
+
53
+ def temp_dir
54
+ @_temp_dir ||= Dir.mktmpdir
55
+ end
56
+
57
+ def match_status(test_run_expect)
58
+ if "#{test_run_expect}" == "should fail"
59
+ should_not have_outcome :status => 0
60
+ elsif "#{test_run_expect}" == "should succeed"
61
+ should have_outcome :status => 0
62
+ elsif "#{test_run_expect}" == "should return empty list"
63
+ should have_outcome :status => 0
64
+ else
65
+ should have_outcome :status => 0
66
+ end
67
+ end
68
+
69
+ def create_file(file_dir, file_name, data_to_write_file_path)
70
+ data_to_write = File.read(File.expand_path("#{data_to_write_file_path}", __FILE__))
71
+ File.open("#{file_dir}/#{file_name}", 'w') {|f| f.write(data_to_write)}
72
+ puts "Creating: #{file_name}"
73
+ end
@@ -0,0 +1,231 @@
1
+ #
2
+ # Author:: Vulk <wolfpack@vulk.co>
3
+ # Copyright:: Copyright (c) 2014 Chef 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
+
19
+ require File.expand_path('../../../../../spec_helper', __FILE__)
20
+ require 'fog'
21
+ require 'chef/knife/bootstrap'
22
+ require 'chef/knife/bootstrap_windows_winrm'
23
+
24
+ def vcair
25
+ @vcair ||= Fog::Compute::VcloudDirector.new(
26
+ :connection_options => {
27
+ :ssl_verify_peer => false,
28
+ :connect_timeout => 200,
29
+ :read_timeout => 200
30
+ }
31
+ )
32
+ end
33
+
34
+ ## TODO: make sure variables are consistent for VCAir/Vcloud Director.. etc
35
+
36
+ describe Chef::Knife::Cloud::VcairServerCreate do
37
+ before(:each) do
38
+ @knife_vcair_create = Chef::Knife::Cloud::VcairServerCreate.new
39
+ @knife_vcair_create.stub(:tcp_test_ssh).and_return(true)
40
+ @knife_vcair_create.stub(:tcp_test_winrm).and_return(true)
41
+ {
42
+ :image => 'image',
43
+ :vcair_password => ENV['VCAIR_PASSWORD'] || 'vcair_password',
44
+ :vcair_username => ENV['VCAIR_USERNAME'] || 'vcair_username',
45
+ :vcair_api_host => ENV['VCAIR_HOST'] || 'vcair_host',
46
+ :vcair_org => ENV['VCAIR_ORG'] || 'vcair_org',
47
+ :vcair_catalog_item => ENV['VCLOUD_CATALOG_ITEM'] || 'vcair_catalog_item',
48
+ :vcair_vm_name => ((ENV['VCAIR_VMNAME']).nil? ? ('TESTING-KNIFE' + rand.to_s) : (ENV['VCAIR_VMNAME']) + rand.to_s),
49
+ :vcair_api_version => '5.6',
50
+ :chef_node_name => 'chef_node_name',
51
+ }.each do |key, value|
52
+ @knife_vcair_create.config[key] = value
53
+ end
54
+
55
+ @knife_vcair_create.stub(:puts)
56
+ @knife_vcair_create.stub(:print)
57
+
58
+ @vcair_connection = double(Fog::Compute::VcloudDirector)
59
+ #@vcair_org = double(Fog::Compute::VcloudDirector::....
60
+
61
+ # [ <Fog::Compute::VcloudDirector::Organization
62
+ # id="5856ae9f-22c7-4453-952a-12868fdce6e4",
63
+ # name="M511664989-4904",
64
+ # type="application/vnd.vmware.vcloud.org+xml",
65
+ # href="https://p3v11-vcd.vcair.vmware.com:443/api/org/5856ae9f-22c7-4453-952a-12868fdce6e4",
66
+ # description=NonLoaded,
67
+ # full_name=NonLoaded
68
+ # >]
69
+
70
+ @catalog_items = [double(:href => "image", :password_enabled? => true)]
71
+ @catalogs = [double(:href => "catalog", :catalog_items => @catalog_items)]
72
+ @vcair_connection.stub_chain(:catalogs).and_return( @catalogs )
73
+ @network = double(:name => "network", :href => "vcair_network")
74
+ @vcair_connection.stub_chain(:networks, :all, :find).and_return( @network )
75
+ @vcair_vapps = double()
76
+ @new_vapp = double(:name => "name", :href => "vapp", :children => {:href => "children"})
77
+ @new_server = double(
78
+ :id => "id",
79
+ :network => {:network_name => "vcair_network", :network_mode => "POOL" },
80
+ :password => 'password',
81
+ :cpu => 'cpu',
82
+ :memory => 'memory'
83
+ )
84
+ end
85
+
86
+ describe "run" do
87
+ before do
88
+ #Fog::Compute::VcloudDirector.should_receive(:new).and_return(@vcair_connection)
89
+ #@vcair_connection.should_receive(:servers).and_return( @vcair_vapps )
90
+ #@vcair_vapps.should_receive(:create).and_return( @new_vapp )
91
+ #@new_vapp.should_receive(:wait_for)
92
+ #@new_server.should_receive(:wait_for).twice
93
+ #@new_server.should_receive(:power_on).and_return(true)
94
+ #@new_server.should_receive(:network=).and_return(@new_server.network)
95
+ #@vcair_connection.should_receive(:get_vapp).and_return( @new_vapp )
96
+ #@vcair_connection.should_receive(:get_server).and_return( @new_server )
97
+ end
98
+
99
+ it "creates an vapp and bootstraps it" do
100
+ # TODO: mock out the vcair_connetion completely
101
+ #Fog::Compute::VcloudDirector.should_receive(:new).and_return(@vcair_connection)
102
+ #@new_server.should_receive(:save)
103
+ @bootstrap = Chef::Knife::Bootstrap.new
104
+ Chef::Knife::Bootstrap.stub(:new).and_return(@bootstrap)
105
+ #@bootstrap.should_receive(:run)
106
+ @knife_vcair_create.run
107
+ end
108
+
109
+ # it "creates an vapp with non-default CPU/Memory" do
110
+ # # Fog::Vcloud::Compute.should_receive(:new).and_return(@vcair_connection)
111
+ # @new_network = {:IpAddress => "IpAddress"}
112
+ # @new_server.stub(:network).and_return(@new_network)
113
+ # @knife_vcair_create.config[:vcair_cpus] = 'cpu'
114
+ # @knife_vcair_create.config[:vcair_memory] = 'memory'
115
+ # @new_server.should_receive(:cpu=).and_return(@new_server.cpu)
116
+ # @new_server.should_receive(:memory=).and_return(@new_server.memory)
117
+ # @new_server.should_receive(:save).exactly(3).times
118
+
119
+ # @bootstrap = Chef::Knife::Bootstrap.new
120
+ # Chef::Knife::Bootstrap.stub(:new).and_return(@bootstrap)
121
+ # @bootstrap.should_receive(:run)
122
+ # @knife_vcair_create.run
123
+ # end
124
+
125
+ # it "should bootstrap windows when bootstrap protocol is winrm" do
126
+ # # Fog::Vcloud::Compute.should_receive(:new).and_return(@vcair_connection)
127
+ # @new_server.should_receive(:save)
128
+ # @knife_vcair_create.config[:bootstrap_protocol] = 'winrm'
129
+ # @bootstrap = Chef::Knife::BootstrapWindowsWinrm.new
130
+ # Chef::Knife::BootstrapWindowsWinrm.stub(:new).and_return(@bootstrap)
131
+ # @bootstrap.should_receive(:run)
132
+ # @knife_vcair_create.run
133
+ # end
134
+
135
+ # it "should set the password on server if the image is not password enabled" do
136
+ # Fog::Vcloud::Compute.stub(:new).and_return(@vcair_connection)
137
+ # @catalog_items[0] =double(:href => "image", :password_enabled? => false)
138
+ # @new_network = {:IpAddress => "IpAddress"}
139
+ # @new_server.stub(:network).and_return(@new_network)
140
+ # @new_server.should_receive(:password=)
141
+ # @new_server.should_receive(:save).twice
142
+ # @bootstrap = Chef::Knife::Bootstrap.new
143
+ # Chef::Knife::Bootstrap.stub!(:new).and_return(@bootstrap)
144
+ # @bootstrap.should_receive(:run)
145
+ # @knife_vcair_create.run
146
+ # end
147
+
148
+ # it "should not bootstrap when no_bootstrap set" do
149
+ # Fog::Vcloud::Compute.stub(:new).and_return(@vcair_connection)
150
+ # @new_server.should_receive(:save)
151
+ # @knife_vcair_create.config[:no_bootstrap] = true
152
+ # @bootstrap = Chef::Knife::Bootstrap.new
153
+ # @bootstrap.should_not_receive(:run)
154
+ # lambda { @knife_vcair_create.run }.should raise_error SystemExit
155
+ # end
156
+
157
+ # end
158
+ # describe "run" do
159
+ # before do
160
+ # @knife_vcair_create.ui.stub(:error)
161
+ # end
162
+ # it 'should fail if compulsory params - image are not set' do
163
+ # @knife_vcair_create.config[:image] = nil
164
+ # lambda { @knife_vcair_create.run }.should raise_error SystemExit
165
+ # end
166
+ # it 'should fail if compulsory params - network are not set' do
167
+ # @knife_vcair_create.config[:vcair_network] = nil
168
+ # lambda { @knife_vcair_create.run }.should raise_error SystemExit
169
+ # end
170
+
171
+ # end
172
+ # describe "when configuring the bootstrap process" do
173
+ # before do
174
+ # @knife_vcair_create.config[:ssh_user] = "ubuntu"
175
+ # @knife_vcair_create.config[:chef_node_name] = "blarf"
176
+ # @knife_vcair_create.config[:template_file] = '~/.chef/templates/my-bootstrap.sh.erb'
177
+ # @knife_vcair_create.config[:distro] = 'ubuntu-10.04-magic-sparkles'
178
+ # @knife_vcair_create.config[:run_list] = ['role[base]']
179
+ # @knife_vcair_create.config[:json_attributes] = "{'my_attributes':{'foo':'bar'}"
180
+ # @knife_vcair_create.config[:bootstrap_protocol] = nil
181
+
182
+ # @new_server.stub(:name).and_return("server_name")
183
+ # @fqdn = mock()
184
+ # @bootstrap = @knife_vcair_create.bootstrap_for_node(@new_server, @fqdn)
185
+ # end
186
+
187
+ # it "configures sets the bootstrap's run_list" do
188
+ # @bootstrap.config[:run_list].should == ['role[base]']
189
+ # end
190
+
191
+ # it "configures the bootstrap to use the correct ssh_user login" do
192
+ # @bootstrap.config[:ssh_user].should == 'ubuntu'
193
+ # end
194
+
195
+ # it "configures the bootstrap to use the configured node name if provided" do
196
+ # @bootstrap.config[:chef_node_name].should == 'blarf'
197
+ # end
198
+
199
+ # it "configures the bootstrap to use the vcair server name if no explicit node name is set" do
200
+ # @knife_vcair_create.config[:chef_node_name] = nil
201
+
202
+ # bootstrap = @knife_vcair_create.bootstrap_for_node(@new_server, @fqdn)
203
+ # bootstrap.config[:chef_node_name].should == @new_server.name
204
+ # end
205
+
206
+ # it "configures the bootstrap to use prerelease versions of chef if specified" do
207
+ # @bootstrap.config[:prerelease].should be_false
208
+
209
+ # @knife_vcair_create.config[:prerelease] = true
210
+
211
+ # bootstrap = @knife_vcair_create.bootstrap_for_node(@new_server, @fqdn)
212
+ # bootstrap.config[:prerelease].should be_true
213
+ # end
214
+
215
+ # it "configures the bootstrap to use the desired distro-specific bootstrap script" do
216
+ # @bootstrap.config[:distro].should == 'ubuntu-10.04-magic-sparkles'
217
+ # end
218
+
219
+ # it "configures the bootstrap to use sudo" do
220
+ # @bootstrap.config[:use_sudo].should be_true
221
+ # end
222
+
223
+ # it "configured the bootstrap to use the desired template" do
224
+ # @bootstrap.config[:template_file].should == '~/.chef/templates/my-bootstrap.sh.erb'
225
+ # end
226
+
227
+ # it "configured the bootstrap to set an vcair hint (via Chef::Config)" do
228
+ # Chef::Config[:knife][:hints]["vcair"].should_not be_nil
229
+ # end
230
+ end
231
+ end