dockersitter 0.1.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 +7 -0
- data/.document +4 -0
- data/.gitignore +4 -0
- data/.rspec +1 -0
- data/COPYING.txt +674 -0
- data/ChangeLog.rdoc +4 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +31 -0
- data/Rakefile +36 -0
- data/bin/dockersitter +6 -0
- data/docker_mgr.gemspec +60 -0
- data/gemspec.yml +17 -0
- data/lib/command_router.rb +25 -0
- data/lib/commands/backup_app.rb +51 -0
- data/lib/commands/config.rb +9 -0
- data/lib/commands/create.rb +83 -0
- data/lib/commands/delete.rb +23 -0
- data/lib/commands/generate_backup_scripts.rb +33 -0
- data/lib/commands/init.rb +20 -0
- data/lib/commands/restore_app.rb +56 -0
- data/lib/commands/start.rb +30 -0
- data/lib/docker_mgr/version.rb +4 -0
- data/lib/docker_mgr.rb +1 -0
- data/lib/templates/Dockerfile.erb +5 -0
- data/lib/templates/admin/examples/postgres_backup +5 -0
- data/lib/templates/admin/examples/postgres_restore +4 -0
- data/lib/templates/admin/installation_scripts/install_derby.sh +2 -0
- data/lib/templates/admin/installation_scripts/install_git.sh +2 -0
- data/lib/templates/admin/installation_scripts/install_glassfish.sh +2 -0
- data/lib/templates/admin/installation_scripts/install_java.sh +6 -0
- data/lib/templates/admin/installation_scripts/install_node.sh +12 -0
- data/lib/templates/admin/installation_scripts/install_rust.sh +3 -0
- data/lib/templates/admin/installation_scripts/scriptrunner.sh +19 -0
- data/lib/templates/admin/routines/backup_routine +2 -0
- data/lib/templates/after_all.erb +3 -0
- data/lib/templates/after_all_restore.erb +3 -0
- data/lib/templates/backup.erb +8 -0
- data/lib/templates/before_all.erb +3 -0
- data/lib/templates/before_all_restore.erb +3 -0
- data/lib/templates/docker-compose.yml.erb +15 -0
- data/lib/templates/restore.erb +3 -0
- data/lib/util.rb +120 -0
- data/spec/docker_mgr_spec.rb +8 -0
- data/spec/spec_helper.rb +4 -0
- metadata +176 -0
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'open3'
|
3
|
+
require 'thor/group'
|
4
|
+
require 'thor'
|
5
|
+
|
6
|
+
|
7
|
+
class RestoreApp < Thor::Group
|
8
|
+
include Thor::Actions
|
9
|
+
include DockerMgr::Util
|
10
|
+
|
11
|
+
|
12
|
+
argument :app_name
|
13
|
+
def restore
|
14
|
+
|
15
|
+
app_backup_dir = "#{backup_dir}/#{app_name}"
|
16
|
+
app_backup_tmp_dir = "#{app_backup_dir}/tmp"
|
17
|
+
|
18
|
+
reverse_sorted_entries = Dir.entries(app_backup_dir)
|
19
|
+
.select {|entry| entry != "." && entry != ".."}
|
20
|
+
.sort {| a,b | extract_date(b) <=> extract_date(a)}
|
21
|
+
|
22
|
+
puts "please select your backup"
|
23
|
+
reverse_sorted_entries.each_with_index{|entry,i| puts "#{i+1} #{entry}"}
|
24
|
+
puts "(a) abort"
|
25
|
+
|
26
|
+
choice = STDIN.gets.chomp
|
27
|
+
|
28
|
+
abort "aborting" unless %w(1 2 3).include? choice
|
29
|
+
|
30
|
+
chosen_backup = reverse_sorted_entries[choice.to_i - 1]
|
31
|
+
|
32
|
+
choice = yes?("do you want to restore the data-container back to #{Time.at(extract_date(chosen_backup).to_i).strftime '%d.%m.%Y-%H:%M:%S'} (y,N)")
|
33
|
+
|
34
|
+
abort "aborting" unless choice
|
35
|
+
|
36
|
+
puts `tar -zxf #{app_backup_dir}/#{chosen_backup} -C #{app_backup_dir}`
|
37
|
+
|
38
|
+
FileUtils.cd "#{apps_dir}/#{@app_name}" do
|
39
|
+
puts 'executing before_all hook'
|
40
|
+
puts exec_hook(@app_name,"restore","before_all")
|
41
|
+
service_hooks_for(@app_name,"restore").each do |service|
|
42
|
+
script_path = "#{apps_dir}/#{@app_name}/administration/hooks/restore.d/#{service}"
|
43
|
+
puts "executing #{script_path}"
|
44
|
+
Open3.popen3("#{script_path} #{app_backup_tmp_dir}/#{service} 2>&1") do |i,o,e,th|
|
45
|
+
while line = o.gets do
|
46
|
+
puts line
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
puts 'executing after_all hook'
|
51
|
+
puts exec_hook(@app_name,"restore","after_all")
|
52
|
+
end
|
53
|
+
|
54
|
+
`sudo rm -rf #{app_backup_tmp_dir}`
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'util'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'thor/group'
|
4
|
+
|
5
|
+
class Start < Thor::Group
|
6
|
+
include DockerMgr::Util
|
7
|
+
|
8
|
+
argument :app_name,
|
9
|
+
:required => false
|
10
|
+
|
11
|
+
def start
|
12
|
+
if @app_name
|
13
|
+
start_app(@app_name)
|
14
|
+
else
|
15
|
+
Dir.entries(apps_dir)
|
16
|
+
.select{|e| e != '.' && e != '..'}
|
17
|
+
.each(&method(:start_app))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
no_tasks do
|
22
|
+
def start_app(app_name)
|
23
|
+
app_path = "#{apps_dir}/#{app_name}"
|
24
|
+
FileUtils.cd app_path do
|
25
|
+
puts `sudo docker-compose up -d`
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
data/lib/docker_mgr.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'docker_mgr/version'
|
@@ -0,0 +1,5 @@
|
|
1
|
+
FROM <%=options[:image]%>
|
2
|
+
MAINTAINER <%=@user_name%> <<%=@user_email%>>
|
3
|
+
ADD administration/installation /tmp/installation_scripts
|
4
|
+
ADD administration/scriptrunner.sh /tmp/scriptrunner.sh
|
5
|
+
RUN chmod +x /tmp/scriptrunner.sh && /bin/bash /tmp/scriptrunner.sh /tmp/installation_scripts
|
@@ -0,0 +1,4 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
PGPASSWORD="mysecretpassword"
|
4
|
+
sudo docker run -it --link postgrestest_app_1:postgres --rm -e PGPASSWORD=$PGPASSWORD -v $1:/backup postgres /bin/bash -c 'psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres -f /backup/backup.sql'
|
@@ -0,0 +1,6 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
apt-get install -y software-properties-common
|
3
|
+
add-apt-repository -y ppa:webupd8team/java
|
4
|
+
apt-get update
|
5
|
+
echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections
|
6
|
+
apt-get install -y oracle-java8-installer unzip
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
VERSION="v0.11.16"
|
3
|
+
git clone https://github.com/creationix/nvm.git /.nvm
|
4
|
+
echo ". /.nvm/nvm.sh" >> /etc/bash.bashrc
|
5
|
+
/bin/bash -c ". /.nvm/nvm.sh && nvm install $VERSION && nvm use $VERSION && nvm alias default $VERSION && ln -s /.nvm/$VERSION/bin/node /usr/bin/node && ln -s /.nvm/$VERSION/bin/npm /usr/bin/npm"
|
6
|
+
groupadd nodegrp
|
7
|
+
usermod -a -G nodegrp developer
|
8
|
+
|
9
|
+
chgrp -R nodegrp /.nvm/$VERSION/*
|
10
|
+
chmod -R 775 /.nvm/$VERSION/*
|
11
|
+
chgrp nodegrp `which npm`
|
12
|
+
chgrp nodegrp `which node`
|
@@ -0,0 +1,8 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
<%volumes(app_name,@service).each_with_index do |v,i|%>
|
4
|
+
mkdir -p $1/<%="#{@service}/#{@service}_#{i}"%>
|
5
|
+
<%end%>
|
6
|
+
|
7
|
+
data_container_id=$(sudo docker-compose ps -q <%=@service%>)
|
8
|
+
sudo docker run --rm --volumes-from $data_container_id <%=volumes(app_name,@service).each_with_index.map{|volume,i|"-v $1/#{@service}/#{@service}_#{i}:/backup/#{@service}_#{i}"}.join(" ")%> ubuntu:14.04 /bin/bash -c '<%=volumes(app_name,@service).each_with_index.map{|v,i|"echo \"/#{v}\" > /backup/#{@service}_#{i}/backup.descriptor && tar -czpf /backup/#{@service}_#{i}/#{@service}_#{i}.tar.gz /#{v}"}.join(" && ")%>'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
app:
|
2
|
+
<%if options[:image]%>image: <%=options[:image]%> <%else%>build: .<%end%>
|
3
|
+
volumes_from:
|
4
|
+
- appdata
|
5
|
+
environment:
|
6
|
+
VIRTUAL_HOST: <%=@app_name%>.rene-richter.de
|
7
|
+
<%options[:env].each do | var |%><%=var.gsub('=',': ')%>
|
8
|
+
<%end%>
|
9
|
+
appdata:
|
10
|
+
<%if options[:image]%>image: <%=options[:image]%> <%else%>build: .<%end%>
|
11
|
+
volumes:
|
12
|
+
<%options[:volumes].each do |volume|-%>
|
13
|
+
- <%=volume%>
|
14
|
+
<%end-%>
|
15
|
+
command: /bin/echo datacontainer
|
@@ -0,0 +1,3 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
data_container_id=$(sudo docker-compose ps -q <%=@service%>)
|
3
|
+
sudo docker run --rm --volumes-from $data_container_id <%=volumes(@app_name,@service).each_with_index.map{|volume,i|"-v $1/#{@service}/#{@service}_#{i}:/backup/#{@service}_#{i}"}.join(" ")%> ubuntu:14.04 /bin/bash -c '<%=volumes(@app_name,@service).each_with_index.map{|v,i|"tar -zxf /backup/#{@service}_#{i}/#{@service}_#{i}.tar.gz -C /backup/#{@service}_#{i}; DIR=$(cat /backup/#{@service}_#{i}/backup.descriptor); rm -rf $DIR/* && cp -r /backup/#{@service}_#{i}/$DIR/* $DIR"}.join(" && ")%>'
|
data/lib/util.rb
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
module DockerMgr
|
5
|
+
|
6
|
+
module Util
|
7
|
+
|
8
|
+
def root_dir
|
9
|
+
return @root_dir if @root_dir
|
10
|
+
error_message = "not within project tree"
|
11
|
+
curr_dir = Dir.pwd
|
12
|
+
return curr_dir if curr_dir.end_with? "/docker"
|
13
|
+
dir_parts = curr_dir.split "/docker/"
|
14
|
+
raise error_message if dir_parts == 1
|
15
|
+
possible_root = "#{dir_parts[0]}/docker"
|
16
|
+
raise error_message unless (Dir.entries(possible_root) && %w{admin backup apps}).length == 3
|
17
|
+
@root_dir = possible_root
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def backup_dir
|
22
|
+
"#{root_dir}/backup"
|
23
|
+
end
|
24
|
+
|
25
|
+
def base_images_dir
|
26
|
+
"#{root_dir}/base_images"
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
def attic_dir
|
31
|
+
"#{root_dir}/attic"
|
32
|
+
end
|
33
|
+
|
34
|
+
def apps_dir
|
35
|
+
"#{root_dir}/apps"
|
36
|
+
end
|
37
|
+
|
38
|
+
def admin_dir
|
39
|
+
"#{root_dir}/admin"
|
40
|
+
end
|
41
|
+
|
42
|
+
def routine_dir
|
43
|
+
"#{admin_dir}/routines"
|
44
|
+
end
|
45
|
+
|
46
|
+
def install_dir
|
47
|
+
"#{admin_dir}/installation_scripts"
|
48
|
+
end
|
49
|
+
|
50
|
+
def extract_date(entry)
|
51
|
+
/_\d+\./.match(entry).to_s.chop[1..-1].to_i
|
52
|
+
end
|
53
|
+
|
54
|
+
def service_hooks_for(app_name,type)
|
55
|
+
Dir.entries("#{apps_dir}/#{app_name}/administration/hooks/#{type}.d")
|
56
|
+
.select {| entry | !entry.start_with?(".") && entry != "before_all" && entry != "after_all" }
|
57
|
+
end
|
58
|
+
|
59
|
+
def services(app_name)
|
60
|
+
YAML.load(File.read("#{apps_dir}/#{app_name}/docker-compose.yml"))
|
61
|
+
.each_key
|
62
|
+
.select {|k| !k.end_with?("data")}
|
63
|
+
end
|
64
|
+
|
65
|
+
def data_services(app_name)
|
66
|
+
YAML.load(File.read("#{apps_dir}/#{app_name}/docker-compose.yml")).each_key
|
67
|
+
.select {|k| k.end_with?("data")}
|
68
|
+
end
|
69
|
+
|
70
|
+
def volumes(app_name,service_name)
|
71
|
+
raw_volumes = YAML.load(File.read("#{apps_dir}/#{app_name}/docker-compose.yml"))["#{service_name}"]['volumes']
|
72
|
+
raw_volumes.map do |volume|
|
73
|
+
volume.chop! if volume.end_with? '/'
|
74
|
+
volume[0] = '' if volume.start_with? '/'
|
75
|
+
volume
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def exec_hook(app_name,type,hook_name)
|
80
|
+
if File.exist? "#{apps_dir}/#{app_name}/administration/hooks/#{type}.d/#{hook_name}"
|
81
|
+
`#{apps_dir}/#{app_name}/administration/hooks/#{type}.d/#{hook_name}`
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
def remove_line_from_routine(routine,filter_line)
|
87
|
+
File.open "#{routine_dir}/tmp","w" do | output_file |
|
88
|
+
File.foreach "#{routine_dir}/#{routine}" do | line |
|
89
|
+
output_file.write line unless line == "#{filter_line}\n"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
FileUtils.mv "#{routine_dir}/tmp", "#{routine_dir}/#{routine}"
|
93
|
+
end
|
94
|
+
|
95
|
+
def add_line_to_routine(routine,line)
|
96
|
+
File.open("#{routine_dir}/#{routine}",'a') { | file | file.write("#{line}\n") }
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
def extract_git_variable(name)
|
101
|
+
config = `git config --list`
|
102
|
+
result = config.lines.grep(/#{Regexp.quote(name)}/).map{|e| e.split('=')[1].chomp }.first
|
103
|
+
unless result
|
104
|
+
puts "please enter your #{name.split('.')[1]}"
|
105
|
+
result = STDIN.gets.chomp
|
106
|
+
`git config --global #{name} #{result}`
|
107
|
+
end
|
108
|
+
result
|
109
|
+
end
|
110
|
+
|
111
|
+
def extract_email
|
112
|
+
extract_git_variable("user.email")
|
113
|
+
end
|
114
|
+
|
115
|
+
def extract_name
|
116
|
+
extract_git_variable("user.name")
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dockersitter
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Rene Richter
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-08-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: thor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.19'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.19'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.8'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.8'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rdoc
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.4'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.4'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubygems-tasks
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.2'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.2'
|
97
|
+
description: generates scripts and projectstructure for docker
|
98
|
+
email: Richterrettich@gmail.com
|
99
|
+
executables:
|
100
|
+
- dockersitter
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files:
|
103
|
+
- COPYING.txt
|
104
|
+
- ChangeLog.rdoc
|
105
|
+
- LICENSE.txt
|
106
|
+
- README.rdoc
|
107
|
+
files:
|
108
|
+
- ".document"
|
109
|
+
- ".gitignore"
|
110
|
+
- ".rspec"
|
111
|
+
- COPYING.txt
|
112
|
+
- ChangeLog.rdoc
|
113
|
+
- Gemfile
|
114
|
+
- LICENSE.txt
|
115
|
+
- README.rdoc
|
116
|
+
- Rakefile
|
117
|
+
- bin/dockersitter
|
118
|
+
- docker_mgr.gemspec
|
119
|
+
- gemspec.yml
|
120
|
+
- lib/command_router.rb
|
121
|
+
- lib/commands/backup_app.rb
|
122
|
+
- lib/commands/config.rb
|
123
|
+
- lib/commands/create.rb
|
124
|
+
- lib/commands/delete.rb
|
125
|
+
- lib/commands/generate_backup_scripts.rb
|
126
|
+
- lib/commands/init.rb
|
127
|
+
- lib/commands/restore_app.rb
|
128
|
+
- lib/commands/start.rb
|
129
|
+
- lib/docker_mgr.rb
|
130
|
+
- lib/docker_mgr/version.rb
|
131
|
+
- lib/templates/Dockerfile.erb
|
132
|
+
- lib/templates/admin/examples/postgres_backup
|
133
|
+
- lib/templates/admin/examples/postgres_restore
|
134
|
+
- lib/templates/admin/installation_scripts/install_derby.sh
|
135
|
+
- lib/templates/admin/installation_scripts/install_git.sh
|
136
|
+
- lib/templates/admin/installation_scripts/install_glassfish.sh
|
137
|
+
- lib/templates/admin/installation_scripts/install_java.sh
|
138
|
+
- lib/templates/admin/installation_scripts/install_node.sh
|
139
|
+
- lib/templates/admin/installation_scripts/install_rust.sh
|
140
|
+
- lib/templates/admin/installation_scripts/scriptrunner.sh
|
141
|
+
- lib/templates/admin/routines/backup_routine
|
142
|
+
- lib/templates/after_all.erb
|
143
|
+
- lib/templates/after_all_restore.erb
|
144
|
+
- lib/templates/backup.erb
|
145
|
+
- lib/templates/before_all.erb
|
146
|
+
- lib/templates/before_all_restore.erb
|
147
|
+
- lib/templates/docker-compose.yml.erb
|
148
|
+
- lib/templates/restore.erb
|
149
|
+
- lib/util.rb
|
150
|
+
- spec/docker_mgr_spec.rb
|
151
|
+
- spec/spec_helper.rb
|
152
|
+
homepage: https://rubygems.org/gems/docker-mgr
|
153
|
+
licenses:
|
154
|
+
- GPL
|
155
|
+
metadata: {}
|
156
|
+
post_install_message:
|
157
|
+
rdoc_options: []
|
158
|
+
require_paths:
|
159
|
+
- lib
|
160
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - ">="
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '0'
|
165
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - ">="
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '0'
|
170
|
+
requirements: []
|
171
|
+
rubyforge_project:
|
172
|
+
rubygems_version: 2.4.8
|
173
|
+
signing_key:
|
174
|
+
specification_version: 4
|
175
|
+
summary: a management tool for docker
|
176
|
+
test_files: []
|