knife-openstack 0.8.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,29 +1,34 @@
1
+ ## v0.8.1
2
+
3
+ * KNIFE-296 knife-windows overrides -i, -p, -P and -x options with winrm values
4
+ * KNIFE-304 enable setting the ssh port for knife-openstack
5
+
1
6
  ## v0.8.0
2
7
 
3
- * Windows bootstrapping (winrm-based) support for knife-openstack (KNIFE-221)(Chirag Jog)
8
+ * KNIFE-221 Windows bootstrapping (winrm-based) support for knife-openstack (Chirag Jog)
4
9
 
5
10
  ## v0.7.1
6
11
 
7
- * file permissions fixed (KNIFE-261)
12
+ * KNIFE-261 file permissions fixed
8
13
 
9
14
  ## v0.7.0
10
15
  * Update dependency on to Fog 1.10.0
11
16
  * 'delay-loading' changes to reduce load-time (Mohit Sethi)
12
- * Use the hint with the bootstrap method instead of assuming the :personality works with the server.create method (KNIFE-201)
13
- * Added 'knife openstack group list' for listing security groups and their rules (KNIFE-227)
17
+ * KNIFE-201 Use the hint with the bootstrap method instead of assuming the :personality works with the server.create method
18
+ * KNIFE-227 Added 'knife openstack group list' for listing security groups and their rules
14
19
  * Filter out extraneous images from knife openstack image list and added '--disable-filter' to disable
15
20
  * Fixed minor issue for public ip addresses (Edmund Haselwanter)
16
- * Fixed security groups, adding `-G` support (KNIFE-230)
21
+ * KNIFE-230 Fixed security groups, adding `-G` support
17
22
  * Added snapshots as a new column in image list
18
- * "knife openstack image list" fails with empty image name (KNIFE-83)(Simon Belluzzo)
19
- * excon / fog errors are a JSON blob, Rescue fog errors (KNIFE-87)(Bryan McLellan)
23
+ * KNIFE-83 "knife openstack image list" fails with empty image name (Simon Belluzzo)
24
+ * KNIFE-87 excon / fog errors are a JSON blob, Rescue fog errors (Bryan McLellan)
20
25
  * Better error handling for connection errors.
21
- * Pass ssh_password to bootstrap (KNIFE-88)(David Petzel)
26
+ * KNIFE-88 Pass ssh_password to bootstrap (David Petzel)
22
27
  * Catch Net Unreachable error (E.J. Finneran)
23
- * Allow an option to ignore the SSL cert (KNIFE-225)(BK Box)
28
+ * KNIFE-225 Allow an option to ignore the SSL cert (BK Box)
24
29
  * Attach to floating IPs (Mohit Sethi)
25
- * Key pair is not required (KNIFE-226)(BK Box)
26
- * Fog 1.10.0 changes API for OpenStack IP addresses (KNIFE-248)
30
+ * KNIFE-226 Key pair is not required (BK Box)
31
+ * KNIFE-248 Fog 1.10.0 changes API for OpenStack IP addresses
27
32
 
28
33
  ## v0.6.2
29
34
  * Use less pessimistic fog version constraint.
@@ -33,10 +38,10 @@
33
38
  * Switched to OpenStack API from OpenStack EC2 API.
34
39
  * Updated to point to Fog 1.4.0 for latest `OpenStack` provider
35
40
  * testing with Diablo & Essex
36
- * knife openstack server create (KNIFE_OPENSTACK-1)
37
- * knife openstack server delete (KNIFE_OPENSTACK-2)
38
- * Support for unenven_columns for prettier output (KNIFE_OPENSTACK-5)
39
- * Added chef gem dependency (KNIFE_OPENSTACK-6)
41
+ * KNIFE_OPENSTACK-1 knife openstack server create
42
+ * KNIFE_OPENSTACK-2 knife openstack server delete
43
+ * KNIFE_OPENSTACK-5 Support for unenven_columns for prettier output
44
+ * KNIFE_OPENSTACK-6 Added chef gem dependency
40
45
  * Added virtual cpus to 'knife openstack flavor list'
41
46
  * Removed unsupported features to match current state of plugin (public_key, kernel, architecture, cores, location)
42
47
  * Added support for openstack_tenant (Rob Hirschfeld & Alexander Gordeev)
@@ -54,15 +59,14 @@
54
59
  This is a list of missing(?) features and open questions currently under development consideration:
55
60
 
56
61
  * Basic availability zones support (Jarek Zmudzinski) NEED TESTING ACCESS FOR AVAILABILITY ZONES
57
- * Windows bootstrapping (winrm-based) support for knife-openstack (KNIFE-221) winrm branch, UGLY WARNINGS NEED RESOLUTION
58
62
  * purge only works when names match up with clients
59
63
  * `knife openstack floating list|associate|release NODE` with --floating-ip-pool also
60
- * Allow specifying the name of the pool when using floating IPs (KNIFE-229)
64
+ * KNIFE-229 Allow specifying the name of the pool when using floating IPs
61
65
  * attempt to allocate a floating ipaddress if none if free, currently missing in Fog
