Giter Club home page Giter Club logo

kitchen-oci's People

Contributors

harlanbarnes avatar justintsteele avatar slippman avatar stephenpearson avatar stuporhero avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

kitchen-oci's Issues

Feature Request: Windows Support

Are there any plans to support windows? Would be great :-)

And I wonder if this project does move to the official oracle GitHub org?

Support for user_data that is a String

Hi there - First, thanks for making this, it is a big help to me while getting started with Oracle Cloud.

I want to be able to supply a simple String in user_data and have it show up in the metadata. I don't think that's currently supported, but I could be wrong. If I am correct and it is not currently supported, I was wondering if you would accept a pull request for this.

That is, if the user data was simply passing a String instead of an Array in your standard format then the plugin would write the user_data directly to metadata without the mime magic and such. I'll be happy to provide a PR if this is acceptable.

As background, our use case is a we have a generic image that reads what is effectively YAML data from user_data to bootstrap our instances. The data is minimal. And when I do this with kitchen-ec2 it looks a little funny in .kitchen.yml because it's YAML with a string that looks like YAML:

For example:

  user_data: |
    env: dev1
    role: tomcat

If not, then I'll sort it out some other way. But I thought I would double check.

add ENV['USER'] to freeform tags

@stephenpearson , what do you think of adding a freeform tag that identifies the user who created the instance? This may make it easier to search for instances that a specific user created. I am currently handling it like this:

hostname_prefix: gta-<%= ENV['USER'] %>

but in the case where someone decides to change that, it might be hard for them to find their node.
Maybe we can add a freeform tag like owner, or created_by, or something like that?

Network Security Group support?

It doesn't look like specifying network security groups during instance creation are allowed, which means in my particular case I have to go in after the fact and manually add the NSG to the vNIC for my instance to be reachable.

Thoughts on adding this feature? Would be happy to contribute, too.

Thanks!

Create action failed with no error on debug

Details:

  1. command: kitchen test --color --destroy always
  2. Error:
    -----> Starting Test Kitchen (v3.3.2)
    -----> Cleaning up any prior instances of
    -----> Destroying ...
    Finished destroying (0m0.00s).
    -----> Testing
    -----> Creating ...
    -----> Destroying ...
    Finished destroying (0m0.00s).

------Exception-------
Class: Kitchen::ActionFailed
Message: 1 actions failed.
Failed to complete #create action: [undefined method `length' for nil:NilClass] on ansible-role-autonomous-database-default-oci

Please see .kitchen/logs/kitchen.log for more details
Also try running kitchen diagnose --all for configuration

  1. kitchen diagnose --all output
---
timestamp: 2023-02-14 20:40:59 UTC
kitchen_version: 3.3.2
plugins:
  driver:
    Oci:
      class: Kitchen::Driver::Oci
      version:
      api_version:
  provisioner:
    AnsiblePlaybook:
      class: Kitchen::Provisioner::AnsiblePlaybook
      version:
      api_version:
  transport:
    Ssh:
      class: Kitchen::Transport::Ssh
      version: 3.3.2
      api_version: 1
  verifier:
    Inspec:
      class: Kitchen::Verifier::Inspec
      version: 2.6.1
      api_version: 1
