Kitchen Action - stopped waiting after 160 attempts without success while launching windows instance

Hi,

I was trying to launch windows-2012 instance using kitchen-ec2 in my cookbook. I observe the instance gets created when i run kitchen create.But, eventually the instance gets terminated after 160 attempts. I am not sure what could be missing in the config, that’s causing the instance not to create in my first attempt. In the second attempt, I have also increased the retryable_tries to 1500 and that caused a different error where it seemed to fail with authentication error. Any help on where i could be miss configuring things in my kitchen.yml file or any additional values to be included. Thanks

Kitchen.yml:

driver:
name: ec2
associate_public_ip: false
shared_credentials_profile: test_user
aws_ssh_key_id: windows_test
instance_type: t2.medium
region: us-east-1
availability_zone: us-east-1c
subnet_id: subnet-a8989
security_group_ids:

  • “sg-3433”
  • "sg-abcdef"
    retryable_tries: 160
    retryable_sleep: 5

transport:
name: winrm
ssh_key: windowstest.pem
associate_public_ip: false
connection_timeout: 200
connection_retries: 10
username: Administrator

provisioner:
name: chef_zero
http_proxy: http://proxy.abc.com:8091
https_proxy: http://proxy.abc.com:8091
no_proxy: "169.254.169.254,amazonaws.com"
environments_path: environments
roles_path: roles
require_chef_omnibus: true
client_rb:
ssl_verify_mode: :verify_none
verify_api_cert: false

platforms:

  • name: windows-2012
    driver:
    image_id: ami-09udlj
    interface: private
    block_device_mappings:
    - device_name: /dev/sda1
    ebs:
    volume_size: 50
    delete_on_termination: true
    volume_type: gp2
    snapshot_id: snap-dlk0uere
    - device_name: /dev/xvdg
    ebs:
    volume_size: 30
    delete_on_termination: true
    volume_type: gp2
    snapshot_id: snap-0dfudf
    tags:
    Name: windows-2012
    suites:
  • name: default
    run_list:
    • recipe[testing-kitchen]
      kitchen:

    log_level: debug

    attributes:

verifier:
http_proxy: http://proxy.abc.com:8091
https_proxy: http://proxy.abc.com:8091
no_proxy: “169.254.169.254,amazonaws.com

Error -1

D ------Exception------- D Class: Kitchen::ActionFailed D Message: Failed to complete #create action: [stopped waiting after 160 attempts without success] D ---Nested Exception--- D Class: Aws::Waiters::Errors::TooManyAttemptsError D Message: stopped waiting after 160 attempts without success

With increasing retryable_tries: 1500, i got this below error where it seemed to retrieve the password but couldn’t succeed.

Error-2

Waited 0/1500s for instance <i-0f3a7b92> to fetch windows admin password. Retrieved Windows password for instance <i-0f3a7b92>. EC2 instance <i-0f3a7b92> ready. [WinRM] connection failed. retrying in 3 seconds: #<WinRM::WinRMAuthorizationError: WinRM::WinRMAuthorizationError> [WinRM] connection failed. retrying in 3 seconds: #<WinRM::WinRMAuthorizationError: WinRM::WinRMAuthorizationError>

What version of Test Kitchen and EC2 drivers are you using?

Have you tried changing the transport settings?

  transport:
      max_threads: 5
      connection_timeout: 10
      connection_retries: 36
      connection_retry_sleep: 10
      max_wait_until_ready: 1200

Our instances also timed out because we use a custom AMI that requires a reboot so it takes a while to come up!

Thanks for looking into the error. I have been using the following versions of Test Kitchen & EC2.
kitchen version: 1.6.0
Test Kitchen version 1.6.0
kitchen-ec2 1.0.0

I have modified the transport values (posted below) before launching instance using kitchen create -l debug and observed the same error, as listed above. However, when I looked into aws console for the instance, I observed the Instance Status Checks present in Status Checks to be displaying this message

Instance reachability check failed at May 5, 2016 at 12:05:00 PM UTC-5 (3 minutes ago)

I am not familiar what the above message means, does it means something with network connectivity?

values used:

retryable_tries: 200 retryable_sleep: 5

Error
` D Console output: ---
2016/05/05 16:59:08Z: EC2ConfigMonitorState: 0
2016/05/05 16:59:08Z: Windows is being configured. SysprepState=IMAGE_STATE_UNDEPLOYABLE
2016/05/05 16:59:14Z: Difficulty detecting PV driver details for Console Output
2016/05/05 17:00:10Z: Windows is still being configured. SysprepState=IMAGE_STATE_UNDEPLOYABLE
2016/05/05 17:01:10Z: Windows is still being configured. SysprepState=IMAGE_STATE_UNDEPLOYABLE
2016/05/05 17:02:13Z: Windows is still being configured. SysprepState=IMAGE_STATE_SPECIALIZE_RESEAL_TO_OOBE
2016/05/05 17:03:18Z: Windows is still being configured. SysprepState=IMAGE_STATE_SPECIALIZE_RESEAL_TO_OOBE
2016/05/05 17:03:54Z: Message: EC2Config stopping.

Waited 0/1000s for instance to fetch windows admin password.
Retrieved Windows password for instance .
EC2 instance ready.
[WinRM] connection failed. retrying in 3 seconds: #<WinRM::WinRMAuthorizationError: WinRM::WinRMAuthorizationError>`

