dce 1.1.0 → 1.1.1

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.
Files changed (3) hide show
  1. checksums.yaml +5 -5
  2. data/lib/dce.rb +144 -0
  3. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 46a37cab9437651ff177de767fab9f5e0d41c70a
4
- data.tar.gz: ccef06fad2729125a5fc8a41ec47553401ea9f66
2
+ SHA256:
3
+ metadata.gz: 8e81156ac11f71cada7598d927c38a3e88e8a42725b656ce04da8fee67cb21e2
4
+ data.tar.gz: c3f9224417205d1af3fb96b84e68062d91dc0c098aafa32c8c5f57df7d9f7b95
5
5
  SHA512:
6
- metadata.gz: 597377782a561779ac96b08e8237b8572836c001671696d482dd0bd363c57480c6bbec99ee84d42b8b79de624ef611c17b409433b722baf45cd16a68cf97a93f
7
- data.tar.gz: 32cc943c14262bfe8ba44351cfbed911e15b4ef6b5cd58daa4e31a46d5eacb057ab647e2f88ac2cfddf8396577e39119cdab320f6b3783b8a131b962d26b8a86
6
+ metadata.gz: d5f27077366e80e654cdb4f68837507e010b79185f2f9f8eac246e5bb97ab48102ee5dfddfb2c6f34a31e0cb6089e73452b543fdb6a167d47676c25d2afbc56f
7
+ data.tar.gz: f8edd513dbd232f81f9005551adaf168409b8c90f60d7da9c193f0e4194c33cd0237836326803856f6c21e67118d7f686548bf5cb19c81483314a39f58e1c318
@@ -0,0 +1,144 @@
1
+ # Wishlist:
2
+ # Option to delete .dce_container.
3
+ # Option for using run instead of exec?
4
+
5
+ class DCE
6
+ # Run the command
7
+ def run
8
+ parse_args
9
+
10
+ @conf_file = File.join(File.dirname(docker_compose_file), '.dce_container')
11
+ config_container = nil
12
+ if File.exists? @conf_file
13
+ config_container = File.read @conf_file
14
+ end
15
+
16
+ if @list_containers
17
+ STDOUT.puts(get_containers.join(', '))
18
+ exit
19
+ end
20
+
21
+ if @query
22
+ if config_container
23
+ STDOUT.puts(config_container)
24
+ exit
25
+ else
26
+ abort "No container saved."
27
+ end
28
+ end
29
+
30
+ if !@container
31
+ @container = config_container ? config_container : query_container
32
+ end
33
+
34
+ if @container != config_container
35
+ File.write(@conf_file, @container)
36
+ end
37
+
38
+ # If no command given, open a shell.
39
+ if (@command.strip.empty?)
40
+ @command = "if [ -e /usr/bin/fish ]; then /usr/bin/fish; elif [ -e /bin/bash ]; then /bin/bash; else /bin/sh; fi"
41
+ end
42
+
43
+ args = '-i'
44
+ args += 't' if STDIN.tty?
45
+ container_id = %x{docker-compose ps -q #{@container}}.chomp
46
+
47
+ abort("Container #{@container} not created.") if container_id.empty?
48
+
49
+ command = "docker exec #{args} #{container_id} sh -c '#{@command}'"
50
+ STDERR.puts "Exec'ing: " + command if @verbose
51
+ exec command unless @dry_run
52
+ end
53
+
54
+ # Return path to the docker-compose.yml file
55
+ # Will exit with an error if not found
56
+ def docker_compose_file
57
+ unless @compose_file
58
+ dir = Dir.pwd()
59
+ while dir != "/"
60
+ file = File.join(dir, 'docker-compose.yml')
61
+ if FileTest.exists?(file)
62
+ @compose_file = file
63
+ break;
64
+ end
65
+ dir = File.dirname(dir)
66
+ end
67
+
68
+ if !@compose_file
69
+ abort "No docker-compose.yml file found."
70
+ end
71
+ end
72
+
73
+ return @compose_file
74
+ end
75
+
76
+ # Parse command line arguments
77
+ def parse_args
78
+ # Not using a proper option parse library, as it will get confused
79
+ # by options for the command given. We use a simple parser.
80
+ while /^-/ =~ ARGV[0]
81
+ option = ARGV.shift
82
+ case option
83
+ when '-c', '--container'
84
+ @container = ARGV.shift
85
+ if !get_containers.include? @container
86
+ abort "Unknown container #{@container}"
87
+ end
88
+ when '-v', '--verbose'
89
+ @verbose = true
90
+ when '-n', '--dry-run'
91
+ @verbose = true
92
+ @dry_run = true
93
+ when '-?', '--print-service'
94
+ @query = true
95
+ when '-l', '--list-containers'
96
+ @list_containers = true
97
+ when '-h', '--help'
98
+ STDERR.puts <<-HEREDOC
99
+ Usage: #{File.basename($0)} [OPTIONS]... COMMAND
100
+ Runs COMMAND in docker-compose container.
101
+
102
+ On first run, asks for the service container to use and saves it to .dce_container next
103
+ to the docker-compose.yml file.
104
+
105
+ If no command given, opens a shell.
106
+
107
+ Options:
108
+ -c, --container SERVICE use the container of the specified service
109
+ replaces the selected container in the .dce_container
110
+ -v, --verbose print exec'ed command
111
+ -n, --dry-run only print exec'ed command, don't run
112
+ -?, --print-service print the service saved
113
+ -l, --list-containers print the containers available
114
+ -h, --help print this help and exit
115
+
116
+ HEREDOC
117
+ exit
118
+ else
119
+ abort "Unknown option #{option}"
120
+ end
121
+ end
122
+
123
+ @command = ARGV.join(' ')
124
+ end
125
+
126
+ # Ask the user to select a container
127
+ # The options are taken from the docker-compose.yml file
128
+ def query_container
129
+ containers = get_containers
130
+ STDERR.puts "Please select container [#{containers.join(', ')}]"
131
+ choice = STDIN.gets.strip
132
+ exit if choice.empty?
133
+ if !containers.include?(choice)
134
+ abort "Illegal choice."
135
+ end
136
+ choice
137
+ end
138
+
139
+ # Read containers from docker-compose.yml
140
+ def get_containers
141
+ content = YAML::load(File.read(docker_compose_file))
142
+ content.has_key?('version') ? content['services'].keys : content.keys
143
+ end
144
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dce
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Fini Hansen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-21 00:00:00.000000000 Z
11
+ date: 2020-06-03 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Run shell commands in docker.
14
14
  email: xen@xen.dk
@@ -18,6 +18,7 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - bin/dce
21
+ - lib/dce.rb
21
22
  homepage: https://github.com/xendk/dce
22
23
  licenses:
23
24
  - GPL-3.0
@@ -37,8 +38,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
37
38
  - !ruby/object:Gem::Version
38
39
  version: '0'
39
40
  requirements: []
40
- rubyforge_project:
41
- rubygems_version: 2.6.14.4
41
+ rubygems_version: 3.0.3
42
42
  signing_key:
43
43
  specification_version: 4
44
44
  summary: DCE