centurion 1.8.10 → 1.9.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.
@@ -4,27 +4,33 @@ require 'centurion/docker_via_cli'
4
4
  describe Centurion::DockerViaCli do
5
5
  let(:docker_path) { 'docker' }
6
6
 
7
- context 'without TLS certificates' do
8
- let(:docker_via_cli) { Centurion::DockerViaCli.new('host1', 2375, docker_path) }
7
+ shared_examples 'docker CLI' do
9
8
  it 'pulls the latest image given its name' do
10
9
  expect(Centurion::Shell).to receive(:echo).
11
- with("docker -H=tcp://host1:2375 pull foo:latest")
10
+ with("docker #{prefix} pull foo:latest")
12
11
  docker_via_cli.pull('foo')
13
12
  end
14
13
 
15
14
  it 'pulls an image given its name & tag' do
16
15
  expect(Centurion::Shell).to receive(:echo).
17
- with("docker -H=tcp://host1:2375 pull foo:bar")
16
+ with("docker #{prefix} pull foo:bar")
18
17
  docker_via_cli.pull('foo', 'bar')
19
18
  end
20
19
 
21
20
  it 'tails logs on a container' do
22
21
  id = '12345abcdef'
23
22
  expect(Centurion::Shell).to receive(:echo).
24
- with("docker -H=tcp://host1:2375 logs -f #{id}")
23
+ with("docker #{prefix} logs -f #{id}")
25
24
  docker_via_cli.tail(id)
26
25
  end
27
26
 
27
+ it 'attach to a container' do
28
+ id = '12345abcdef'
29
+ expect(Centurion::Shell).to receive(:echo).
30
+ with("docker #{prefix} attach #{id}")
31
+ docker_via_cli.attach(id)
32
+ end
33
+
28
34
  it 'should print all chars when one thread is running' do
29
35
  expect(Centurion::Shell).to receive(:run_with_echo)
30
36
 
@@ -41,51 +47,63 @@ describe Centurion::DockerViaCli do
41
47
  docker_via_cli.pull('foo')
42
48
  end
43
49
  end
50
+
51
+ context 'without TLS certificates' do
52
+ let(:docker_via_cli) { Centurion::DockerViaCli.new('host1', 2375, docker_path) }
53
+ let(:prefix) { "-H=tcp://host1:2375" }
54
+
55
+ it_behaves_like 'docker CLI'
56
+ end
57
+
44
58
  context 'with TLS certificates' do
45
59
  let(:tls_args) { { tls: true, tlscacert: '/certs/ca.pem',
46
60
  tlscert: '/certs/cert.pem', tlskey: '/certs/key.pem' } }
47
61
  let(:docker_via_cli) { Centurion::DockerViaCli.new('host1', 2375,
48
62
  docker_path, tls_args) }
49
- it 'pulls the latest image given its name' do
50
- expect(Centurion::Shell).to receive(:echo).
51
- with('docker -H=tcp://host1:2375 ' \
52
- '--tlsverify ' \
53
- '--tlscacert=/certs/ca.pem ' \
54
- '--tlscert=/certs/cert.pem ' \
55
- '--tlskey=/certs/key.pem pull foo:latest')
56
- docker_via_cli.pull('foo')
63
+ let(:prefix) { "-H=tcp://host1:2375 --tlsverify --tlscacert=/certs/ca.pem --tlscert=/certs/cert.pem --tlskey=/certs/key.pem" }
64
+
65
+ it_behaves_like 'docker CLI'
66
+ end
67
+
68
+ context 'with a SSH connection' do
69
+ let(:hostname) { 'host1' }
70
+ let(:ssh_user) { 'myuser' }
71
+ let(:ssh_log_level) { nil }
72
+ let(:docker_via_cli) { Centurion::DockerViaCli.new(hostname, nil, docker_path, params) }
73
+ let(:prefix) { "-H=unix:///tmp/socket/path" }
74
+ let(:params) do
75
+ p = { ssh: true}
76
+ p[:ssh_user] = ssh_user if ssh_user
77
+ p[:ssh_log_level] = ssh_log_level if ssh_log_level
78
+ p
57
79
  end
