knife-softlayer 0.1.3 → 0.2.0.pre.f0ba31b95

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +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
@@ -0,0 +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
@@ -7,6 +7,6 @@
7
7
 
8
8
  module Knife
9
9
  module Softlayer
10
- VERSION = "0.1.3"
10
+ VERSION = "0.2.0-f0ba31b95"
11
11
  end
12
12
  end
@@ -7,17 +7,18 @@
7
7
 
8
8
  require File.expand_path('../../spec_helper', __FILE__)
9
9
  require 'chef/knife/bootstrap'
10
- require 'softlayer_api'
10
+ require 'fog/softlayer'
11
+ Fog.mock!
11
12
 
12
13
 
13
14
  describe Chef::Knife::SoftlayerBase do
14
15
 
15
16
  describe "connection" do
16
- it "should set the user agent string that the softlayer_api gem uses" do
17
+ it "should successfully create a connection using fog" do
17
18
  Chef::Config[:knife][:softlayer_username] = 'username'
18
19
  Chef::Config[:knife][:softlayer_api_key] = 'key'
19
- sl = Chef::Knife::SoftlayerServerCreate.new
20
- sl.connection.user_agent['User-Agent'].should match /Knife Softlayer Plugin/
20
+ Chef::Knife::SoftlayerServerCreate.new.connection
21
+ Chef::Knife::SoftlayerServerCreate.new.connection.should be_a(Fog::Compute::Softlayer::Mock)
21
22
  end
22
23
  end
23
24
 
@@ -7,128 +7,96 @@
7
7
 
8
8
  require File.expand_path('../../spec_helper', __FILE__)
9
9
  require 'chef/knife/bootstrap'
10
- require 'softlayer_api'
10
+ require 'fog/softlayer'
11
+ Fog.mock!
11
12
 
12
13
 
13
14
  describe Chef::Knife::SoftlayerServerCreate do
14
15
  before(:each) do
15
- @knife_softlayer_create = Chef::Knife::SoftlayerServerCreate.new
16
- @knife_softlayer_create.stub(:tcp_test_ssh).and_return(true)
17
-
18
- @softlayer_connection = double("connection", :createObject => {
19
- 'accountId' => 000001,
20
- 'createDate' => '2014-03-24T18:03:27-04:00',
21
- 'dedicatedAccountHostOnlyFlag' => false,
22
- 'domain' => 'example.com',
23
- 'fullyQualifiedDomainName' => 'test',
24
- 'hostname' =>"test",
25
- 'id' => 0000001,
26
- 'lastPowerStateId' => nil,
27
- 'lastVerifiedDate' => nil,
28
- 'maxCpu' => 4,
29
- 'maxCpuUnits' => 'CORE',
30
- 'maxMemory' => 4096,
31
- 'metricPollDate' => nil,
32
- 'modifyDate' => nil,
33
- 'startCpus' => 4,
34
- 'statusId' => 1001,
35
- 'globalIdentifier' => '93f3bfb6-3f48-4e9c-82ab-25e8b5dd14ce'
36
- })
37
-
38
- @softlayer_servers = double("servers")
39
- @cci = double("cci")
40
-
41
- @softlayer_server_attribs = { :id => '1234567',
42
- :public_ip_address => '33.33.33.33',
43
- :private_dns_name => 'example.com',
44
- :private_ip_address => '10.10.10.10',
45
- }
46
-
47
- @softlayer_server_attribs.each_pair do |attrib, value|
48
- @cci.stub(attrib).and_return(value)
49
- end
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'
50
29
  end
51
30
 
52
31
  describe "go-wrong cases for .run" do
53
32
  it "should raise an exception if we try to create/bootstrap a windows instance" do