loader:
  process_erb: true
  process_local: true
  process_global: true
  global_config:
  project_config:
    filename: "/mnt/kitchen.yml"
    raw_data:
      provisioner:
        name: ansible_playbook
        hosts: localhost
        require_chef_for_busser: false
        ansible_connection: local
        ansible_verbose: true
        ansible_diff: true
        ansible_verbosity: 2
        idempotency_test: true
      driver:
        name: oci
      verifier:
        name: inspec
      platforms:
      - name: oci
        os_type: ubuntu
      suites:
      - name: ansible-role-autonomous-database-default
        driver:
          compartment_id: <masked>
          availability_domain: ZoCL:CA-TORONTO-1-AD-1
          shape: VM.Standard.E2.1.Micro
          subnet_id: <masked>
          instance_type: dbaas
          dbaas:
            db_version: 19c
            cpu_core_count: 1
            db_name: dbaas1
            admin_password: test123
            initial_data_storage_size_in_gb: 20
            db_workload: OLTP
          use_private_ip: false
        verifier:
          systems:
          - name: default
            provisioner:
            - test/integration/ansible-role-autonomous-database-default
            reporter:
            - cli
            - junit2:test/reports/ansible-role-autonomous-database-default-junit.xml
  local_config:
  combined_config:
    filename:
    raw_data:
      provisioner:
        name: ansible_playbook
        hosts: localhost
        require_chef_for_busser: false
        ansible_connection: local
        ansible_verbose: true
        ansible_diff: true
        ansible_verbosity: 2
        idempotency_test: true
      driver:
        name: oci
      verifier:
        name: inspec
      platforms:
      - name: oci
        os_type: ubuntu
      suites:
      - name: ansible-role-autonomous-database-default
        driver:
          compartment_id: <masked>
          availability_domain: ZoCL:CA-TORONTO-1-AD-1
          shape: VM.Standard.E2.1.Micro
          subnet_id: <masked>
          instance_type: dbaas
          dbaas:
            db_version: 19c
            cpu_core_count: 1
            db_name: dbaas1
            admin_password: test123
            initial_data_storage_size_in_gb: 20
            db_workload: OLTP
          use_private_ip: false
        verifier:
          systems:
          - name: default
            provisioner:
            - test/integration/ansible-role-autonomous-database-default
            reporter:
            - cli
            - junit2:test/reports/ansible-role-autonomous-database-default-junit.xml
