geordi 2.12.1 → 2.12.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +50 -1
- data/features/docker.feature +25 -1
- data/features/step_definitions/docker_command_steps.rb +11 -0
- data/lib/geordi/commands/docker.rb +2 -1
- data/lib/geordi/docker.rb +34 -6
- data/lib/geordi/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72b80aa5fcd6e4f4bb048f76aac069a7cb99310a3900b933f53c5549e737f52e
|
4
|
+
data.tar.gz: 1a0bba5ab27c1759e9b0b5a7f3b79f946596605d903129f332f53f4afb33b324
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa1a3c5c3bc2278cb10f347d4b94dbea177cb94a65ce27459819cc32f87a82a6cf9408f4e659fdc3d9ca1f005e957f82e0867063d645367aec2019f721159ead
|
7
|
+
data.tar.gz: fd92c28543206ac2c61dca8efa017a944612e6ce84fa3f7c513b9b9056e358dc7423dae3163d3954cc56d4abf974620c76c9469a1c2a832f46836923fc0c0da1
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
geordi (2.12.
|
4
|
+
geordi (2.12.2)
|
5
5
|
thor (~> 0.18.0)
|
6
6
|
|
7
7
|
GEM
|
@@ -13,9 +13,16 @@ GEM
|
|
13
13
|
contracts (~> 0.9)
|
14
14
|
cucumber (>= 1.3.19)
|
15
15
|
rspec-expectations (>= 2.99)
|
16
|
+
axiom-types (0.1.1)
|
17
|
+
descendants_tracker (~> 0.0.4)
|
18
|
+
ice_nine (~> 0.11.0)
|
19
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
16
20
|
builder (3.2.4)
|
17
21
|
childprocess (0.5.9)
|
18
22
|
ffi (~> 1.0, >= 1.0.11)
|
23
|
+
coderay (1.1.3)
|
24
|
+
coercible (1.0.0)
|
25
|
+
descendants_tracker (~> 0.0.1)
|
19
26
|
contracts (0.9)
|
20
27
|
cucumber (1.3.20)
|
21
28
|
builder (>= 2.1.2)
|
@@ -23,18 +30,40 @@ GEM
|
|
23
30
|
gherkin (~> 2.12)
|
24
31
|
multi_json (>= 1.7.5, < 2.0)
|
25
32
|
multi_test (>= 0.1.2)
|
33
|
+
declarative (0.0.20)
|
34
|
+
declarative-option (0.1.0)
|
35
|
+
descendants_tracker (0.0.4)
|
36
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
26
37
|
diff-lcs (1.2.5)
|
38
|
+
equalizer (0.0.11)
|
39
|
+
excon (0.78.0)
|
40
|
+
faraday (1.1.0)
|
41
|
+
multipart-post (>= 1.2, < 3)
|
42
|
+
ruby2_keywords
|
43
|
+
faraday_middleware (1.0.0)
|
44
|
+
faraday (~> 1.0)
|
27
45
|
ffi (1.9.18)
|
28
46
|
gherkin (2.12.2)
|
29
47
|
multi_json (~> 1.3)
|
30
48
|
highline (1.6.21)
|
49
|
+
ice_nine (0.11.2)
|
31
50
|
launchy (2.4.3)
|
32
51
|
addressable (~> 2.3)
|
52
|
+
method_source (1.0.0)
|
53
|
+
mimemagic (0.3.5)
|
33
54
|
multi_json (1.15.0)
|
34
55
|
multi_test (0.1.2)
|
56
|
+
multipart-post (2.1.1)
|
35
57
|
parallel (0.5.16)
|
36
58
|
parallel_tests (0.6.18)
|
37
59
|
parallel
|
60
|
+
pry (0.13.1)
|
61
|
+
coderay (~> 1.1)
|
62
|
+
method_source (~> 1.0)
|
63
|
+
representable (3.0.4)
|
64
|
+
declarative (< 0.1.0)
|
65
|
+
declarative-option (< 0.2.0)
|
66
|
+
uber (< 0.2.0)
|
38
67
|
rspec-expectations (3.4.0)
|
39
68
|
diff-lcs (>= 1.2.0, < 2.0)
|
40
69
|
rspec-support (~> 3.4.0)
|
@@ -42,7 +71,25 @@ GEM
|
|
42
71
|
diff-lcs (>= 1.2.0, < 2.0)
|
43
72
|
rspec-support (~> 3.4.0)
|
44
73
|
rspec-support (3.4.1)
|
74
|
+
ruby2_keywords (0.0.2)
|
45
75
|
thor (0.18.1)
|
76
|
+
thread_safe (0.3.6)
|
77
|
+
tracker_api (1.11.0)
|
78
|
+
addressable
|
79
|
+
equalizer
|
80
|
+
excon
|
81
|
+
faraday
|
82
|
+
faraday_middleware
|
83
|
+
mimemagic
|
84
|
+
multi_json
|
85
|
+
representable
|
86
|
+
virtus
|
87
|
+
uber (0.1.0)
|
88
|
+
virtus (1.0.5)
|
89
|
+
axiom-types (~> 0.1)
|
90
|
+
coercible (~> 1.0)
|
91
|
+
descendants_tracker (~> 0.0, >= 0.0.3)
|
92
|
+
equalizer (~> 0.0, >= 0.0.9)
|
46
93
|
|
47
94
|
PLATFORMS
|
48
95
|
ruby
|
@@ -54,7 +101,9 @@ DEPENDENCIES
|
|
54
101
|
highline
|
55
102
|
launchy
|
56
103
|
parallel_tests
|
104
|
+
pry
|
57
105
|
rspec-mocks
|
106
|
+
tracker_api
|
58
107
|
|
59
108
|
BUNDLED WITH
|
60
109
|
1.17.3
|
data/features/docker.feature
CHANGED
@@ -48,7 +48,7 @@ Feature: The docker command
|
|
48
48
|
And the output should contain "x You need to install docker first"
|
49
49
|
|
50
50
|
|
51
|
-
Scenario: Shell runs docker-compose run main
|
51
|
+
Scenario: Shell runs docker-compose run main, and docker-compose stop
|
52
52
|
Given a file named "docker-compose.yml" with:
|
53
53
|
"""
|
54
54
|
services:
|
@@ -60,3 +60,27 @@ Feature: The docker command
|
|
60
60
|
|
61
61
|
When I run `geordi docker shell`
|
62
62
|
Then the output should contain "docker-compose run --service-ports -v /path/to/sock:/path/to/sock -e SSH_AUTH_SOCK=/path/to/sock/ssh main"
|
63
|
+
Then the output should contain "docker-compose stop"
|
64
|
+
|
65
|
+
|
66
|
+
Scenario: One can attach to a running shell
|
67
|
+
Given the docker command finds a running shell "project_main_run_foo"
|
68
|
+
And a file named "docker-compose.yml" with:
|
69
|
+
"""
|
70
|
+
services:
|
71
|
+
main: foo
|
72
|
+
"""
|
73
|
+
|
74
|
+
When I run `geordi docker shell --secondary`
|
75
|
+
Then the output should contain "Could not find a running shell"
|
76
|
+
|
77
|
+
|
78
|
+
Scenario: Attaching fails if no shell is running
|
79
|
+
Given a file named "docker-compose.yml" with:
|
80
|
+
"""
|
81
|
+
services:
|
82
|
+
main: foo
|
83
|
+
"""
|
84
|
+
|
85
|
+
When I run `geordi docker shell --secondary`
|
86
|
+
Then the output should contain "Could not find a running shell"
|
@@ -8,3 +8,14 @@ Given(/the docker command cannot find the "(.*?)" binary/) do |command|
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
11
|
+
|
12
|
+
Given(/^the docker command finds a running shell "(.*?)"$/) do |shell_name|
|
13
|
+
require 'geordi/docker'
|
14
|
+
expect_any_instance_of(Geordi::Docker).to receive(:mock_parse).at_least(:once).and_wrap_original do |original, *args|
|
15
|
+
if args[0] =~ /docker-compose ps/
|
16
|
+
"other_shell\nshell_name foo"
|
17
|
+
else
|
18
|
+
original.call(*args)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -5,9 +5,10 @@ class DockerCLI < Thor
|
|
5
5
|
end
|
6
6
|
|
7
7
|
desc 'shell', 'Open a shell in the main docker container for the current project.'
|
8
|
+
option :secondary, default: false, :type => :boolean
|
8
9
|
map 'shell' => '_shell'
|
9
10
|
def _shell
|
10
|
-
docker.shell
|
11
|
+
docker.shell(:secondary => options[:secondary])
|
11
12
|
end
|
12
13
|
|
13
14
|
desc 'vnc', 'Open a vnc viewer connecting to the docker container.'
|
data/lib/geordi/docker.rb
CHANGED
@@ -18,12 +18,13 @@ module Geordi
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
def shell
|
21
|
+
def shell(options = {})
|
22
22
|
check_installation_and_config
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
if options[:secondary]
|
24
|
+
attach_to_running_shell
|
25
|
+
else
|
26
|
+
run_shell
|
27
|
+
end
|
27
28
|
end
|
28
29
|
|
29
30
|
def vnc
|
@@ -32,10 +33,32 @@ module Geordi
|
|
32
33
|
|
33
34
|
private
|
34
35
|
|
36
|
+
def attach_to_running_shell
|
37
|
+
running_containers = execute(:`, 'docker-compose ps').split("\n")
|
38
|
+
if (main_container_line = running_containers.grep(/_main_run/).first)
|
39
|
+
container_name = main_container_line.split(' ').first
|
40
|
+
execute(:system, 'docker', 'exec', '-it', container_name, 'bash')
|
41
|
+
else
|
42
|
+
fail('Could not find a running shell. Start without --secondary first.')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def run_shell
|
47
|
+
command = [:system, 'docker-compose', 'run', '--service-ports']
|
48
|
+
command += ssh_agent_forward
|
49
|
+
command += ['main']
|
50
|
+
execute(*command)
|
51
|
+
execute(:system, 'docker-compose', 'stop')
|
52
|
+
end
|
53
|
+
|
35
54
|
def execute(kind, *args)
|
36
55
|
if ENV['GEORDI_TESTING']
|
37
56
|
puts "Stubbed run #{args.join(' ')}"
|
38
|
-
|
57
|
+
if kind == :`
|
58
|
+
mock_parse(*args)
|
59
|
+
else
|
60
|
+
mock_run(*args)
|
61
|
+
end
|
39
62
|
else
|
40
63
|
send(kind, *args)
|
41
64
|
end
|
@@ -46,6 +69,11 @@ module Geordi
|
|
46
69
|
true
|
47
70
|
end
|
48
71
|
|
72
|
+
def mock_parse(*args)
|
73
|
+
# exists just to be stubbed in tests
|
74
|
+
'command output'
|
75
|
+
end
|
76
|
+
|
49
77
|
def check_installation_and_config
|
50
78
|
unless command_exists?('docker')
|
51
79
|
fail('You need to install docker first with `sudo apt install docker`. After installation please log out and back in to your system once.')
|
data/lib/geordi/version.rb
CHANGED