Coder Social home page Coder Social logo

beaker-docker's Introduction

beaker-docker

License Test codecov Release RubyGem Version RubyGem Downloads Donated by Puppet Inc

Beaker library to use docker hypervisor

How to use this wizardry

This gem that allows you to use hosts with docker hypervisor with beaker.

Beaker will automatically load the appropriate hypervisors for any given hosts file, so as long as your project dependencies are satisfied there's nothing else to do. No need to require this library in your tests.

In order to use a specific hypervisor or DSL extension library in your project, you will need to include them alongside Beaker in your Gemfile or project.gemspec. E.g.

# Gemfile
gem 'beaker', '~> 4.0'
gem 'beaker-docker'
# project.gemspec
s.add_runtime_dependency 'beaker', '~> 4.0'
s.add_runtime_dependency 'beaker-docker'

Nodeset Options

The following is a sample nodeset:

HOSTS:
  el8:
    platform: el-8-x86_64
    hypervisor: docker
    image: centos:8
    docker_cmd: '["/sbin/init"]'
    # Run arbitrary things
    docker_image_commands:
      - 'touch /tmp/myfile'
    dockeropts:
      Labels:
        thing: 'stuff'
      HostConfig:
        Privileged: true
  el7:
    platform: el-7-x86_64
    hypervisor: docker
    image: centos:7
    # EL7 images do not support nested systemd
    docker_cmd: '/usr/sbin/sshd -D -E /var/log/sshd.log'
CONFIG:
  docker_cap_add:
    - AUDIT_WRITE

Privileged containers

Containers are run in privileged mode by default unless capabilities are set.

If you wish to disable privileged mode, simply set the following in your node:

dockeropts:
  HostConfig:
    Privileged: false

Cleaning up after tests

Containers created by this plugin may not be destroyed unless the tests complete successfully. Each container created is prefixed by beaker- to make filtering for clean up easier.

A quick way to clean up all nodes is as follows:

podman rm -f $( podman ps -q -f name="beaker-*" )

Working with podman

If you're using a version of podman that has API socket support then you should be able to simply set DOCKER_HOST to your socket and connect as usual.

You also need to ensure that you're using a version of the docker-api gem that supports podman.

You may find that not all of your tests work as expected. This will be due to the tighter system restrictions placed on containers by podman. You may need to edit the dockeropts hash in your nodeset to include different flags in the HostConfig section.

See the HostConfig portion of the docker API for more information.

Generating a Dockerfile

Usually beaker-docker is used to provision docker instances with beaker. During this step beaker-docker generates a Dockerfile and posts it to the docker daemon API.

There's also a small CLI command to only generate the file:

bundle exec beaker-docker dockerfile archlinux-64

Will generate a local Dockerfile:

FROM archlinux/archlinux
ENV container docker
RUN pacman --sync --refresh --noconfirm archlinux-keyring && pacman --sync --refresh --noconfirm --sysupgrade && pacman --sync --noconfirm curl ntp net-tools openssh && ssh-keygen -A && sed -ri 's/^#?UsePAM .*/UsePAM no/' /etc/ssh/sshd_config && systemctl enable sshd
RUN mkdir -p /var/run/sshd && echo root:root | chpasswd
RUN sed -ri -e 's/^#?PermitRootLogin .*/PermitRootLogin yes/' -e 's/^#?PasswordAuthentication .*/PasswordAuthentication yes/' -e 's/^#?UseDNS .*/UseDNS no/' -e 's/^#?MaxAuthTries.*/MaxAuthTries 1000/' /etc/ssh/sshd_config
EXPOSE 22
CMD ["/sbin/init"]