instances:
  ansible-role-autonomous-database-default-oci:
    platform:
      os_type: ubuntu
      shell_type: bourne
    state_file: {}
    driver:
      availability_domain: ZoCL:CA-TORONTO-1-AD-1
      compartment_id: <masked>
      dbaas:
        db_version: 19c
        cpu_core_count: 1
        db_name: dbaas1
        admin_password: test123
        initial_data_storage_size_in_gb: 20
        db_workload: OLTP
      freeform_tags: {}
      hostname_prefix:
      image_id:
      instance_type: dbaas
      kitchen_root: "/mnt"
      log_level: :info
      name: oci
      oci_config_file:
      oci_profile_name:
      post_create_script:
      pre_create_command:
      preemptible_instance: false
      proxy_url:
      setup_winrm: false
      shape: VM.Standard.E2.1.Micro
      shape_config: {}
      ssh_keypath: "/root/.ssh/id_rsa.pub"
      subnet_id: <masked>
      test_base_path: "/mnt/test/integration"
      use_instance_principals: false
      use_private_ip: false
      user_data:
      winrm_password:
      winrm_user: opc
    provisioner:
      additional_copy_path:
      additional_copy_role_path: false
      additional_ssh_private_keys:
      ansible_apt_repo: ppa:ansible/ansible
      ansible_binary_path:
      ansible_cfg_overwrite: true
      ansible_cfg_path:
      ansible_check: false
      ansible_connection: local
      ansible_diff: true
      ansible_host_key_checking: true
      ansible_inventory:
      ansible_inventory_file:
      ansible_limit:
      ansible_omnibus_remote_path: "/opt/ansible"
      ansible_omnibus_url: https://raw.githubusercontent.com/neillturner/omnibus-ansible/master/ansible_install.sh
      ansible_platform: ''
      ansible_playbook_command:
      ansible_sles_repo: http://download.opensuse.org/repositories/systemsmanagement/openSUSE_Leap_15.2/systemsmanagement.repo
      ansible_source_rev:
      ansible_source_url: git://github.com/ansible/ansible.git
      ansible_sudo: true
      ansible_vault_password_file:
      ansible_verbose: true
      ansible_verbosity: 2
      ansible_version:
      ansible_yum_repo:
      ansiblefile_path:
      callback_plugins_path:
      chef_bootstrap_url: https://www.chef.io/chef/install.sh
      command_prefix:
      custom_post_install_command:
      custom_post_play_command:
      custom_pre_install_command:
      custom_pre_play_command:
      debug:
      downloads: {}
      enable_yum_epel: false
      env_vars: {}
      extra_vars: {}
      extra_vars_file:
      filter_plugins_path:
      ftp_proxy:
      galaxy_ignore_certs: false
      group_vars_path:
      host_vars_path:
      hosts: localhost
      http_proxy:
      https_proxy:
      idempotency_skip_tags: []
      idempotency_tags: []
      idempotency_test: true
      ignore_ansible_cfg: false
      ignore_extensions_from_root:
      - ".pyc"
      ignore_paths_from_root: []
      keep_playbook_path: false
      kerberos_conf_file:
      kitchen_root: "/mnt"
      library_plugins_path:
      lookup_plugins_path:
      max_retries: 1
      modules_path:
      name: ansible_playbook
      no_proxy:
      playbook: "/mnt/test/integration/ansible-role-autonomous-database-default/default.yml"
      python_sles_repo: http://download.opensuse.org/repositories/devel:/languages:/python/openSUSE_Leap_15.2/devel:languages:python.repo
      recursive_additional_copy_path:
      require_ansible_omnibus: false
      require_ansible_repo: true
      require_ansible_source: false
      require_chef_for_busser: false
      require_pip: false
      require_pip3: false
      require_ruby_for_busser: false
      require_windows_support: false
      requirements_collection_path: false
      requirements_path: false
      retry_on_exit_code: []
      role_name:
      roles_path: "/mnt"
      root_path: "/tmp/kitchen"
      shell_command: sh
      show_command_output: false
      ssh_known_hosts:
      sudo: true
      sudo_command: sudo -E
      tags: []
      test_base_path: "/mnt/test/integration"
      update_package_repos: true
      uploads: {}
      wait_for_retry: 30
    transport:
      compression: false
      compression_level: 0
      connection_retries: 5
      connection_retry_sleep: 1
      connection_timeout: 15
      keepalive: true
      keepalive_interval: 60
      keepalive_maxcount: 3
      kitchen_root: "/mnt"
      log_level: :info
      max_ssh_sessions: 9
      max_wait_until_ready: 600
      name: ssh
      port: 22
      ssh_gateway:
      ssh_gateway_port: 22
      ssh_gateway_username:
      ssh_http_proxy:
      ssh_http_proxy_password:
      ssh_http_proxy_port:
      ssh_http_proxy_user:
      ssh_key:
      test_base_path: "/mnt/test/integration"
      username: root
    verifier:
      backend_cache: true
      chef_omnibus_root: "/opt/chef"
      command_prefix:
      debug:
      ftp_proxy:
      http_proxy:
      https_proxy:
      inspec_tests: []
      kitchen_root: "/mnt"
      load_plugins: true
      log_level: :info
      name: inspec
      plugin_config: {}
      root_path: "/tmp/verifier"
      sudo: true
      sudo_command: sudo -E
      suite_name: ansible-role-autonomous-database-default
      systems:
      - name: default
        provisioner:
        - test/integration/ansible-role-autonomous-database-default
        reporter:
        - cli
        - junit2:test/reports/ansible-role-autonomous-database-default-junit.xml
      test_base_path: "/mnt/test/integration"
    lifecycle_hooks:
      debug:
      kitchen_root: "/mnt"
      log_level: :info
      test_base_path: "/mnt/test/integration"
  1. kitchen.yml file content
---
provisioner:
  name: ansible_playbook
  hosts: localhost
  require_chef_for_busser: false
  ansible_connection: local
  ansible_verbose: true
  ansible_diff: true
  ansible_verbosity: 2
  idempotency_test: true

driver:
  name: oci

verifier:
  name: inspec