62
- * take either the flavor ID or the flavor name (KNIFE-76)
66
+ * KNIFE-76 take either the flavor ID or the flavor name
63
67
  * take either the image ID or the image name (similar for KNIFE-76)
64
- * server create with expired password hangs (KNIFE-86)
65
- * added ability to specify arbitrary network ID (KNIFE-231)
68
+ * KNIFE-86 server create with expired password hangs
69
+ * KNIFE-231 added ability to specify arbitrary network ID
66
70
  * assumption of only single floating IP (and fog uses the last as the public_ip_address)
67
71
  * probably other places public network is assumed that could cause issues
68
72
  * fog is putting the original public IP address into the private_ip_address method when you get a floating_ip, this is wrong. Remove KNIFE-248 code once fixed.
@@ -82,6 +82,13 @@ class Chef
82
82
  :description => "The OpenStack SSH keypair id",
83
83
  :proc => Proc.new { |key| Chef::Config[:knife][:openstack_ssh_key_id] = key }
84
84
 
85
+ option :ssh_port,
86
+ :short => "-p PORT",
87
+ :long => "--ssh-port PORT",
88
+ :description => "The ssh port",
89
+ :default => "22",
90
+ :proc => Proc.new { |key| Chef::Config[:knife][:ssh_port] = key }
91
+
85
92
  option :ssh_user,
86
93
  :short => "-x USERNAME",
87
94
  :long => "--ssh-user USERNAME",
@@ -149,11 +156,11 @@ class Chef
149
156
  :default => 600,
150
157
  :proc => Proc.new { |v| Chef::Config[:knife][:server_create_timeouts] = v}
151
158
 
152
- def tcp_test_ssh(hostname)
153
- tcp_socket = TCPSocket.new(hostname, 22)
159
+ def tcp_test_ssh(hostname, port)
160
+ tcp_socket = TCPSocket.new(hostname, port)
154
161
  readable = IO.select([tcp_socket], nil, nil, 5)
155
162
  if readable
156
- Chef::Log.debug("sshd accepting connections on #{hostname}, banner is #{tcp_socket.gets}")
163
+ Chef::Log.debug("sshd accepting connections on #{hostname} port #{port}, banner is #{tcp_socket.gets}")
157
164
  yield
158
165
  true
159
166
  else
@@ -210,6 +217,28 @@ class Chef
210
217
  validate!
211
218
  if locate_config_value(:bootstrap_protocol) == 'winrm'
212
219
  load_winrm_deps
220
+ else
221
+ # workaround for KNIFE-296 winrm values stomping on ssh values
222
+ # unchanged ssh_user and changed winrm_user, override ssh_user
223
+ if locate_config_value(:ssh_user).eql?(options[:ssh_user][:default]) &&
224
+ !locate_config_value(:winrm_user).eql?(options[:winrm_user][:default])
225
+ config[:ssh_user] = locate_config_value(:winrm_user)
226
+ end
227
+ # unchanged ssh_port and changed winrm_port, override ssh_port
228
+ if locate_config_value(:ssh_port).eql?(options[:ssh_port][:default]) &&
229
+ !locate_config_value(:winrm_port).eql?(options[:winrm_port][:default])
230
+ config[:ssh_port] = locate_config_value(:winrm_port)
231
+ end
232
+ # unset ssh_password and set winrm_password, override ssh_password
233
+ if locate_config_value(:ssh_password).nil? &&
234
+ !locate_config_value(:winrm_password).nil?
235
+ config[:ssh_password] = locate_config_value(:winrm_password)
236
+ end
237
+ # unset identity_file and set kerberos_keytab_file, override identity_file
238
+ if locate_config_value(:identity_file).nil? &&
239
+ !locate_config_value(:kerberos_keytab_file).nil?
240
+ config[:identity_file] = locate_config_value(:kerberos_keytab_file)
241
+ end
213
242
  end
214
243
  #servers require a name, generate one if not passed
215
244
  node_name = get_node_name(config[:chef_node_name])
@@ -307,8 +336,9 @@ class Chef
307
336
  print(".") until tcp_test_winrm(bootstrap_ip_address, locate_config_value(:winrm_port))
308
337
  bootstrap_for_windows_node(server, bootstrap_ip_address).run
309
338
  else
339
+ Chef::Log.debug("Waiting for sshd on IP address: #{bootstrap_ip_address} and port: #{locate_config_value(:ssh_port)}")
310
340
  print "\n#{ui.color("Waiting for sshd", :magenta)}"