This works by calling (beaker-hostgenerator](https://github.com/voxpupuli/beaker-hostgenerator?tab=readme-ov-file#beaker-host-generator). So you can provide any host string that's supported by beaker-hostgenerator.

For non-rolling release distros this is usually $os$majorversion-$architecture

beaker-docker dockerfile centos9-64
FROM quay.io/centos/centos:stream9
ENV container docker
RUN dnf clean all && dnf install -y sudo openssh-server openssh-clients chrony && ssh-keygen -A && sed 's@session *required *pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/*
RUN mkdir -p /var/run/sshd && echo root:root | chpasswd
RUN sed -ri -e 's/^#?PermitRootLogin .*/PermitRootLogin yes/' -e 's/^#?PasswordAuthentication .*/PasswordAuthentication yes/' -e 's/^#?UseDNS .*/UseDNS no/' -e 's/^#?MaxAuthTries.*/MaxAuthTries 1000/' /etc/ssh/sshd_config
RUN cp /bin/true /sbin/agetty
RUN dnf install -y cronie crontabs initscripts iproute openssl wget which glibc-langpack-en hostname
EXPOSE 22
CMD ["/sbin/init"]

This requires a running docker daemon. You can also request a containerfile. This will currently generate a Containerfile but with the same content (this may change in the future, depending on the API spec).

Spec tests

Spec test live under the spec folder. There are the default rake task and therefore can run with a simple command:

bundle exec rake test:spec

Acceptance tests

There is a simple rake task to invoke acceptance test for the library:

bundle exec rake test:acceptance

Transfer Notice

This plugin was originally authored by Puppet Inc. The maintainer preferred that Puppet Community take ownership of the module for future improvement and maintenance. Existing pull requests and issues were transferred over, please fork and continue to contribute here.

Previously: https://github.com/puppetlabs/beaker

License

This gem is licensed under the Apache-2 license.

Release information

To make a new release, please do:

  • update the version in lib/beaker-docker/version.rb
  • Install gems with bundle install --with release --path .vendor
  • generate the changelog with bundle exec rake changelog
  • Check if the new version matches the closed issues/PRs in the changelog
  • Create a PR with it
  • After it got merged, push a tag. GitHub actions will do the actual release to rubygems and GitHub Packages

beaker-docker's People

Contributors

b4ldr avatar bastelfreak avatar binford2k avatar caseywilliams avatar dakta avatar dependabot[bot] avatar double16 avatar ekohl avatar gabrielnagy avatar genebean avatar h0tw1r3 avatar hedinasr avatar highb avatar jantman avatar jay7x avatar jovrum avatar kevpl avatar msalway avatar oldnoakes avatar puppetlabs-jenkins avatar queercodinggirl avatar rathios avatar rishijavia avatar rwaffen avatar smcelmurry avatar tabakhase avatar trevor-vaughan avatar treydock avatar tvpartytonight avatar yachub avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

beaker-docker's Issues

Wrong SSH port getting used

On Mac OS X Docker I am now running into issues I think were introduced here: 50912bf. This is some of output I see, notice how the port trying to be used is port 22 and not the actual mapped docker port:

/containers/create
{"name"=>"clustershell-el7"}
{"Image":"0c316f4c56e8","Hostname":"centos-7","HostConfig":{"PortBindings":{"22/tcp":[{"HostPort":"5484","HostIp":"0.0.0.0"}]},"PublishAllPorts":true,"RestartPolicy":{"Name":"always"},"Privileged":true},"Env":["LANG=en_US.UTF-8","LANGUAGE=en_US.UTF-8","LC_ALL=en_US.UTF-8"]}

...

  Attempting ssh connection to 172.17.0.7, user: root, opts: {:password=>"root", :port=>"22", :forward_agent=>false, :auth_methods=>["password", "publickey", "hostbased", "keyboard-interactive"]}
  Warning: Try 1 -- Host 172.17.0.7 unreachable: Errno::ECONNREFUSED - Connection refused - connect(2) for 172.17.0.7:22
  Warning: Trying again in 3 seconds

If I downgrade to 0.7.x the issue goes away so clearly the behavior of how to find the host port changed and no longer works with all versions of Docker.

rake beaker fail when using beaker-docker 0.8.4 in a docker in docker environment

We have a Jenkins job configured to run bundle exec rake beaker in a docker in docker setup.
This started to fail as beaker-docker was updated from 0.8.3 to 0.8.4...

It looks like it is trying to ssh into the docker host on port 22 Using container connection at 172.17.0.1:22
With 0.8.3 it seems to ssh into the SUT ip Using container connection at 172.17.0.7:22

11:33:18  TEST_TIERS env variable not defined. Defaulting to run all tests.
11:33:18  /home/jenkins/.rbenv/versions/2.5.3/bin/ruby -I/home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-core-3.10.1/lib:/home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-support-3.10.2/lib /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-core-3.10.1/exe/rspec spec/acceptance
11:33:20  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-rspec-6.3.0/lib/beaker-rspec/helpers/serverspec.rb:43: warning: already initialized constant Module::VALID_OPTIONS_KEYS
11:33:20  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/specinfra-2.82.2/lib/specinfra/configuration.rb:4: warning: previous definition of VALID_OPTIONS_KEYS was here
11:33:20  Hypervisor for centos-7-x64 is docker
11:33:20  Beaker::Hypervisor, found some docker boxes to create
11:33:20  Provisioning docker
11:33:20  provisioning centos-7-x64
11:33:20  Creating image
11:33:20  Dockerfile is         FROM centos:7
11:33:20          ENV container docker
11:33:20  RUN yum clean all
11:33:20  RUN yum install -y sudo openssh-server openssh-clients curl ntpdate
11:33:20  RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
11:33:20  RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
11:33:20  RUN sed 's@session *required *pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/*
11:33:20  RUN mkdir -p /var/run/sshd
11:33:20  RUN echo root:root | chpasswd
11:33:20  RUN sed -ri 's/^#?PermitRootLogin .*/PermitRootLogin yes/' /etc/ssh/sshd_config
11:33:20  RUN sed -ri 's/^#?PasswordAuthentication .*/PasswordAuthentication yes/' /etc/ssh/sshd_config
11:33:20  RUN sed -ri 's/^#?UseDNS .*/UseDNS no/' /etc/ssh/sshd_config
11:33:20  RUN yum install -y epel-release
11:33:20  RUN yum install -y iproute java-1.8.0-openjdk unzip wget which awk jq
11:33:20          EXPOSE 22
11:33:20          CMD ["/usr/sbin/init"]
11:33:20  Docker build buildargs: {}
11:33:20  post
11:33:20  /build
11:33:20  {:rm=>true, :buildargs=>"{}"}
11:33:20  Dockerfile0000640000000000000000000000141414027063357013313 0ustar00wheelwheel00000000000000        FROM centos:7
11:33:20          ENV container docker
11:33:20  RUN yum clean all
11:33:20  RUN yum install -y sudo openssh-server openssh-clients curl ntpdate
11:33:20  RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
11:33:20  RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
11:33:20  RUN sed 's@session *required *pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/*
11:33:20  RUN mkdir -p /var/run/sshd
11:33:20  RUN echo root:root | chpasswd
11:33:20  RUN sed -ri 's/^#?PermitRootLogin .*/PermitRootLogin yes/' /etc/ssh/sshd_config
11:33:20  RUN sed -ri 's/^#?PasswordAuthentication .*/PasswordAuthentication yes/' /etc/ssh/sshd_config
11:33:20  RUN sed -ri 's/^#?UseDNS .*/UseDNS no/' /etc/ssh/sshd_config
11:33:20  RUN yum install -y epel-release
11:33:20  RUN yum install -y iproute java-1.8.0-openjdk unzip wget which awk jq
11:33:20          EXPOSE 22
11:33:20          CMD ["/usr/sbin/init"]
11:33:20  
11:33:20  Creating container from image 0fabfb43f0d8
11:33:20  post
11:33:20  /containers/create
11:33:20  {"name"=>"beaker-centos-7-x64-f5415fab2076"}
11:33:20  {"Image":"0fabfb43f0d8","Hostname":"centos-7-x64","HostConfig":{"PortBindings":{"22/tcp":[{"HostPort":"1262","HostIp":"0.0.0.0"}]},"PublishAllPorts":true,"RestartPolicy":{"Name":"always"},"Privileged":true}}
11:33:20  get
11:33:20  /containers/b3cd06788404a0d0891d0ae83156d3aad65ca5a940b81d6cb62148e087fbc089/json
11:33:20  {}
11:33:20  
11:33:20  get
11:33:20  /info
11:33:20  {}
11:33:20  
11:33:20  Starting container b3cd06788404a0d0891d0ae83156d3aad65ca5a940b81d6cb62148e087fbc089
11:33:20  post
11:33:20  /containers/b3cd06788404a0d0891d0ae83156d3aad65ca5a940b81d6cb62148e087fbc089/start
11:33:20  {}
11:33:20  {}
11:33:20  get
11:33:20  /containers/b3cd06788404a0d0891d0ae83156d3aad65ca5a940b81d6cb62148e087fbc089/stats
11:33:20  {:stream=>0}
11:33:20  
11:33:22  get
11:33:22  /containers/b3cd06788404a0d0891d0ae83156d3aad65ca5a940b81d6cb62148e087fbc089/json
11:33:22  {}
11:33:22  
11:33:22  Using container connection at 172.17.0.1:22
11:33:22  node available as ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected] -p 22
11:33:22  get
11:33:22  /containers/b3cd06788404a0d0891d0ae83156d3aad65ca5a940b81d6cb62148e087fbc089/json
11:33:22  {}
11:33:22  
11:33:22  
11:33:22  centos-7-x64 11:33:21$ cat /etc/resolv.conf
11:33:22    Attempting ssh connection to 172.17.0.1, user: root, opts: {:password=>"root", :port=>"22", :forward_agent=>false, :auth_methods=>["password", "publickey", "hostbased", "keyboard-interactive"]}
11:33:25  [email protected]'s password:Inappropriate ioctl for device
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/net-ssh-6.1.0/lib/net/ssh/prompt.rb:45:in `noecho'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/net-ssh-6.1.0/lib/net/ssh/prompt.rb:45:in `ask'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/net-ssh-6.1.0/lib/net/ssh/authentication/methods/password.rb:68:in `ask_password'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/net-ssh-6.1.0/lib/net/ssh/authentication/methods/password.rb:21:in `authenticate'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/net-ssh-6.1.0/lib/net/ssh/authentication/session.rb:86:in `block in authenticate'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/net-ssh-6.1.0/lib/net/ssh/authentication/session.rb:72:in `each'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/net-ssh-6.1.0/lib/net/ssh/authentication/session.rb:72:in `authenticate'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/net-ssh-6.1.0/lib/net/ssh.rb:255:in `start'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-4.26.0/lib/beaker/ssh_connection.rb:81:in `connect_block'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-4.26.0/lib/beaker/ssh_connection.rb:111:in `connect'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-4.26.0/lib/beaker/ssh_connection.rb:43:in `connect'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-4.26.0/lib/beaker/host.rb:302:in `connection'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-4.26.0/lib/beaker/host.rb:362:in `block (2 levels) in exec'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-4.26.0/lib/beaker/logger.rb:239:in `with_indent'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-4.26.0/lib/beaker/host.rb:361:in `block in exec'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/2.5.0/benchmark.rb:308:in `realtime'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-4.26.0/lib/beaker/host.rb:360:in `exec'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-4.26.0/lib/beaker/host_prebuilt_steps.rb:292:in `get_domain_name'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-4.26.0/lib/beaker/host_prebuilt_steps.rb:392:in `block in hack_etc_hosts'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-4.26.0/lib/beaker/host_prebuilt_steps.rb:389:in `each'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-4.26.0/lib/beaker/host_prebuilt_steps.rb:389:in `hack_etc_hosts'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-docker-0.8.4/lib/beaker/hypervisor/docker.rb:337:in `provision'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-4.26.0/lib/beaker/hypervisor.rb:37:in `create'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-4.26.0/lib/beaker/network_manager.rb:72:in `block in provision'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-4.26.0/lib/beaker/network_manager.rb:71:in `each_key'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-4.26.0/lib/beaker/network_manager.rb:71:in `provision'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-rspec-6.3.0/lib/beaker-rspec/beaker_shim.rb:35:in `provision'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-rspec-6.3.0/lib/beaker-rspec/spec_helper.rb:57:in `block in <top (required)>'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-core-3.10.1/lib/rspec/core.rb:98:in `configure'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-rspec-6.3.0/lib/beaker-rspec/spec_helper.rb:5:in `<top (required)>'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-rspec-6.3.0/lib/beaker-rspec.rb:5:in `require'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-rspec-6.3.0/lib/beaker-rspec.rb:5:in `<module:BeakerRSpec>'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/beaker-rspec-6.3.0/lib/beaker-rspec.rb:1:in `<top (required)>'
11:33:25  /home/jenkins/workspace/_test-versjoner-av-beaker-docker/spec/spec_helper_acceptance.rb:7:in `require'
11:33:25  /home/jenkins/workspace/_test-versjoner-av-beaker-docker/spec/spec_helper_acceptance.rb:7:in `<top (required)>'
11:33:25  /home/jenkins/workspace/_test-versjoner-av-beaker-docker/spec/acceptance/01_am__client_spec.rb:1:in `require'
11:33:25  /home/jenkins/workspace/_test-versjoner-av-beaker-docker/spec/acceptance/01_am__client_spec.rb:1:in `<top (required)>'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-core-3.10.1/lib/rspec/core/configuration.rb:2112:in `load'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-core-3.10.1/lib/rspec/core/configuration.rb:2112:in `load_file_handling_errors'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-core-3.10.1/lib/rspec/core/configuration.rb:1615:in `block in load_spec_files'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-core-3.10.1/lib/rspec/core/configuration.rb:1613:in `each'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-core-3.10.1/lib/rspec/core/configuration.rb:1613:in `load_spec_files'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-core-3.10.1/lib/rspec/core/runner.rb:102:in `setup'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-core-3.10.1/lib/rspec/core/runner.rb:86:in `run'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-core-3.10.1/lib/rspec/core/runner.rb:71:in `run'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-core-3.10.1/lib/rspec/core/runner.rb:45:in `invoke'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-core-3.10.1/exe/rspec:4:in `<main>'
11:33:25  /home/jenkins/.rbenv/versions/2.5.3/bin/ruby -I/home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-core-3.10.1/lib:/home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-support-3.10.2/lib /home/jenkins/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/rspec-core-3.10.1/exe/rspec spec/acceptance failed