@chris_sullivan It looks like the username under transport seemed to have changed from the regular Administrator for our windows instance to different one causing WinRM::WinRMAuthorizationError error earlier. I have corrected the username and now with kitchen create -l debug i see the instance created and in ready state and when it move forwards it fails with some encoding method definition failure.

D ------Exception-------
D Class: Kitchen::ActionFailed
D Message: Failed to complete #create action: [undefined method `encoding' for nil:NilClass]
D ---Nested Exception---
D Class: NoMethodError
D Message: undefined method `encoding' for nil:NilClass
D ------Backtrace-------
D /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/rubyntlm-0.6.0/lib/net/ntlm/encode_util.rb:42:in `encode_utf16le'
D /opt/chefdk/embedded/lib/ruby/ge

Sorry I can’t recall seeing this error before, a quick look at the code at the top of the backtrace

      def self.encode_utf16le(str)
        str = str.force_encoding('UTF-8') if [::Encoding::ASCII_8BIT,::Encoding::US_ASCII].include?(str.encoding)
        str.dup.force_encoding('UTF-8').encode(Encoding::UTF_16LE, Encoding::UTF_8).force_encoding('UTF-8')
      end
```

Would suggest that str is nil, but the issue isn't with rubyntlm, might be missing test kitchen configuration, can you supply the chef --version and backtrace.

I am currently using the following version of chef.

Chef Development Kit Version: 0.12.0

back trace

D      ------Exception-------
D      Class: Kitchen::ActionFailed
D      Message: Failed to complete #create action: [undefined method `encoding' for nil:NilClass]
D      ---Nested Exception---
D      Class: NoMethodError
D      Message: undefined method `encoding' for nil:NilClass
D      ------Backtrace-------
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/rubyntlm-0.6.0/lib/net/ntlm/encode_util.rb:42:in `encode_utf16le'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/rubyntlm-0.6.0/lib/net/ntlm/client/session.rb:187:in `oem_or_unicode_str'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/rubyntlm-0.6.0/lib/net/ntlm/client/session.rb:172:in `password'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/rubyntlm-0.6.0/lib/net/ntlm/client/session.rb:192:in `ntlmv2_hash'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/rubyntlm-0.6.0/lib/net/ntlm/client/session.rb:196:in `calculate_user_session_key!'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/rubyntlm-0.6.0/lib/net/ntlm/client/session.rb:27:in `authenticate!'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/rubyntlm-0.6.0/lib/net/ntlm/client.rb:36:in `init_context'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/winrm-1.7.2/lib/winrm/http/transport.rb:228:in `init_auth'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/winrm-1.7.2/lib/winrm/http/transport.rb:166:in `send_request'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/winrm-1.7.2/lib/winrm/winrm_service.rb:489:in `send_message'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/winrm-1.7.2/lib/winrm/winrm_service.rb:390:in `run_wql'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/winrm-1.7.2/lib/winrm/command_executor.rb:171:in `os_version'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/winrm-1.7.2/lib/winrm/command_executor.rb:130:in `code_page'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/winrm-1.7.2/lib/winrm/command_executor.rb:72:in `block in open'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/winrm-1.7.2/lib/winrm/command_executor.rb:203:in `retryable'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/winrm-1.7.2/lib/winrm/command_executor.rb:71:in `open'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/winrm-1.7.2/lib/winrm/winrm_service.rb:356:in `create_executor'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/transport/winrm.rb:321:in `session'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/transport/winrm.rb:135:in `wait_until_ready'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/kitchen-ec2-1.0.0/lib/kitchen/driver/ec2.rb:205:in `create'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/instance.rb:449:in `public_send'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/instance.rb:449:in `block in perform_action'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/instance.rb:513:in `call'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/instance.rb:513:in `synchronize_or_call'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/instance.rb:478:in `block in action'
D      /opt/chefdk/embedded/lib/ruby/2.1.0/benchmark.rb:279:in `measure'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/instance.rb:477:in `action'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/instance.rb:449:in `perform_action'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/instance.rb:359:in `create_action'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/instance.rb:348:in `block in transition_to'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/instance.rb:347:in `each'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/instance.rb:347:in `transition_to'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/instance.rb:127:in `create'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/command.rb:176:in `public_send'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/command.rb:176:in `block (2 levels) in run_action'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/logging-2.1.0/lib/logging/diagnostic_context.rb:450:in `call'
D      /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/logging-2.1.0/lib/logging/diagnostic_context.rb:450:in `block in create_with_logging_context'

That stacktrace indicates that a nil password is sent to winrm

@Matt_Wrock I was using my key-par in kitchen.yml for authentication(it worked perfectly for other platforms) and i am not familiar if windows require a password to be configured in kitchen.yml(this was my first time,no idea on that) that can be sent to winrm. could we configure a random password for the username or is there a way to generate it randomly and pass it during the connection.Thanks

I have rarely used he ec2 driver but my understanding is that it automagically retrieves the amazon generated password for you.