platforms:
  - name: oci
    os_type: ubuntu

suites: # To add more test suites, copy/paste the whole section below and update the lines with inline comments as needed.
  - name: ansible-role-autonomous-database-default
    driver:
      # These are mandatory
      compartment_id: <masked>
      availability_domain: ZoCL:CA-TORONTO-1-AD-1
      shape: VM.Standard.E2.1.Micro
      subnet_id: <masked>
      instance_type: dbaas # If omit, default is compute
      dbaas: # Required for dbaas instance_type
        db_version: 19c
        cpu_core_count: 1 # Free tier is 1 OCPU
        db_name: dbaas1
        admin_password: <masked>
        initial_data_storage_size_in_gb: 20 # Free tier is 20GB
        db_workload: OLTP # Acceptable values are 'OLTP' and 'DSS'. Default value is 'OLTP'
      # These are optional
      use_private_ip: false # Required to be false when using free tier
    verifier:
      systems:
      - name: default # Name for the test instance
        provisioner: # Directory under which the test cases are. If omit, default is <KITCHEN ROOT>/test/integration/<KITCHEN SUITE NAME>
          - test/integration/ansible-role-autonomous-database-default
        reporter: # test result outputs. cli for stdout. junit2 for pipeline use. 
          - cli # DO NOT REMOVE. It's useful for troubleshooting on pipeline terminal.
          - junit2:test/reports/ansible-role-autonomous-database-default-junit.xml # Make sure the file name is *-junit.xml under test/reports directory as pipeline looks for it.

Environmentally based no_proxy variable causes nil variable error.

Line 144 of oci.rb attempts to find the proxy settings using URI.parse like so:

URI.parse('http://').find_proxy

This is fine unless there is a no_proxy environment variable set. The existence of this env var causes the following code in URI::generic to trigger:

      name = 'no_proxy'
      if no_proxy = env[name] || env[name.upcase]
        return nil unless URI::Generic.use_proxy?(self.hostname, addr, self.port, no_proxy)
      end
      URI.parse(proxy_uri)
    end

    def self.use_proxy?(hostname, addr, port, no_proxy) # :nodoc:
      hostname = hostname.downcase
      dothostname = ".#{hostname}"
      no_proxy.scan(/([^:,\s]+)(?::(\d+))?/) {|p_host, p_port|
        if !p_port || port == p_port.to_i
          if p_host.start_with?('.')
            return false if hostname.end_with?(p_host.downcase)
          else
            return false if dothostname.end_with?(".#{p_host.downcase}")
          end
          if addr
            begin
              return false if IPAddr.new(p_host).include?(addr)
            rescue IPAddr::InvalidAddressError
              next
            end
          end
        end
      }
      true
    end

