beaker-docker 0.8.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f21e88681130028d956057cc5d7e10242d3ab4b0dd3afdddc1e4a77b6a30376e
4
- data.tar.gz: 27f935f63ebaf20d0eb18afcab7360dccdb6cc7e037cee4d6e9e3a45aed9ef33
3
+ metadata.gz: d1f70940dc7c4b43db06838e143fc4e4a498247be0ed67ae0926ae84527f5786
4
+ data.tar.gz: b12830fb23b10ccf1718be061c3e6ffe3e81c0b47b3aff58e3882e2e0a843c7d
5
5
  SHA512:
6
- metadata.gz: 419eee4542d7283b98c1c9e56fae980816123bd5b4f8f69920180815c0ac61d047f0a8523ac68dc091e6bff6c101d8782905ec18d8a8d571274e62588872f58d
7
- data.tar.gz: 7aa8635232484d7b4ef171d1714ab59805cd82e1b8c0d44d70174b903805376cf08e8ce48030f33f0efeb8d4ce845b8f2ad6b0f3deeb30bef602ffa86b092387
6
+ metadata.gz: d182e05ba8dea02f896571bb5cf100f3a313349e1178f3eb9daf5e62f7ec93572114e4e1cf6e10a34aa18e8280d7be0ff7ed8a1482984cbd07ae3a530a7a0be9
7
+ data.tar.gz: 478ac68e7088d66a8f5a4732f59a1337b355293b5a5f8d38551e5d54b81e6e7634528139b4c5717462b3d0b4a8558de05afc83b2f2c51705f0e8d16b7fb885a8
@@ -0,0 +1,24 @@
1
+ name: Release
2
+
3
+ on:
4
+ create:
5
+ ref_type: tag
6
+
7
+ jobs:
8
+ release:
9
+ runs-on: ubuntu-latest
10
+ if: github.repository == 'voxpupuli/beaker-docker'
11
+ env:
12
+ BUNDLE_WITHOUT: release
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+ - name: Install Ruby 2.7
16
+ uses: ruby/setup-ruby@v1
17
+ with:
18
+ ruby-version: '2.7'
19
+ - name: Build gem
20
+ run: gem build *.gemspec
21
+ - name: Publish gem
22
+ run: gem push *.gem
23
+ env:
24
+ GEM_HOST_API_KEY: '${{ secrets.RUBYGEMS_AUTH_TOKEN }}'
@@ -1,13 +1,19 @@
1
1
  name: Test
2
2
 
3
3
  on:
4
- - pull_request
4
+ push:
5
+ branches:
6
+ - test_me_github
7
+ pull_request:
8
+ branches:
9
+ - main
10
+ - master
5
11
 
6
12
  jobs:
7
- test:
13
+ rspec:
8
14
  runs-on: ubuntu-latest
9
15
  strategy:
10
- fail-fast: false
16
+ fail-fast: true
11
17
  matrix:
12
18
  ruby:
13
19
  - "2.4"
@@ -16,7 +22,7 @@ jobs:
16
22
  - "2.7"
17
23
  env:
18
24
  BUNDLE_WITHOUT: release
19
- name: Ruby ${{ matrix.ruby }}
25
+ name: RSpec - Ruby ${{ matrix.ruby }}
20
26
  steps:
21
27
  - uses: actions/checkout@v2
22
28
  - name: Install Ruby ${{ matrix.ruby }}
@@ -24,9 +30,76 @@ jobs:
24
30
  with:
25
31
  ruby-version: ${{ matrix.ruby }}
26
32
  bundler-cache: true
27
- - name: Run spec tests
33
+ - name: install bundler
34
+ run: |
35
+ gem install bundler -v '~> 1.17.3'
36
+ bundle update
37
+ - name: spec tests
28
38
  run: bundle exec rake test:spec