Enable SSH Agent forwarding on MacOS

It would be really nice to be able to pass docker arguments in the hosts files. Reason being I'm facing with an SSH issue Host default unreachable: SocketError - getaddrinfo: nodename nor servname provided, or not known and I googled around when I found this first docker/for-mac#410 (comment) and later in the official doc.

$ gem env   
RubyGems Environment:
  - RUBYGEMS VERSION: 3.0.9
  - RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-darwin22]
  - INSTALLATION DIRECTORY: /Users/gmagyar/.rvm/gems/ruby-2.5.1
  - USER INSTALLATION DIRECTORY: /Users/gmagyar/.gem/ruby/2.5.0
  - RUBY EXECUTABLE: /Users/gmagyar/.rvm/rubies/ruby-2.5.1/bin/ruby
  - GIT EXECUTABLE: /usr/local/bin/git
  - EXECUTABLE DIRECTORY: /Users/gmagyar/.rvm/gems/ruby-2.5.1/bin
  - SPEC CACHE DIRECTORY: /Users/gmagyar/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /Users/gmagyar/.rvm/rubies/ruby-2.5.1/etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-22
  - GEM PATHS:
     - /Users/gmagyar/.rvm/gems/ruby-2.5.1
     - /Users/gmagyar/.rvm/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /usr/local/bin
     - /usr/local/sbin
     - /Users/gmagyar/.rvm/gems/ruby-2.5.1/bin
     - /Users/gmagyar/.rvm/gems/ruby-2.5.1@global/bin
     - /Users/gmagyar/.rvm/rubies/ruby-2.5.1/bin
     - /Users/gmagyar/.rvm/bin
     - /Users/gmagyar/.rbenv/shims
     - /Users/gmagyar/.rbenv/bin
     - /usr/local/opt/mozjpeg/bin
     - ~/tools/arcanist/bin
     - ~/tools/arcanist/bin
     - /Users/gmagyar/.nvm/versions/node/v16.17.0/bin
     - /Users/gmagyar/bin
     - /usr/local/bin
     - /usr/local/bin
     - /System/Cryptexes/App/usr/bin
     - /usr/bin
     - /bin
     - /usr/sbin
     - /sbin
     - /usr/local/go/bin
     - /usr/local/MacGPG2/bin
     - /opt/puppetlabs/bin
     - /opt/puppetlabs/pdk/bin
     - /Library/Apple/usr/bin
     - /Users/gmagyar/.rvm/bin
     - /Users/gmagyar/.rvm/bin