58
80
 
59
- it 'pulls an image given its name & tag' do
60
- expect(Centurion::Shell).to receive(:echo).
61
- with('docker -H=tcp://host1:2375 ' \
62
- '--tlsverify ' \
63
- '--tlscacert=/certs/ca.pem ' \
64
- '--tlscert=/certs/cert.pem ' \
65
- '--tlskey=/certs/key.pem pull foo:bar')
66
- docker_via_cli.pull('foo', 'bar')
81
+ context 'with no log level' do
82
+ before do
83
+ expect(Centurion::SSH).to receive(:with_docker_socket).with(hostname, ssh_user, nil).and_yield('/tmp/socket/path')
84
+ end
85
+
86
+ it_behaves_like 'docker CLI'
67
87
  end
68
88
 
69
- it 'tails logs on a container' do
70
- id = '12345abcdef'
71
- expect(Centurion::Shell).to receive(:echo).
72
- with('docker -H=tcp://host1:2375 ' \
73
- '--tlsverify ' \
74
- '--tlscacert=/certs/ca.pem ' \
75
- '--tlscert=/certs/cert.pem ' \
76
- "--tlskey=/certs/key.pem logs -f #{id}")
77
- docker_via_cli.tail(id)
89
+ context 'with no user' do
90
+ let(:ssh_user) { nil }
91
+
92
+ before do
93
+ expect(Centurion::SSH).to receive(:with_docker_socket).with(hostname, nil, nil).and_yield('/tmp/socket/path')
94
+ end
95
+
96
+ it_behaves_like 'docker CLI'
78
97
  end
79
98
 
80
- it 'attach to a container' do
81
- id = '12345abcdef'
82
- expect(Centurion::Shell).to receive(:echo).
83
- with('docker -H=tcp://host1:2375 ' \
84
- '--tlsverify ' \
85
- '--tlscacert=/certs/ca.pem ' \
86
- '--tlscert=/certs/cert.pem ' \
87
- "--tlskey=/certs/key.pem attach #{id}")
88
- docker_via_cli.attach(id)
99
+ context 'with a log level set' do
100
+ let(:ssh_log_level) { Logger::DEBUG }
101
+
102
+ before do
103
+ expect(Centurion::SSH).to receive(:with_docker_socket).with(hostname, ssh_user, Logger::DEBUG).and_yield('/tmp/socket/path')
104
+ end
105
+
106
+ it_behaves_like 'docker CLI'
89
107
  end
90
108
  end
91
109
  end
@@ -17,6 +17,7 @@ describe Centurion::Service do
17
17
  set(:binds, [ Centurion::Service::Volume.new('/foo', '/foo/bar') ])
18
18
  set(:port_bindings, [ Centurion::Service::PortBinding.new(12340, 80, 'tcp') ])
19
19
  set(:labels, labels)
20
+ set(:security_opt, ['seccomp=unconfined'])
20
21
 
21
22
  svc = Centurion::Service.from_env
22
23
  expect(svc.name).to eq('mycontainer')
@@ -27,6 +28,7 @@ describe Centurion::Service do
27
28
  expect(svc.port_bindings.size).to eq(1)
28
29
  expect(svc.port_bindings.first.container_port).to eq(80)
29
30
  expect(svc.labels).to eq(labels)
31
+ expect(svc.security_opt).to eq(['seccomp=unconfined'])
30
32
  end
31
33
 
32
34
  it 'starts with a command' do
@@ -171,6 +173,7 @@ describe Centurion::Service do
171
173
  service.cap_adds = ['IPC_BIND', 'NET_RAW']
