kitchen-docker_cli 0.12.1 → 0.13.0

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
  SHA1:
3
- metadata.gz: 4e0a0e76a7c98fcaba3b91e0477e5856ed858cf2
4
- data.tar.gz: e78245d37535383507da953c3832b4b82b458481
3
+ metadata.gz: d09c1ca759499f465522eac8a5450d03c9a156f6
4
+ data.tar.gz: 3c02d60023b1f6cd810209756de6494a51961ea6
5
5
  SHA512:
6
- metadata.gz: 67bb308266dbbdd7d7479b14d6e750d17a38f5d1c75caf5f00b85652a4d4195ed4c1465a525329da413491b49b7a780f57b1d0d4dcea8610b6188ff6b150fe5d
7
- data.tar.gz: 613420358e245663d8d11b43cab6c67aaa085f1547e1a6040c45e310aea0c4055d548c612b9460eb92b5e8040bbe2b3d8811e5e617d8e7c718b9a02e7a09eedb
6
+ metadata.gz: a756a6c2d28cc7f572d38fcb9b561487f82be6cff4efbc440ad02a86ac8cf7d984eee63a1cb01b370f3b36e74c17cf2bb02eeecd70a8d2be05d3cdf488f4e775
7
+ data.tar.gz: 1273593f19790281578cf9522e79a1f4378038b8af3d861dc1d4294147f667ae422a22b285ed2d3ee53ed34db7eeba7a44ed7fccafe95cdab5dd02e099b2c31b
data/.kitchen.yml CHANGED
@@ -25,3 +25,5 @@ suites:
25
25
  name: ansible_playbook
26
26
  playbook: test/integration/ansible/default.yml
27
27
  hosts: 127.0.0.1
28
+ verifier:
29
+ ruby_bindir: /usr/bin
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.13.0
2
+
3
+ * Support Docker LXC driver(for CircleCI)
4
+
1
5
  ## 0.12.1
2
6
 