Beaker Docker is at the latest release
Docker version 20.10.23, build 7155243

Beaker complains about host unreachable - Ubuntu 18 and 20

When executing the command bundle exec rake beaker:ubuntu-1804-docker, Beaker displays the following error:

Beaker::Hypervisor, found some docker boxes to createProvisioning dockerprovisioning example-node.exampleUsing container connection at 172.17.0.83:22 Warning: Try 1 -- Host 172.17.0.83 unreachable: Errno::ECONNREFUSED - Connection refused - connect(2) for 172.17.0.83:22 Warning: Trying again in 3 seconds Warning: Try 2 -- Host 172.17.0.83 unreachable: Errno::ECONNREFUSED - Connection refused - connect(2) for 172.17.0.83:22 Warning: Trying again in 5 seconds

This issue is only happening for Ubuntu 18 (beaker:ubuntu-1804-docker) and 20 (beaker:ubuntu-2004-docker), for Ubuntu 14 and 16, it's working.

ubuntu-1804-docker.yml node-set:

HOSTS:
  example-node.example:
    platform: ubuntu-18.04-amd64
    image: ubuntu:18.04
    hypervisor: docker
    docker_preserve_image: false
    docker_cmd: '["/sbin/init"]'
    docker_image_commands:
      - 'apt-get install -y net-tools wget curl locales apt-transport-https software-properties-common iptables'
      - 'locale-gen en_US.UTF-8'