172
174
  service.cap_drops = ['DAC_OVERRIDE']
173
175
  service.add_volume('/volumes/redis.8000', '/data')
176
+ service.security_opt = 'seccomp=unconfined'
174
177
 
175
178
  expect(service.build_host_config(Centurion::Service::RestartPolicy.new('on-failure', 10))).to eq({
176
179
  'Binds' => ['/volumes/redis.8000:/data'],
@@ -184,7 +187,8 @@ describe Centurion::Service do
184
187
  'RestartPolicy' => {
185
188
  'Name' => 'on-failure',
186
189
  'MaximumRetryCount' => 10
187
- }
190
+ },
191
+ 'SecurityOpt' => 'seccomp=unconfined'
188
192
  })
189
193
  end
190
194
 
@@ -3,5 +3,18 @@ SimpleCov.start do
3
3
  add_filter '/spec'
4
4
  end
5
5
 
6
+ require 'excon'
7
+
8
+ RSpec.configure do |config|
9
+ # Mock by default
10
+ config.before(:all) do
11
+ Excon.defaults[:mock] = true
12
+ end
13
+
14
+ config.after(:each) do
15
+ Excon.stubs.clear
16
+ end
17
+ end
18
+
6
19
  $: << File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
7
20
  Dir[File.dirname(__FILE__) + '/support/**/*.rb'].each {|f| require f}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: centurion
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.10
4
+ version: 1.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nic Benders
@@ -20,118 +20,146 @@ authors:
20
20
  autorequire:
21
21
  bindir: bin
22
22
  cert_chain: []
23
- date: 2017-03-06 00:00:00.000000000 Z
23
+ date: 2017-10-26 00:00:00.000000000 Z
24
24
  dependencies:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: trollop
27
27
  requirement: !ruby/object:Gem::Requirement
28
28
  requirements:
29
- - - '>='
29
+ - - ">="
30
30
  - !ruby/object:Gem::Version
31
31
  version: '0'
32
32
  type: :runtime
33
33
  prerelease: false
34
34
  version_requirements: !ruby/object:Gem::Requirement
35
35
  requirements:
36
- - - '>='
36
+ - - ">="
37
37
  - !ruby/object:Gem::Version
38
38
  version: '0'
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: excon
41
41
  requirement: !ruby/object:Gem::Requirement
42
42
  requirements:
43
- - - ~>
43
+ - - "~>"
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0.33'
46
46
  type: :runtime
47
47
  prerelease: false
48
48
  version_requirements: !ruby/object:Gem::Requirement
49
49
  requirements:
50
- - - ~>
50
+ - - "~>"
51
51
  - !ruby/object:Gem::Version
52
52
  version: '0.33'
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: logger-colors
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
- - - '>='
57
+ - - ">="
58
58
  - !ruby/object:Gem::Version
59
59
  version: '0'
60
60
  type: :runtime
61
61
  prerelease: false
62
62
  version_requirements: !ruby/object:Gem::Requirement
63
63
  requirements:
64
- - - '>='
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ - !ruby/object:Gem::Dependency
68
+ name: net-ssh
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ type: :runtime
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ - !ruby/object:Gem::Dependency
82
+ name: sshkit
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
65
93
  - !ruby/object:Gem::Version
66
94
  version: '0'
67
95
  - !ruby/object:Gem::Dependency
68
96
  name: bundler
69
97
  requirement: !ruby/object:Gem::Requirement
70
98
  requirements:
71
- - - '>='
99
+ - - ">="
72
100
  - !ruby/object:Gem::Version
73
101
  version: '0'
74
102
  type: :development
75
103
  prerelease: false
76
104
  version_requirements: !ruby/object:Gem::Requirement
77
105
  requirements:
78
- - - '>='
106
+ - - ">="
79
107
  - !ruby/object:Gem::Version
80
108
  version: '0'
81
109
  - !ruby/object:Gem::Dependency