3
7
  * Fix error on `kitchen-ansible` with extra_vars [#18][]
@@ -90,4 +94,4 @@
90
94
  [#18]: https://github.com/marcy-terui/kitchen-docker_cli/issues/18
91
95
  [@grubernaut]: https://github.com/grubernaut
92
96
  [@hd-deman]: https://github.com/hd-deman
93
- [@yewton]: https://github.com/yewton
97
+ [@yewton]: https://github.com/yewton
data/Gemfile CHANGED
@@ -1,7 +1,3 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
-
5
- group :development do
6
- gem 'kitchen-ansible'
7
- end
data/README.md CHANGED
@@ -59,6 +59,8 @@ suites:
59
59
  attributes:
60
60
  ```
61
61
 
62
+ ## Driver Configuration
63
+
62
64
  ### image
63
65
 
64
66
  The Docker image's path.
@@ -317,6 +319,7 @@ For best results, please:
317
319
  ```
318
320
 
319
321
  ### dockerfile_vars
322
+
320
323
  Template variables for the custom Dockerfile.
321
324
 
322
325
  Example:
@@ -371,6 +374,56 @@ This option with value 0 indicates that the running container has access to all
371
374
  cpu_shares: 512
372
375
  ```
373
376
 
377
+ ## Transport Configuration
378
+
379
+ ### lxc_driver
380
+
381
+ If you use the LXC Driver of Docker (CircleCI), please set `true`
382
+
383
+ The default value is `false`
384
+
385
+ ```yml
386
+ lxc_driver: true
387
+ ```
388
+
389
+ ### docker_base
390
+
391
+ Base of `docker` command.
392
+
393
+ The default value is `docker`
394
+
395
+ Example:
396
+
397
+ ```yml
398
+ docker_base: sudo /path/to/docker
399
+ ```
400
+
401
+ ### lxc_attach_base
402
+
403
+ Base of `lxc-attach` command.
404
+ This option is used on LXC driver only.
405
+
406
+ The default value is `sudo lxc-attach`
407
+
408
+ Example:
409
+
410
+ ```yml
411
+ docker_base: sudo /path/to/lxc-attach
412
+ ```
413
+
414
+ ### lxc_console_base
415
+
416
+ Base of `lxc-console` command.
417
+ This option is used on LXC driver only.
418
+
419
+ The default value is `sudo lxc-console`
420
+
421
+ Example:
422
+
423
+ ```yml
424
+ docker_base: sudo /path/to/lxc-console
425
+ ```
426
+
374
427
  ## <a name="development"></a> Development
375
428
 
376
429
  * Source hosted at [GitHub][repo]
data/circle.yml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ machine:
3
+ ruby:
4
+ version: 2.1.5
5
+ services:
6
+ - docker
7
+
8
+ dependencies:
9
+ override:
10
+ - bundle install --path=vendor/bundle:
11
+ pwd: integration-test
12
+ test:
13
+ override:
14
+ - bundle exec kitchen test:
15
+ pwd: integration-test
@@ -4,19 +4,26 @@ driver:
4
4
 
5
5
  transport:
6
6
  name: docker_cli
7
+ lxc_driver: true
7
8
 
8
9
  driver_config:
9
10
  hostname: example.local
10
11
 
11
- provisioner:
12
- name: chef_zero
13
-
14
12
  platforms:
15
13
  - name: ubuntu-12.04
16
14
  - name: centos-6.4
17
15
 
18
16
  suites:
19
- - name: default
17
+ - name: chef
18
+ provisioner:
19
+ name: chef_zero
20
20
  run_list:
21
21
  - recipe[integration-test::default]
22
22
  attributes:
23
+
24
+ - name: ansible
25
+ provisioner:
26
+ name: ansible_playbook
27
+ require_ruby_for_busser: false
28
+ playbook: test/integration/ansible/default.yml
29
+ hosts: 127.0.0.1
@@ -1,3 +1,4 @@
1
1
  source "https://rubygems.org"
2
2
 
3
3
  gem 'kitchen-docker_cli', path: '../'
4
+ gem 'kitchen-ansible'
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
17
17
  spec.executables = []
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features|integration-test)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
21
  spec.add_dependency 'test-kitchen', '>= 1.3'
@@ -139,6 +139,7 @@ module Kitchen
139
139
  when 'rhel', 'centos', 'fedora'
140
140
  file << 'RUN yum clean all'
141
141
  file << 'RUN yum -y install sudo curl tar'
142
+ file << 'RUN echo "Defaults:root !requiretty" >> /etc/sudoers'
142
143
  else
143
144
  # TODO: Support other distribution
144
145
  end
@@ -21,6 +21,6 @@ module Kitchen
21
21
  module Driver
22
22
 
23
23
  # Version string for DockerCli Kitchen driver
24
- DOCKER_CLI_VERSION = '0.12.1'
24
+ DOCKER_CLI_VERSION = '0.13.0'
25
25
  end
26
26
  end
@@ -29,6 +29,10 @@ module Kitchen
29
29
  plugin_version Kitchen::VERSION
30
30
 
31
31
  default_config :host, nil
32
+ default_config :lxc_driver, false
33
+ default_config :docker_base, "docker"
34
+ default_config :lxc_attach_base, "sudo lxc-attach"
35
+ default_config :lxc_console_base, "sudo lxc-console"
32
36
 
33
37
  def connection(state, &block)
34
38
  options = config.to_hash.merge(state)
@@ -40,24 +44,46 @@ module Kitchen
40
44
  include ShellOut
41
45
 
42
46
  def login_command
47
+ if @options[:lxc_driver]
48
+ lxc_login_command
49
+ else
50
+ docker_login_command
51
+ end
52
+ end
53
+
54
+ def docker_login_command
43
55
  args = []
44
56
  args << 'exec'
45
57
  args << '-t'
46
58
  args << '-i'
47
59
  args << @options[:container_id]
48
60
  args << '/bin/bash'
49
- LoginCommand.new(binary, args)
61
+ LoginCommand.new(docker_base, args)
50
62
  end
51
63
 
52
- def execute(command)
53
- if command
54
- exec_cmd = docker_exec_command(@options[:container_id], command, :tty => true)
55
- run_docker(exec_cmd)
64
+ def lxc_login_command
65
+ args = []
66
+ args << 'in'
67
+ args << "\"$(#{docker_base} inspect --format '{{.Id}}' #{@options[:container_id]})\""
68
+ LoginCommand.new(@options[:lxc_console_base], args)
69
+ end
70
+
71
+ def execute(cmd)
72
+ if cmd
73
+ if @options[:lxc_driver]
74
+ run_lxc(lxc_exec_command(@options[:container_id], cmd))
75
+ else
76
+ run_docker(docker_exec_command(@options[:container_id], cmd, :tty => true))
77
+ end
56
78
  end
57
79
  end
58
80
 
59
- def run_docker(command, options={})
60
- run_command("#{binary} #{command}", options)
81
+ def run_lxc(cmd, options={})
82
+ run_command("#{lxc_attach_base} #{cmd}", options)
83
+ end
84
+
85
+ def run_docker(cmd, options={})
86
+ run_command("#{docker_base} #{cmd}", options)
61
87
  end
62
88
 
63
89
  def upload(locals, remote)
@@ -65,7 +91,11 @@ module Kitchen
65
91
  execute(cmd)
66
92
  Array(locals).each do |local|
67
93
  remote_cmd = "tar x -C #{remote}"
68
- remote_cmd = "#{binary} #{docker_exec_command(@options[:container_id], remote_cmd, :interactive => true)}"
94
+ if @options[:lxc_driver]
95
+ remote_cmd = "#{lxc_attach_base} #{lxc_exec_command(@options[:container_id], remote_cmd)}"
96
+ else
97
+ remote_cmd = "#{docker_base} #{docker_exec_command(@options[:container_id], remote_cmd, :interactive => true)}"
98
+ end
69
99
  local_cmd = "cd #{File.dirname(local)} && tar cf - ./#{File.basename(local)}"
70
100
  run_command("#{local_cmd} | #{remote_cmd}")
71
101
  end
@@ -75,12 +105,24 @@ module Kitchen
75
105
  exec_cmd = "exec"
76
106
  exec_cmd << " -t" if opt[:tty]
77
107
  exec_cmd << " -i" if opt[:interactive]
78
- cmd = Util.wrap_command(cmd.gsub("'", "'\\\\''")) unless cmd.match(/\Ash\s\-c/)
79
- exec_cmd << " #{container_id} #{cmd}"
108
+ exec_cmd << " #{container_id} #{wrap_command(cmd)}"
109
+ end
110
+
111
+ def lxc_exec_command(container_id, cmd)
112
+ exec_cmd = " -n \"$(#{docker_base} inspect --format '{{.Id}}' #{@options[:container_id]})\""
113
+ exec_cmd << " -- #{wrap_command(cmd)}"
114
+ end
115
+
116
+ def wrap_command(cmd)
117
+ cmd.match(/\Ash\s\-c/) ? cmd : Util.wrap_command(cmd.gsub('\'', "'\\\\''"))
118
+ end
119
+
120
+ def docker_base
121
+ @options[:docker_base]
80
122
  end
81
123
 
82
- def binary
83
- "docker"
124
+ def lxc_attach_base
125
+ @options[:lxc_attach_base]
84
126
  end
85
127
 
86
128
  end
@@ -198,7 +198,8 @@ describe Kitchen::Driver::DockerCli, "docker_file" do
198
198
  example do
199
199
  ret = "FROM centos/centos6\n"
200
200
  ret << "RUN yum clean all\n"
201
- ret << "RUN yum -y install sudo curl tar"
201
+ ret << "RUN yum -y install sudo curl tar\n"
202
+ ret << 'RUN echo "Defaults:root !requiretty" >> /etc/sudoers'
202
203
  expect(@docker_cli.send(:docker_file)).to eq ret
203
204
  end
204
205
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen-docker_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.1
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masashi Terui
@@ -110,6 +110,7 @@ files:
110
110
  - LICENSE
111
111
  - README.md
112
112
  - Rakefile
113
+ - circle.yml
113
114
  - integration-test/.gitignore
114
115
  - integration-test/.kitchen.yml
115
116
  - integration-test/Gemfile
@@ -117,8 +118,9 @@ files:
117
118
  - integration-test/chefignore
118
119
  - integration-test/metadata.rb
119
120
  - integration-test/recipes/default.rb
120
- - integration-test/test/integration/default/serverspec/default_spec.rb
121
- - integration-test/test/integration/default/serverspec/spec_helper.rb
121
+ - integration-test/test/integration/ansible/default.yml
122
+ - integration-test/test/integration/chef/serverspec/default_spec.rb
123
+ - integration-test/test/integration/chef/serverspec/spec_helper.rb
122
124
  - kitchen-docker_cli.gemspec
123
125
  - lib/kitchen/docker_cli/dockerfile_template.rb
124
126
  - lib/kitchen/driver/docker_cli.rb
@@ -128,9 +130,6 @@ files:
128
130
  - spec/kitchen/driver/dockerfile.erb
129
131
  - spec/kitchen/driver/dockerfile_nil.erb
130
132
  - spec/spec_helper.rb
131
- - test/integration/ansible/default.yml
132
- - test/integration/chef/serverspec/dns_spec.rb
133
- - test/integration/chef/serverspec/spec_helper.rb
134
133
  homepage: https://github.com/marcy-terui/kitchen-docker_cli
135
134
  licenses:
136
135
  - Apache 2.0
@@ -156,10 +155,17 @@ signing_key:
156
155
  specification_version: 4
157
156
  summary: A Test Kitchen Driver for Docker native CLI
158
157
  test_files:
158
+ - integration-test/.gitignore
159
+ - integration-test/.kitchen.yml
160
+ - integration-test/Gemfile
161
+ - integration-test/README.md
162
+ - integration-test/chefignore
163
+ - integration-test/metadata.rb
164
+ - integration-test/recipes/default.rb
165
+ - integration-test/test/integration/ansible/default.yml
166
+ - integration-test/test/integration/chef/serverspec/default_spec.rb
167
+ - integration-test/test/integration/chef/serverspec/spec_helper.rb
159
168
  - spec/kitchen/driver/docker_cli_spec.rb
160
169
  - spec/kitchen/driver/dockerfile.erb
161
170
  - spec/kitchen/driver/dockerfile_nil.erb
162
171
  - spec/spec_helper.rb
163
- - test/integration/ansible/default.yml
164
- - test/integration/chef/serverspec/dns_spec.rb
165
- - test/integration/chef/serverspec/spec_helper.rb
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe file('/etc/resolv.conf') do
4
- ['8.8.8.8', '199.85.126.10'].each do |h|
5
- its(:content) { should contain h }
6
- end
7
- end
@@ -1,3 +0,0 @@
1
- require 'serverspec'
2
-
3
- set :backend, :exec