pero 0.1.8 → 0.4.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Rakefile +5 -0
- data/lib/pero/cli.rb +24 -3
- data/lib/pero/docker.rb +54 -31
- data/lib/pero/history.rb +2 -1
- data/lib/pero/puppet.rb +30 -10
- data/lib/pero/version.rb +1 -1
- data/misc/Dockerfile +11 -0
- data/pero.gemspec +2 -2
- metadata +12 -12
- data/Gemfile.lock +0 -61
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aceef1110ee7ca0f327637032d8c85072f81404b3ec82689f3acbf58653bec7c
|
4
|
+
data.tar.gz: c403a7d48a21536cbb38b48e88b683ccc6762c589ac16a29a92482b59657b89e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e6bdbf09b67c5ebc60ec3098fc7e5df48fe31b9f8af7b6b5110fadb74d3e8ca8dd639496ce9a58d5a386e7758def6d921d5f3a6fd41d1da7239bda284e6c920
|
7
|
+
data.tar.gz: 51d394f061d6e4c04b3ad4a58ae70e9ec958e03a3f60739f12a83c7884da315c7c8245b76f5e75be38c242a3076154e7290b12765c4edf51bbfbab27cc48cae7
|
data/.gitignore
CHANGED
data/Rakefile
CHANGED
data/lib/pero/cli.rb
CHANGED
@@ -20,6 +20,7 @@ module Pero
|
|
20
20
|
option :user, type: :string, aliases: ['-x'], desc: "ssh user"
|
21
21
|
option :key, type: :string, aliases: ['-i'], desc: "ssh private key"
|
22
22
|
option :port, type: :numeric, aliases: ['-p'], desc: "ssh port"
|
23
|
+
option "timeout", default: 10, type: :numeric, desc: "ssh connect timeout"
|
23
24
|
option :ssh_config, type: :string, desc: "ssh config path"
|
24
25
|
option :environment, type: :string, desc: "puppet environment"
|
25
26
|
option :ask_password, type: :boolean, default: false, desc: "ask ssh or sudo password"
|
@@ -39,22 +40,38 @@ module Pero
|
|
39
40
|
|
40
41
|
desc "apply", "puppet apply"
|
41
42
|
shared_options
|
42
|
-
option "server-version", type: :string
|
43
|
+
option "server-version", type: :string
|
44
|
+
option "image-name", type: :string
|
43
45
|
option :noop, aliases: '-n', default: false, type: :boolean
|
46
|
+
option :test, aliases: '-t', default: false, type: :boolean
|
44
47
|
option :verbose, aliases: '-v', default: true, type: :boolean
|
45
48
|
option :tags, default: nil, type: :array
|
49
|
+
option :volumes, default: nil, type: :array
|
46
50
|
option "one-shot", default: false, type: :boolean, desc: "stop puppet server after run"
|
47
51
|
def apply(name_regexp)
|
52
|
+
|
53
|
+
if !options["image-name"] && !options["server-version"]
|
54
|
+
Pero.log.error "image-name or server-version are required"
|
55
|
+
return
|
56
|
+
end
|
57
|
+
|
48
58
|
begin
|
49
59
|
prepare
|
50
60
|
nodes = Pero::History.search(name_regexp)
|
51
61
|
return unless nodes
|
52
62
|
Parallel.each(nodes, in_process: options["concurrent"]) do |n|
|
53
63
|
opt = n["last_options"].merge(options)
|
64
|
+
opt["environment"] = "production" if opt["environment"].nil? || opt["environment"].empty?
|
65
|
+
if options["image-name"]
|
66
|
+
opt.delete("server-version")
|
67
|
+
else
|
68
|
+
opt.delete("image-name")
|
69
|
+
end
|
54
70
|
puppet = Pero::Puppet.new(opt["host"], opt)
|
55
71
|
puppet.apply
|
56
72
|
end
|
57
73
|
rescue => e
|
74
|
+
Pero.log.error e.backtrace.join("\n")
|
58
75
|
Pero.log.error e.inspect
|
59
76
|
end
|
60
77
|
end
|
@@ -65,19 +82,23 @@ module Pero
|
|
65
82
|
option "node-name", aliases: '-N', default: "", type: :string, desc: "json node name(default hostname)"
|
66
83
|
def bootstrap(*hosts)
|
67
84
|
begin
|
85
|
+
options["environment"] = "production" if options["environment"].nil? || options["environment"].empty?
|
68
86
|
Parallel.each(hosts, in_process: options["concurrent"]) do |host|
|
69
|
-
|
87
|
+
raise "unknown option #{host}" if host =~ /^-/
|
70
88
|
puppet = Pero::Puppet.new(host, options)
|
89
|
+
|
90
|
+
Pero.log.info "bootstrap pero #{host}"
|
71
91
|
puppet.install
|
72
92
|
end
|
73
93
|
rescue => e
|
94
|
+
Pero.log.error e.backtrace.join("\n")
|
74
95
|
Pero.log.error e.inspect
|
75
96
|
end
|
76
97
|
end
|
77
98
|
|
78
99
|
no_commands do
|
79
100
|
def prepare
|
80
|
-
`bundle
|
101
|
+
`bundle install` if File.exists?("Gemfile")
|
81
102
|
`bundle exec librarian-puppet install` if File.exists?("Puppetfile")
|
82
103
|
end
|
83
104
|
end
|
data/lib/pero/docker.rb
CHANGED
@@ -4,16 +4,22 @@ require "retryable"
|
|
4
4
|
require 'net/https'
|
5
5
|
module Pero
|
6
6
|
class Docker
|
7
|
-
attr_reader :server_version
|
8
|
-
def initialize(version, environment)
|
7
|
+
attr_reader :server_version, :image_name, :volumes
|
8
|
+
def initialize(version, image_name, environment, volumes)
|
9
9
|
@server_version = version
|
10
|
+
@image_name = image_name
|
10
11
|
@environment = environment
|
12
|
+
@volumes = volumes
|
11
13
|
end
|
12
14
|
|
13
15
|
def build
|
14
16
|
Pero.log.info "start build container"
|
15
17
|
begin
|
16
|
-
image =
|
18
|
+
image = if image_name
|
19
|
+
::Docker::Image.create('fromImage' => image_name)
|
20
|
+
else
|
21
|
+
::Docker::Image.build(docker_file)
|
22
|
+
end
|
17
23
|
rescue => e
|
18
24
|
Pero.log.debug docker_file
|
19
25
|
Pero.log.error "failed build container #{e.inspect}"
|
@@ -24,7 +30,7 @@ module Pero
|
|
24
30
|
end
|
25
31
|
|
26
32
|
def container_name
|
27
|
-
"pero-#{
|
33
|
+
"pero-#{Digest::MD5.hexdigest(Dir.pwd)[0..5]}-#{@environment}"
|
28
34
|
end
|
29
35
|
|
30
36
|
def find
|
@@ -35,7 +41,7 @@ module Pero
|
|
35
41
|
|
36
42
|
def alerady_run?
|
37
43
|
c = find
|
38
|
-
c && c.info["State"]
|
44
|
+
c && c.info["State"] == "running" && c.exec(['pkill', '-HUP', '-f', 'puppet-server']) && c
|
39
45
|
end
|
40
46
|
|
41
47
|
def run
|
@@ -43,39 +49,44 @@ module Pero
|
|
43
49
|
c.delete(:force => true) if c.info["Names"].first == "/#{container_name}"
|
44
50
|
end
|
45
51
|
|
52
|
+
vols = volumes || []
|
53
|
+
vols << "#{Dir.pwd}:/etc/puppetlabs/code/environments/#{@environment}"
|
54
|
+
vols << "#{Dir.pwd}/keys:/etc/puppetlabs/puppet/eyaml/"
|
55
|
+
|
46
56
|
container = ::Docker::Container.create({
|
47
57
|
'name' => container_name,
|
48
58
|
'Hostname' => 'puppet',
|
49
59
|
'Image' => build.id,
|
50
60
|
'ExposedPorts' => { '8140/tcp' => {} },
|
61
|
+
'HostConfig' => {
|
62
|
+
'Binds' => vols,
|
63
|
+
'PortBindings' => {
|
64
|
+
'8140/tcp' => [{ 'HostPort' => "0" }],
|
65
|
+
},
|
66
|
+
},
|
67
|
+
'Cmd' => ["bash", "-c", "rm -rf #{conf_dir}/ssl/* && #{create_ca} && #{run_cmd}"]
|
51
68
|
})
|
52
69
|
|
53
70
|
Pero.log.info "start puppet master container"
|
54
|
-
container.start
|
55
|
-
'Binds' => [
|
56
|
-
"#{Dir.pwd}:/etc/puppetlabs/code/environments/#{@environment}",
|
57
|
-
"#{Dir.pwd}/keys:/etc/puppetlabs/puppet/eyaml/",
|
58
|
-
],
|
59
|
-
'PortBindings' => {
|
60
|
-
'8140/tcp' => [{ 'HostPort' => "0" }],
|
61
|
-
},
|
62
|
-
)
|
71
|
+
container.start
|
63
72
|
|
64
73
|
container = find
|
65
74
|
raise "can't start container" unless container
|
66
75
|
begin
|
67
76
|
Retryable.retryable(tries: 20, sleep: 5) do
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
77
|
+
begin
|
78
|
+
https = Net::HTTP.new('localhost', container.info["Ports"].first["PublicPort"])
|
79
|
+
https.use_ssl = true
|
80
|
+
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
81
|
+
Pero.log.debug "start server health check"
|
82
|
+
https.start {
|
83
|
+
response = https.get('/')
|
84
|
+
Pero.log.debug "puppet http response #{response}"
|
85
|
+
}
|
86
|
+
rescue => e
|
87
|
+
Pero.log.debug e.inspect
|
88
|
+
raise e
|
89
|
+
end
|
79
90
|
end
|
80
91
|
rescue
|
81
92
|
Pero.log.error "can't start container.please check [ docker logs #{container.info["id"]} ]"
|
@@ -103,15 +114,28 @@ EOS
|
|
103
114
|
|
104
115
|
|
105
116
|
end
|
117
|
+
|
118
|
+
def conf_dir
|
119
|
+
if Gem::Version.new("4.0.0") > Gem::Version.new(server_version)
|
120
|
+
"/etc/puppet"
|
121
|
+
elsif Gem::Version.new("5.0.0") > Gem::Version.new(server_version) && Gem::Version.new("4.0.0") <= Gem::Version.new(server_version)
|
122
|
+
"/etc/puppetlabs/puppet/"
|
123
|
+
elsif Gem::Version.new("6.0.0") > Gem::Version.new(server_version)&& Gem::Version.new("5.0.0") <= Gem::Version.new(server_version)
|
124
|
+
"/etc/puppetlabs/puppet/"
|
125
|
+
else
|
126
|
+
"/etc/puppetlabs/puppet/"
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
106
130
|
def docker_file
|
107
|
-
release_package,package_name
|
108
|
-
["puppetlabs-release-el-#{el}.noarch.rpm", "puppet-server"
|
131
|
+
release_package,package_name = if Gem::Version.new("4.0.0") > Gem::Version.new(server_version)
|
132
|
+
["puppetlabs-release-el-#{el}.noarch.rpm", "puppet-server"]
|
109
133
|
elsif Gem::Version.new("5.0.0") > Gem::Version.new(server_version) && Gem::Version.new("4.0.0") <= Gem::Version.new(server_version)
|
110
|
-
["puppetlabs-release-pc1-el-#{el}.noarch.rpm", "puppetserver"
|
134
|
+
["puppetlabs-release-pc1-el-#{el}.noarch.rpm", "puppetserver"]
|
111
135
|
elsif Gem::Version.new("6.0.0") > Gem::Version.new(server_version)&& Gem::Version.new("5.0.0") <= Gem::Version.new(server_version)
|
112
|
-
["puppet5-release-el-#{el}.noarch.rpm", "puppetserver"
|
136
|
+
["puppet5-release-el-#{el}.noarch.rpm", "puppetserver"]
|
113
137
|
else
|
114
|
-
["puppet6-release-el-#{el}.noarch.rpm", "puppetserver"
|
138
|
+
["puppet6-release-el-#{el}.noarch.rpm", "puppetserver"]
|
115
139
|
end
|
116
140
|
|
117
141
|
<<-EOS
|
@@ -121,7 +145,6 @@ rpm -ivh #{release_package}
|
|
121
145
|
RUN yum install -y #{package_name}-#{server_version}
|
122
146
|
ENV PATH $PATH:/opt/puppetlabs/bin
|
123
147
|
RUN echo -e "#{puppet_config.split(/\n/).join("\\n")}" > #{conf_dir}/puppet.conf
|
124
|
-
CMD bash -c "rm -rf #{conf_dir}/ssl/* && #{create_ca} && #{run_cmd}"
|
125
148
|
EOS
|
126
149
|
end
|
127
150
|
|
data/lib/pero/history.rb
CHANGED
@@ -21,12 +21,13 @@ module Pero
|
|
21
21
|
class History
|
22
22
|
class Attribute
|
23
23
|
def initialize(specinfra, options)
|
24
|
-
name = if options["node-name"].empty?
|
24
|
+
name = if options["node-name"].nil? || options["node-name"].empty?
|
25
25
|
specinfra.run_command("hostname").stdout.chomp
|
26
26
|
else
|
27
27
|
options["node-name"]
|
28
28
|
end
|
29
29
|
options.delete("noop")
|
30
|
+
options.delete("tags")
|
30
31
|
@h = {
|
31
32
|
name: name,
|
32
33
|
last_options: options
|
data/lib/pero/puppet.rb
CHANGED
@@ -53,6 +53,7 @@ module Pero
|
|
53
53
|
opts[:password] = @options["password"] if @options["password"]
|
54
54
|
opts[:keys] = [@options["key"]] if @options["key"]
|
55
55
|
opts[:port] = @options["port"] if @options["port"]
|
56
|
+
opts[:timeout] = @options["timeout"] if @options["timeout"]
|
56
57
|
|
57
58
|
if @options["vagrant"]
|
58
59
|
config = Tempfile.new('', Dir.tmpdir)
|
@@ -78,7 +79,6 @@ module Pero
|
|
78
79
|
end
|
79
80
|
|
80
81
|
def install
|
81
|
-
Pero.log.info "bootstrap pero"
|
82
82
|
osi = specinfra.os_info
|
83
83
|
os = case osi[:family]
|
84
84
|
when "redhat"
|
@@ -108,7 +108,7 @@ module Pero
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def run_container
|
111
|
-
docker = Pero::Docker.new(@options["server-version"], @options["environment"])
|
111
|
+
docker = Pero::Docker.new(@options["server-version"], @options["image-name"], @options["environment"], @options["volumes"])
|
112
112
|
docker.alerady_run? || docker.run
|
113
113
|
end
|
114
114
|
|
@@ -123,11 +123,13 @@ module Pero
|
|
123
123
|
mkdir -p `puppet config print ssldir` && mount --bind /tmp/puppet/#{tmpdir} `puppet config print ssldir` && \
|
124
124
|
#{puppet_cmd}'"
|
125
125
|
Pero.log.debug "run cmd:#{cmd}"
|
126
|
-
ssh
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
126
|
+
ssh_exec(ssh, host, cmd)
|
127
|
+
|
128
|
+
if @options["one-shot"]
|
129
|
+
cmd = "/bin/rm -rf /tmp/puppet/#{tmpdir}"
|
130
|
+
ssh_exec(ssh, host, cmd)
|
131
|
+
end
|
132
|
+
|
131
133
|
ssh.loop {true} if ENV['PERO_DEBUG']
|
132
134
|
end
|
133
135
|
rescue => e
|
@@ -138,17 +140,35 @@ module Pero
|
|
138
140
|
Pero::History::Attribute.new(specinfra, @options).save
|
139
141
|
end
|
140
142
|
|
143
|
+
def ssh_exec(ssh, host, cmd)
|
144
|
+
ssh.open_channel do |ch|
|
145
|
+
ch.request_pty
|
146
|
+
ch.on_data do |ch,data|
|
147
|
+
Pero.log.info "#{host}:#{data.chomp}"
|
148
|
+
end
|
149
|
+
|
150
|
+
ch.on_extended_data do |c,type,data|
|
151
|
+
Pero.log.error "#{host}:#{data.chomp}"
|
152
|
+
end
|
153
|
+
|
154
|
+
ch.exec specinfra.build_command(cmd) do |ch, success|
|
155
|
+
raise "could not execute #{cmd}" unless success
|
156
|
+
end
|
157
|
+
end
|
158
|
+
ssh.loop
|
159
|
+
end
|
160
|
+
|
141
161
|
def puppet_cmd
|
142
162
|
if Gem::Version.new("5.0.0") > Gem::Version.new(@options["agent-version"])
|
143
|
-
"puppet agent --no-daemonize --onetime #{parse_puppet_option(@options)} --server localhost"
|
163
|
+
"puppet agent --no-daemonize --onetime #{parse_puppet_option(@options)} --ca_port 8140 --ca_server localhost --masterport 8140 --server localhost"
|
144
164
|
else
|
145
|
-
"/opt/puppetlabs/bin/puppet agent --no-daemonize --onetime #{parse_puppet_option(@options)} --server localhost"
|
165
|
+
"/opt/puppetlabs/bin/puppet agent --no-daemonize --onetime #{parse_puppet_option(@options)} --ca_server localhost --masterport 8140 --server localhost"
|
146
166
|
end
|
147
167
|
end
|
148
168
|
|
149
169
|
def parse_puppet_option(options)
|
150
170
|
ret = ""
|
151
|
-
%w(noop verbose).each do |n|
|
171
|
+
%w(noop verbose test).each do |n|
|
152
172
|
ret << " --#{n}" if options[n]
|
153
173
|
end
|
154
174
|
ret << " --tags #{options["tags"].join(",")}" if options["tags"]
|
data/lib/pero/version.rb
CHANGED
data/misc/Dockerfile
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
FROM centos:6
|
2
|
+
RUN yum -y install curl epel-release
|
3
|
+
RUN rpm -ivh https://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-12.noarch.rpm
|
4
|
+
RUN curl -O http://software.exogeni.net/repo/puppet/6/products/x86_64/puppet-server-3.0.1-1.el6.noarch.rpm && \
|
5
|
+
curl -O http://software.exogeni.net/repo/puppet/6/products/x86_64/puppet-3.0.1-1.el6.noarch.rpm && \
|
6
|
+
yum -y install puppet-3.0.1-1.el6.noarch.rpm puppet-server-3.0.1-1.el6.noarch.rpm
|
7
|
+
RUN mkdir -p /etc/puppetlabs/code/environments/production
|
8
|
+
|
9
|
+
RUN echo -e "[master]\nvardir= /var/puppet\nmanifestdir = /var/puppet/data/manifests\n templatedir = /var/puppet/data/templates\n modulepath = /var/puppet/data/modules:/var/puppet/data/roles:/var/puppet/data/vendor/modules\nlogdir = /var/log/puppet\n rundir = /var/run/puppet\n ssldir = /var/puppet/ssl\n" > /etc/puppet/puppet.conf
|
10
|
+
|
11
|
+
CMD bash -c "rm -rf /etc/puppet/ssl/* && puppet cert generate `hostname` --dns_alt_names localhost,127.0.0.1 && echo '*' > /etc/puppet/autosign.conf && puppet master --no-daemonize --verbose"
|
data/pero.gemspec
CHANGED
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.add_dependency 'retryable'
|
31
31
|
spec.add_dependency 'specinfra'
|
32
32
|
spec.add_dependency 'parallel'
|
33
|
-
spec.add_development_dependency "bundler"
|
34
|
-
spec.add_development_dependency "rake"
|
33
|
+
spec.add_development_dependency "bundler"
|
34
|
+
spec.add_development_dependency "rake"
|
35
35
|
spec.add_development_dependency "rspec", "~> 3.0"
|
36
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pero
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- pyama86
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -112,30 +112,30 @@ dependencies:
|
|
112
112
|
name: bundler
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
117
|
+
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- - "
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rake
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - "
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
131
|
+
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - "
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
138
|
+
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: rspec
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -160,7 +160,6 @@ extra_rdoc_files: []
|
|
160
160
|
files:
|
161
161
|
- ".gitignore"
|
162
162
|
- Gemfile
|
163
|
-
- Gemfile.lock
|
164
163
|
- LICENSE.txt
|
165
164
|
- README.md
|
166
165
|
- Rakefile
|
@@ -179,6 +178,7 @@ files:
|
|
179
178
|
- lib/pero/puppet/redhat.rb
|
180
179
|
- lib/pero/ssh_executable.rb
|
181
180
|
- lib/pero/version.rb
|
181
|
+
- misc/Dockerfile
|
182
182
|
- pero.gemspec
|
183
183
|
homepage: https://github.com/pyama86/pero
|
184
184
|
licenses:
|
@@ -199,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
199
199
|
- !ruby/object:Gem::Version
|
200
200
|
version: '0'
|
201
201
|
requirements: []
|
202
|
-
rubygems_version: 3.
|
202
|
+
rubygems_version: 3.1.2
|
203
203
|
signing_key:
|
204
204
|
specification_version: 4
|
205
205
|
summary: tool for puppet apply from our desktop.
|
data/Gemfile.lock
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
pero (0.1.6)
|
5
|
-
docker-api
|
6
|
-
logger
|
7
|
-
net-ssh
|
8
|
-
parallel
|
9
|
-
retryable
|
10
|
-
specinfra
|
11
|
-
thor
|
12
|
-
|
13
|
-
GEM
|
14
|
-
remote: https://rubygems.org/
|
15
|
-
specs:
|
16
|
-
diff-lcs (1.4.4)
|
17
|
-
docker-api (1.34.2)
|
18
|
-
excon (>= 0.47.0)
|
19
|
-
multi_json
|
20
|
-
excon (0.76.0)
|
21
|
-
logger (1.4.2)
|
22
|
-
multi_json (1.15.0)
|
23
|
-
net-scp (3.0.0)
|
24
|
-
net-ssh (>= 2.6.5, < 7.0.0)
|
25
|
-
net-ssh (6.1.0)
|
26
|
-
net-telnet (0.1.1)
|
27
|
-
parallel (1.19.2)
|
28
|
-
rake (10.5.0)
|
29
|
-
retryable (3.0.5)
|
30
|
-
rspec (3.9.0)
|
31
|
-
rspec-core (~> 3.9.0)
|
32
|
-
rspec-expectations (~> 3.9.0)
|
33
|
-
rspec-mocks (~> 3.9.0)
|
34
|
-
rspec-core (3.9.2)
|
35
|
-
rspec-support (~> 3.9.3)
|
36
|
-
rspec-expectations (3.9.2)
|
37
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
38
|
-
rspec-support (~> 3.9.0)
|
39
|
-
rspec-mocks (3.9.1)
|
40
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
41
|
-
rspec-support (~> 3.9.0)
|
42
|
-
rspec-support (3.9.3)
|
43
|
-
sfl (2.3)
|
44
|
-
specinfra (2.82.19)
|
45
|
-
net-scp
|
46
|
-
net-ssh (>= 2.7)
|
47
|
-
net-telnet (= 0.1.1)
|
48
|
-
sfl
|
49
|
-
thor (1.0.1)
|
50
|
-
|
51
|
-
PLATFORMS
|
52
|
-
ruby
|
53
|
-
|
54
|
-
DEPENDENCIES
|
55
|
-
bundler (~> 1.17)
|
56
|
-
pero!
|
57
|
-
rake (~> 10.0)
|
58
|
-
rspec (~> 3.0)
|
59
|
-
|
60
|
-
BUNDLED WITH
|
61
|
-
1.17.3
|