311
- print(".") until tcp_test_ssh(bootstrap_ip_address) {
341
+ print(".") until tcp_test_ssh(bootstrap_ip_address, locate_config_value(:ssh_port)) {
312
342
  sleep @initial_sleep_delay ||= 10
313
343
  puts("done")
314
344
  }
@@ -358,6 +388,7 @@ class Chef
358
388
  bootstrap = Chef::Knife::Bootstrap.new
359
389
  bootstrap.name_args = [bootstrap_ip_address]
360
390
  bootstrap.config[:ssh_user] = config[:ssh_user]
391
+ bootstrap.config[:ssh_port] = config[:ssh_port]
361
392
  bootstrap.config[:identity_file] = config[:identity_file]
362
393
  bootstrap.config[:host_key_verify] = config[:host_key_verify]
363
394
  bootstrap.config[:use_sudo] = true unless config[:ssh_user] == 'root'
@@ -1,6 +1,6 @@
1
1
  module Knife
2
2
  module OpenStack
3
- VERSION = "0.8.0"
3
+ VERSION = "0.8.1"
4
4
  MAJOR, MINOR, TINY = VERSION.split('.')
5
5
  end
6
6
  end
@@ -14,10 +14,10 @@ describe Chef::Knife::OpenstackServerCreate do
14
14
  @openstack_connection.stub_chain(:flavors, :get).and_return ('flavor_id')
15
15
  @openstack_connection.stub_chain(:images, :get).and_return mock('image_id')
16
16
  @openstack_connection.stub_chain(:addresses).and_return [mock('addresses', {
17
- :instance_id => nil,
18
- :ip => '111.111.111.111',
19
- :fixed_ip => true
20
- })]
17
+ :instance_id => nil,
18
+ :ip => '111.111.111.111',
19
+ :fixed_ip => true
20
+ })]
21
21
 
22
22
  @knife_openstack_create = Chef::Knife::OpenstackServerCreate.new
23
23
  @knife_openstack_create.initial_sleep_delay = 0
@@ -43,16 +43,16 @@ describe Chef::Knife::OpenstackServerCreate do
43
43
  @new_openstack_server = mock()
44
44
 
45
45
  @openstack_server_attribs = { :name => 'Mock Server',
46
- :id => 'id-123456',
47
- :key_name => 'key_name',
48
- :flavor => 'flavor_id',
49
- :image => 'image_id',
50
- :addresses => {
51
- 'public' => [{'addr' => '75.101.253.10'}],
52
- 'private' => [{'addr' => '10.251.75.20'}]
53
- },
54
- :password => 'password'
55
- }
46
+ :id => 'id-123456',
47
+ :key_name => 'key_name',
48
+ :flavor => 'flavor_id',
49
+ :image => 'image_id',
50
+ :addresses => {
51
+ 'public' => [{'addr' => '75.101.253.10'}],
52
+ 'private' => [{'addr' => '10.251.75.20'}]
53
+ },
54
+ :password => 'password'
55
+ }
56
56
 
57
57
 
58
58
  @openstack_server_attribs.each_pair do |attrib, value|
@@ -60,6 +60,25 @@ describe Chef::Knife::OpenstackServerCreate do
60
60
  end
61
61
  end
62
62
 
63
+ describe "options" do
64
+ before do
65
+ @options = @knife_openstack_create.options
66
+ end
67
+
68
+ it "ensures default options" do
69
+ @options[:bootstrap_protocol][:default].should == nil
70
+ @options[:distro][:default].should == 'chef-full'
71
+ @options[:floating_ip][:default].should == '-1'
72
+ @options[:host_key_verify][:default].should == true
73
+ @options[:private_network][:default].should == false
74
+ @options[:run_list][:default].should == []
75
+ @options[:security_groups][:default].should == ['default']
76
+ @options[:server_create_timeout][:default].should == 600
77
+ @options[:ssh_port][:default].should == '22'
78
+ @options[:ssh_user][:default].should == 'root'
79
+ end
80
+ end
81
+
63
82
  describe "run" do
64
83
  before do
65
84
  @openstack_servers.should_receive(:create).and_return(@new_openstack_server)
@@ -96,6 +115,7 @@ describe Chef::Knife::OpenstackServerCreate do
96
115
  describe "when configuring the bootstrap process" do
97
116
  before do
98
117
  @knife_openstack_create.config[:ssh_user] = "ubuntu"
118
+ @knife_openstack_create.config[:ssh_port] = "44"
99
119
  @knife_openstack_create.config[:identity_file] = "~/.ssh/key.pem"
100
120
  @knife_openstack_create.config[:chef_node_name] = "blarf"
101
121
  @knife_openstack_create.config[:template_file] = '~/.chef/templates/my-bootstrap.sh.erb'
@@ -118,6 +138,10 @@ describe Chef::Knife::OpenstackServerCreate do
118
138
  @bootstrap.config[:ssh_user].should == 'ubuntu'
119
139
  end
120
140
 
141
+ it "configures the bootstrap to use the correct ssh_port" do
142
+ @bootstrap.config[:ssh_port].should == '44'
143
+ end
144
+
121
145
  it "configures the bootstrap to use the correct ssh identity file" do
122
146
  @bootstrap.config[:identity_file].should == "~/.ssh/key.pem"
123
147
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-openstack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-05-13 00:00:00.000000000 Z
13
+ date: 2013-06-14 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: fog
@@ -171,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
171
  version: '0'
172
172
  requirements: []
173
173
  rubyforge_project:
174
- rubygems_version: 1.8.24
174
+ rubygems_version: 1.8.25
175
175
  signing_key:
176
176
  specification_version: 3
177
177
  summary: OpenStack Compute Support for Chef's Knife Command