knife-softlayer 0.4.0 → 0.4.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.
- checksums.yaml +5 -13
- data/.gitignore +19 -19
- data/.travis.yml +20 -22
- data/CHANGELOG.md +19 -19
- data/CONTRIBUTING.md +31 -31
- data/CONTRIBUTORS.md +2 -2
- data/Gemfile +4 -4
- data/LICENSE.txt +72 -72
- data/README.md +83 -83
- data/Rakefile +37 -37
- data/docs/cla-corporate.md +133 -133
- data/docs/cla-individual.md +84 -84
- data/examples/datacenter.md +94 -94
- data/examples/flavor.md +58 -58
- data/examples/global_ip.md +22 -22
- data/examples/image.md +34 -34
- data/examples/key_pair.md +56 -56
- data/examples/server.md +82 -81
- data/examples/vlan.md +85 -85
- data/knife-softlayer.gemspec +39 -39
- data/lib/chef/knife/flavor/base.rb +52 -52
- data/lib/chef/knife/softlayer.rb +14 -14
- data/lib/chef/knife/softlayer_base.rb +112 -112
- data/lib/chef/knife/softlayer_datacenter_list.rb +28 -28
- data/lib/chef/knife/softlayer_datacenter_show.rb +45 -45
- data/lib/chef/knife/softlayer_delete.rb +6 -6
- data/lib/chef/knife/softlayer_flavor_list.rb +53 -53
- data/lib/chef/knife/softlayer_global_ip_list.rb +34 -34
- data/lib/chef/knife/softlayer_image_list.rb +26 -26
- data/lib/chef/knife/softlayer_key_pair_create.rb +37 -37
- data/lib/chef/knife/softlayer_key_pair_list.rb +28 -28
- data/lib/chef/knife/softlayer_list.rb +6 -6
- data/lib/chef/knife/softlayer_server_create.rb +459 -453
- data/lib/chef/knife/softlayer_server_destroy.rb +146 -146
- data/lib/chef/knife/softlayer_server_list.rb +27 -27
- data/lib/chef/knife/softlayer_server_relaunch.rb +208 -208
- data/lib/chef/knife/softlayer_vlan_create.rb +37 -37
- data/lib/chef/knife/softlayer_vlan_list.rb +28 -28
- data/lib/chef/knife/softlayer_vlan_show.rb +40 -40
- data/lib/knife-softlayer/version.rb +12 -12
- data/spec/spec_helper.rb +21 -21
- data/spec/unit/softlayer_base_spec.rb +26 -26
- data/spec/unit/softlayer_server_create_spec.rb +105 -105
- data/spec/unit/softlayer_server_destroy_spec.rb +47 -47
- metadata +29 -29
@@ -1,37 +1,37 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
|
3
|
-
# © Copyright IBM Corporation 2014.
|
4
|
-
#
|
5
|
-
# LICENSE: Apache 2.0 (http://www.apache.org/licenses/)
|
6
|
-
#
|
7
|
-
|
8
|
-
require 'chef/knife/softlayer_base'
|
9
|
-
|
10
|
-
class Chef
|
11
|
-
class Knife
|
12
|
-
class SoftlayerVlanCreate < Knife
|
13
|
-
|
14
|
-
include Knife::SoftlayerBase
|
15
|
-
|
16
|
-
banner 'knife softlayer vlan create'
|
17
|
-
|
18
|
-
def run
|
19
|
-
|
20
|
-
$stdout.sync = true
|
21
|
-
|
22
|
-
opts = {
|
23
|
-
:name => ui.ask_question("Enter a vlan name: "),
|
24
|
-
:datacenter => connection(:network).datacenters.by_name(ui.ask_question("Enter a datacenter name: ")),
|
25
|
-
:router => {'hostname' => ui.ask_question("Enter a router hostname: ")},
|
26
|
-
:network_space => ui.ask_question("Enter a network space: ", :default => 'PUBLIC'),
|
27
|
-
}
|
28
|
-
|
29
|
-
vlan = connection(:network).networks.create(opts)
|
30
|
-
|
31
|
-
!!vlan and puts "#{ui.color("VLAN successfully created. Provisioning may take a few minutes to complete.", :green)}"
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: Apache 2.0 (http://www.apache.org/licenses/)
|
6
|
+
#
|
7
|
+
|
8
|
+
require 'chef/knife/softlayer_base'
|
9
|
+
|
10
|
+
class Chef
|
11
|
+
class Knife
|
12
|
+
class SoftlayerVlanCreate < Knife
|
13
|
+
|
14
|
+
include Knife::SoftlayerBase
|
15
|
+
|
16
|
+
banner 'knife softlayer vlan create'
|
17
|
+
|
18
|
+
def run
|
19
|
+
|
20
|
+
$stdout.sync = true
|
21
|
+
|
22
|
+
opts = {
|
23
|
+
:name => ui.ask_question("Enter a vlan name: "),
|
24
|
+
:datacenter => connection(:network).datacenters.by_name(ui.ask_question("Enter a datacenter name: ")),
|
25
|
+
:router => {'hostname' => ui.ask_question("Enter a router hostname: ")},
|
26
|
+
:network_space => ui.ask_question("Enter a network space: ", :default => 'PUBLIC'),
|
27
|
+
}
|
28
|
+
|
29
|
+
vlan = connection(:network).networks.create(opts)
|
30
|
+
|
31
|
+
!!vlan and puts "#{ui.color("VLAN successfully created. Provisioning may take a few minutes to complete.", :green)}"
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -1,28 +1,28 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
|
3
|
-
# © Copyright IBM Corporation 2014.
|
4
|
-
#
|
5
|
-
# LICENSE: Apache 2.0 (http://www.apache.org/licenses/)
|
6
|
-
#
|
7
|
-
|
8
|
-
require 'chef/knife/softlayer_base'
|
9
|
-
|
10
|
-
class Chef
|
11
|
-
class Knife
|
12
|
-
class SoftlayerVlanList < Knife
|
13
|
-
|
14
|
-
include Knife::SoftlayerBase
|
15
|
-
|
16
|
-
banner 'knife softlayer vlan list (options)'
|
17
|
-
|
18
|
-
def run
|
19
|
-
$stdout.sync = true
|
20
|
-
table_data = connection(:network).networks.map do |net|
|
21
|
-
{:id => net.id, :name => net.name ? net.name : '[none]', :datacenter => net.datacenter.long_name, :network_space => net.network_space, :router => net.router['hostname'] }
|
22
|
-
end
|
23
|
-
puts Formatador.display_table(table_data, [:id, :name, :datacenter, :network_space, :router])
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: Apache 2.0 (http://www.apache.org/licenses/)
|
6
|
+
#
|
7
|
+
|
8
|
+
require 'chef/knife/softlayer_base'
|
9
|
+
|
10
|
+
class Chef
|
11
|
+
class Knife
|
12
|
+
class SoftlayerVlanList < Knife
|
13
|
+
|
14
|
+
include Knife::SoftlayerBase
|
15
|
+
|
16
|
+
banner 'knife softlayer vlan list (options)'
|
17
|
+
|
18
|
+
def run
|
19
|
+
$stdout.sync = true
|
20
|
+
table_data = connection(:network).networks.map do |net|
|
21
|
+
{:id => net.id, :name => net.name ? net.name : '[none]', :datacenter => net.datacenter.long_name, :network_space => net.network_space, :router => net.router['hostname'] }
|
22
|
+
end
|
23
|
+
puts Formatador.display_table(table_data, [:id, :name, :datacenter, :network_space, :router])
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,40 +1,40 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
|
3
|
-
# © Copyright IBM Corporation 2014.
|
4
|
-
#
|
5
|
-
# LICENSE: Apache 2.0 (http://www.apache.org/licenses/)
|
6
|
-
#
|
7
|
-
|
8
|
-
require 'chef/knife/softlayer_base'
|
9
|
-
|
10
|
-
class Chef
|
11
|
-
class Knife
|
12
|
-
class SoftlayerVlanShow < Knife
|
13
|
-
|
14
|
-
include Knife::SoftlayerBase
|
15
|
-
|
16
|
-
banner 'knife softlayer vlan show ID (options)'
|
17
|
-
|
18
|
-
def run
|
19
|
-
unless name_args.size == 1
|
20
|
-
puts ui.color("Specify exactly one vlan to show.", :red)
|
21
|
-
show_usage
|
22
|
-
exit 1
|
23
|
-
end
|
24
|
-
|
25
|
-
$stdout.sync = true
|
26
|
-
vlan = connection(:network).networks.get(name_args[0])
|
27
|
-
|
28
|
-
puts "#{ui.color("ID:", :green)} #{vlan.id}"
|
29
|
-
puts "#{ui.color("Name:", :green)} #{vlan.name ? vlan.name : '[none]'}"
|
30
|
-
puts "#{ui.color("Datacenter:", :green)} #{vlan.datacenter.name}"
|
31
|
-
puts "#{ui.color("Network Space:", :green)} #{vlan.network_space}"
|
32
|
-
puts "#{ui.color("Router:", :green)} #{vlan.router['hostname']}"
|
33
|
-
puts "#{ui.color("Subnets:", :green)}"
|
34
|
-
puts Formatador.display_table(vlan.subnets.map { |s| s.attributes.reject { |k,v| k.is_a?(String) } }, [:id, :cidr, :gateway_ip, :network_id, :broadcast, :type, :datacenter, :ip_version])
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: Apache 2.0 (http://www.apache.org/licenses/)
|
6
|
+
#
|
7
|
+
|
8
|
+
require 'chef/knife/softlayer_base'
|
9
|
+
|
10
|
+
class Chef
|
11
|
+
class Knife
|
12
|
+
class SoftlayerVlanShow < Knife
|
13
|
+
|
14
|
+
include Knife::SoftlayerBase
|
15
|
+
|
16
|
+
banner 'knife softlayer vlan show ID (options)'
|
17
|
+
|
18
|
+
def run
|
19
|
+
unless name_args.size == 1
|
20
|
+
puts ui.color("Specify exactly one vlan to show.", :red)
|
21
|
+
show_usage
|
22
|
+
exit 1
|
23
|
+
end
|
24
|
+
|
25
|
+
$stdout.sync = true
|
26
|
+
vlan = connection(:network).networks.get(name_args[0])
|
27
|
+
|
28
|
+
puts "#{ui.color("ID:", :green)} #{vlan.id}"
|
29
|
+
puts "#{ui.color("Name:", :green)} #{vlan.name ? vlan.name : '[none]'}"
|
30
|
+
puts "#{ui.color("Datacenter:", :green)} #{vlan.datacenter.name}"
|
31
|
+
puts "#{ui.color("Network Space:", :green)} #{vlan.network_space}"
|
32
|
+
puts "#{ui.color("Router:", :green)} #{vlan.router['hostname']}"
|
33
|
+
puts "#{ui.color("Subnets:", :green)}"
|
34
|
+
puts Formatador.display_table(vlan.subnets.map { |s| s.attributes.reject { |k,v| k.is_a?(String) } }, [:id, :cidr, :gateway_ip, :network_id, :broadcast, :type, :datacenter, :ip_version])
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -1,12 +1,12 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
|
3
|
-
# © Copyright IBM Corporation 2014.
|
4
|
-
#
|
5
|
-
# LICENSE: Apache 2.0 (http://www.apache.org/licenses/)
|
6
|
-
#
|
7
|
-
|
8
|
-
module Knife
|
9
|
-
module Softlayer
|
10
|
-
VERSION = "0.4.
|
11
|
-
end
|
12
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: Apache 2.0 (http://www.apache.org/licenses/)
|
6
|
+
#
|
7
|
+
|
8
|
+
module Knife
|
9
|
+
module Softlayer
|
10
|
+
VERSION = "0.4.1"
|
11
|
+
end
|
12
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,21 +1,21 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
|
3
|
-
# © Copyright IBM Corporation 2014.
|
4
|
-
#
|
5
|
-
# LICENSE: Apache 2.0 (http://www.apache.org/licenses/)
|
6
|
-
#
|
7
|
-
|
8
|
-
$:.unshift File.expand_path('../../lib', __FILE__)
|
9
|
-
require 'chef'
|
10
|
-
require 'chef/knife/winrm_base'
|
11
|
-
require 'chef/knife/softlayer_server_create'
|
12
|
-
require 'chef/knife/softlayer_server_destroy'
|
13
|
-
|
14
|
-
# Clear config between each example
|
15
|
-
# to avoid dependencies between examples
|
16
|
-
RSpec.configure do |c|
|
17
|
-
c.before(:each) do
|
18
|
-
Chef::Config.reset
|
19
|
-
Chef::Config[:knife] ={}
|
20
|
-
end
|
21
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: Apache 2.0 (http://www.apache.org/licenses/)
|
6
|
+
#
|
7
|
+
|
8
|
+
$:.unshift File.expand_path('../../lib', __FILE__)
|
9
|
+
require 'chef'
|
10
|
+
require 'chef/knife/winrm_base'
|
11
|
+
require 'chef/knife/softlayer_server_create'
|
12
|
+
require 'chef/knife/softlayer_server_destroy'
|
13
|
+
|
14
|
+
# Clear config between each example
|
15
|
+
# to avoid dependencies between examples
|
16
|
+
RSpec.configure do |c|
|
17
|
+
c.before(:each) do
|
18
|
+
Chef::Config.reset
|
19
|
+
Chef::Config[:knife] ={}
|
20
|
+
end
|
21
|
+
end
|
@@ -1,26 +1,26 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
|
3
|
-
# © Copyright IBM Corporation 2014.
|
4
|
-
#
|
5
|
-
# LICENSE: Apache 2.0 (http://www.apache.org/licenses/)
|
6
|
-
#
|
7
|
-
|
8
|
-
require File.expand_path('../../spec_helper', __FILE__)
|
9
|
-
require 'chef/knife/bootstrap'
|
10
|
-
require 'fog/softlayer'
|
11
|
-
Fog.mock!
|
12
|
-
|
13
|
-
|
14
|
-
describe Chef::Knife::SoftlayerBase do
|
15
|
-
|
16
|
-
describe "connection" do
|
17
|
-
it "should successfully create a connection using fog" do
|
18
|
-
Chef::Config[:knife][:softlayer_username] = 'username'
|
19
|
-
Chef::Config[:knife][:softlayer_api_key] = 'key'
|
20
|
-
Chef::Knife::SoftlayerServerCreate.new.connection
|
21
|
-
Chef::Knife::SoftlayerServerCreate.new.connection.should be_a(Fog::Compute::Softlayer::Mock)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
|
26
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: Apache 2.0 (http://www.apache.org/licenses/)
|
6
|
+
#
|
7
|
+
|
8
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
9
|
+
require 'chef/knife/bootstrap'
|
10
|
+
require 'fog/softlayer'
|
11
|
+
Fog.mock!
|
12
|
+
|
13
|
+
|
14
|
+
describe Chef::Knife::SoftlayerBase do
|
15
|
+
|
16
|
+
describe "connection" do
|
17
|
+
it "should successfully create a connection using fog" do
|
18
|
+
Chef::Config[:knife][:softlayer_username] = 'username'
|
19
|
+
Chef::Config[:knife][:softlayer_api_key] = 'key'
|
20
|
+
Chef::Knife::SoftlayerServerCreate.new.connection
|
21
|
+
Chef::Knife::SoftlayerServerCreate.new.connection.should be_a(Fog::Compute::Softlayer::Mock)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
end
|
@@ -1,105 +1,105 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
|
3
|
-
# © Copyright IBM Corporation 2014.
|
4
|
-
#
|
5
|
-
# LICENSE: Apache 2.0 (http://www.apache.org/licenses/)
|
6
|
-
#
|
7
|
-
|
8
|
-
require File.expand_path('../../spec_helper', __FILE__)
|
9
|
-
require 'chef/knife/bootstrap'
|
10
|
-
require 'fog/softlayer'
|
11
|
-
Fog.mock!
|
12
|
-
|
13
|
-
|
14
|
-
describe Chef::Knife::SoftlayerServerCreate do
|
15
|
-
before(:each) do
|
16
|
-
Chef::Config[:knife][:softlayer_username] = 'username'
|
17
|
-
Chef::Config[:knife][:softlayer_api_key] = 'key'
|
18
|
-
|
19
|
-
@server_create = Chef::Knife::SoftlayerServerCreate.new
|
20
|
-
@server_create.stub(:tcp_test_ssh).and_return(true)
|
21
|
-
|
22
|
-
@server_create.config[:ram] = 4096
|
23
|
-
@server_create.config[:cores] = 4
|
24
|
-
@server_create.config[:hostname] = 'test'
|
25
|
-
@server_create.config[:domain] = 'ibm.com'
|
26
|
-
@server_create.config[:datacenter] = 'hkg02'
|
27
|
-
@server_create.config[:os_code] = 'UBUNTU_LATEST'
|
28
|
-
@server_create.config[:block_storage] = '0:100'
|
29
|
-
end
|
30
|
-
|
31
|
-
describe "go-wrong cases for .run" do
|
32
|
-
it "should raise an exception if we try to create/bootstrap a windows instance" do
|
33
|
-
@server_create.config[:os_code] = 'WIN_2012-STD_64'
|
34
|
-
expect { @server_create.run }.to raise_exception(Chef::Knife::SoftlayerServerCreateError)
|
35
|
-
end
|
36
|
-
|
37
|
-
|
38
|
-
[':ram', ':cores', ':hostname', ':domain', ':datacenter', ':os_code', ':block_storage'].each do |opt|
|
39
|
-
class_eval <<EOS, __FILE__, __LINE__
|
40
|
-
it "should should raise an exception if missing #{opt} option" do
|
41
|
-
@server_create.config.delete(#{opt})
|
42
|
-
expect { @server_create.run }.to raise_exception
|
43
|
-
end
|
44
|
-
EOS
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "go-right cases for .run" do
|
49
|
-
before do
|
50
|
-
@server_create.stub(:apply_tags).and_return(Proc.new{})
|
51
|
-
Chef::Knife::Bootstrap.any_instance.stub(:run)
|
52
|
-
Fog::Compute::Softlayer::Server.any_instance.stub(:ready?).and_return(true)
|
53
|
-
Fog::Compute::Softlayer::Server.any_instance.stub(:sshable?).and_return(true)
|
54
|
-
end
|
55
|
-
|
56
|
-
it "defaults to a distro of 'chef-full' for a linux instance" do
|
57
|
-
@server_create.config[:distro] = @server_create.options[:distro][:default]
|
58
|
-
bootstrap = @server_create.linux_bootstrap(double('instance', :id => 42, :ssh_ip_address => '3.3.3.3', :private_ip_address => '3.3.3.3'))
|
59
|
-
bootstrap.config[:distro].should == 'chef-full'
|
60
|
-
end
|
61
|
-
|
62
|
-
it "creates an VM instance and bootstraps it" do
|
63
|
-
@server_create.run
|
64
|
-
@server_create.connection.virtual_guests.count.should == 1
|
65
|
-
end
|
66
|
-
|
67
|
-
it "sets ssh_user value by using -x option" do
|
68
|
-
#default value of config[:ssh_user] is root
|
69
|
-
@server_create.config[:ssh_user] = "tim-eah!"
|
70
|
-
|
71
|
-
@server_create.run
|
72
|
-
@server_create.config[:ssh_user].should == "tim-eah!"
|
73
|
-
@server_create.connection.virtual_guests.count.should == 1
|
74
|
-
end
|
75
|
-
|
76
|
-
it "sets ssh_password value by using -P option" do
|
77
|
-
# default value of config[:ssh_password] is nil
|
78
|
-
@server_create.config[:ssh_password] = "passw0rd"
|
79
|
-
|
80
|
-
@server_create.run
|
81
|
-
@server_create.config[:ssh_password].should == "passw0rd"
|
82
|
-
@server_create.connection.virtual_guests.count.should == 1
|
83
|
-
end
|
84
|
-
|
85
|
-
it "sets ssh_port value by using -p option" do
|
86
|
-
# default value of config[:ssh_port] is 22
|
87
|
-
@server_create.config[:ssh_port] = "86"
|
88
|
-
|
89
|
-
@server_create.run
|
90
|
-
@server_create.config[:ssh_port].should == "86"
|
91
|
-
@server_create.connection.virtual_guests.count.should == 1
|
92
|
-
end
|
93
|
-
|
94
|
-
it "sets identity_file value by using -i option for ssh bootstrap protocol or linux image" do
|
95
|
-
# default value of config[:identity_file] is nil
|
96
|
-
@server_create.config[:identity_file] = "~/.ssh/mah_key_file.pem"
|
97
|
-
|
98
|
-
@server_create.run
|
99
|
-
@server_create.config[:identity_file].should == "~/.ssh/mah_key_file.pem"
|
100
|
-
@server_create.connection.virtual_guests.count.should == 1
|
101
|
-
end
|
102
|
-
|
103
|
-
end
|
104
|
-
|
105
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
|
3
|
+
# © Copyright IBM Corporation 2014.
|
4
|
+
#
|
5
|
+
# LICENSE: Apache 2.0 (http://www.apache.org/licenses/)
|
6
|
+
#
|
7
|
+
|
8
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
9
|
+
require 'chef/knife/bootstrap'
|
10
|
+
require 'fog/softlayer'
|
11
|
+
Fog.mock!
|
12
|
+
|
13
|
+
|
14
|
+
describe Chef::Knife::SoftlayerServerCreate do
|
15
|
+
before(:each) do
|
16
|
+
Chef::Config[:knife][:softlayer_username] = 'username'
|
17
|
+
Chef::Config[:knife][:softlayer_api_key] = 'key'
|
18
|
+
|
19
|
+
@server_create = Chef::Knife::SoftlayerServerCreate.new
|
20
|
+
@server_create.stub(:tcp_test_ssh).and_return(true)
|
21
|
+
|
22
|
+
@server_create.config[:ram] = 4096
|
23
|
+
@server_create.config[:cores] = 4
|
24
|
+
@server_create.config[:hostname] = 'test'
|
25
|
+
@server_create.config[:domain] = 'ibm.com'
|
26
|
+
@server_create.config[:datacenter] = 'hkg02'
|
27
|
+
@server_create.config[:os_code] = 'UBUNTU_LATEST'
|
28
|
+
@server_create.config[:block_storage] = '0:100'
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "go-wrong cases for .run" do
|
32
|
+
it "should raise an exception if we try to create/bootstrap a windows instance" do
|
33
|
+
@server_create.config[:os_code] = 'WIN_2012-STD_64'
|
34
|
+
expect { @server_create.run }.to raise_exception(Chef::Knife::SoftlayerServerCreateError)
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
[':ram', ':cores', ':hostname', ':domain', ':datacenter', ':os_code', ':block_storage'].each do |opt|
|
39
|
+
class_eval <<EOS, __FILE__, __LINE__
|
40
|
+
it "should should raise an exception if missing #{opt} option" do
|
41
|
+
@server_create.config.delete(#{opt})
|
42
|
+
expect { @server_create.run }.to raise_exception
|
43
|
+
end
|
44
|
+
EOS
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "go-right cases for .run" do
|
49
|
+
before do
|
50
|
+
@server_create.stub(:apply_tags).and_return(Proc.new{})
|
51
|
+
Chef::Knife::Bootstrap.any_instance.stub(:run)
|
52
|
+
Fog::Compute::Softlayer::Server.any_instance.stub(:ready?).and_return(true)
|
53
|
+
Fog::Compute::Softlayer::Server.any_instance.stub(:sshable?).and_return(true)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "defaults to a distro of 'chef-full' for a linux instance" do
|
57
|
+
@server_create.config[:distro] = @server_create.options[:distro][:default]
|
58
|
+
bootstrap = @server_create.linux_bootstrap(double('instance', :id => 42, :ssh_ip_address => '3.3.3.3', :private_ip_address => '3.3.3.3'))
|
59
|
+
bootstrap.config[:distro].should == 'chef-full'
|
60
|
+
end
|
61
|
+
|
62
|
+
it "creates an VM instance and bootstraps it" do
|
63
|
+
@server_create.run
|
64
|
+
@server_create.connection.virtual_guests.count.should == 1
|
65
|
+
end
|
66
|
+
|
67
|
+
it "sets ssh_user value by using -x option" do
|
68
|
+
#default value of config[:ssh_user] is root
|
69
|
+
@server_create.config[:ssh_user] = "tim-eah!"
|
70
|
+
|
71
|
+
@server_create.run
|
72
|
+
@server_create.config[:ssh_user].should == "tim-eah!"
|
73
|
+
@server_create.connection.virtual_guests.count.should == 1
|
74
|
+
end
|
75
|
+
|
76
|
+
it "sets ssh_password value by using -P option" do
|
77
|
+
# default value of config[:ssh_password] is nil
|
78
|
+
@server_create.config[:ssh_password] = "passw0rd"
|
79
|
+
|
80
|
+
@server_create.run
|
81
|
+
@server_create.config[:ssh_password].should == "passw0rd"
|
82
|
+
@server_create.connection.virtual_guests.count.should == 1
|
83
|
+
end
|
84
|
+
|
85
|
+
it "sets ssh_port value by using -p option" do
|
86
|
+
# default value of config[:ssh_port] is 22
|
87
|
+
@server_create.config[:ssh_port] = "86"
|
88
|
+
|
89
|
+
@server_create.run
|
90
|
+
@server_create.config[:ssh_port].should == "86"
|
91
|
+
@server_create.connection.virtual_guests.count.should == 1
|
92
|
+
end
|
93
|
+
|
94
|
+
it "sets identity_file value by using -i option for ssh bootstrap protocol or linux image" do
|
95
|
+
# default value of config[:identity_file] is nil
|
96
|
+
@server_create.config[:identity_file] = "~/.ssh/mah_key_file.pem"
|
97
|
+
|
98
|
+
@server_create.run
|
99
|
+
@server_create.config[:identity_file].should == "~/.ssh/mah_key_file.pem"
|
100
|
+
@server_create.connection.virtual_guests.count.should == 1
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|