29
- # It seems some additonal setup of Docker may be needed for
30
- # the acceptance tests to work.
31
- # - name: Run acceptance tests
32
- # run: bundle exec rake test:acceptance
39
+
40
+ docker:
41
+ runs-on: ubuntu-latest
42
+ strategy:
43
+ fail-fast: true
44
+ matrix:
45
+ ruby:
46
+ - "2.6"
47
+ env:
48
+ BUNDLE_WITHOUT: release
49
+ name: Docker - Ruby ${{ matrix.ruby }}
50
+ steps:
51
+ - uses: actions/checkout@v2
52
+ - name: Install Ruby ${{ matrix.ruby }}
53
+ uses: ruby/setup-ruby@v1
54
+ with:
55
+ ruby-version: ${{ matrix.ruby }}
56
+ bundler-cache: true
57
+ - name: install bundler
58
+ run: |
59
+ gem install bundler -v '~> 1.17.3'
60
+ bundle update
61
+ - name: install container runtime
62
+ run: |
63
+ sudo apt-get remove -y docker docker-engine docker.io containerd runc ||:
64
+ sudo apt-get update -y
65
+ sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
66
+ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
67
+ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
68
+ sudo apt-get update -y
69
+ sudo apt-get install -y docker-ce docker-ce-cli containerd.io
70
+ sudo systemctl start docker
71
+ - name: Run acceptance tests
72
+ run: bundle exec rake test:acceptance
73
+
74
+ podman:
75
+ runs-on: ubuntu-latest
76
+ strategy:
77
+ fail-fast: true
78
+ matrix:
79
+ ruby:
80
+ - "2.6"
81
+ env:
82
+ BUNDLE_WITHOUT: release
83
+ name: Podman - Ruby ${{ matrix.ruby }}
84
+ steps:
85
+ - uses: actions/checkout@v2
86
+ - name: Install Ruby ${{ matrix.ruby }}
87
+ uses: ruby/setup-ruby@v1
88
+ with:
89
+ ruby-version: ${{ matrix.ruby }}
90
+ bundler-cache: true
91
+ - name: install bundler
92
+ run: |
93
+ gem install bundler -v '~> 1.17.3'
94
+ bundle update
95
+ # We need the latest version of podman for this to work
96
+ - name: install container runtime
97
+ run: |
98
+ . /etc/os-release
99
+ curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
100
+ echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/podman.list > /dev/null
101
+ sudo apt-get update
102
+ sudo apt-get -y install podman
103
+ sudo systemctl start podman
104
+ - name: Run acceptance tests
105
+ run: bundle exec rake test:acceptance
data/Gemfile.local ADDED
@@ -0,0 +1,5 @@
1
+ group :acceptance_testing do
2
+ # Needed for podman testing
3
+ gem "docker-api", :git => 'https://github.com/trevor-vaughan/docker-api', :branch => 'podman-compat'
4
+ gem "beaker-rspec"
5
+ end
data/Rakefile CHANGED
@@ -32,11 +32,15 @@ A quick acceptance test, named because it has no pre-suites to run
32
32
  beaker_test_base_dir = File.join(beaker_gem_dir, 'acceptance/tests/base')
33
33
  load_path_option = File.join(beaker_gem_dir, 'acceptance/lib')
34
34
 
35
+ ENV['BEAKER_setfile'] = 'acceptance/config/nodes/hosts.yaml'
35
36
  sh("beaker",
36
37
  "--hosts", "acceptance/config/nodes/hosts.yaml",
37
- "--tests", beaker_test_base_dir,
38
+ # We can't run these tests until the rsync support in the main
39
+ # beaker/host.rb is updated to work with passwords.
40
+ # "--tests", beaker_test_base_dir,
41
+ # "--load-path", load_path_option,
42
+ "--tests", 'acceptance/tests/',
38
43
  "--log-level", "debug",
39
- "--load-path", load_path_option,
40
44
  "--debug")
41
45
  end
42
46
 
@@ -12,12 +12,6 @@ HOSTS:
12
12
  - classifier
13
13
  - default
14
14
  docker_cmd: '["/sbin/init"]'
15
- docker_cap_add:
16
- - AUDIT_WRITE
17
- dockeropts:
18
- Labels:
19
- one: '1'
20
- two: '2'
21
15
  centos7:
22
16
  platform: el-7-x86_64
23
17
  hypervisor: docker