54
- @knife_softlayer_create.config[:os_code] = 'WIN_2012-STD_64'
55
- expect { @knife_softlayer_create.run }.to raise_exception(Chef::Knife::SoftlayerServerCreateError)
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
+ [':ram', ':cores', ':hostname', ':domain', ':datacenter', ':os_code', ':block_storage'].each do |opt|
38
+ class_eval <<EOS, __FILE__, __LINE__
39
+ it "should should raise an ArgumentError if missing #{opt} option" do
40
+ @server_create.config.delete(#{opt})
41
+ expect { @server_create.run }.to raise_exception(ArgumentError)
42
+ end
43
+ EOS
56
44
  end
57
45
  end
58
46
 
59
47
  describe "go-right cases for .run" do
60
48
  before do
61
- @softlayer_connection.should_receive(:object_mask).with('mask.operatingSystem.passwords.password').and_return(@softlayer_servers)
62
- @softlayer_servers.should_receive(:object_with_id).with(1).and_return(@softlayer_servers)
63
- @softlayer_servers.should_receive(:getObject).and_return(@cci)
64
- @cci.should_receive(:[]).exactly(3).times.with('operatingSystem').and_return({'passwords' => ['foobar']})
65
- @cci.should_receive(:[]).with('primaryIpAddress').and_return('33.33.33.33')
66
-
67
- @public_ip = "33.33.33.33"
68
- SoftLayer::Service.should_receive(:new).twice.and_return(@softlayer_connection)
69
-
70
-
71
- @knife_softlayer_create.stub(:puts)
72
- @knife_softlayer_create.stub(:print)
73
- {
74
- :domain => 'example.com',
75
- :hostname => 'test',
76
- :flavor => 'medium',
77
- :chef_node_name => 'test.example.com',
78
- }.each do |key, value|
79
- @knife_softlayer_create.config[key] = value
80
- end
81
-
82
- @bootstrap = Chef::Knife::Bootstrap.new
83
- Chef::Knife::Bootstrap.stub(:new).and_return(@bootstrap)
84
- @bootstrap.should_receive(:run)
49
+ @server_create.stub(:apply_tags).and_return(Proc.new{})
50
+ Chef::Knife::Bootstrap.any_instance.stub(:run)
51
+ Fog::Compute::Softlayer::Server.any_instance.stub(:ready?).and_return(true)
52
+ Fog::Compute::Softlayer::Server.any_instance.stub(:sshable?).and_return(true)
85
53
  end
86
54
 
87
55
  it "defaults to a distro of 'chef-full' for a linux instance" do
88
- @knife_softlayer_create.config[:distro] = @knife_softlayer_create.options[:distro][:default]
89
- @knife_softlayer_create.run
90
- @bootstrap.config[:distro].should == 'chef-full'
56
+ @server_create.config[:distro] = @server_create.options[:distro][:default]
57
+ bootstrap = @server_create.linux_bootstrap(double('instance', :id => 42, :ssh_ip_address => '3.3.3.3', :private_ip_address => '3.3.3.3'))
58
+ bootstrap.config[:distro].should == 'chef-full'
91
59
  end
92
60
 
93
61
  it "creates an VM instance and bootstraps it" do
94
- @knife_softlayer_create.run
95
- @knife_softlayer_create.cci.should_not == nil
62
+ @server_create.run
63
+ @server_create.connection.virtual_guests.count.should == 1
96
64
  end
97
65
 
98
66
  it "sets ssh_user value by using -x option" do
99
- # default value of config[:ssh_user] is root
100
- @knife_softlayer_create.config[:ssh_user] = "tim-eah!"
67
+ #default value of config[:ssh_user] is root
68
+ @server_create.config[:ssh_user] = "tim-eah!"
101
69
 
102
- @knife_softlayer_create.run
103
- @knife_softlayer_create.config[:ssh_user].should == "tim-eah!"
104
- @knife_softlayer_create.cci.should_not == nil
70
+ @server_create.run
71
+ @server_create.config[:ssh_user].should == "tim-eah!"
72
+ @server_create.connection.virtual_guests.count.should == 1
105
73
  end
106
74
 
107
75
  it "sets ssh_password value by using -P option" do
108
76
  # default value of config[:ssh_password] is nil
109
- @knife_softlayer_create.config[:ssh_password] = "passw0rd"
77
+ @server_create.config[:ssh_password] = "passw0rd"
110
78
 
111
- @knife_softlayer_create.run
112
- @knife_softlayer_create.config[:ssh_password].should == "passw0rd"
113
- @knife_softlayer_create.cci.should_not == nil
79
+ @server_create.run
80
+ @server_create.config[:ssh_password].should == "passw0rd"
81
+ @server_create.connection.virtual_guests.count.should == 1
114
82
  end
115
83
 
116
84
  it "sets ssh_port value by using -p option" do
117
85
  # default value of config[:ssh_port] is 22
118
- @knife_softlayer_create.config[:ssh_port] = "86"
86
+ @server_create.config[:ssh_port] = "86"
119
87
 
120
- @knife_softlayer_create.run
121
- @knife_softlayer_create.config[:ssh_port].should == "86"
122
- @knife_softlayer_create.cci.should_not == nil
88
+ @server_create.run
89
+ @server_create.config[:ssh_port].should == "86"
90
+ @server_create.connection.virtual_guests.count.should == 1
123
91
  end
124
92
 
125
93
  it "sets identity_file value by using -i option for ssh bootstrap protocol or linux image" do
126
94
  # default value of config[:identity_file] is nil
127
- @knife_softlayer_create.config[:identity_file] = "~/.ssh/mah_key_file.pem"
95
+ @server_create.config[:identity_file] = "~/.ssh/mah_key_file.pem"
128
96
 
129
- @knife_softlayer_create.run
130
- @knife_softlayer_create.config[:identity_file].should == "~/.ssh/mah_key_file.pem"
131
- @knife_softlayer_create.cci.should_not == nil
97
+ @server_create.run
98
+ @server_create.config[:identity_file].should == "~/.ssh/mah_key_file.pem"
99
+ @server_create.connection.virtual_guests.count.should == 1
132
100
  end
133
101
 
134
102
  end
@@ -7,65 +7,41 @@
7
7
 
8
8
  require File.expand_path('../../spec_helper', __FILE__)
9
9
  require 'chef/knife/bootstrap'
10
- require 'softlayer_api'
11
-
10
+ require 'fog/softlayer'
11
+ Fog.mock!
12
12
 
13
13
 
14
14
  describe Chef::Knife::SoftlayerServerDestroy do
15
- before do
16
- end
15
+ before(:each) do
16
+ Chef::Config[:knife][:softlayer_username] = 'username'
17
+ Chef::Config[:knife][:softlayer_api_key] = 'key'
18
+
17
19
 
18
- describe "run" do
19
- before(:each) do
20
- Chef::Config[:client_key] = nil
21
- @cci_attributes = {
22
- :id => '1000001',
23
- :flavor_id => 'medium',
24
- :fqdn => 'test.example.com',
25
- :public_ip_address => '33.33.33.33',
26
- :private_ip_address => '10.10.10.10'
27
- }
20
+ @attributes = {
21
+ :id => '1000001',
22
+ :name => '1000001',
23
+ :flavor_id => 'medium',
24
+ :fqdn => 'test.example.com',
25
+ :public_ip_address => '33.33.33.33',
26
+ :private_ip_address => '10.10.10.10',
27
+ :tags => ['slid=1000001']
28
+ }
28
29
 
29
- @knife_softlayer_destroy = Chef::Knife::SoftlayerServerDestroy.new
30
- @knife_softlayer_destroy.stub(:destroy_item).and_return(true)
31
- @softlayer_servers = double()
32
- @knife_softlayer_destroy.ui.stub(:confirm)
33
- @knife_softlayer_destroy.stub(:msg_pair)
34
- @cci = double(@cci_attributes)
35
- @softlayer_connection = double("connection", :createObject => {
36
- 'accountId' => 000001,
37
- 'createDate' => '2014-03-24T18:03:27-04:00',
38
- 'dedicatedAccountHostOnlyFlag' => false,
39
- 'domain' => 'example.com',
40
- 'fullyQualifiedDomainName' => 'test',
41
- 'hostname' =>"test",
42
- 'id' => 0000001,
43
- 'lastPowerStateId' => nil,
44
- 'lastVerifiedDate' => nil,
45
- 'maxCpu' => 4,
46
- 'maxCpuUnits' => 'CORE',
47
- 'maxMemory' => 4096,
48
- 'metricPollDate' => nil,
49
- 'modifyDate' => nil,
50
- 'startCpus' => 4,
51
- 'statusId' => 1001,
52
- 'globalIdentifier' => '93f3bfb6-3f48-4e9c-82ab-25e8b5dd14ce'
53
- })
54
- @softlayer_connection.stub(:findByIpAddress).and_return({ 'id' => 100001 })
55
- @softlayer_connection.stub(:object_with_id).and_return(@softlayer_connection)
56
- @softlayer_connection.stub(:deleteObject).and_return(true)
57
- @knife_softlayer_destroy.ui.stub(:warn)
58
- @knife_softlayer_destroy.node = double("node", :name => 'foo')
59
- SoftLayer::Service.should_receive(:new).twice.and_return(@softlayer_connection)
60
- end
30
+ @knife_softlayer_destroy = Chef::Knife::SoftlayerServerDestroy.new
31
+ @knife_softlayer_destroy.connection.virtual_guests = @vm_attributes
32
+ @knife_softlayer_destroy.node = double("node", @attributes)
33
+ @knife_softlayer_destroy.stub(:destroy_item)
34
+ instance = double(@attributes)
35
+ @knife_softlayer_destroy.stub_chain(:connection, :servers, :get).and_return(instance)
61
36
 
62
- it "should be talking to the softlayer api and the chef server" do
63
- Chef::Search::Query.stub(:new).and_return(double("query", :search => {}))
64
- @knife_softlayer_destroy.config[:ip_address] = '33.33.33.33'
65
- @softlayer_connection.should_receive(:findByIpAddress).with('33.33.33.33')
66
- @softlayer_connection.should_receive(:deleteObject)
67
- @knife_softlayer_destroy.run
68
- end
69
37
 
70
38
  end
39
+
40
+ it "should be talking to the softlayer api and the chef server" do
41
+ Chef::Search::Query.stub(:new).and_return(double("query", :search => {}))
42
+ @knife_softlayer_destroy.config[:ip_address] = '33.33.33.33'
43
+ @knife_softlayer_destroy.connection.servers.get.should_receive(:destroy)
44
+ @knife_softlayer_destroy.run
45
+ end
46
+
71
47
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-softlayer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0.pre.f0ba31b95
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Eldridge
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-16 00:00:00.000000000 Z
11
+ date: 2014-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: softlayer_api
14
+ name: fog-softlayer
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.8
19
+ version: 0.3.14
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 1.0.8
26
+ version: 0.3.14
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: knife-windows
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -157,11 +157,18 @@ files:
157
157
  - lib/chef/knife/flavor/base.rb
158
158
  - lib/chef/knife/softlayer.rb
159
159
  - lib/chef/knife/softlayer_base.rb
160
+ - lib/chef/knife/softlayer_datacenter_list.rb
161
+ - lib/chef/knife/softlayer_datacenter_show.rb
160
162
  - lib/chef/knife/softlayer_delete.rb
161
163
  - lib/chef/knife/softlayer_flavor_list.rb
164
+ - lib/chef/knife/softlayer_global_ip_list.rb
165
+ - lib/chef/knife/softlayer_image_list.rb
162
166
  - lib/chef/knife/softlayer_list.rb
163
167
  - lib/chef/knife/softlayer_server_create.rb
164
168
  - lib/chef/knife/softlayer_server_destroy.rb
169
+ - lib/chef/knife/softlayer_vlan_create.rb
170
+ - lib/chef/knife/softlayer_vlan_list.rb
171
+ - lib/chef/knife/softlayer_vlan_show.rb
165
172
  - lib/knife-softlayer/version.rb
166
173
  - spec/spec_helper.rb
167
174
  - spec/unit/softlayer_base_spec.rb
@@ -182,9 +189,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
182
189
  version: '0'
183
190
  required_rubygems_version: !ruby/object:Gem::Requirement
184
191
  requirements:
185
- - - ! '>='
192
+ - - ! '>'
186
193
  - !ruby/object:Gem::Version
187
- version: '0'
194
+ version: 1.3.1
188
195
  requirements: []
189
196
  rubyforge_project:
190
197
  rubygems_version: 2.2.2