82
110
  name: rake
83
111
  requirement: !ruby/object:Gem::Requirement
84
112
  requirements:
85
- - - ~>
113
+ - - "~>"
86
114
  - !ruby/object:Gem::Version
87
115
  version: '10.5'
88
116
  type: :development
89
117
  prerelease: false
90
118
  version_requirements: !ruby/object:Gem::Requirement
91
119
  requirements:
92
- - - ~>
120
+ - - "~>"
93
121
  - !ruby/object:Gem::Version
94
122
  version: '10.5'
95
123
  - !ruby/object:Gem::Dependency
96
124
  name: rspec
97
125
  requirement: !ruby/object:Gem::Requirement
98
126
  requirements:
99
- - - ~>
127
+ - - "~>"
100
128
  - !ruby/object:Gem::Version
101
129
  version: 3.1.0
102
130
  type: :development
103
131
  prerelease: false
104
132
  version_requirements: !ruby/object:Gem::Requirement
105
133
  requirements:
106
- - - ~>
134
+ - - "~>"
107
135
  - !ruby/object:Gem::Version
108
136
  version: 3.1.0
109
137
  - !ruby/object:Gem::Dependency
110
138
  name: pry
111
139
  requirement: !ruby/object:Gem::Requirement
112
140
  requirements:
113
- - - '>='
141
+ - - ">="
114
142
  - !ruby/object:Gem::Version
115
143
  version: '0'
116
144
  type: :development
117
145
  prerelease: false
118
146
  version_requirements: !ruby/object:Gem::Requirement
119
147
  requirements:
120
- - - '>='
148
+ - - ">="
121
149
  - !ruby/object:Gem::Version
122
150
  version: '0'
123
151
  - !ruby/object:Gem::Dependency
124
152
  name: simplecov
125
153
  requirement: !ruby/object:Gem::Requirement
126
154
  requirements:
127
- - - '>='
155
+ - - ">="
128
156
  - !ruby/object:Gem::Version
129
157
  version: '0'
130
158
  type: :development
131
159
  prerelease: false
132
160
  version_requirements: !ruby/object:Gem::Requirement
133
161
  requirements:
134
- - - '>='
162
+ - - ">="
135
163
  - !ruby/object:Gem::Version
136
164
  version: '0'
137
165
  description:
@@ -155,8 +183,8 @@ executables:
155
183
  extensions: []
156
184
  extra_rdoc_files: []
157
185
  files:
158
- - .gitignore
159
- - .travis.yml
186
+ - ".gitignore"
187
+ - ".travis.yml"
160
188
  - CONTRIBUTORS.md
161
189
  - Gemfile
162
190
  - LICENSE
@@ -178,6 +206,7 @@ files:
178
206
  - lib/centurion/logging.rb
179
207
  - lib/centurion/service.rb
180
208
  - lib/centurion/shell.rb
209
+ - lib/centurion/ssh.rb
181
210
  - lib/centurion/version.rb
182
211
  - lib/core_ext/numeric_bytes.rb
183
212
  - lib/tasks/centurion.rake
@@ -208,17 +237,17 @@ require_paths:
208
237
  - lib
209
238
  required_ruby_version: !ruby/object:Gem::Requirement
210
239
  requirements:
211
- - - '>='
240
+ - - ">="
212
241
  - !ruby/object:Gem::Version
213
242
  version: 1.9.3
214
243
  required_rubygems_version: !ruby/object:Gem::Requirement
215
244
  requirements:
216
- - - '>='
245
+ - - ">="
217
246
  - !ruby/object:Gem::Version
218
247
  version: '0'
219
248
  requirements: []
220
249
  rubyforge_project:
221
- rubygems_version: 2.0.14.1
250
+ rubygems_version: 2.5.2
222
251
  signing_key:
223
252
  specification_version: 4
224
253
  summary: A deployment tool for Docker. Takes containers from a Docker registry and