docker-rails 0.8.0 → 0.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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/README.md +8 -19
- data/lib/docker/rails.rb +0 -1
- data/lib/docker/rails/app.rb +0 -54
- data/lib/docker/rails/cli/main.rb +0 -6
- data/lib/docker/rails/config.rb +0 -31
- data/lib/docker/rails/version.rb +1 -1
- data/spec/docker/rails/config_spec.rb +0 -4
- metadata +3 -4
- data/lib/docker/rails/cli/ssh_agent.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a5253c80fa206c480db1e56b738ef2fbfe46733
|
4
|
+
data.tar.gz: 0c33db371899c5ec86ef344867ec5e5316f1116c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5fad7285f5e03e731e3fc382edc7b4ace5da6de9b65de221de1902f7969291509a85b9849fa328df43641f1a493166f9b2641e0137004ca60a09d06f0db6bfbe
|
7
|
+
data.tar.gz: 461bc62fac672e235fc63a2de848b11d2f6a2010f9a4549e160338e7df175e3eec318049fc9099531dced3683da074ee3f278e9d54275790b52e812c4d186187
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-2.
|
1
|
+
ruby-2.3.1
|
data/README.md
CHANGED
@@ -13,7 +13,6 @@ A simplified pattern to execute rails applications within Docker (with a CI buil
|
|
13
13
|
- Interpolates variables `docker-compose.yml` making CI builds much easier
|
14
14
|
- DB check CLI function provided for docker-compose `command` to check if db is ready
|
15
15
|
- Configurable exit_code for `ci` - determine which container's exit code will be the result of the process (useful for CI tests)
|
16
|
-
- Declarative ssh key sharing via SSH Agent Forwarding, including making `known_hosts` available to targeted containers.
|
17
16
|
|
18
17
|
## Usage
|
19
18
|
|
@@ -28,12 +27,11 @@ CI, the reason this is built. Do it all, do it consistently, do it concurrently,
|
|
28
27
|
`ci` executes:
|
29
28
|
|
30
29
|
1. `before_command` - run anything on the host prior to building the docker image e.g. `rm -Rf target`
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
7. `cleanup`
|
30
|
+
1. `compose` - create the resolved `docker-compose.yml`
|
31
|
+
1. `gemset_volume create` - find or create the shared global gems volume for this ruby version
|
32
|
+
1. `build` - `docker-compose build` the configuration
|
33
|
+
1. `up` - `docker-compose up` the configuration
|
34
|
+
1. `cleanup`
|
37
35
|
1. `stop` - stop all containers for this configuration (including one-off sessions)
|
38
36
|
2. `extract` - extract any defined files from any container
|
39
37
|
3. `rm_volumes` - `docker-compose rm -v --force` to cleanup any container volumes (excluding the gems volume)
|
@@ -87,7 +85,6 @@ Commands:
|
|
87
85
|
docker-rails ps_all # List all remaining containers regardless of state e.g. docker-rails ps_all
|
88
86
|
docker-rails rm_dangling # Remove danging images e.g. docker-rails rm_dangling
|
89
87
|
docker-rails rm_volumes <target> # Stop all running containers and remove corresponding volumes for the given build/target e.g. docker-rails rm_volumes --build=222 development
|
90
|
-
docker-rails ssh_agent <command> # SSH Agent Forwarding e.g. docker-rails ssh_agent forward
|
91
88
|
docker-rails stop <target> # Stop all running containers for the given build/target e.g. docker-rails stop --build=222 development
|
92
89
|
docker-rails up <target> # Up the docker-compose configuration for the given build/target. Use -d for detached mode. e.g. docker-rails up -d --build=222 test
|
93
90
|
|
@@ -159,16 +156,6 @@ gemset:
|
|
159
156
|
containers:
|
160
157
|
- web
|
161
158
|
|
162
|
-
# ---
|
163
|
-
# Make the host user's id_rsa key available to the web container e.g. for cloning from github
|
164
|
-
# If you see "Host key verification failed", make sure the same command runs on the host first
|
165
|
-
# which will add to the known_hosts file. The known_hosts is copied from the host to the ssh-agent automatically.
|
166
|
-
ssh-agent:
|
167
|
-
containers:
|
168
|
-
- web
|
169
|
-
keys:
|
170
|
-
- id_rsa
|
171
|
-
|
172
159
|
# ---
|
173
160
|
# Declare a reusable extract set
|
174
161
|
extractions: &extractions
|
@@ -197,9 +184,11 @@ compose:
|
|
197
184
|
working_dir: /project/spec/dummy
|
198
185
|
ports:
|
199
186
|
- "3000"
|
200
|
-
|
201
187
|
links:
|
202
188
|
- db
|
189
|
+
volumes:
|
190
|
+
# make keys and known_hosts available
|
191
|
+
- ~/.ssh:/root/.ssh
|
203
192
|
|
204
193
|
db:
|
205
194
|
# https://github.com/docker-library/docs/tree/master/mysql
|
data/lib/docker/rails.rb
CHANGED
data/lib/docker/rails/app.rb
CHANGED
@@ -161,7 +161,6 @@ module Docker
|
|
161
161
|
end
|
162
162
|
end
|
163
163
|
end
|
164
|
-
rm_ssh_agent
|
165
164
|
puts 'Done.'
|
166
165
|
end
|
167
166
|
|
@@ -209,24 +208,6 @@ module Docker
|
|
209
208
|
container
|
210
209
|
end
|
211
210
|
|
212
|
-
def run_ssh_agent
|
213
|
-
return if @config[:'ssh-agent'].nil?
|
214
|
-
run_ssh_agent_daemon
|
215
|
-
ssh_add_keys
|
216
|
-
ssh_add_known_hosts
|
217
|
-
end
|
218
|
-
|
219
|
-
def rm_ssh_agent
|
220
|
-
ssh_agent_name = @config.ssh_agent_name
|
221
|
-
begin
|
222
|
-
container = Docker::Container.get(ssh_agent_name)
|
223
|
-
stop(container)
|
224
|
-
rm_v(container)
|
225
|
-
rescue Docker::Error::NotFoundError => e
|
226
|
-
puts "SSH Agent forwarding container #{ssh_agent_name} does not exist."
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
211
|
# Create global gems data volume to cache gems for this version of ruby
|
231
212
|
# https://docs.docker.com/userguide/dockervolumes/
|
232
213
|
def create_gemset_volume
|
@@ -360,41 +341,6 @@ module Docker
|
|
360
341
|
end
|
361
342
|
end
|
362
343
|
|
363
|
-
def ssh_agent_image
|
364
|
-
'whilp/ssh-agent:latest'
|
365
|
-
# 'rosskevin/ssh-agent:latest'
|
366
|
-
end
|
367
|
-
|
368
|
-
def ssh_base_cmd
|
369
|
-
ssh_agent_name = @config.ssh_agent_name
|
370
|
-
"docker run --rm --volumes-from=#{ssh_agent_name} -v ~/.ssh:/ssh #{ssh_agent_image}"
|
371
|
-
end
|
372
|
-
|
373
|
-
def ssh_add_known_hosts
|
374
|
-
exec "#{ssh_base_cmd} cp /ssh/known_hosts /root/.ssh/known_hosts"
|
375
|
-
end
|
376
|
-
|
377
|
-
def ssh_add_keys
|
378
|
-
ssh_keys = @config[:'ssh-agent'][:keys]
|
379
|
-
puts "Forwarding SSH key(s): #{ssh_keys.join(',')} into container(s): #{@config[:'ssh-agent'][:containers].join(',')}"
|
380
|
-
ssh_keys.each do |key_file_name|
|
381
|
-
local_key_file = "#{ENV['HOME']}/.ssh/#{key_file_name}"
|
382
|
-
raise "Local key file #{local_key_file} doesn't exist." unless File.exists? local_key_file
|
383
|
-
exec "#{ssh_base_cmd} ssh-add /ssh/#{key_file_name}"
|
384
|
-
end
|
385
|
-
end
|
386
|
-
|
387
|
-
def run_ssh_agent_daemon
|
388
|
-
ssh_agent_name = @config.ssh_agent_name
|
389
|
-
begin
|
390
|
-
Docker::Container.get(ssh_agent_name)
|
391
|
-
puts "Gem data volume container #{ssh_agent_name} already exists."
|
392
|
-
rescue Docker::Error::NotFoundError => e
|
393
|
-
exec "docker run -d --name=#{ssh_agent_name} #{ssh_agent_image}"
|
394
|
-
puts "SSH Agent forwarding container #{ssh_agent_name} running."
|
395
|
-
end
|
396
|
-
end
|
397
|
-
|
398
344
|
def rm_v(container)
|
399
345
|
container.remove(v: true, force: true)
|
400
346
|
end
|
@@ -12,9 +12,6 @@ module Docker
|
|
12
12
|
desc 'gemset_volume <command>', 'Gemset volume management e.g. docker-rails gemset_volume create'
|
13
13
|
subcommand 'gemset_volume', Docker::Rails::CLI::GemsetVolume
|
14
14
|
|
15
|
-
desc 'ssh_agent <command>', 'SSH Agent Forwarding e.g. docker-rails ssh_agent forward'
|
16
|
-
subcommand 'ssh_agent', Docker::Rails::CLI::SshAgent
|
17
|
-
|
18
15
|
desc 'ci <target>', 'Execute the works, everything with cleanup included e.g. docker-rails ci --build=222 test'
|
19
16
|
long_desc <<-D
|
20
17
|
|
@@ -30,7 +27,6 @@ module Docker
|
|
30
27
|
invoke :before, [target], []
|
31
28
|
invoke :compose, [target], []
|
32
29
|
invoke CLI::GemsetVolume, :create, [target], options
|
33
|
-
invoke CLI::SshAgent, :forward, [target], options
|
34
30
|
begin
|
35
31
|
invoke :build # on CI - always build to ensure dockerfile hasn't been altered - small price to pay for consistent CI.
|
36
32
|
invoke :up
|
@@ -71,7 +67,6 @@ module Docker
|
|
71
67
|
|
72
68
|
invoke :before, [target], base_options
|
73
69
|
invoke CLI::GemsetVolume, :create, [target], base_options
|
74
|
-
invoke CLI::SshAgent, :forward, [target], base_options
|
75
70
|
|
76
71
|
if options[:detached]
|
77
72
|
compose_options = '-d'
|
@@ -166,7 +161,6 @@ module Docker
|
|
166
161
|
|
167
162
|
invoke :compose, [target], []
|
168
163
|
invoke CLI::GemsetVolume, :create, [target], []
|
169
|
-
invoke CLI::SshAgent, :forward, [target], []
|
170
164
|
|
171
165
|
app.run_service_command(service_name, command)
|
172
166
|
end
|
data/lib/docker/rails/config.rb
CHANGED
@@ -29,10 +29,6 @@ module Docker
|
|
29
29
|
end
|
30
30
|
|
31
31
|
|
32
|
-
def ssh_agent_name
|
33
|
-
"#{self[:project_name]}_ssh_agent"
|
34
|
-
end
|
35
|
-
|
36
32
|
def write_docker_compose_file(output_filename = 'docker-compose.yml')
|
37
33
|
write_yaml_file(output_filename, self[:'compose'])
|
38
34
|
end
|
@@ -64,10 +60,6 @@ module Docker
|
|
64
60
|
generated_defaults = {compose: {}}
|
65
61
|
compose = generated_defaults[:compose]
|
66
62
|
|
67
|
-
# ----
|
68
|
-
# ssh-agent
|
69
|
-
generate_ssh_agent(compose, unpruned_config)
|
70
|
-
|
71
63
|
# ----
|
72
64
|
# gemset volume
|
73
65
|
generate_gemset(compose, unpruned_config, generated_defaults, filenames)
|
@@ -117,29 +109,6 @@ module Docker
|
|
117
109
|
})
|
118
110
|
end
|
119
111
|
end
|
120
|
-
|
121
|
-
def generate_ssh_agent(compose, unpruned_config)
|
122
|
-
ssh_agent = unpruned_config[:'ssh-agent']
|
123
|
-
if !ssh_agent.nil?
|
124
|
-
|
125
|
-
raise "Expected to find 'ssh-agent: keys' with at least one entry" if ssh_agent[:keys].nil? || ssh_agent[:keys].length < 1
|
126
|
-
ssh_agent[:containers].each do |container|
|
127
|
-
raise "Unknown container #{container}" if unpruned_config[:compose][container.to_sym].nil?
|
128
|
-
# environment:
|
129
|
-
# # make ssh keys available via ssh forwarding (see volume entry)
|
130
|
-
# - SSH_AUTH_SOCK=/ssh-agent/socket
|
131
|
-
#
|
132
|
-
# volumes_from:
|
133
|
-
# # Use configured whilp/ssh-agent long running container for keys
|
134
|
-
# - <project_name>-ssh-agent
|
135
|
-
compose[container.to_sym] ||= {}
|
136
|
-
compose[container.to_sym].deeper_merge! ({
|
137
|
-
environment: ['SSH_AUTH_SOCK=/root/.ssh/socket'],
|
138
|
-
volumes_from: [ssh_agent_name]
|
139
|
-
})
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
143
112
|
end
|
144
113
|
end
|
145
114
|
end
|
data/lib/docker/rails/version.rb
CHANGED
@@ -81,10 +81,6 @@ describe Docker::Rails::Config do
|
|
81
81
|
compose_config
|
82
82
|
}
|
83
83
|
|
84
|
-
it 'web should have ssh-agent' do
|
85
|
-
expect(compose_config[:web][:environment]).to include('SSH_AUTH_SOCK=/root/.ssh/socket')
|
86
|
-
expect(compose_config[:web][:volumes_from]).to include("#{project_name}_ssh_agent")
|
87
|
-
end
|
88
84
|
it 'web should have gemset' do
|
89
85
|
expect(compose_config[:web][:environment]).to include('GEM_HOME=/gemset/2.2.2')
|
90
86
|
expect(compose_config[:web][:volumes_from]).to include('gemset-2.2.2')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Ross
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -160,7 +160,6 @@ files:
|
|
160
160
|
- lib/docker/rails/cli/db_check.rb
|
161
161
|
- lib/docker/rails/cli/gemset_volume.rb
|
162
162
|
- lib/docker/rails/cli/main.rb
|
163
|
-
- lib/docker/rails/cli/ssh_agent.rb
|
164
163
|
- lib/docker/rails/compose_config.rb
|
165
164
|
- lib/docker/rails/config.rb
|
166
165
|
- lib/docker/rails/ext/container.rb
|
@@ -189,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
189
188
|
version: '0'
|
190
189
|
requirements: []
|
191
190
|
rubyforge_project:
|
192
|
-
rubygems_version: 2.
|
191
|
+
rubygems_version: 2.5.1
|
193
192
|
signing_key:
|
194
193
|
specification_version: 4
|
195
194
|
summary: A simplified pattern to execute rails applications within Docker (with a
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Docker
|
2
|
-
module Rails
|
3
|
-
module CLI
|
4
|
-
class SshAgent < Thor
|
5
|
-
desc 'forward', 'Run SSH Agent Forwarding'
|
6
|
-
def forward(target = nil)
|
7
|
-
App.configured(target, options).run_ssh_agent
|
8
|
-
end
|
9
|
-
|
10
|
-
desc 'rm', 'Stop and remove SSH Agent Forwarding'
|
11
|
-
def rm(target = nil)
|
12
|
-
App.configured(target, options).rm_ssh_agent
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|