knife-ec2 0.11.0 → 0.12.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 75bf2719d93fe8ea9a23838a6c3a92abc4375c87
4
- data.tar.gz: 7a8cdeb7c6bfcc590423ec6e03ee884b4f63a4a7
3
+ metadata.gz: df82616670ab17b61699fa1d344500f0c80309fa
4
+ data.tar.gz: e4969b3ddaac2b8173b3bc74c6b94e1916058317
5
5
  SHA512:
6
- metadata.gz: 01625b07776e0684ec359140a62d513d5bc4df03754a0ef09f23133efb9ee2a2b5bfa52cabc53c4af07b121f4ed43e5a0fd1bdddde4ff9abfc93fe51e65b34e4
7
- data.tar.gz: 2e2ea55c71a4989cf3a31da873723372d0d4370801e984f102ddc99536c9b45bcc9a6018955f4f3e701c13a4872f8abaee5c9659685d1a28415ae1af402e1052
6
+ metadata.gz: d600ff181661d04c4702789a7042bbea70bd3c4998f4f4031e089d215c7d51e2a3499f375c1b7f3fb9a14f1186a5343b50b94fe53816b5448469c674bd252b0c
7
+ data.tar.gz: b46b7174e1833ff71798c762e2c95db0e4cf9c93fc6befbaa205c1d365a11e9dd0fc1f1d2c20e662df007c54d858893c13a36ca99ddbe9bb6e37c98dab54714b
@@ -4,7 +4,13 @@ Note: this log contains only changes from knife-ec2 release 0.8.0 and later
4
4
  -- it does not contain the changes from prior releases. To view change history