@@ -26,10 +20,21 @@ HOSTS:
26
20
  - agent
27
21
  docker_cmd: '/usr/sbin/sshd -D -E /var/log/sshd.log'
28
22
  use_image_entrypoint: true
29
- dockeropts:
30
- HostConfig:
31
- Privileged: true
32
23
  CONFIG:
33
24
  nfs_server: none
34
25
  consoleport: 443
35
26
  log_level: verbose
27
+ # Ubuntu runners need to run with full privileges
28
+ # RHEL derivitives just need the docker cap AUDIT_WRITE
29
+ dockeropts:
30
+ HostConfig:
31
+ Privileged: true
32
+ # docker_cap_add:
33
+ # - AUDIT_WRITE
34
+ type: aio
35
+ ssh:
36
+ verify_host_key: false
37
+ user_known_hosts_file: '/dev/null'
38
+ password: root
39
+ auth_methods:
40
+ - password
@@ -0,0 +1,10 @@
1
+ require 'beaker'
2
+ require 'beaker-rspec'
3
+
4
+ RSpec.describe 'it can connect' do
5
+ hosts.each do |host|
6
+ context "on #{host}" do
7
+ on(host, 'ls /tmp')
8
+ end
9
+ end
10
+ end
@@ -1,3 +1,3 @@
1
1
  module BeakerDocker
2
- VERSION = '0.8.0'
2
+ VERSION = '0.8.1'
3
3
  end
@@ -135,32 +135,35 @@ module Beaker
135
135
  port: nil
136
136
  }
137
137
 
138
+ container_json = container.json
139
+ network_settings = container_json['NetworkSettings']
140
+ host_config = container_json['HostConfig']
141
+
142
+ ip = nil
143
+ port = nil
138
144
  # Talking against a remote docker host which is a normal docker host
139
145
  if @docker_type == 'docker' && ENV['DOCKER_HOST'] && !ENV.fetch('DOCKER_HOST','').include?(':///')
140
146
  ip = URI.parse(ENV['DOCKER_HOST']).host
141
147
  else
142
148
  # Swarm or local docker host
143
149
  if in_container?
144
- ip = container.json["NetworkSettings"]["Gateway"]
150
+ gw = network_settings['Gateway']
151
+ ip = gw unless (gw.nil? || gw.empty?)
145
152
  else
146
- ip = container.json["NetworkSettings"]["Ports"]["22/tcp"][0]["HostIp"]
153
+ port22 = network_settings.dig('Ports','22/tcp')
154
+ ip = port22[0]["HostIp"] if port22
147
155
  end
148
156
  end
149
157
 
150
- network_settings = container.json['NetworkSettings']
151
- host_config = container.json['HostConfig']
152
-
153
- port = '22'
154
- if host_config['NetworkMode'] == 'bridge' && network_settings['IPAddress'] && !network_settings['IPAddress'].empty?
155
- ssh_connection_info[:ip] = network_settings['IPAddress']
158
+ if host_config['NetworkMode'] != 'slirp4netns' && network_settings['IPAddress'] && !network_settings['IPAddress'].empty?
159
+ ip = network_settings['IPAddress']
156
160
  else
157
- port = network_settings['Ports']['22/tcp'][0]['HostPort']
158
-
159
- # Update host metadata
160
- ssh_connection_info[:ip] = (ip == '0.0.0.0') ? '127.0.0.1' : ip
161
+ port22 = network_settings.dig('Ports','22/tcp')
162
+ port = port22[0]['HostPort'] if port22
161
163
  end
162
164
 
163
- ssh_connection_info[:port] = port
165
+ ssh_connection_info[:ip] = (ip == '0.0.0.0') ? '127.0.0.1' : ip
166
+ ssh_connection_info[:port] = port || '22'
164
167
  ssh_connection_info
165
168
  end
166
169
 
@@ -242,7 +245,8 @@ module Beaker
242
245
  while(!ok && (retries < 5))
243
246
  container = ::Docker::Container.create(container_opts)
244
247
 
