knife-ec2 0.11.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
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