penkit 0.0.1.rc2 → 0.0.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/lib/penkit.rb +1 -0
- data/lib/penkit/cli/container/ps.rb +8 -0
- data/lib/penkit/cli/container/rm.rb +26 -0
- data/lib/penkit/cli/container/start.rb +15 -0
- data/lib/penkit/cli/container/stop.rb +26 -0
- data/lib/penkit/cli/penkit.rb +10 -88
- data/lib/penkit/cli/tools.rb +65 -0
- data/lib/penkit/docker.rb +9 -78
- data/lib/penkit/docker/network.rb +17 -0
- data/lib/penkit/docker/ps.rb +25 -0
- data/lib/penkit/docker/rm.rb +7 -0
- data/lib/penkit/docker/start.rb +23 -0
- data/lib/penkit/docker/stop.rb +7 -0
- data/lib/penkit/docker_compose.rb +4 -13
- data/lib/penkit/helpers.rb +40 -0
- data/lib/penkit/version.rb +1 -1
- metadata +30 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d70da81abc9263879c5ee641dcc24d19bf7d4fea
|
|
4
|
+
data.tar.gz: 238e150cd6ff9bb69cdaa3b0276cf09ca38c5cdf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 438fdc93bad785f612d4e781f635be78d9296b11fcd8bd03517b4b5429af9e5879aae33f504d1a2e66b831d48f45ac167ef68b3fcc3b25bc4d5bcbb6f195841e
|
|
7
|
+
data.tar.gz: 9d565f1cfbf336705b4ac8762b4c16a29c04c81d0e1762620e6e5b35079f70a24ae9d06870385876f526b2df6c76ac0a28fd13e620c39f03c316d35323000cb4
|
data/lib/penkit.rb
CHANGED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Penkit
|
|
2
|
+
class CLI < Thor
|
|
3
|
+
desc "rm [CONTAINER...]", "Remove penkit docker containers"
|
|
4
|
+
def rm(*containers)
|
|
5
|
+
if containers.any?
|
|
6
|
+
docker.rm(*containers)
|
|
7
|
+
else
|
|
8
|
+
rm_all
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def rm_all
|
|
15
|
+
containers = docker.find_all_containers
|
|
16
|
+
docker.rm(*containers) if rm_all?(containers)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def rm_all?(containers)
|
|
20
|
+
return false if containers.size == 0
|
|
21
|
+
message = "Are you sure you want to remove %d %s? [y/N]"
|
|
22
|
+
word = containers.size > 1 ? "containers" : "container"
|
|
23
|
+
ask(message % [containers.size, word]) == "y"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Penkit
|
|
2
|
+
class CLI < Thor
|
|
3
|
+
desc "start [OPTIONS] IMAGE", "Start a penkit docker image"
|
|
4
|
+
option :name, desc: "Override name and hostname of container"
|
|
5
|
+
def start(image)
|
|
6
|
+
if has_config?(image)
|
|
7
|
+
opts = options.dup
|
|
8
|
+
opts[:name] ||= unique_name(image)
|
|
9
|
+
docker_compose.up(image, opts)
|
|
10
|
+
else
|
|
11
|
+
docker.start(image, options.dup)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Penkit
|
|
2
|
+
class CLI < Thor
|
|
3
|
+
desc "stop [CONTAINER...]", "Stop penkit docker containers"
|
|
4
|
+
def stop(*containers)
|
|
5
|
+
if containers.any?
|
|
6
|
+
docker.stop(*containers)
|
|
7
|
+
else
|
|
8
|
+
stop_all
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def stop_all
|
|
15
|
+
containers = docker.find_running_containers
|
|
16
|
+
docker.stop(*containers) if stop_all?(containers)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def stop_all?(containers)
|
|
20
|
+
return false if containers.size == 0
|
|
21
|
+
message = "Are you sure you want to stop %d %s? [y/N]"
|
|
22
|
+
word = containers.size > 1 ? "containers" : "container"
|
|
23
|
+
ask(message % [containers.size, word]) == "y"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
data/lib/penkit/cli/penkit.rb
CHANGED
|
@@ -1,96 +1,18 @@
|
|
|
1
1
|
require "thor"
|
|
2
|
+
require "penkit/helpers"
|
|
3
|
+
require "penkit/cli/container/ps"
|
|
4
|
+
require "penkit/cli/container/rm"
|
|
5
|
+
require "penkit/cli/container/start"
|
|
6
|
+
require "penkit/cli/container/stop"
|
|
7
|
+
require "penkit/cli/tools"
|
|
2
8
|
|
|
3
9
|
module Penkit
|
|
4
10
|
class CLI < Thor
|
|
5
|
-
|
|
6
|
-
def ps
|
|
7
|
-
docker.ps
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
desc "rm [CONTAINER...]", "Remove penkit docker containers"
|
|
11
|
-
def rm(*containers)
|
|
12
|
-
if containers.any?
|
|
13
|
-
docker.rm(*containers)
|
|
14
|
-
else
|
|
15
|
-
rm_all
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
desc "start [OPTIONS] IMAGE", "Start a penkit docker image"
|
|
20
|
-
option :name, desc: "Override name and hostname of container"
|
|
21
|
-
def start(image)
|
|
22
|
-
if docker_compose.has_config?(image)
|
|
23
|
-
opts = options.dup
|
|
24
|
-
opts[:name] ||= docker.unique_name(image)
|
|
25
|
-
docker_compose.up(image, opts)
|
|
26
|
-
else
|
|
27
|
-
docker.start(image, options.dup)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
desc "stop [CONTAINER...]", "Stop penkit docker containers"
|
|
32
|
-
def stop(*containers)
|
|
33
|
-
if containers.any?
|
|
34
|
-
docker.stop(*containers)
|
|
35
|
-
else
|
|
36
|
-
stop_all
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Tools
|
|
41
|
-
|
|
42
|
-
desc "curl [ARGS...]", "Run curl on the penkit docker network"
|
|
43
|
-
def curl(*args)
|
|
44
|
-
docker.run("cli:curl", *args)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
desc "metasploit [ARGS...]", "Run metasploit on the penkit docker network"
|
|
48
|
-
def metasploit(*args)
|
|
49
|
-
docker.run("cli:metasploit", *args)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
desc "sqlmap [ARGS...]", "Run sqlmap on the penkit docker network"
|
|
53
|
-
def sqlmap(*args)
|
|
54
|
-
docker.run("cli:sqlmap", *args)
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
desc "wpscan [ARGS...]", "Run wpscan on the penkit docker network"
|
|
58
|
-
def wpscan(*args)
|
|
59
|
-
docker.run("cli:wpscan", *args)
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
private
|
|
63
|
-
|
|
64
|
-
def docker
|
|
65
|
-
@docker ||= Penkit::Docker.new
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def docker_compose
|
|
69
|
-
@docker_compose ||= Penkit::DockerCompose.new
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def stop_all
|
|
73
|
-
containers = docker.find_running_containers
|
|
74
|
-
docker.stop(*containers) if stop_all?(containers)
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def stop_all?(containers)
|
|
78
|
-
return false if containers.size == 0
|
|
79
|
-
message = "Are you sure you want to stop %d %s? [y/N]"
|
|
80
|
-
word = containers.size > 1 ? "containers" : "container"
|
|
81
|
-
ask(message % [containers.size, word]) == "y"
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
def rm_all
|
|
85
|
-
containers = docker.find_all_containers
|
|
86
|
-
docker.rm(*containers) if rm_all?(containers)
|
|
87
|
-
end
|
|
11
|
+
include Penkit::Helpers
|
|
88
12
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
word = containers.size > 1 ? "containers" : "container"
|
|
93
|
-
ask(message % [containers.size, word]) == "y"
|
|
13
|
+
desc "version", "Show current version"
|
|
14
|
+
def version
|
|
15
|
+
puts VERSION
|
|
94
16
|
end
|
|
95
17
|
end
|
|
96
18
|
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
require "thor"
|
|
2
|
+
|
|
3
|
+
module Penkit
|
|
4
|
+
class CLI < Thor
|
|
5
|
+
desc "curl [ARGS...]", "Run curl on the penkit docker network"
|
|
6
|
+
def curl(*args)
|
|
7
|
+
docker.run("cli:net", "curl", *args)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
desc "ftp [ARGS...]", "Run ftp on the penkit docker network"
|
|
11
|
+
def ftp(*args)
|
|
12
|
+
docker.run("cli:net", "lftp", *args)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
desc "metasploit [ARGS...]", "Run metasploit on the penkit docker network"
|
|
16
|
+
def metasploit(*args)
|
|
17
|
+
docker.run("cli:metasploit", *args)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
desc "netcat [ARGS...]", "Run netcat on the penkit docker network"
|
|
21
|
+
def netcat(*args)
|
|
22
|
+
docker.run("cli:net", "nc", *args)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
desc "nmap [ARGS...]", "Run nmap on the penkit docker network"
|
|
26
|
+
def nmap(*args)
|
|
27
|
+
docker.run("cli:net", "nmap", *args)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
desc "ping [ARGS...]", "Run ping on the penkit docker network"
|
|
31
|
+
def ping(*args)
|
|
32
|
+
docker.run("cli:net", "ping", *args)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
desc "rpcinfo [ARGS...]", "Run rcpinfo on the penkit docker network"
|
|
36
|
+
def rpcinfo(*args)
|
|
37
|
+
docker.run("cli:net", "rpcinfo", *args)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
desc "showmount [ARGS...]", "Run showmount on the penkit docker network"
|
|
41
|
+
def showmount(*args)
|
|
42
|
+
docker.run("cli:net", "showmount", *args)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
desc "smbclient [ARGS...]", "Run smbclient on the penkit docker network"
|
|
46
|
+
def smbclient(*args)
|
|
47
|
+
docker.run("cli:net", "smbclient", *args)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
desc "sqlmap [ARGS...]", "Run sqlmap on the penkit docker network"
|
|
51
|
+
def sqlmap(*args)
|
|
52
|
+
docker.run("cli:sqlmap", *args)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
desc "wget [ARGS...]", "Run wget on the penkit docker network"
|
|
56
|
+
def wget(*args)
|
|
57
|
+
docker.run("cli:net", "wget", *args)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
desc "wpscan [ARGS...]", "Run wpscan on the penkit docker network"
|
|
61
|
+
def wpscan(*args)
|
|
62
|
+
docker.run("cli:wpscan", *args)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
data/lib/penkit/docker.rb
CHANGED
|
@@ -1,85 +1,16 @@
|
|
|
1
|
+
require "penkit/helpers"
|
|
2
|
+
require "penkit/docker/network"
|
|
3
|
+
require "penkit/docker/ps"
|
|
4
|
+
require "penkit/docker/rm"
|
|
5
|
+
require "penkit/docker/start"
|
|
6
|
+
require "penkit/docker/stop"
|
|
7
|
+
|
|
1
8
|
module Penkit
|
|
2
9
|
class Docker
|
|
10
|
+
include Penkit::Helpers
|
|
11
|
+
|
|
3
12
|
IMAGE_REGEX = /^([^\s\/:]+)(:[^\s\/:]+)?$/
|
|
4
13
|
NETWORK = "penkit".freeze
|
|
5
14
|
REPOSITORY = "penkit".freeze
|
|
6
|
-
|
|
7
|
-
def create_network!
|
|
8
|
-
system("docker", "network", "create", *network_options, out: File::NULL) unless network_exists?
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def find_all_containers
|
|
12
|
-
IO.popen(["docker", "ps", "-aq", *filter_options]).readlines.map(&:strip)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def find_running_containers
|
|
16
|
-
IO.popen(["docker", "ps", "-q", *filter_options]).readlines.map(&:strip)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def image_name(image)
|
|
20
|
-
image[IMAGE_REGEX, 1]
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def image_url(image)
|
|
24
|
-
"#{REPOSITORY}/#{image}"
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def ps
|
|
28
|
-
exec("docker", "ps", *filter_options)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def rm(*containers)
|
|
32
|
-
exec("docker", "rm", "--force", *containers)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def run(image, *args)
|
|
36
|
-
create_network!
|
|
37
|
-
exec("docker", "run", "--rm", "-it", *run_options, image_url(image), *args)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def start(image, options={})
|
|
41
|
-
create_network!
|
|
42
|
-
options[:name] ||= unique_name(image)
|
|
43
|
-
puts "Starting container #{options[:name]}"
|
|
44
|
-
exec("docker", "run", "--detach", *run_options(options), image_url(image))
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def stop(*containers)
|
|
48
|
-
exec("docker", "stop", *containers)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def unique_name(name)
|
|
52
|
-
name = image_name(name)
|
|
53
|
-
name_list = find_container_names
|
|
54
|
-
100.times do |i|
|
|
55
|
-
return name unless name_list.include? name
|
|
56
|
-
name = [name[/^(.*\D)\d*$/, 1], i + 1].join
|
|
57
|
-
end
|
|
58
|
-
name
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
private
|
|
62
|
-
|
|
63
|
-
def find_container_names
|
|
64
|
-
IO.popen(["docker", "ps", "-a", "--format", "{{.Names}}", *filter_options]).readlines.map(&:strip)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def network_exists?
|
|
68
|
-
system("docker", "network", "inspect", NETWORK, out: File::NULL, err: File::NULL)
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def network_options
|
|
72
|
-
%w(--driver bridge) << NETWORK
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def filter_options
|
|
76
|
-
%w(--filter label=penkit)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def run_options(options={})
|
|
80
|
-
args = %w(--label penkit=true --network penkit)
|
|
81
|
-
args += ["--name", options[:name], "--hostname", options[:name]] if options[:name]
|
|
82
|
-
args
|
|
83
|
-
end
|
|
84
15
|
end
|
|
85
16
|
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Penkit
|
|
2
|
+
class Docker
|
|
3
|
+
def create_network!
|
|
4
|
+
system("docker", "network", "create", *network_options, out: File::NULL) unless network_exists?
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def network_exists?
|
|
10
|
+
system("docker", "network", "inspect", NETWORK, out: File::NULL, err: File::NULL)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def network_options
|
|
14
|
+
%w(--driver bridge) << NETWORK
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Penkit
|
|
2
|
+
class Docker
|
|
3
|
+
def find_all_containers
|
|
4
|
+
IO.popen(["docker", "ps", "-aq", *filter_options]).readlines.map(&:strip)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def find_container_names
|
|
8
|
+
IO.popen(["docker", "ps", "-a", "--format", "{{.Names}}", *filter_options]).readlines.map(&:strip)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def find_running_containers
|
|
12
|
+
IO.popen(["docker", "ps", "-q", *filter_options]).readlines.map(&:strip)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def ps
|
|
16
|
+
exec("docker", "ps", *filter_options)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def filter_options
|
|
22
|
+
%w(--filter label=penkit)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Penkit
|
|
2
|
+
class Docker
|
|
3
|
+
def run(image, *args)
|
|
4
|
+
create_network!
|
|
5
|
+
exec("docker", "run", "--rm", "-it", *run_options, image_url(image), *args)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def start(image, options={})
|
|
9
|
+
create_network!
|
|
10
|
+
options[:name] ||= unique_name(image)
|
|
11
|
+
puts "Starting container #{options[:name]}"
|
|
12
|
+
exec("docker", "run", "--detach", *run_options(options), image_url(image))
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def run_options(options={})
|
|
18
|
+
args = %w(--label penkit=true --network penkit)
|
|
19
|
+
args += ["--name", options[:name], "--hostname", options[:name]] if options[:name]
|
|
20
|
+
args
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
require "penkit/helpers"
|
|
2
|
+
|
|
1
3
|
module Penkit
|
|
2
4
|
class DockerCompose
|
|
3
|
-
|
|
4
|
-
File.exist?(config_file(image))
|
|
5
|
-
end
|
|
5
|
+
include Penkit::Helpers
|
|
6
6
|
|
|
7
7
|
def up(image, options = {})
|
|
8
8
|
docker.create_network!
|
|
@@ -16,7 +16,7 @@ module Penkit
|
|
|
16
16
|
|
|
17
17
|
def compose_env(image, options={})
|
|
18
18
|
{
|
|
19
|
-
"DOCKER_IMAGE" =>
|
|
19
|
+
"DOCKER_IMAGE" => image_url(image),
|
|
20
20
|
"DOCKER_NAME" => options[:name]
|
|
21
21
|
}
|
|
22
22
|
end
|
|
@@ -24,14 +24,5 @@ module Penkit
|
|
|
24
24
|
def compose_options(image, options={})
|
|
25
25
|
["-f", config_file(image), "-p", options[:name]]
|
|
26
26
|
end
|
|
27
|
-
|
|
28
|
-
def config_file(image)
|
|
29
|
-
root = File.expand_path("../../..", __FILE__)
|
|
30
|
-
File.join(root, "config", "#{docker.image_name(image)}.yml")
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def docker
|
|
34
|
-
@docker ||= Penkit::Docker.new
|
|
35
|
-
end
|
|
36
27
|
end
|
|
37
28
|
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Penkit
|
|
2
|
+
module Helpers
|
|
3
|
+
private
|
|
4
|
+
|
|
5
|
+
def config_file(image)
|
|
6
|
+
root = File.expand_path("../../..", __FILE__)
|
|
7
|
+
File.join(root, "config", "#{image_name(image)}.yml")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def docker
|
|
11
|
+
@docker ||= Penkit::Docker.new
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def docker_compose
|
|
15
|
+
@docker_compose ||= Penkit::DockerCompose.new
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def has_config?(image)
|
|
19
|
+
File.exist?(config_file(image))
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def image_name(image)
|
|
23
|
+
image[Penkit::Docker::IMAGE_REGEX, 1]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def image_url(image)
|
|
27
|
+
"#{Penkit::Docker::REPOSITORY}/#{image}"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def unique_name(name)
|
|
31
|
+
name = image_name(name)
|
|
32
|
+
name_list = docker.find_container_names
|
|
33
|
+
99.times do |i|
|
|
34
|
+
return name unless name_list.include? name
|
|
35
|
+
name = [name[/^(.*\D)\d*$/, 1], i + 1].join
|
|
36
|
+
end
|
|
37
|
+
name
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
data/lib/penkit/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: penkit
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.1
|
|
4
|
+
version: 0.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Don Humphreys
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2017-03-
|
|
12
|
+
date: 2017-03-18 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: thor
|
|
@@ -25,6 +25,20 @@ dependencies:
|
|
|
25
25
|
- - "~>"
|
|
26
26
|
- !ruby/object:Gem::Version
|
|
27
27
|
version: 0.19.4
|
|
28
|
+
- !ruby/object:Gem::Dependency
|
|
29
|
+
name: bundler
|
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
|
31
|
+
requirements:
|
|
32
|
+
- - "~>"
|
|
33
|
+
- !ruby/object:Gem::Version
|
|
34
|
+
version: '1.0'
|
|
35
|
+
type: :development
|
|
36
|
+
prerelease: false
|
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
38
|
+
requirements:
|
|
39
|
+
- - "~>"
|
|
40
|
+
- !ruby/object:Gem::Version
|
|
41
|
+
version: '1.0'
|
|
28
42
|
- !ruby/object:Gem::Dependency
|
|
29
43
|
name: rspec
|
|
30
44
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -54,9 +68,20 @@ files:
|
|
|
54
68
|
- config/wordpress.yml
|
|
55
69
|
- lib/penkit.rb
|
|
56
70
|
- lib/penkit/cli.rb
|
|
71
|
+
- lib/penkit/cli/container/ps.rb
|
|
72
|
+
- lib/penkit/cli/container/rm.rb
|
|
73
|
+
- lib/penkit/cli/container/start.rb
|
|
74
|
+
- lib/penkit/cli/container/stop.rb
|
|
57
75
|
- lib/penkit/cli/penkit.rb
|
|
76
|
+
- lib/penkit/cli/tools.rb
|
|
58
77
|
- lib/penkit/docker.rb
|
|
78
|
+
- lib/penkit/docker/network.rb
|
|
79
|
+
- lib/penkit/docker/ps.rb
|
|
80
|
+
- lib/penkit/docker/rm.rb
|
|
81
|
+
- lib/penkit/docker/start.rb
|
|
82
|
+
- lib/penkit/docker/stop.rb
|
|
59
83
|
- lib/penkit/docker_compose.rb
|
|
84
|
+
- lib/penkit/helpers.rb
|
|
60
85
|
- lib/penkit/version.rb
|
|
61
86
|
homepage: http://penkit.io
|
|
62
87
|
licenses:
|
|
@@ -70,12 +95,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
70
95
|
requirements:
|
|
71
96
|
- - ">="
|
|
72
97
|
- !ruby/object:Gem::Version
|
|
73
|
-
version:
|
|
98
|
+
version: 1.9.0
|
|
74
99
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
100
|
requirements:
|
|
76
|
-
- - "
|
|
101
|
+
- - ">="
|
|
77
102
|
- !ruby/object:Gem::Version
|
|
78
|
-
version: 1.3.
|
|
103
|
+
version: 1.3.5
|
|
79
104
|
requirements: []
|
|
80
105
|
rubyforge_project:
|
|
81
106
|
rubygems_version: 2.5.2
|