245
- if (get_ssh_connection_info(container)[:port].to_i < 1024) && (Process.uid != 0)
248
+ ssh_info = get_ssh_connection_info(container)
249
+ if ssh_info[:ip] == '127.0.0.1' && (ssh_info[:port].to_i < 1024) && (Process.uid != 0)
246
250
  @logger.debug("#{host} was given a port less than 1024 but you are not running as root, retrying")
247
251
 
248
252
  container.delete
@@ -267,19 +271,19 @@ module Beaker
267
271
  @logger.debug("Starting container #{container.id}")
268
272
  container.start
269
273
 
274
+ begin
275
+ container.stats
276
+ rescue StandardError => e
277
+ container.delete
278
+ raise "Container '#{container.id}' in a bad state: #{e}"
279
+ end
280
+
270
281
  # Preserve the ability to talk directly to the underlying API
271
282
  #
272
283
  # You can use any method defined by the docker-api gem on this object
273
284
  # https://github.com/swipely/docker-api
274
285
  host[:docker_container] = container
275
286
 
276
- ssh_connection_info = get_ssh_connection_info(container)
277
-
278
- ip = ssh_connection_info[:ip]
279
- port = ssh_connection_info[:port]
280
-
281
- @logger.info("Using container connection at #{ip}:#{port}")
282
-
283
287
  if install_and_run_ssh(host)
284
288
  @logger.notify("Installing ssh components and starting ssh daemon in #{host} container")
285
289
  install_ssh_components(container, host)
@@ -287,6 +291,13 @@ module Beaker
287
291
  fix_ssh(container, host)
288
292
  end
289
293
 
294
+ ssh_connection_info = get_ssh_connection_info(container)
295
+
296
+ ip = ssh_connection_info[:ip]
297
+ port = ssh_connection_info[:port]
298
+
299
+ @logger.info("Using container connection at #{ip}:#{port}")
300
+
290
301
  forward_ssh_agent = @options[:forward_ssh_agent] || false
291
302
 
292
303
  host['ip'] = ip
@@ -298,7 +309,7 @@ module Beaker
298
309
  :auth_methods => ['password', 'publickey', 'hostbased', 'keyboard-interactive']
299
310
  }
300
311
 
301
- @logger.debug("node available as ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@#{ip} -p #{port}")
312
+ @logger.debug("node available as ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@#{ip} -p #{port}")
302
313
  host['docker_container_id'] = container.id
303
314
  host['docker_image_id'] = image.id
304
315
  host['vm_ip'] = container.json["NetworkSettings"]["IPAddress"].to_s
@@ -88,6 +88,7 @@ module Beaker
88
88
  container = double('Docker::Container')
89
89
  allow( container ).to receive(:id).and_return('abcdef')
90
90
  allow( container ).to receive(:start)
91
+ allow( container ).to receive(:stats)
91
92
  allow( container ).to receive(:info).and_return(
92
93
  *(0..2).map { |index| { 'Names' => ["/spec-container-#{index}"] } }
93
94
  )
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beaker-docker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rishi Javia, Kevin Imber, Tony Vu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-26 00:00:00.000000000 Z
11
+ date: 2021-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -131,14 +131,17 @@ extensions: []
131
131
  extra_rdoc_files: []
132
132
  files:
133
133
  - ".github/dependabot.yml"
134
+ - ".github/workflows/release.yml"
134
135
  - ".github/workflows/test.yml"
135
136
  - ".gitignore"
136
137
  - ".simplecov"
137
138
  - Gemfile
139
+ - Gemfile.local
138
140
  - LICENSE
139
141
  - README.md
140
142
  - Rakefile
141
143
  - acceptance/config/nodes/hosts.yaml
144
+ - acceptance/tests/00_default_spec.rb
142
145
  - beaker-docker.gemspec
143
146
  - bin/beaker-docker
144
147
  - docker.md
@@ -165,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
165
168
  - !ruby/object:Gem::Version
166
169
  version: '0'
167
170
  requirements: []
168
- rubygems_version: 3.0.8
171
+ rubygems_version: 3.1.4
169
172
  signing_key:
170
173
  specification_version: 4
171
174
  summary: Beaker DSL Extension Helpers!