docker-spoon 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/Gemfile.lock +10 -10
- data/README.md +39 -11
- data/lib/spoon.rb +43 -10
- data/lib/spoon/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8560cffb7fd59a8f21670b4e79b29d437b983ec2
|
4
|
+
data.tar.gz: afd021a9f0b9f3f636afa3300df0fd7f22c0ff20
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 429d54094e6d70341b226ec3a89696fc3ef6bae4860143612946b3fc27315025e465f06c9d5c4c0db1a0e0b8b7eb256e9d514d4eba088b5e3b3a11df87585355
|
7
|
+
data.tar.gz: 8143c4d158264afa614b17b820cd0363e9483f43ea6a366b0ecadaa9da996063af07b5c68bdb6c4adbabc7e6940dfb164b2f90269e2c4d21aea0b1e3954a449d
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
docker-spoon (0.
|
4
|
+
docker-spoon (0.6.0)
|
5
5
|
docker-api (~> 1.11)
|
6
6
|
methadone (~> 1.4.0)
|
7
7
|
rainbow (~> 2.0)
|
@@ -10,26 +10,26 @@ GEM
|
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
12
|
archive-tar-minitar (0.5.2)
|
13
|
-
aruba (0.6.
|
13
|
+
aruba (0.6.1)
|
14
14
|
childprocess (>= 0.3.6)
|
15
15
|
cucumber (>= 1.1.1)
|
16
16
|
rspec-expectations (>= 2.7.0)
|
17
17
|
builder (3.2.2)
|
18
18
|
childprocess (0.5.3)
|
19
19
|
ffi (~> 1.0, >= 1.0.11)
|
20
|
-
cucumber (1.3.
|
20
|
+
cucumber (1.3.17)
|
21
21
|
builder (>= 2.1.2)
|
22
22
|
diff-lcs (>= 1.1.3)
|
23
23
|
gherkin (~> 2.12)
|
24
24
|
multi_json (>= 1.7.5, < 2.0)
|
25
25
|
multi_test (>= 0.1.1)
|
26
26
|
diff-lcs (1.2.5)
|
27
|
-
docker-api (1.13.
|
27
|
+
docker-api (1.13.3)
|
28
28
|
archive-tar-minitar
|
29
29
|
excon (>= 0.38.0)
|
30
30
|
json
|
31
|
-
excon (0.
|
32
|
-
ffi (1.9.
|
31
|
+
excon (0.39.6)
|
32
|
+
ffi (1.9.5)
|
33
33
|
gherkin (2.12.2)
|
34
34
|
multi_json (~> 1.3)
|
35
35
|
json (1.8.1)
|
@@ -39,12 +39,12 @@ GEM
|
|
39
39
|
multi_test (0.1.1)
|
40
40
|
rainbow (2.0.0)
|
41
41
|
rake (0.9.6)
|
42
|
-
rdoc (4.1.
|
42
|
+
rdoc (4.1.2)
|
43
43
|
json (~> 1.4)
|
44
|
-
rspec-expectations (3.
|
44
|
+
rspec-expectations (3.1.2)
|
45
45
|
diff-lcs (>= 1.2.0, < 2.0)
|
46
|
-
rspec-support (~> 3.
|
47
|
-
rspec-support (3.
|
46
|
+
rspec-support (~> 3.1.0)
|
47
|
+
rspec-support (3.1.1)
|
48
48
|
|
49
49
|
PLATFORMS
|
50
50
|
ruby
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# docker-spoon
|
2
2
|
|
3
3
|
## Overview
|
4
|
-
Spoon creates on demand pairing environments using Docker.
|
4
|
+
Spoon creates on demand pairing environments using Docker.
|
5
5
|
|
6
6
|
We pair a lot using tmux & emacs / vim and wanted a way to create
|
7
7
|
pairing environments which met a few criteria:
|
@@ -11,7 +11,7 @@ pairing environments which met a few criteria:
|
|
11
11
|
environments and asking who's using what
|
12
12
|
- Are console based to enable low latency remote pairing
|
13
13
|
|
14
|
-
Spoon is intended to make this process as easy as possible.
|
14
|
+
Spoon is intended to make this process as easy as possible.
|
15
15
|
|
16
16
|
#### Why Spoon?
|
17
17
|
[Learn more about spooning](https://www.youtube.com/watch?v=dYBjVTMUQY0)
|
@@ -42,10 +42,10 @@ All of the `options[]` parameters should map directly to the long form
|
|
42
42
|
of options on the command line. They may be defined as either the
|
43
43
|
`:symbol` form or as a string. The limitation is that ruby doesn't
|
44
44
|
permit a dash in symbols, so when an option has a dash in it, it must be
|
45
|
-
specified as a string.
|
45
|
+
specified as a string.
|
46
46
|
|
47
47
|
You may also specify a different config file with the `--config`
|
48
|
-
argument.
|
48
|
+
argument.
|
49
49
|
|
50
50
|
## Usage
|
51
51
|
|
@@ -65,7 +65,7 @@ the spoon container that you specify. If that container doesn't exist,
|
|
65
65
|
spoon will create it for you. Once spoon either creates a container or
|
66
66
|
determines that one already exists it will start an ssh connection to
|
67
67
|
the host. This will shell out to ssh and should honor your ssh
|
68
|
-
configuration locally.
|
68
|
+
configuration locally.
|
69
69
|
|
70
70
|
Example (container doesn't exist):
|
71
71
|
```shell
|
@@ -91,7 +91,7 @@ in.
|
|
91
91
|
- `--url`, The url of the Docker API endpoint. This is in the format
|
92
92
|
supported by the docker -H option. This will also read from the
|
93
93
|
environment variable `DOCKER_HOST` if this argument is not specified
|
94
|
-
and that env var exists.
|
94
|
+
and that env var exists.
|
95
95
|
- `--image`, The image name to use when starting a spoon container.
|
96
96
|
- `--prefix`, The prefix to use for creating, listing & destroying
|
97
97
|
containers.
|
@@ -101,7 +101,7 @@ in.
|
|
101
101
|
The `--list` argument will list any containers on the destination Docker
|
102
102
|
host which have the same prefix as specified by `--prefix` (default
|
103
103
|
'spoon-'). Images are listed without the prefix specified so that you
|
104
|
-
can see only the containers you are interested in.
|
104
|
+
can see only the containers you are interested in.
|
105
105
|
|
106
106
|
```shell
|
107
107
|
$ spoon -l
|
@@ -116,7 +116,7 @@ containers, spoon will re-start them as necessary.
|
|
116
116
|
|
117
117
|
### Destroy
|
118
118
|
|
119
|
-
The `--destroy NAME` option will destroy the specified spoon container.
|
119
|
+
The `--destroy NAME` option will destroy the specified spoon container.
|
120
120
|
|
121
121
|
```shell
|
122
122
|
$ spoon -d fortesting
|
@@ -143,12 +143,12 @@ The `--build` option will build a docker image from the build directory
|
|
143
143
|
specified by `--builddir` (default '.'). This has the same expectations
|
144
144
|
as the [docker
|
145
145
|
build](https://docs.docker.com/reference/commandline/cli/#build)
|
146
|
-
command.
|
146
|
+
command.
|
147
147
|
|
148
148
|
#### Options
|
149
149
|
|
150
150
|
- `--builddir`, This is the directory where the build process will look
|
151
|
-
for a Dockerfile and any content added to the container using `ADD`.
|
151
|
+
for a Dockerfile and any content added to the container using `ADD`.
|
152
152
|
|
153
153
|
- `--pre-build-commands`, This is a list of commands to run before
|
154
154
|
actually kicking off the build process (see below).
|
@@ -161,7 +161,7 @@ copying stuff into the container which you don't want to have committed
|
|
161
161
|
to the repository. An example of this is that in our environment we need
|
162
162
|
chef credentials inside of our container & we use this mechanism to copy
|
163
163
|
those credentials into the builddir at build time without adding them to
|
164
|
-
our repository containing the Dockerfile.
|
164
|
+
our repository containing the Dockerfile.
|
165
165
|
|
166
166
|
Here's an example of how we copy our chef configuration into place:
|
167
167
|
```ruby
|
@@ -170,6 +170,34 @@ options["pre-build-commands"] = [
|
|
170
170
|
]
|
171
171
|
```
|
172
172
|
|
173
|
+
- `copy_on_create`, - This is a config-only value, there is no command
|
174
|
+
line argument for it. The idea is that you can specify a list of files
|
175
|
+
to copy into place on the destination container upon creation. This is
|
176
|
+
useful if you want to copy in place configs that you keep on your
|
177
|
+
workstation but don't want them as part of the image.
|
178
|
+
|
179
|
+
Example:
|
180
|
+
```
|
181
|
+
options[:copy_on_create] = [
|
182
|
+
".gitconfig",
|
183
|
+
".ssh",
|
184
|
+
".ssh/config"
|
185
|
+
]
|
186
|
+
```
|
187
|
+
NOTE: this does not create any required parent directories on the
|
188
|
+
destination system unless they are copied into place, for example like
|
189
|
+
the .ssh directory in the example above.
|
190
|
+
|
191
|
+
- `add_authorized_keys` - This is a config-only value. This allows you
|
192
|
+
to specify an ssh public key that should reside in your own `~/.ssh`
|
193
|
+
directory to be placed in authorized_keys on the destination system
|
194
|
+
upon container creation.
|
195
|
+
|
196
|
+
Example:
|
197
|
+
```
|
198
|
+
options[:add_authorized_keys] = "id_rsa.pub"
|
199
|
+
```
|
200
|
+
|
173
201
|
#### Container expectations
|
174
202
|
|
175
203
|
When building an image for use with docker-spoon you must build an
|
data/lib/spoon.rb
CHANGED
@@ -12,6 +12,11 @@ module Spoon
|
|
12
12
|
|
13
13
|
main do |instance|
|
14
14
|
|
15
|
+
# Read config file & set options
|
16
|
+
if File.exists?(options[:config])
|
17
|
+
eval(File.open(options[:config]).read)
|
18
|
+
end
|
19
|
+
|
15
20
|
D options.inspect
|
16
21
|
if options[:list]
|
17
22
|
instance_list
|
@@ -43,6 +48,9 @@ module Spoon
|
|
43
48
|
options[:builddir] = '.'
|
44
49
|
on("--builddir DIR", "Directory containing Dockerfile")
|
45
50
|
on("--pre-build-commands", "List of commands to run locally before building image")
|
51
|
+
# These are config only options
|
52
|
+
options[:copy_on_create] = []
|
53
|
+
options[:add_authorized_keys] = false
|
46
54
|
options[:url] = Docker.url
|
47
55
|
on("-u", "--url URL", "Docker url to connect to")
|
48
56
|
on("-L", "--list-images", "List available spoon images")
|
@@ -52,13 +60,9 @@ module Spoon
|
|
52
60
|
on("-p", "--prefix PREFIX", "Prefix for container names")
|
53
61
|
options[:command] = ''
|
54
62
|
options[:config] = "#{ENV['HOME']}/.spoonrc"
|
55
|
-
on("-c", "--config
|
63
|
+
on("-c FILE", "--config", "Config file to use for spoon options")
|
56
64
|
on("--debug", "Enable debug")
|
57
65
|
|
58
|
-
# Read config file & set options
|
59
|
-
if File.exists?(options[:config])
|
60
|
-
eval(File.open(options[:config]).read)
|
61
|
-
end
|
62
66
|
|
63
67
|
arg(:instance, :optional, "Spoon instance to connect to")
|
64
68
|
|
@@ -123,6 +127,8 @@ module Spoon
|
|
123
127
|
if not instance_exists? name
|
124
128
|
puts "The `#{name}` container doesn't exist, creating..."
|
125
129
|
instance_create(name)
|
130
|
+
instance_copy_authorized_keys(name, options[:add_authorized_keys])
|
131
|
+
instance_copy_files(name)
|
126
132
|
end
|
127
133
|
|
128
134
|
container = get_container(name)
|
@@ -138,7 +144,7 @@ module Spoon
|
|
138
144
|
docker_url
|
139
145
|
puts "List of available spoon containers:"
|
140
146
|
container_list = get_all_containers.select { |c| c.info["Names"].first.to_s.start_with? "/#{options[:prefix]}" }
|
141
|
-
|
147
|
+
.sort { |c1, c2| c1.info["Names"].first.to_s <=> c2.info["Names"].first.to_s }
|
142
148
|
max_width_container_name = remove_prefix(container_list.max_by {|c| c.info["Names"].first.to_s.length }.info["Names"].first.to_s)
|
143
149
|
max_name_width = max_width_container_name.length
|
144
150
|
container_list.each do |container|
|
@@ -231,6 +237,36 @@ module Spoon
|
|
231
237
|
end
|
232
238
|
end
|
233
239
|
|
240
|
+
def self.instance_copy_authorized_keys(name, keyfile)
|
241
|
+
if keyfile
|
242
|
+
container = get_container(name)
|
243
|
+
host = URI.parse(options[:url]).host
|
244
|
+
key = File.read("#{ENV['HOME']}/.ssh/#{keyfile}")
|
245
|
+
if container
|
246
|
+
ssh_port = get_port('22', container)
|
247
|
+
puts "Waiting for #{name}:#{ssh_port}..." until host_available?(host, ssh_port)
|
248
|
+
system("ssh -t -o StrictHostKeyChecking=no -p #{ssh_port} pairing@#{host} \"mkdir -p .ssh && chmod 700 .ssh && echo '#{key}' >> ~/.ssh/authorized_keys\"")
|
249
|
+
else
|
250
|
+
puts "No container named: #{container.inspect}"
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
def self.instance_copy_files(name)
|
256
|
+
options[:copy_on_create].each do |file|
|
257
|
+
puts "Copying file #{file}"
|
258
|
+
container = get_container(name)
|
259
|
+
host = URI.parse(options[:url]).host
|
260
|
+
if container
|
261
|
+
ssh_port = get_port('22', container)
|
262
|
+
puts "Waiting for #{name}:#{ssh_port}..." until host_available?(host, ssh_port)
|
263
|
+
system("scp -o StrictHostKeyChecking=no -P #{ssh_port} #{ENV['HOME']}/#{file} pairing@#{host}:#{file}")
|
264
|
+
else
|
265
|
+
puts "No container named: #{container.inspect}"
|
266
|
+
end
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
234
270
|
def self.get_all_containers
|
235
271
|
Docker::Container.all(:all => true)
|
236
272
|
end
|
@@ -297,7 +333,4 @@ module Spoon
|
|
297
333
|
go!
|
298
334
|
end
|
299
335
|
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
# private
|
336
|
+
# option :debug, :type => :boolean, :default => true
|
data/lib/spoon/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker-spoon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Nichols
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|