CONFIG:
  type: aio
  puppet_collection: puppet6
  puppet_agent_version: 6.17.0

Any help would be much appreciated, please.
Thanks!

Regression with 1.0.0 WRT SSH port usage

Seems fix I wrote for #44 was broken in #47 as the behavior I reported and fixed in #44 is back. The original issue was #43 which is back with 1.0.0. If I downgrade to 0.8.4 things work just fine. This is using Docker on a Mac where the host OS won't have access to the docker network so have to connect to SSH using loopback and exposed port and not container IP address and port 22.

  Attempting ssh connection to 172.17.0.7, user: root, opts: {:password=>"root", :port=>22, :forward_agent=>false, :auth_methods=>["password", "publickey", "hostbased", "keyboard-interactive"]}
  Warning: Try 1 -- Host 172.17.0.7 unreachable: Errno::ECONNREFUSED - Connection refused - connect(2) for 172.17.0.7:22
  Warning: Trying again in 3 seconds
  Attempting ssh connection to 172.17.0.7, user: root, opts: {:password=>"root", :port=>22, :forward_agent=>false, :auth_methods=>["password", "publickey", "hostbased", "keyboard-interactive"], :logger=>#<Logger:0x00007ff5c811bf28 @level=4, @progname=nil, @default_formatter=#<Logger::Formatter:0x00007ff5c811bed8 @datetime_format=nil>, @formatter=nil, @logdev=#<Logger::LogDevice:0x00007ff5c811be88 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDERR>>, @mon_owner=nil, @mon_count=0, @mon_mutex=#<Thread::Mutex:0x00007ff5c811be10>>>, :password_prompt=>#<Net::SSH::Prompt:0x00007ff5c811bde8>, :user=>"root"}
  Warning: Try 2 -- Host 172.17.0.7 unreachable: Errno::ECONNREFUSED - Connection refused - connect(2) for 172.17.0.7:22
  Warning: Trying again in 5 seconds
  Attempting ssh connection to 172.17.0.7, user: root, opts: {:password=>"root", :port=>22, :forward_agent=>false, :auth_methods=>["password", "publickey", "hostbased", "keyboard-interactive"], :logger=>#<Logger:0x00007ff5c811bf28 @level=4, @progname=nil, @default_formatter=#<Logger::Formatter:0x00007ff5c811bed8 @datetime_format=nil>, @formatter=nil, @logdev=#<Logger::LogDevice:0x00007ff5c811be88 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDERR>>, @mon_owner=nil, @mon_count=0, @mon_mutex=#<Thread::Mutex:0x00007ff5c811be10>>>, :password_prompt=>#<Net::SSH::Prompt:0x00007ff5c811bde8>, :user=>"root"}

Use dynamically mapped ssh port number

This is to continue the discussion started in PR #68.

Another thing I wonder about is whether Docker can't do this natively. So create the container and then inspect to find out whatever Docker assigned to it, but I guess we can leave that for another day.

From a brief dig through the docker docs, if you want to use a specific port, you need to map it. I do like the idea of telling it that you want a mapping and letting it decide, but I don't think I've ever seen that done anywhere.

I did few quick experiments with podman w/o explicit ssh port mapping and it was successful. We need to ensure it works ok with real docker and maybe with nerdctl too.

Another question is how to check with Docker Swarm.

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.