james_bond-mission_kubernetes 0.2.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/README.md +22 -0
- data/lib/james_bond.rb +4 -0
- data/lib/james_bond/kubernetes_build_mission.rb +32 -0
- data/lib/james_bond/kubernetes_deploy_mission.rb +48 -0
- data/lib/james_bond/kubernetes_server_mission.rb +38 -0
- data/lib/james_bond/kubernetes_test_mission.rb +38 -0
- data/lib/james_bond/mission_kubernetes.rb +10 -0
- data/lib/james_bond/mission_kubernetes/build_handler.rb +42 -0
- data/lib/james_bond/mission_kubernetes/config.rb +34 -0
- data/lib/james_bond/mission_kubernetes/patch_deploy_handler.rb +84 -0
- data/lib/james_bond/mission_kubernetes/server_handler.rb +39 -0
- data/lib/james_bond/mission_kubernetes/test_handler.rb +47 -0
- metadata +101 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fa107242fdcb793cb9ba668175949a5df7ebb5c3
|
4
|
+
data.tar.gz: d52bb1a1eb642cb23146a884bdab9918ea4f4a22
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1099bba011809c798f515e0c6dec5c2c831f4b723553850bf3385a2885592fc3c065590fc7cf6ef4bdad09fe4dd20e4340a136966e4b74aa96c89bedea4258f0
|
7
|
+
data.tar.gz: 664addd41068a4808048fb2d3ec4f2c7acc3e50f30567573ffaadda587a6f5326d42b3fae731c36950fa00e589d18211053a8312b42b98c34f02b762d7318d57
|
data/README.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
## Kubernetes Mission
|
2
|
+
|
3
|
+
### Usage
|
4
|
+
|
5
|
+
To run the test suit in development mode:
|
6
|
+
|
7
|
+
```sh
|
8
|
+
bond test
|
9
|
+
```
|
10
|
+
|
11
|
+
To run a specfic test suit in dev mode:
|
12
|
+
|
13
|
+
```sh
|
14
|
+
bond test -t /main/java/com/inlocomedia/sdk_config/dao/
|
15
|
+
```
|
16
|
+
|
17
|
+
|
18
|
+
To run tests in production:
|
19
|
+
|
20
|
+
```sh
|
21
|
+
bond test -t /main/java/com/inlocomedia/sdk_config/dao/ -e production
|
22
|
+
```
|
data/lib/james_bond.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require "james_bond/core/mission"
|
2
|
+
require "james_bond/mission_kubernetes/config"
|
3
|
+
require "james_bond/mission_kubernetes/build_handler"
|
4
|
+
|
5
|
+
module JamesBond
|
6
|
+
class KubernetesBuildMission
|
7
|
+
include JamesBond::Core::Mission
|
8
|
+
|
9
|
+
MISSION_NAME = "kubernetes"
|
10
|
+
MISSION_MAIN_COMMANDS = ["build"]
|
11
|
+
CONFIGURATION_FILE_PATH = File.join(Dir.pwd, "config", "james_bond", "kubernetes.yml")
|
12
|
+
|
13
|
+
def build(config, params)
|
14
|
+
config.name = MISSION_NAME
|
15
|
+
config.main_commands = MISSION_MAIN_COMMANDS
|
16
|
+
arguments_parser do |parser|
|
17
|
+
parser.banner = "bond #{MISSION_MAIN_COMMANDS[0]} [options]"
|
18
|
+
parser.string "-t", "--tag",
|
19
|
+
"Creates a docker image with the specified tag. If omitted a tag " + \
|
20
|
+
"like devel-212121 will be generated automaticaly."
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def run_build_command(command:, mission_pool:)
|
25
|
+
self.class::BuildHandler.new(command, config_file).run
|
26
|
+
end
|
27
|
+
|
28
|
+
def config_file
|
29
|
+
@config_file ||= self.class::Config.new(yaml_path: CONFIGURATION_FILE_PATH)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "james_bond/core/mission"
|
2
|
+
require "james_bond/mission_kubernetes/config"
|
3
|
+
require "james_bond/mission_kubernetes/patch_deploy_handler"
|
4
|
+
|
5
|
+
module JamesBond
|
6
|
+
class KubernetesDeployMission
|
7
|
+
include JamesBond::Core::Mission
|
8
|
+
|
9
|
+
MISSION_NAME = "kubernetes_deploy"
|
10
|
+
MISSION_MAIN_COMMANDS = ["deploy"]
|
11
|
+
CONFIGURATION_FILE_PATH = File.join(
|
12
|
+
Dir.pwd, "config", "james_bond", "kubernetes.yml"
|
13
|
+
)
|
14
|
+
|
15
|
+
def build(config, params)
|
16
|
+
config.name = MISSION_NAME
|
17
|
+
config.main_commands = MISSION_MAIN_COMMANDS
|
18
|
+
|
19
|
+
arguments_parser do |parser|
|
20
|
+
parser.banner = "bond #{MISSION_MAIN_COMMANDS[0]} [options]"
|
21
|
+
parser.string "-t", "--tag", "The image tag to deploy."
|
22
|
+
parser.string "-e", "--environment",
|
23
|
+
"Environment to deploy to. Default: dev.",
|
24
|
+
default: "dev"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def run_deploy_command(command:, mission_pool:)
|
29
|
+
tag = command.options[:tag]
|
30
|
+
tag ||= invoke_build(mission_pool)[:tag]
|
31
|
+
|
32
|
+
command.options[:tag] = tag
|
33
|
+
MissionKubernetes::PatchDeployHandler.new(command, config_file).run
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def invoke_build(mission_pool)
|
39
|
+
build = JamesBond::Core::Command.new( argv: ["build"], env: "dev")
|
40
|
+
build_mission = mission_pool.decide_mission(build)
|
41
|
+
build_mission.run_command(command: build, mission_pool: mission_pool)
|
42
|
+
end
|
43
|
+
|
44
|
+
def config_file
|
45
|
+
@config_file ||= JamesBond::MissionKubernetes::Config.new(yaml_path: CONFIGURATION_FILE_PATH)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "james_bond/core/mission"
|
2
|
+
require "james_bond/mission_kubernetes/server_handler"
|
3
|
+
require "james_bond/mission_kubernetes/config"
|
4
|
+
|
5
|
+
module JamesBond
|
6
|
+
class KubernetesServerMission
|
7
|
+
include JamesBond::Core::Mission
|
8
|
+
|
9
|
+
MISSION_NAME = "kubernetes_server"
|
10
|
+
MISSION_MAIN_COMMANDS = ["server"]
|
11
|
+
CONFIGURATION_FILE_PATH = File.join(
|
12
|
+
Dir.pwd, "config", "james_bond", "kubernetes.yml"
|
13
|
+
)
|
14
|
+
|
15
|
+
def build(config, params)
|
16
|
+
config.name = MISSION_NAME
|
17
|
+
config.main_commands = MISSION_MAIN_COMMANDS
|
18
|
+
|
19
|
+
arguments_parser do |parser|
|
20
|
+
parser.banner = "bond #{MISSION_MAIN_COMMANDS[0]} [options]"
|
21
|
+
parser.string "-t", "--tag",
|
22
|
+
"Use this option to specify what image tag to use. " + \
|
23
|
+
"Remember the image should be accessible to the docker deamon used "+ \
|
24
|
+
"by Kubernetes. If you are using Minikube run " + \
|
25
|
+
"`eval $(minikube docker-env)` to share de deamon."
|
26
|
+
parser.separator " "
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def run_server_command(command:)
|
31
|
+
MissionKubernetes::ServerHandler.new(command, config_file).run
|
32
|
+
end
|
33
|
+
|
34
|
+
def config_file
|
35
|
+
@config_file ||= JamesBond::MissionKubernetes::Config.new(yaml_path: CONFIGURATION_FILE_PATH)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "james_bond/core/mission"
|
2
|
+
require "james_bond/mission_kubernetes/config"
|
3
|
+
require "james_bond/mission_kubernetes/test_handler"
|
4
|
+
|
5
|
+
module JamesBond
|
6
|
+
class KubernetesTestMission
|
7
|
+
include JamesBond::Core::Mission
|
8
|
+
|
9
|
+
MISSION_NAME = "kubernetes"
|
10
|
+
MISSION_MAIN_COMMANDS = ["test"]
|
11
|
+
CONFIGURATION_FILE_PATH = File.join(Dir.pwd, "config", "james_bond", "kubernetes.yml")
|
12
|
+
|
13
|
+
def build(config, params)
|
14
|
+
config.name = MISSION_NAME
|
15
|
+
config.main_commands = MISSION_MAIN_COMMANDS
|
16
|
+
end
|
17
|
+
|
18
|
+
def run_test_command(command:, mission_pool: )
|
19
|
+
build_output = invoke_build(mission_pool)
|
20
|
+
|
21
|
+
command.env = "test" #FIXME
|
22
|
+
command.options = (command.options || {}).merge("tag" => build_output[:tag])
|
23
|
+
JamesBond::MissionKubernetes::TestHandler.new(command, config_file).run
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def invoke_build(mission_pool)
|
29
|
+
build = JamesBond::Core::Command.new( argv: ["build"], env: "dev")
|
30
|
+
build_mission = mission_pool.decide_mission(build)
|
31
|
+
build_mission.run_command(command: build, mission_pool: mission_pool)
|
32
|
+
end
|
33
|
+
|
34
|
+
def config_file
|
35
|
+
@config_file ||= JamesBond::MissionKubernetes::Config.new(yaml_path: CONFIGURATION_FILE_PATH)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require "james_bond/core/mission"
|
2
|
+
require "james_bond/kubernetes_build_mission"
|
3
|
+
require "james_bond/kubernetes_test_mission"
|
4
|
+
require "james_bond/kubernetes_server_mission"
|
5
|
+
require "james_bond/kubernetes_deploy_mission"
|
6
|
+
|
7
|
+
module JamesBond
|
8
|
+
class MissionKubernetes
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "open3"
|
2
|
+
require "json"
|
3
|
+
|
4
|
+
module JamesBond
|
5
|
+
class MissionKubernetes
|
6
|
+
class BuildHandler
|
7
|
+
attr_accessor :config
|
8
|
+
|
9
|
+
def initialize(command, config)
|
10
|
+
@command = command
|
11
|
+
@config = config.for(env: command.env, command: command.main_command)
|
12
|
+
end
|
13
|
+
|
14
|
+
def run
|
15
|
+
target = "#{config["image_name"]}:#{tag}"
|
16
|
+
command = "docker build -t #{target} ."
|
17
|
+
|
18
|
+
Open3.popen3(command) do |stdin, stdout, stderr, thread|
|
19
|
+
Thread.new do
|
20
|
+
until (line = stdout.gets).nil? do
|
21
|
+
puts line
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
thread.join
|
26
|
+
end
|
27
|
+
|
28
|
+
{ tag: tag }
|
29
|
+
end
|
30
|
+
|
31
|
+
def tag
|
32
|
+
options = @command.options
|
33
|
+
time_tag = "devel-#{Time.now.to_i}"
|
34
|
+
@tag ||= if options && options[:tag]
|
35
|
+
options[:tag]
|
36
|
+
else
|
37
|
+
time_tag
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require "yaml"
|
2
|
+
|
3
|
+
module JamesBond
|
4
|
+
class MissionKubernetes
|
5
|
+
class Config
|
6
|
+
attr_accessor :yaml_path,
|
7
|
+
:raw_hash
|
8
|
+
|
9
|
+
def initialize(yaml_path:)
|
10
|
+
@yaml_path = yaml_path
|
11
|
+
extract_config_from_yaml(@yaml_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
def for(env:,command:)
|
16
|
+
env_config = @raw_hash[env]
|
17
|
+
raise "No config for '#{env}' environment" if !env_config
|
18
|
+
|
19
|
+
commands = env_config.fetch("commands", proc { raise_error(command, env)} )
|
20
|
+
commands.fetch(command, proc { raise_error(command, env) })
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def raise_error(command, env)
|
26
|
+
raise "No config for '#{command}' command in '#{env}' environment"
|
27
|
+
end
|
28
|
+
|
29
|
+
def extract_config_from_yaml(yaml_path)
|
30
|
+
@raw_hash = YAML.load(File.read(yaml_path)).freeze
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require "open3"
|
2
|
+
require "json"
|
3
|
+
|
4
|
+
module JamesBond
|
5
|
+
class MissionKubernetes
|
6
|
+
class PatchDeployHandler
|
7
|
+
attr_accessor :config
|
8
|
+
|
9
|
+
def initialize(command, config)
|
10
|
+
@command = command
|
11
|
+
@config = config.for(
|
12
|
+
env: command.options[:environment],
|
13
|
+
command: command.main_command
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
def run
|
18
|
+
command = [
|
19
|
+
"kubectl",
|
20
|
+
"patch",
|
21
|
+
"deployment #{app_name}",
|
22
|
+
"-p '#{JSON.dump(spec)}'",
|
23
|
+
]
|
24
|
+
|
25
|
+
command = switch_environment(command).join(' ')
|
26
|
+
puts command
|
27
|
+
|
28
|
+
Open3.popen3(command) do |stdin, stdout, stderr, thread|
|
29
|
+
Thread.new do
|
30
|
+
until (line = stdout.gets).nil? do
|
31
|
+
puts line
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
Thread.new do
|
36
|
+
until (line = stderr.gets).nil? do
|
37
|
+
puts line
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
thread.join
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def switch_environment(patch_command)
|
48
|
+
if @command.options[:environment] == 'production'
|
49
|
+
patch_command << ["--kubeconfig=#{kubeconfig}"]
|
50
|
+
else
|
51
|
+
patch_command
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def kubeconfig
|
56
|
+
File.join(Dir.pwd, @config["kubeconfig_path"])
|
57
|
+
end
|
58
|
+
|
59
|
+
def app_name
|
60
|
+
@config["app_name"]
|
61
|
+
end
|
62
|
+
|
63
|
+
def image_name
|
64
|
+
@config["image_name"]
|
65
|
+
end
|
66
|
+
|
67
|
+
def target
|
68
|
+
"#{image_name}:#{@command.options[:tag]}"
|
69
|
+
end
|
70
|
+
|
71
|
+
def spec
|
72
|
+
{
|
73
|
+
spec: {
|
74
|
+
template: {
|
75
|
+
spec: {
|
76
|
+
containers: [ { name: app_name, image: target } ]
|
77
|
+
}
|
78
|
+
}
|
79
|
+
}
|
80
|
+
}
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "open3"
|
2
|
+
require "json"
|
3
|
+
|
4
|
+
module JamesBond
|
5
|
+
class MissionKubernetes
|
6
|
+
class ServerHandler
|
7
|
+
attr_accessor :config
|
8
|
+
|
9
|
+
def initialize(command, config)
|
10
|
+
@command = command
|
11
|
+
@config = config.for(env: command.env, command: command.main_command)
|
12
|
+
end
|
13
|
+
|
14
|
+
def run
|
15
|
+
tag = @command.options["tag"]
|
16
|
+
app_name = @config["app_name"]
|
17
|
+
image = @config["image_name"]
|
18
|
+
deploy = "#{app_name}-#{Time.now.to_i}"
|
19
|
+
|
20
|
+
command = [
|
21
|
+
"kubectl run #{deploy}",
|
22
|
+
"--image=#{image}:#{tag}",
|
23
|
+
"--restart=Never",
|
24
|
+
"--attach --rm"
|
25
|
+
].join(" ")
|
26
|
+
|
27
|
+
Open3.popen3(command) do |stdin, stdout, stderr, thread|
|
28
|
+
Thread.new do
|
29
|
+
until (line = stdout.gets).nil? do
|
30
|
+
puts line
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
thread.join
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require "open3"
|
2
|
+
require "json"
|
3
|
+
|
4
|
+
module JamesBond
|
5
|
+
class MissionKubernetes
|
6
|
+
class TestHandler
|
7
|
+
attr_accessor :config
|
8
|
+
|
9
|
+
def initialize(command, config)
|
10
|
+
@command = command
|
11
|
+
@config = config.for(env: command.env, command: command.main_command)
|
12
|
+
end
|
13
|
+
|
14
|
+
def run
|
15
|
+
tag = @command.options["tag"]
|
16
|
+
app_name = @config["app_name"]
|
17
|
+
test_command = @config["command"]
|
18
|
+
image = @config["image_name"]
|
19
|
+
deploy = "#{app_name}-#{Time.now.to_i}"
|
20
|
+
|
21
|
+
command = [
|
22
|
+
"kubectl run #{deploy}",
|
23
|
+
"--image=#{image}:#{tag}",
|
24
|
+
"--restart=Never",
|
25
|
+
"--command --attach --rm",
|
26
|
+
"-- #{test_command}",
|
27
|
+
].join(" ")
|
28
|
+
|
29
|
+
Open3.popen3(command) do |stdin, stdout, stderr, thread|
|
30
|
+
Thread.new do
|
31
|
+
until (line = stdout.gets).nil? do
|
32
|
+
puts line
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Thread.new do
|
37
|
+
until (line = stderr.gets).nil? do
|
38
|
+
puts line
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
thread.join
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: james_bond-mission_kubernetes
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Airton Sobral
|
8
|
+
- Guilherme Cavalcanti
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2016-09-01 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: james_bond-core
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - '='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 0.2.0
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - '='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 0.2.0
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rspec
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - '='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 3.4.0
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - '='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 3.4.0
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: byebug
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - '='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 9.0.5
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 9.0.5
|
56
|
+
description: Fully kubernetes automation
|
57
|
+
email:
|
58
|
+
- airtonsobral@gmail.com
|
59
|
+
- guiocavalcanti@gmail.com
|
60
|
+
executables: []
|
61
|
+
extensions: []
|
62
|
+
extra_rdoc_files:
|
63
|
+
- README.md
|
64
|
+
files:
|
65
|
+
- README.md
|
66
|
+
- lib/james_bond.rb
|
67
|
+
- lib/james_bond/kubernetes_build_mission.rb
|
68
|
+
- lib/james_bond/kubernetes_deploy_mission.rb
|
69
|
+
- lib/james_bond/kubernetes_server_mission.rb
|
70
|
+
- lib/james_bond/kubernetes_test_mission.rb
|
71
|
+
- lib/james_bond/mission_kubernetes.rb
|
72
|
+
- lib/james_bond/mission_kubernetes/build_handler.rb
|
73
|
+
- lib/james_bond/mission_kubernetes/config.rb
|
74
|
+
- lib/james_bond/mission_kubernetes/patch_deploy_handler.rb
|
75
|
+
- lib/james_bond/mission_kubernetes/server_handler.rb
|
76
|
+
- lib/james_bond/mission_kubernetes/test_handler.rb
|
77
|
+
homepage: http://rubygemgem.org/gems/james_bond-mission_kubernetes
|
78
|
+
licenses:
|
79
|
+
- MIT
|
80
|
+
metadata: {}
|
81
|
+
post_install_message:
|
82
|
+
rdoc_options: []
|
83
|
+
require_paths:
|
84
|
+
- lib
|
85
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.1'
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
requirements: []
|
96
|
+
rubyforge_project:
|
97
|
+
rubygems_version: 2.4.8
|
98
|
+
signing_key:
|
99
|
+
specification_version: 4
|
100
|
+
summary: One kube to rule them all!
|
101
|
+
test_files: []
|