Because URI.parse is called with just 'http://' the hostname.downcase element of this code fails with NoMethodError (undefined method downcase' for nil:NilClass)`

This could be resolved by doing something like this instead:

URI.parse('http://example.com').find_proxy

Although I'm a sysadmin not a developer so I'm not sure if that is the right solution.

Invalid VNIC creation parameters for network which does not allow for public IPs

kitchen create
-----> Starting Kitchen (v1.20.0)
-----> Creating <default-oracle>...
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::ActionFailed
>>>>>> Message: 1 actions failed.
>>>>>>     Failed to complete #create action: [Invalid VNIC creation parameters] on default-oracle
>>>>>> ----------------------
>>>>>> Please see .kitchen/logs/kitchen.log for more details
>>>>>> Also try running `kitchen diagnose --all` for configuration

changing the code to

      def create_vnic_details(config)
        OCI::Core::Models::CreateVnicDetails.new(
          assign_public_ip: false,
          display_name: 'primary_nic',
          subnetId: config[:subnet_id]
        )
      end

works

honor http proxy/proxy_auth

according to the oci gem documentation: https://docs.us-phoenix-1.oraclecloud.com/tools/ruby/latest/index.html#label-Proxy+via+the+ApiClientProxySettings+object

the consumer of the gem is responsible to create/pass in an proxy object.
I really would love to just pass in the result of a parsed HTTP_PROXY=http://<user>:<password>@<address>:<port> env variable.

do you think it should be an explicit config option in the .kitchen.yml file, or an implicit parsed value from the env variable, if set?

and I'm not so sure about

      return Net::HTTP.new(hostname, port, @proxy_settings.proxy_address) if @proxy_settings.proxy_address.nil?

from oci-2.1.0/lib/oci/api_client.rb:281

    def get_http_object(hostname, port)
      return Net::HTTP.new(hostname, port) if @proxy_settings.nil?
      return Net::HTTP.new(hostname, port, @proxy_settings.proxy_address) if @proxy_settings.proxy_address.nil?

      Net::HTTP.new(
        hostname,
        port,
        @proxy_settings.proxy_address,
        @proxy_settings.proxy_port,
        @proxy_settings.proxy_user,
        @proxy_settings.proxy_password
      )
    end

I guess it then should fallback to env parsing?

Shouldn't that read

      return Net::HTTP.new(hostname, port, :ENV) if @proxy_settings.proxy_address.nil?

or something like that ...

Maximum wait time has been exceeded.

When executing kitchen create I get "Maximum wait time has been exceeded." in the same environment as worked in the past. I tested it with proxy and in other environment and other OSes with direct connection, same issue. Maybe Oracle changed something.

Executing telnet iaas.us-ashburn-1.oraclecloud.com 443 connects.

ping iaas.us-ashburn-1.oraclecloud.com

Pinging splat-api.us-ashburn-1.oci.oraclecloud.com [140.91.12.32] with 32 bytes of data:
Reply from 140.91.12.32: bytes=32 time=166ms TTL=53
Reply from 140.91.12.32: bytes=32 time=163ms TTL=53
Reply from 140.91.12.32: bytes=32 time=165ms TTL=53
Reply from 140.91.12.32: bytes=32 time=162ms TTL=53
-----> Creating <chef-lx>...
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::ActionFailed
>>>>>> Message: 1 actions failed.
>>>>>>     Failed to complete #create action: [Maximum wait time has been exceeded.] on chef-lx
>>>>>> ----------------------
>>>>>> Please see .kitchen/logs/kitchen.log for more details
>>>>>> Also try running `kitchen diagnose --all` for configuration

D      ------Exception-------
D      Class: Kitchen::ActionFailed
D      Message: 1 actions failed.
>>>>>>     Failed to complete #create action: [Maximum wait time has been exceeded.] on chef-lx
D      ----------------------
D      ------Backtrace-------
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/command.rb:181:in `report_errors'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/command.rb:172:in `run_action'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/command/action.rb:35:in `block in call'
D      C:/opscode/chefdk/embedded/lib/ruby/2.6.0/benchmark.rb:293:in `measure'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/command/action.rb:33:in `call'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/cli.rb:52:in `perform'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/cli.rb:198:in `block (2 levels) in <class:CLI>'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/thor-0.20.3/lib/thor/command.rb:27:in `run'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/thor-0.20.3/lib/thor/invocation.rb:126:in `invoke_command'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/thor-0.20.3/lib/thor.rb:387:in `dispatch'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/thor-0.20.3/lib/thor/base.rb:466:in `start'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/bin/kitchen:11:in `block in <top (required)>'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/errors.rb:170:in `with_friendly_errors'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/bin/kitchen:11:in `<top (required)>'
D      C:/opscode/chefdk/bin/kitchen:358:in `load'
D      C:/opscode/chefdk/bin/kitchen:358:in `<main>'
D      ----End Backtrace-----
D      -Composite Exception--
D      Class: Kitchen::ActionFailed
D      Message: Failed to complete #create action: [Maximum wait time has been exceeded.] on chef-lx
D      ----------------------
D      ------Backtrace-------
D      C:/Users/LeonardoTagliabue/AppData/Local/chefdk/gem/ruby/2.6.0/gems/oci-2.14.0/lib/oci/waiter.rb:136:in `block in wait_until'
D      C:/Users/LeonardoTagliabue/AppData/Local/chefdk/gem/ruby/2.6.0/gems/oci-2.14.0/lib/oci/waiter.rb:129:in `loop'
D      C:/Users/LeonardoTagliabue/AppData/Local/chefdk/gem/ruby/2.6.0/gems/oci-2.14.0/lib/oci/waiter.rb:129:in `wait_until'
D      C:/Users/LeonardoTagliabue/AppData/Local/chefdk/gem/ruby/2.6.0/gems/kitchen-oci-1.12.0/lib/kitchen/driver/oci.rb:269:in `launch_compute_instance'
D      C:/Users/LeonardoTagliabue/AppData/Local/chefdk/gem/ruby/2.6.0/gems/kitchen-oci-1.12.0/lib/kitchen/driver/oci.rb:194:in `launch_instance'
D      C:/Users/LeonardoTagliabue/AppData/Local/chefdk/gem/ruby/2.6.0/gems/kitchen-oci-1.12.0/lib/kitchen/driver/oci.rb:73:in `create'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:495:in `public_send'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:495:in `block in perform_action'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:563:in `synchronize_or_call'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:524:in `block in action'
D      C:/opscode/chefdk/embedded/lib/ruby/2.6.0/benchmark.rb:293:in `measure'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:523:in `action'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:495:in `perform_action'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:404:in `create_action'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:392:in `block (2 levels) in transition_to'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/lifecycle_hooks.rb:44:in `run_with_hooks'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:391:in `block in transition_to'D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:390:in `each'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:390:in `transition_to'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:128:in `create'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/command.rb:195:in `public_send'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/command.rb:195:in `run_action_in_thread'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/command.rb:166:in `block (2 levels) in run_action'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/logging-2.3.0/lib/logging/diagnostic_context.rb:474:in `block in create_with_logging_context'
D      ----End Backtrace-----
D      ---Nested Exception---
D      Class: Kitchen::ActionFailed
D      Message: Failed to complete #create action: [Maximum wait time has been exceeded.]
D      ----------------------
D      ------Backtrace-------
D      C:/Users/LeonardoTagliabue/AppData/Local/chefdk/gem/ruby/2.6.0/gems/oci-2.14.0/lib/oci/waiter.rb:136:in `block in wait_until'
D      C:/Users/LeonardoTagliabue/AppData/Local/chefdk/gem/ruby/2.6.0/gems/kitchen-oci-1.12.0/lib/kitchen/driver/oci.rb:269:in `launch_compute_instance'
D      C:/Users/LeonardoTagliabue/AppData/Local/chefdk/gem/ruby/2.6.0/gems/kitchen-oci-1.12.0/lib/kitchen/driver/oci.rb:194:in `launch_instance'
D      C:/Users/LeonardoTagliabue/AppData/Local/chefdk/gem/ruby/2.6.0/gems/kitchen-oci-1.12.0/lib/kitchen/driver/oci.rb:73:in `create'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:495:in `public_send'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:495:in `block in perform_action'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:563:in `synchronize_or_call'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:524:in `block in action'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:495:in `perform_action'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:404:in `create_action'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:392:in `block (2 levels) in transition_to'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/lifecycle_hooks.rb:44:in `run_with_hooks'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:391:in `block in transition_to'D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:390:in `each'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:390:in `transition_to'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/instance.rb:128:in `create'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/command.rb:195:in `public_send'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/command.rb:195:in `run_action_in_thread'
D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/test-kitchen-2.8.0/lib/kitchen/command.rb:166:in `block (2 levels) in run_D      C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/logging-2.3.0/lib/logging/diagnostic_context.rb:474:in `block in create_with_logging_context'
D      ----End Backtrace-----

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.