5
5
  prior to release 0.8.0, please visit the [source repository](https://github.com/opscode/knife-ec2/commits).
6
6
 
7
- ## Latest release: 0.11.0 (2015-08-24)
7
+ ## Latest Release: 0.12.0 (2015-10-1)
8
+
9
+ * [knife-ec2:#305](https://github.com/chef/knife-ec2/pull/305) Updates to support standard .aws/credentials file
10
+ * [knife-ec2 #354](https://github.com/chef/knife-ec2/pull/354) knife-windows 1.0.0 dependency, support for validatorless bootstrap, other Chef 12 bootstrap options
11
+ * [knife-ec2 #356](https://github.com/chef/knife-ec2/pull/356) Added --forward-agent option
12
+
13
+ ## Release: 0.11.0 (2015-08-24)
8
14
  * [knife-ec2:#330](https://github.com/chef/knife-ec2/pull/330) Modification for attribute precedence issue
9
15
  * [knife-ec2:#293](https://github.com/chef/knife-ec2/pull/293) s3_source: Lazy load fog library
10
16
  * [knife-ec2:#284](https://github.com/chef/knife-ec2/pull/284) Enable Spot Pricing
@@ -4,65 +4,58 @@ This file is reset everytime when a new release is done. Contents of this file i
4
4
 
5
5
  # knife-ec2 doc changes
6
6
 
7
- Documentation changes are given below for **knife-ec2 version 0.10.0**.
7
+ Documentation changes are given below for **knife-ec2 version 0.12.0**.
8
+
9
+ ## `knife ec2 server create` subcommand changes
10
+
11
+ ### SSH agent forwarding with --forward-agent option
12
+ The `--forward-agent` option has been added to the `knife ec2 server
13
+ create` subcommand. This enables SSH agent forwarding, and has the
14
+ same behavior during bootstrap of the created node as the
15
+ `--forward-agent` option of the [`knife bootstrap` subcommand](https://docs.chef.io/knife_bootstrap.html).
16
+
17
+ ### WinRM security `--winrm-authentication-protocol` option
18
+ `knife-ec2`'s `server create` subcommand supports bootstrap via
19
+ the `WinRM` remote command protocol. The
20
+ `--winrm-authentication-protocol` option controls authentication to
21
+ the remote system (the bootstrapped node). This option's behavior is
22
+ covered in the
23
+ [knife-windows](https://github.com/chef/knife-windows/blob/v1.0.0/DOC_CHANGES.md)
24
+ subcommand documentation which has identically named option.
25
+
26
+ Note that with this change, the default authentication used for WinRM
27
+ communication specified by the `--winrm-authentication-protocol`
28
+ option is the `negotiate` protocol, which is different than that used
29
+ by previous versions of `knife-ec2`. This may lead to some
30
+ compatibility issues when using WinRM's plaintext transport
31
+ (`--winrm-transport` set to the default of `plaintext`) running from `knife ec2 server create`
32
+ from an operating system other than Windows.
33
+
34
+ To avoid problems with the `negotiate` protocol on a non-Windows
35
+ system, configure `--winrm-transport` to `ssl` to use SSL which also
36
+ improves the robustness against information disclosure or tampering
37
+ attacks.
38
+
39
+ You may also revert to previous authentication behavior by specifying `basic` for the
40
+ `--winrm-authentication-protocol` option. More details on this change
41
+ can be found in [documentation](https://github.com/chef/knife-windows/blob/v1.0.0/DOC_CHANGES.md#winrm-authentication-protocol-defaults-to-negotiate-regardless-of-name-formats) for `knife-windows`.
42
+
43
+ ### Chef Client installation options on Windows
44
+ The following options are available for Windows systems:
45
+
46
+ * `--msi-url URL`: Optional. Used to override the location from which Chef
47
+ Client is downloaded. If not specified, Chef Client is downloaded
48
+ from the Internet -- this option allows downloading from a private network
49
+ location for instance.
50
+ * `--install-as-service`: Install chef-client as a service on Windows
51
+ systems
52
+ * `--bootstrap-install-command`: Optional. Instead of downloading Chef
53
+ Client and installing it using a default installation command,
54
+ bootstrap will invoke this command. If an image already has
55
+ Chef Client installed, this command can be specified as empty
56
+ (`''`), in which case no installation will be done and the rest of
57
+ bootstrap will proceed as if it's already installed.
58
+
59
+ For more detail, see the [knife-windows documentation](https://docs.chef.io/plugin_knife_windows.html).
8
60
 
9
- ## Provisioned IOPS support for `server create` command
10
61
 
11
- Options are now available in the `knife ec2 server create` subcommand to
12
- specify provisioned IOPS for the created instance.
13
-
14
- ### Option `--ebs-volume-type`
15
-
16
- This command line option and associated plugin configuration `:ebs_volume_type` allow you to specify an EBS volume of type `standard` or `io1` as a `string` parameter to this option. The former is the default, the latter will allow the specification of a provisioned IOPS rate through the `--provisioned-iops` option.
17
-
18
- ### Option `--provisioned-iops`
19
- This command line option and the associated `:ebs_provisioned_iops` plugin
20
- configuration enables the EC2 instance to be configured with the specified
21
- provisioned IOPS rate given as an argument to this option. It is only valid if
22
- the EBS volume type is `io1` as specified by the `--ebs-volume-type` option
23
- for this plugin.
24
-
25
- ## Use of secret parameters from S3 for `server create` command
26
-
27
- The options below allow some secrets used with the `knife ec2 server create`
28
- command to be specified as URL's. Examples are also given in the README.md.
29
-
30
- ### Option `--s3-secret`
31
- This option allows the specification of an AWS S3 storage bucket that contains
32
- a data bag secret file -- this option can be used in place of the
33
- `secret_file` option. It takes an S3 URL as an argument (e.g.
34
- `s3://bucket/file`) -- that file should contain encrypted data bag secret file
35
-
36
- ### Option `--validation-key-url`
37
- This option allows the validation key to be specified as a URL. It takes a URL
38
- as an argument.
39
-
40
- ## Option `--aws-session-token`
41
- The option `--aws-session-token` was added for all knife-ec2 subcommands to
42
- allow support for federation use cases utilizing EC2 STS tokens.
43
-
44
- ## SSH Gateway from SSH Config
45
- Any available SSH Gateway settings in your SSH configuration file are now used
46
- by default. This includes using any SSH keys specified for the target host.
47
- This allows simpler command-line usage of the knife plugin with less of a need
48
- for complex command line invocations.
49
-
50
- ## Support Spot Instances
51
- You can now request a spot instance at a specific price.
52
-
53
- ### Option `--spot-price`
54
- This option allows the maximum desired spot price to be specified. It takes a
55
- price in US dollars.
56
-
57
- ## Pass separate SSH Gateway key
58
- You can pass an SSH key to be used for authenticating to the SSH Gateway with
59
- the --ssh-gateway-identity option.
60
-
61
- ### options
62
-
63
- ```
64
- --aws-session-token
65
- ```
66
-
67
- Your AWS Session Token, for use with AWS STS Federation or Session Tokens.
68
- This option is available for all subcommands.
data/README.md CHANGED
@@ -87,6 +87,13 @@ this file in your <tt>knife.rb</tt> file, like so:
87
87
  knife[:aws_credential_file] = "/path/to/credentials/file/in/above/format"
88
88
  ```
89
89
 
90
+ If you have multiple profiles in your credentials file you can define which
91
+ profile to use. The `default` profile will be used if not supplied,
92
+
93
+ ```ruby
94
+ knife[:aws_profile] = "personal"
95
+ ```
96
+
90
97
  Additionally the following options may be set in your `knife.rb`:
91
98
 
92
99
  - flavor
@@ -153,6 +160,21 @@ Provisions a new server in the Amazon EC2 and then perform a Chef bootstrap
153
160
 
154
161
  View additional information on configuring Windows images for bootstrap in the documentation for [knife-windows](http://docs.chef.io/plugin_knife_windows.html).
155
162
 
163
+ ##### Options for bootstrapping Windows
164
+
165
+ The `knife ec2 server create` command also supports the following
166
+ options for bootstrapping a Windows node after the VM s created:
167
+
168
+ :winrm_password The WinRM password
169
+ :winrm_authentication_protocol Defaults to negotiate, supports kerberos, can be set to basic for debugging
170
+ :winrm_transport Defaults to plaintext, use ssl for improved privacy
171
+ :winrm_port Defaults to 5985 plaintext transport, or 5986 for SSL
172
+ :ca_trust_file The CA certificate file to use to verify the server when using SSL
173
+ :winrm_ssl_verify_mode Defaults to verify_peer, use verify_none to skip validation of the server certificate during testing
174
+ :kerberos_keytab_file The Kerberos keytab file used for authentication
175
+ :kerberos_realm The Kerberos realm used for authentication
176
+ :kerberos_service The Kerberos service used for authentication
177
+
156
178
  #### `knife ec2 server delete`
157
179
  Deletes an existing server in the currently configured AWS account. **By default, this does not delete the associated node and client objects from the Chef server. To do so, add the `--purge` flag**
158
180
 
@@ -6,33 +6,47 @@ Example Note:
6
6
  ## Example Heading
7
7
  Details about the thing that changed that needs to get included in the Release Notes in markdown.
8
8
  -->
9
- # knife-ec2 0.11.0 release notes:
9
+ # knife-ec2 0.12.0 release notes:
10
+
10
11
  This release of `knife-ec2` adds features like spot pricing, EBS volume encryption support and some bug fixes. There is also a dependency update for the `fog` gem and 'em-winrm' dependency is removed.
11
12
 
12
- Special thanks go to contributors **Erik Frey** for addressing
13
- [knife-ec2:#94](https://github.com/chef/knife-ec2/pull/94) and **Igor Shpakov** for lazy loading fog library.
13
+ ## Compatibility note for Windows nodes: `--winrm-authentication-protocol basic`
14
+ In this version of `knife-ec2`, the default authentication protocol
15
+ for Windows nodes is now `negotiate`for the `server create` subcommand. This can
16
+ cause bootstraps to fail if the remote Windows node is not configured
17
+ for `negotiate`. To work around this and retain the behavior of
18
+ previous releases, you can specify use `basic` authentication in your
19
+ `knife` configuration file or on the command line as in
20
+ this example:
21
+
22
+ knife ec2 server create -I ami-173d747e -G windows -f m1.medium --user-data ~/your-user-data-file -x 'a_local_user' -P 'yourpassword' --ssh-key your-public-key-id --winrm-authentication-protocol basic
23
+
24
+ ## Acknowledgements
25
+ Our thanks go to contributor **Peer Allan** for adding
26
+ [knife-ec2:#305](https://github.com/chef/knife-ec2/pull/305). This
27
+ enables the use of standard AWS credential configuration from `~/.aws/credentials`.
14
28
 
15
- See the [CHANGELOG](https://github.com/opscode/knife-ec2/blob/master/CHANGELOG.md) for a list of all changes in this release, and review
16
- [DOC_CHANGES.md](https://github.com/opscode/knife-ec2/blob/master/DOC_CHANGES.md) for relevant documentation updates.
29
+ ## Release information
30
+
31
+ See the [CHANGELOG](https://github.com/chef/knife-ec2/blob/0.12.0/CHANGELOG.md) for a list of all changes in this release, and review
32
+ [DOC_CHANGES.md](https://github.com/chef/knife-ec2/blob/0.12.0/DOC_CHANGES.md) for relevant documentation updates.
17
33
 
18
34
  Issues with `knife-ec2` should be reported in the issue system at
19
35
  https://github.com/opscode/knife-ec2/issues. Learn more about how you can
20
36
  contribute features and bug fixes to `knife-ec2` at https://github.com/opscode/knife-ec2/blob/master/CONTRIBUTING.md.
21
37
 
22
- ## Features added in knife-ec2 0.11.0
38
+ ## Features added in knife-ec2 0.12.0
23
39
 
24
- * Support for Spot Instances (from Erik Frey)
25
- * Lazy loading of fog library (from Igor Shpakov)
26
- * Support for EBS volume encryption in `knife-ec2 server create` options
27
- * Added ability to use IAM role credentials
40
+ * Support for `~/.aws/credentials` credential configuration (Peer Allan)
41
+ * Validatorless bootstrap for Windows nodes
42
+ * --forward-agent ssh agent forwarding support
43
+ * `--msi-url`, `--install-as-service`, `--bootstrap-install-command`
44
+ for Windows nodes
28
45
 
29
46
  ## knife-ec2 on RubyGems and Github
30
47
  https://rubygems.org/gems/knife-ec2
31
48
  https://github.com/opscode/knife-ec2
32
49
 
33
50
  ## Issues fixed in knife-ec2 0.11.0
34
-
35
- * Update `fog` gem dependency to `fog v1.29`
36
- * Remove 'em-winrm' gem dependency
37
- * [knife-ec2:#273](https://github.com/chef/knife-ec2/pull/273) Remove -s option for data bag secret and subnets
38
- * [knife-ec2:#265](https://github.com/chef/knife-ec2/pull/265) showing error message for incorrect option input
51
+ See the [0.12.0 CHANGELOG](https://github.com/chef/knife-ec2/blob/0.12.0/CHANGELOG.md)
52
+ for the complete list of issues fixed in this release.
@@ -1,28 +1,28 @@
1
- # -*- encoding: utf-8 -*-
2
- $LOAD_PATH.push File.expand_path('../lib', __FILE__)
3
- require 'knife-ec2/version'
4
-
5
- Gem::Specification.new do |s|
6
- s.name = 'knife-ec2'
7
- s.version = Knife::Ec2::VERSION
8
- s.authors = ['Adam Jacob', 'Seth Chisamore']
9
- s.email = ['adam@opscode.com', 'schisamo@opscode.com']
10
- s.homepage = 'https://github.com/opscode/knife-ec2'
11
- s.summary = "EC2 Support for Chef's Knife Command"
12
- s.description = s.summary
13
- s.license = 'Apache-2.0'
14
-
15
- s.files = `git ls-files`.split("\n")
16
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
- s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
18
-
19
- s.add_dependency 'fog', '~> 1.29.0'
20
- s.add_dependency 'knife-windows', '>= 0.8.2'
21
-
22
- s.add_development_dependency 'chef', '~> 12.0', '>= 12.2.1'
23
- s.add_development_dependency 'rspec', '~> 3.0'
24
- s.add_development_dependency 'rake', '~> 10.1'
25
- s.add_development_dependency 'sdoc', '~> 0.3'
26
-
27
- s.require_paths = ['lib']
28
- end
1
+ # -*- encoding: utf-8 -*-
2
+ $LOAD_PATH.push File.expand_path('../lib', __FILE__)
3
+ require 'knife-ec2/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'knife-ec2'
7
+ s.version = Knife::Ec2::VERSION
8
+ s.authors = ['Adam Jacob', 'Seth Chisamore']
9
+ s.email = ['adam@opscode.com', 'schisamo@opscode.com']
10
+ s.homepage = 'https://github.com/opscode/knife-ec2'
11
+ s.summary = "EC2 Support for Chef's Knife Command"
12
+ s.description = s.summary
13
+ s.license = 'Apache-2.0'
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
18
+
19
+ s.add_dependency 'fog', '~> 1.29.0'
20
+ s.add_dependency 'knife-windows', '~> 1.0'
21
+
22
+ s.add_development_dependency 'chef', '~> 12.0', '>= 12.2.1'
23
+ s.add_development_dependency 'rspec', '~> 3.0'
24
+ s.add_development_dependency 'rake', '~> 10.1'
25
+ s.add_development_dependency 'sdoc', '~> 0.3'
26
+
27
+ s.require_paths = ['lib']
28
+ end
@@ -39,6 +39,12 @@ class Chef
39
39
  :description => "File containing AWS credentials as used by aws cmdline tools",
40
40
  :proc => Proc.new { |key| Chef::Config[:knife][:aws_credential_file] = key }
41
41
 
42
+ option :aws_profile,
43
+ :long => "--aws-profile PROFILE",
44
+ :description => "AWS profile, from credential file, to use",
45
+ :default => 'default',
46
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_profile] = key }
47
+
42
48
  option :aws_access_key_id,
43
49
  :short => "-A ID",
44
50
  :long => "--aws-access-key-id KEY",
@@ -115,14 +121,14 @@ class Chef
115
121
  # AWSAccessKeyId=somethingsomethingdarkside
116
122
  # AWSSecretKey=somethingsomethingcomplete
117
123
  # OR
124
+ # [default]
118
125
  # aws_access_key_id = somethingsomethingdarkside
119
126
  # aws_secret_access_key = somethingsomethingdarkside
120
127
 
121
- aws_creds = []
122
- File.read(Chef::Config[:knife][:aws_credential_file]).each_line do | line |
123
- aws_creds << line.split("=").map(&:strip) if line.include?("=")
124
- end
125
- entries = Hash[*aws_creds.flatten]
128
+ aws_creds = ini_parse(File.read(Chef::Config[:knife][:aws_credential_file]))
129
+ profile = Chef::Config[:knife][:aws_profile] || 'default'
130
+ entries = aws_creds.values.first.has_key?("AWSAccessKeyId") ? aws_creds.values.first : aws_creds[profile]
131
+
126
132
  Chef::Config[:knife][:aws_access_key_id] = entries['AWSAccessKeyId'] || entries['aws_access_key_id']
127
133
  Chef::Config[:knife][:aws_secret_access_key] = entries['AWSSecretKey'] || entries['aws_secret_access_key']
128
134
  end
@@ -149,5 +155,24 @@ class Chef
149
155
  end
150
156
  name ||= ''
151
157
  end
158
+
159
+ def ini_parse(file)
160
+ current_section = {}
161
+ map = {}
162
+ file.each_line do |line|
163
+ line = line.split(/^|\s;/).first # remove comments
164
+ section = line.match(/^\s*\[([^\[\]]+)\]\s*$/) unless line.nil?
165
+ if section
166
+ current_section = section[1]
167
+ elsif current_section
168
+ item = line.match(/^\s*(.+?)\s*=\s*(.+?)\s*$/) unless line.nil?
169
+ if item
170
+ map[current_section] ||= {}
171
+ map[current_section][item[1]] = item[2]
172
+ end
173
+ end
174
+ end
175
+ map
176
+ end
152
177
  end
153
178
  end
@@ -20,6 +20,7 @@
20
20
  require 'chef/knife/ec2_base'
21
21
  require 'chef/knife/s3_source'
22
22
  require 'chef/knife/winrm_base'
23
+ require 'chef/knife/bootstrap_windows_base'
23
24
 
24
25
  class Chef
25
26
  class Knife
@@ -27,6 +28,7 @@ class Chef
27
28
 
28
29
  include Knife::Ec2Base
29
30
  include Knife::WinrmBase
31
+ include Knife::BootstrapWindowsBase
30
32
  deps do
31
33
  require 'tempfile'
32
34
  require 'fog'
@@ -385,6 +387,12 @@ class Chef
385
387
  :description => "Execute the bootstrap via sudo with password",
386
388
  :boolean => false
387
389
 
390
+ option :forward_agent,
391
+ :short => "-A",
392
+ :long => "--forward-agent",
393
+ :description => "Enable SSH agent forwarding",
394
+ :boolean => true
395
+
388
396
  def run
389
397
  $stdout.sync = true
390
398
 
@@ -678,6 +686,7 @@ class Chef
678
686
  bootstrap.config[:ca_trust_file] = locate_config_value(:ca_trust_file)
679
687
  bootstrap.config[:winrm_port] = locate_config_value(:winrm_port)
680
688
  bootstrap.config[:auth_timeout] = locate_config_value(:auth_timeout)
689
+ bootstrap.config[:winrm_ssl_verify_mode] = locate_config_value(:winrm_ssl_verify_mode)
681
690
  elsif locate_config_value(:bootstrap_protocol) == 'ssh'
682
691
  bootstrap = Chef::Knife::BootstrapWindowsSsh.new
683
692
  bootstrap.config[:ssh_user] = locate_config_value(:ssh_user)
@@ -685,11 +694,15 @@ class Chef
685
694
  bootstrap.config[:ssh_port] = locate_config_value(:ssh_port)
686
695
  bootstrap.config[:identity_file] = locate_config_value(:identity_file)
687
696
  bootstrap.config[:no_host_key_verify] = locate_config_value(:no_host_key_verify)
697
+ bootstrap.config[:forward_agent] = locate_config_value(:forward_agent)
688
698
  else
689
699
  ui.error("Unsupported Bootstrapping Protocol. Supported : winrm, ssh")
690
700
  exit 1
691
701
  end
692
702
  bootstrap.name_args = [fqdn]
703
+ bootstrap.config[:msi_url] = locate_config_value(:msi_url)
704
+ bootstrap.config[:install_as_service] = locate_config_value(:install_as_service)
705
+ bootstrap.config[:session_timeout] = locate_config_value(:session_timeout)
693
706
  bootstrap.config[:chef_node_name] = config[:chef_node_name] || server.id
694
707
  bootstrap_common_params(bootstrap)
695
708
  end
@@ -1166,7 +1179,6 @@ class Chef
1166
1179
 
1167
1180
  def load_winrm_deps
1168
1181
  require 'winrm'
1169
- require 'em-winrm'
1170
1182
  require 'chef/knife/winrm'
1171
1183
  require 'chef/knife/bootstrap_windows_winrm'
1172
1184
  require 'chef/knife/bootstrap_windows_ssh'
@@ -1,6 +1,6 @@
1
1
  module Knife
2
2
  module Ec2
3
- VERSION = "0.11.0"
3
+ VERSION = "0.12.0"
4
4
  MAJOR, MINOR, TINY = VERSION.split('.')
5
5
  end
6
6
  end
@@ -77,7 +77,7 @@ describe Chef::Knife::Ec2ServerCreate do
77
77
  :instance_id => 'test_spot_instance_id',
78
78
  :state => 'open',
79
79
  :key_name => 'ssh_key_name',
80
- :availability_zone => nil,
80
+ :availability_zone => nil,
81
81
  :flavor_id => 'm1.small',
82
82
  :image_id => 'image' }
83
83
 
@@ -465,7 +465,7 @@ describe Chef::Knife::Ec2ServerCreate do
465
465
  @aws_key = Chef::Config[:knife][:aws_ssh_key_id]
466
466
  allow(@knife_ec2_create).to receive(:ami).and_return(false)
467
467
  end
468
-
468
+
469
469
  it "gives warning message and creates the attribute with the required name" do
470
470
  expect(@knife_ec2_create.ui).to receive(:warn).with("Use of aws_ssh_key_id option in knife.rb config is deprecated, use ssh_key_name option instead.")
471
471
  @knife_ec2_create.validate!
@@ -479,7 +479,7 @@ describe Chef::Knife::Ec2ServerCreate do
479
479
  @aws_key = Chef::Config[:knife][:aws_ssh_key_id]
480
480
  allow(@knife_ec2_create).to receive(:ami).and_return(false)
481
481
  end
482
-
482
+
483
483
  it "gives warning message and gives preference to CLI value over knife config's value" do
484
484
  expect(@knife_ec2_create.ui).to receive(:warn).with("Use of aws_ssh_key_id option in knife.rb config is deprecated, use ssh_key_name option instead.")
485
485
  @knife_ec2_create.validate!
@@ -492,7 +492,7 @@ describe Chef::Knife::Ec2ServerCreate do
492
492
  Chef::Config[:knife][:ssh_key_name] = "mykey"
493
493
  allow(@knife_ec2_create).to receive(:ami).and_return(false)
494
494
  end
495
-
495
+
496
496
  it "does nothing" do
497
497
  @knife_ec2_create.validate!
498
498
  end
@@ -504,7 +504,7 @@ describe Chef::Knife::Ec2ServerCreate do
504
504
  Chef::Config[:knife][:ssh_key_name] = "mykey"
505
505
  @knife_ec2_create.config[:ssh_key_name] = "ssh_key_name"
506
506
  end
507
-
507
+
508
508
  it "ssh-key passed over CLI gets preference over knife config value" do
509
509
  server_def = @knife_ec2_create.create_server_def
510
510
  expect(server_def[:key_name]).to eq(@knife_ec2_create.config[:ssh_key_name])
@@ -595,6 +595,25 @@ describe Chef::Knife::Ec2ServerCreate do
595
595
  expect(Chef::Config[:knife][:hints]["ec2"]).not_to be_nil
596
596
  end
597
597
  end
598
+
599
+ describe "when configuring the ssh bootstrap process for windows" do
600
+ before do
601
+ allow(@knife_ec2_create).to receive(:fetch_server_fqdn).and_return("SERVERNAME")
602
+ @knife_ec2_create.config[:ssh_user] = "administrator"
603
+ @knife_ec2_create.config[:ssh_password] = "password"
604
+ @knife_ec2_create.config[:ssh_port] = 22
605
+ @knife_ec2_create.config[:forward_agent] = true
606
+ @knife_ec2_create.config[:bootstrap_protocol] = 'ssh'
607
+ @knife_ec2_create.config[:image] = '12345'
608
+ allow(@knife_ec2_create).to receive(:is_image_windows?).and_return(true)
609
+ @bootstrap = @knife_ec2_create.bootstrap_for_windows_node(@new_ec2_server, @new_ec2_server.dns_name)
610
+ end
611
+
612
+ it "sets the bootstrap 'forward_agent' correctly" do
613
+ expect(@bootstrap.config[:forward_agent]).to eq(true)
614
+ end
615
+ end
616
+
598
617
  describe "when configuring the winrm bootstrap process for windows" do
599
618
  before do
600
619
  allow(@knife_ec2_create).to receive(:fetch_server_fqdn).and_return("SERVERNAME")
@@ -610,6 +629,10 @@ describe Chef::Knife::Ec2ServerCreate do
610
629
  @knife_ec2_create.config[:distro] = 'ubuntu-10.04-magic-sparkles'
611
630
  @knife_ec2_create.config[:run_list] = ['role[base]']
612
631
  @knife_ec2_create.config[:json_attributes] = "{'my_attributes':{'foo':'bar'}"
632
+ @knife_ec2_create.config[:winrm_ssl_verify_mode] = 'basic'
633
+ @knife_ec2_create.config[:msi_url] = 'https://opscode-omnibus-packages.s3.amazonaws.com/windows/2008r2/x86_64/chef-client-12.3.0-1.msi'
634
+ @knife_ec2_create.config[:install_as_service] = true
635
+ @knife_ec2_create.config[:session_timeout] = "90"
613
636
  @bootstrap = @knife_ec2_create.bootstrap_for_windows_node(@new_ec2_server, @new_ec2_server.dns_name)
614
637
  end
615
638
 
@@ -655,6 +678,22 @@ describe Chef::Knife::Ec2ServerCreate do
655
678
  expect(@bootstrap.config[:first_boot_attributes]).to eq("{'my_attributes':{'foo':'bar'}")
656
679
  end
657
680
 
681
+ it "should set the bootstrap 'winrm_ssl_verify_mode' correctly" do
682
+ expect(@bootstrap.config[:winrm_ssl_verify_mode]).to eq("basic")
683
+ end
684
+
685
+ it "should set the bootstrap 'msi_url' correctly" do
686
+ expect(@bootstrap.config[:msi_url]).to eq('https://opscode-omnibus-packages.s3.amazonaws.com/windows/2008r2/x86_64/chef-client-12.3.0-1.msi')
687
+ end
688
+
689
+ it "should set the bootstrap 'install_as_service' correctly" do
690
+ expect(@bootstrap.config[:install_as_service]).to eq(@knife_ec2_create.config[:install_as_service])
691
+ end
692
+
693
+ it "should set the bootstrap 'session_timeout' correctly" do
694
+ expect(@bootstrap.config[:session_timeout]).to eq(@knife_ec2_create.config[:session_timeout])
695
+ end
696
+
658
697
  it "configures sets the bootstrap's run_list" do
659
698
  expect(@bootstrap.config[:run_list]).to eq(['role[base]'])
660
699
  end
@@ -704,7 +743,7 @@ describe Chef::Knife::Ec2ServerCreate do
704
743
  end
705
744
  it "reads UNIX Line endings for new format" do
706
745
  allow(File).to receive(:read).
707
- and_return("aws_access_key_id=#{@access_key_id}\naws_secret_access_key=#{@secret_key}")
746
+ and_return("[default]\naws_access_key_id=#{@access_key_id}\naws_secret_access_key=#{@secret_key}")
708
747
  @knife_ec2_create.validate!
709
748
  expect(Chef::Config[:knife][:aws_access_key_id]).to eq(@access_key_id)
710
749
  expect(Chef::Config[:knife][:aws_secret_access_key]).to eq(@secret_key)
@@ -712,7 +751,16 @@ describe Chef::Knife::Ec2ServerCreate do
712
751
 
713
752
  it "reads DOS Line endings for new format" do
714
753
  allow(File).to receive(:read).
715
- and_return("aws_access_key_id=#{@access_key_id}\r\naws_secret_access_key=#{@secret_key}")
754
+ and_return("[default]\naws_access_key_id=#{@access_key_id}\r\naws_secret_access_key=#{@secret_key}")
755
+ @knife_ec2_create.validate!
756
+ expect(Chef::Config[:knife][:aws_access_key_id]).to eq(@access_key_id)
757
+ expect(Chef::Config[:knife][:aws_secret_access_key]).to eq(@secret_key)
758
+ end
759
+
760
+ it "loads the correct profile" do
761
+ Chef::Config[:knife][:aws_profile] = 'other'
762
+ allow(File).to receive(:read).
763
+ and_return("[default]\naws_access_key_id=TESTKEY\r\naws_secret_access_key=TESTSECRET\n\n[other]\naws_access_key_id=#{@access_key_id}\r\naws_secret_access_key=#{@secret_key}")
716
764
  @knife_ec2_create.validate!
717
765
  expect(Chef::Config[:knife][:aws_access_key_id]).to eq(@access_key_id)
718
766
  expect(Chef::Config[:knife][:aws_secret_access_key]).to eq(@secret_key)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-ec2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Jacob
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-08-24 00:00:00.000000000 Z
12
+ date: 2015-10-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog
@@ -29,16 +29,16 @@ dependencies:
29
29
  name: knife-windows
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ">="
32
+ - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: 0.8.2
34
+ version: '1.0'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ">="
39
+ - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: 0.8.2
41
+ version: '1.0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: chef
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -153,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
153
  version: '0'
154
154
  requirements: []
155
155
  rubyforge_project:
156
- rubygems_version: 2.4.4
156
+ rubygems_version: 2.4.8
157
157
  signing_key:
158
158
  specification_version: 4
159
159
  summary: EC2 Support for Chef's Knife Command