porkadot 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.
Files changed (77) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +4 -0
  5. data/README.md +35 -0
  6. data/Rakefile +10 -0
  7. data/Vagrantfile +63 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +8 -0
  10. data/config/porkadot.yaml +25 -0
  11. data/config/unstable.yaml +49 -0
  12. data/exe/porkadot +5 -0
  13. data/lib/porkadot/assets/bootstrap/bootstrap/kube-proxy-bootstrap.yaml.erb +1 -0
  14. data/lib/porkadot/assets/bootstrap/bootstrap/kubeconfig-bootstrap.yaml.erb +18 -0
  15. data/lib/porkadot/assets/bootstrap/cleanup.sh.erb +12 -0
  16. data/lib/porkadot/assets/bootstrap/install.sh.erb +14 -0
  17. data/lib/porkadot/assets/bootstrap/manifests/kube-apiserver.bootstrap.yaml.erb +91 -0
  18. data/lib/porkadot/assets/bootstrap/manifests/kube-controller-manager.bootstrap.yaml.erb +69 -0
  19. data/lib/porkadot/assets/bootstrap/manifests/kube-proxy.bootstrap.yaml.erb +56 -0
  20. data/lib/porkadot/assets/bootstrap/manifests/kube-scheduler.bootstrap.yaml.erb +31 -0
  21. data/lib/porkadot/assets/bootstrap.rb +52 -0
  22. data/lib/porkadot/assets/certs/etcd.rb +21 -0
  23. data/lib/porkadot/assets/certs/front_proxy.rb +21 -0
  24. data/lib/porkadot/assets/certs/k8s.rb +90 -0
  25. data/lib/porkadot/assets/certs.rb +175 -0
  26. data/lib/porkadot/assets/etcd/etcd-server.yaml.erb +57 -0
  27. data/lib/porkadot/assets/etcd/install.sh.erb +12 -0
  28. data/lib/porkadot/assets/etcd.rb +109 -0
  29. data/lib/porkadot/assets/kubelet/bootstrap-kubelet.conf.erb +21 -0
  30. data/lib/porkadot/assets/kubelet/config.yaml.erb +36 -0
  31. data/lib/porkadot/assets/kubelet/install-deps.sh.erb +21 -0
  32. data/lib/porkadot/assets/kubelet/install-pkgs.sh.erb +33 -0
  33. data/lib/porkadot/assets/kubelet/install.sh.erb +35 -0
  34. data/lib/porkadot/assets/kubelet/kubelet.service.erb +22 -0
  35. data/lib/porkadot/assets/kubelet.rb +102 -0
  36. data/lib/porkadot/assets/kubernetes/install.sh.erb +7 -0
  37. data/lib/porkadot/assets/kubernetes/manifests/flannel.yaml.erb +602 -0
  38. data/lib/porkadot/assets/kubernetes/manifests/kube-apiserver.yaml.erb +129 -0
  39. data/lib/porkadot/assets/kubernetes/manifests/kube-controller-manager.yaml.erb +173 -0
  40. data/lib/porkadot/assets/kubernetes/manifests/kube-proxy.yaml.erb +132 -0
  41. data/lib/porkadot/assets/kubernetes/manifests/kube-scheduler.yaml.erb +162 -0
  42. data/lib/porkadot/assets/kubernetes/manifests/kubelet-rubber-stamp.yaml.erb +86 -0
  43. data/lib/porkadot/assets/kubernetes/manifests/kubelet.yaml.erb +40 -0
  44. data/lib/porkadot/assets/kubernetes/manifests/metallb.yaml.erb +323 -0
  45. data/lib/porkadot/assets/kubernetes/manifests/pod-checkpointer.yaml.erb +130 -0
  46. data/lib/porkadot/assets/kubernetes/manifests/porkadot.yaml.erb +69 -0
  47. data/lib/porkadot/assets/kubernetes.rb +39 -0
  48. data/lib/porkadot/assets.rb +24 -0
  49. data/lib/porkadot/cmd/cli.rb +45 -0
  50. data/lib/porkadot/cmd/install/bootstrap.rb +50 -0
  51. data/lib/porkadot/cmd/install.rb +36 -0
  52. data/lib/porkadot/cmd/render/certs.rb +68 -0
  53. data/lib/porkadot/cmd/render.rb +67 -0
  54. data/lib/porkadot/cmd.rb +4 -0
  55. data/lib/porkadot/config.rb +115 -0
  56. data/lib/porkadot/configs/bootstrap.rb +67 -0
  57. data/lib/porkadot/configs/certs/etcd.rb +33 -0
  58. data/lib/porkadot/configs/certs/front_proxy.rb +33 -0
  59. data/lib/porkadot/configs/certs/k8s.rb +89 -0
  60. data/lib/porkadot/configs/certs.rb +50 -0
  61. data/lib/porkadot/configs/cni.rb +22 -0
  62. data/lib/porkadot/configs/etcd.rb +95 -0
  63. data/lib/porkadot/configs/kubelet.rb +61 -0
  64. data/lib/porkadot/configs/kubernetes.rb +223 -0
  65. data/lib/porkadot/configs/loadbalancer.rb +26 -0
  66. data/lib/porkadot/const.rb +8 -0
  67. data/lib/porkadot/default.yaml +123 -0
  68. data/lib/porkadot/install/base.rb +5 -0
  69. data/lib/porkadot/install/bootstrap.rb +76 -0
  70. data/lib/porkadot/install/kubelet.rb +63 -0
  71. data/lib/porkadot/install/kubernetes.rb +33 -0
  72. data/lib/porkadot/utils/hash_recursive_merge.rb +73 -0
  73. data/lib/porkadot/utils.rb +25 -0
  74. data/lib/porkadot/version.rb +3 -0
  75. data/lib/porkadot.rb +41 -0
  76. data/porkadot.gemspec +42 -0
  77. metadata +205 -0
@@ -0,0 +1,33 @@
1
+ module Porkadot; module Install
2
+ class Kubernetes
3
+ KUBE_TEMP = File.join(Porkadot::Install::KUBE_TEMP, 'kubernetes')
4
+ include SSHKit::DSL
5
+ attr_reader :global_config
6
+ attr_reader :config
7
+ attr_reader :logger
8
+
9
+ def initialize global_config
10
+ @global_config = global_config
11
+ @config = global_config.kubernetes
12
+ @logger = global_config.logger
13
+ end
14
+
15
+ def install host
16
+ # global_config = self.global_config
17
+ config = self.config
18
+ on(host) do |host|
19
+ execute(:mkdir, '-p', Porkadot::Install::KUBE_TEMP)
20
+ if test("[ -d #{KUBE_TEMP} ]")
21
+ execute(:rm, '-rf', KUBE_TEMP)
22
+ end
23
+ upload! config.target_path, KUBE_TEMP, recursive: true
24
+
25
+ as user: 'root' do
26
+ execute(:bash, File.join(KUBE_TEMP, 'install.sh'))
27
+ end
28
+ end
29
+ end
30
+
31
+ end
32
+
33
+ end; end
@@ -0,0 +1,73 @@
1
+ #
2
+ # = Hash Recursive Merge
3
+ #
4
+ # Merges a Ruby Hash recursively, Also known as deep merge.
5
+ # Recursive version of Hash#merge and Hash#merge!.
6
+ #
7
+ # Category:: Ruby
8
+ # Package:: Hash
9
+ # Author:: Simone Carletti <weppos@weppos.net>
10
+ # Copyright:: 2007-2008 The Authors
11
+ # License:: MIT License
12
+ # Link:: http://www.simonecarletti.com/
13
+ # Source:: http://gist.github.com/gists/6391/
14
+ #
15
+ module Porkadot::HashRecursiveMerge
16
+
17
+ #
18
+ # Recursive version of Hash#merge!
19
+ #
20
+ # Adds the contents of +other_hash+ to +hsh+,
21
+ # merging entries in +hsh+ with duplicate keys with those from +other_hash+.
22
+ #
23
+ # Compared with Hash#merge!, this method supports nested hashes.
24
+ # When both +hsh+ and +other_hash+ contains an entry with the same key,
25
+ # it merges and returns the values from both arrays.
26
+ #
27
+ # h1 = {"a" => 100, "b" => 200, "c" => {"c1" => 12, "c2" => 14}}
28
+ # h2 = {"b" => 254, "c" => {"c1" => 16, "c3" => 94}}
29
+ # h1.rmerge!(h2) #=> {"a" => 100, "b" => 254, "c" => {"c1" => 16, "c2" => 14, "c3" => 94}}
30
+ #
31
+ # Simply using Hash#merge! would return
32
+ #
33
+ # h1.merge!(h2) #=> {"a" => 100, "b" = >254, "c" => {"c1" => 16, "c3" => 94}}
34
+ #
35
+ def rmerge!(other_hash)
36
+ merge!(other_hash) do |key, oldval, newval|
37
+ oldval.class == self.class ? oldval.rmerge!(newval) : newval
38
+ end
39
+ end
40
+
41
+ #
42
+ # Recursive version of Hash#merge
43
+ #
44
+ # Compared with Hash#merge!, this method supports nested hashes.
45
+ # When both +hsh+ and +other_hash+ contains an entry with the same key,
46
+ # it merges and returns the values from both arrays.
47
+ #
48
+ # Compared with Hash#merge, this method provides a different approch
49
+ # for merging nasted hashes.
50
+ # If the value of a given key is an Hash and both +other_hash+ abd +hsh
51
+ # includes the same key, the value is merged instead replaced with
52
+ # +other_hash+ value.
53
+ #
54
+ # h1 = {"a" => 100, "b" => 200, "c" => {"c1" => 12, "c2" => 14}}
55
+ # h2 = {"b" => 254, "c" => {"c1" => 16, "c3" => 94}}
56
+ # h1.rmerge(h2) #=> {"a" => 100, "b" => 254, "c" => {"c1" => 16, "c2" => 14, "c3" => 94}}
57
+ #
58
+ # Simply using Hash#merge would return
59
+ #
60
+ # h1.merge(h2) #=> {"a" => 100, "b" = >254, "c" => {"c1" => 16, "c3" => 94}}
61
+ #
62
+ def rmerge(other_hash)
63
+ merge(other_hash) do |key, oldval, newval|
64
+ oldval.class == self.class ? oldval.rmerge(newval) : newval
65
+ end
66
+ end
67
+
68
+ end
69
+
70
+
71
+ class Hash
72
+ include Porkadot::HashRecursiveMerge
73
+ end
@@ -0,0 +1,25 @@
1
+ class Porkadot::SubCommandBase < Thor
2
+ def self.banner(command, namespace = nil, subcommand = false)
3
+ "#{basename} #{subcommand_prefix} #{command.usage}"
4
+ end
5
+
6
+ def self.subcommand_prefix
7
+ self.name.gsub(%r{.*::}, '').gsub(%r{^[A-Z]}) { |match| match[0].downcase }.gsub(%r{[A-Z]}) { |match| "-#{match[0].downcase}" }
8
+ end
9
+ end
10
+
11
+ module Porkadot::Utils
12
+ def config
13
+ unless defined?(@config)
14
+ opts = options.dup
15
+ opts = opts.merge(parent_options) if parent_options
16
+ @config = Porkadot::Config.new(options[:config])
17
+ end
18
+ @config
19
+ end
20
+
21
+ def logger
22
+ self.config.logger
23
+ end
24
+ end
25
+
@@ -0,0 +1,3 @@
1
+ module Porkadot
2
+ VERSION = "0.1.0"
3
+ end
data/lib/porkadot.rb ADDED
@@ -0,0 +1,41 @@
1
+ require 'thor'
2
+ require 'sshkit'
3
+
4
+ require "porkadot/version"
5
+
6
+ module Porkadot
7
+ class Error < StandardError; end
8
+ # Your code goes here...
9
+ end
10
+
11
+ require 'porkadot/const'
12
+ require 'porkadot/utils/hash_recursive_merge'
13
+ require 'porkadot/config'
14
+ require 'porkadot/assets'
15
+ require 'porkadot/utils'
16
+
17
+ require 'porkadot/configs/certs'
18
+ require 'porkadot/configs/kubelet'
19
+ require 'porkadot/configs/kubernetes'
20
+ require 'porkadot/configs/etcd'
21
+ require 'porkadot/configs/bootstrap'
22
+ require 'porkadot/configs/kubernetes'
23
+ require 'porkadot/configs/loadbalancer'
24
+ require 'porkadot/configs/cni'
25
+
26
+ require 'porkadot/assets/certs'
27
+ require 'porkadot/assets/kubelet'
28
+ require 'porkadot/assets/etcd'
29
+ require 'porkadot/assets/bootstrap'
30
+ require 'porkadot/assets/kubernetes'
31
+
32
+ require 'porkadot/install/base'
33
+ require 'porkadot/install/kubelet'
34
+ require 'porkadot/install/kubernetes'
35
+ require 'porkadot/install/bootstrap'
36
+
37
+ require 'porkadot/cmd/render/certs'
38
+ require 'porkadot/cmd/render'
39
+ require 'porkadot/cmd/install/bootstrap'
40
+ require 'porkadot/cmd/install'
41
+ require 'porkadot/cmd'
data/porkadot.gemspec ADDED
@@ -0,0 +1,42 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "porkadot/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "porkadot"
8
+ spec.version = Porkadot::VERSION
9
+ spec.authors = ["OTSUKA, Yuanying"]
10
+ spec.email = ["yuanying@fraction.jp"]
11
+
12
+ spec.summary = "Porkadot is a CLI tool to deploy Kubernetes cluster."
13
+ spec.description = "The kubernetes installer for those who want to install k8s in your home."
14
+ spec.homepage = "https://github.com/yuanying/porkadot"
15
+
16
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
18
+ if spec.respond_to?(:metadata)
19
+ spec.metadata["homepage_uri"] = spec.homepage
20
+ spec.metadata["source_code_uri"] = "https://github.com/yuanying/porkadot"
21
+ spec.metadata["changelog_uri"] = "https://github.com/yuanying/porkadot/master/CHANGELOG.md"
22
+ else
23
+ raise "RubyGems 2.0 or newer is required to protect against " \
24
+ "public gem pushes."
25
+ end
26
+
27
+ # Specify which files should be added to the gem when it is released.
28
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
29
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
30
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
31
+ end
32
+ spec.bindir = "exe"
33
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
34
+ spec.require_paths = ["lib"]
35
+
36
+ spec.add_dependency "thor", "~> 1.0"
37
+ spec.add_dependency "hashie", "~> 4.1"
38
+ spec.add_dependency "sshkit", "~> 1.20"
39
+ spec.add_development_dependency "bundler", "~> 2.0"
40
+ spec.add_development_dependency "rake", "~> 13.0"
41
+ spec.add_development_dependency "minitest", "~> 5.0"
42
+ end
metadata ADDED
@@ -0,0 +1,205 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: porkadot
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - OTSUKA, Yuanying
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-03-27 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: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: hashie
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sshkit
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.20'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.20'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '13.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '13.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '5.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '5.0'
97
+ description: The kubernetes installer for those who want to install k8s in your home.
98
+ email:
99
+ - yuanying@fraction.jp
100
+ executables:
101
+ - porkadot
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitignore"
106
+ - ".travis.yml"
107
+ - Gemfile
108
+ - README.md
109
+ - Rakefile
110
+ - Vagrantfile
111
+ - bin/console
112
+ - bin/setup
113
+ - config/porkadot.yaml
114
+ - config/unstable.yaml
115
+ - exe/porkadot
116
+ - lib/porkadot.rb
117
+ - lib/porkadot/assets.rb
118
+ - lib/porkadot/assets/bootstrap.rb
119
+ - lib/porkadot/assets/bootstrap/bootstrap/kube-proxy-bootstrap.yaml.erb
120
+ - lib/porkadot/assets/bootstrap/bootstrap/kubeconfig-bootstrap.yaml.erb
121
+ - lib/porkadot/assets/bootstrap/cleanup.sh.erb
122
+ - lib/porkadot/assets/bootstrap/install.sh.erb
123
+ - lib/porkadot/assets/bootstrap/manifests/kube-apiserver.bootstrap.yaml.erb
124
+ - lib/porkadot/assets/bootstrap/manifests/kube-controller-manager.bootstrap.yaml.erb
125
+ - lib/porkadot/assets/bootstrap/manifests/kube-proxy.bootstrap.yaml.erb
126
+ - lib/porkadot/assets/bootstrap/manifests/kube-scheduler.bootstrap.yaml.erb
127
+ - lib/porkadot/assets/certs.rb
128
+ - lib/porkadot/assets/certs/etcd.rb
129
+ - lib/porkadot/assets/certs/front_proxy.rb
130
+ - lib/porkadot/assets/certs/k8s.rb
131
+ - lib/porkadot/assets/etcd.rb
132
+ - lib/porkadot/assets/etcd/etcd-server.yaml.erb
133
+ - lib/porkadot/assets/etcd/install.sh.erb
134
+ - lib/porkadot/assets/kubelet.rb
135
+ - lib/porkadot/assets/kubelet/bootstrap-kubelet.conf.erb
136
+ - lib/porkadot/assets/kubelet/config.yaml.erb
137
+ - lib/porkadot/assets/kubelet/install-deps.sh.erb
138
+ - lib/porkadot/assets/kubelet/install-pkgs.sh.erb
139
+ - lib/porkadot/assets/kubelet/install.sh.erb
140
+ - lib/porkadot/assets/kubelet/kubelet.service.erb
141
+ - lib/porkadot/assets/kubernetes.rb
142
+ - lib/porkadot/assets/kubernetes/install.sh.erb
143
+ - lib/porkadot/assets/kubernetes/manifests/flannel.yaml.erb
144
+ - lib/porkadot/assets/kubernetes/manifests/kube-apiserver.yaml.erb
145
+ - lib/porkadot/assets/kubernetes/manifests/kube-controller-manager.yaml.erb
146
+ - lib/porkadot/assets/kubernetes/manifests/kube-proxy.yaml.erb
147
+ - lib/porkadot/assets/kubernetes/manifests/kube-scheduler.yaml.erb
148
+ - lib/porkadot/assets/kubernetes/manifests/kubelet-rubber-stamp.yaml.erb
149
+ - lib/porkadot/assets/kubernetes/manifests/kubelet.yaml.erb
150
+ - lib/porkadot/assets/kubernetes/manifests/metallb.yaml.erb
151
+ - lib/porkadot/assets/kubernetes/manifests/pod-checkpointer.yaml.erb
152
+ - lib/porkadot/assets/kubernetes/manifests/porkadot.yaml.erb
153
+ - lib/porkadot/cmd.rb
154
+ - lib/porkadot/cmd/cli.rb
155
+ - lib/porkadot/cmd/install.rb
156
+ - lib/porkadot/cmd/install/bootstrap.rb
157
+ - lib/porkadot/cmd/render.rb
158
+ - lib/porkadot/cmd/render/certs.rb
159
+ - lib/porkadot/config.rb
160
+ - lib/porkadot/configs/bootstrap.rb
161
+ - lib/porkadot/configs/certs.rb
162
+ - lib/porkadot/configs/certs/etcd.rb
163
+ - lib/porkadot/configs/certs/front_proxy.rb
164
+ - lib/porkadot/configs/certs/k8s.rb
165
+ - lib/porkadot/configs/cni.rb
166
+ - lib/porkadot/configs/etcd.rb
167
+ - lib/porkadot/configs/kubelet.rb
168
+ - lib/porkadot/configs/kubernetes.rb
169
+ - lib/porkadot/configs/loadbalancer.rb
170
+ - lib/porkadot/const.rb
171
+ - lib/porkadot/default.yaml
172
+ - lib/porkadot/install/base.rb
173
+ - lib/porkadot/install/bootstrap.rb
174
+ - lib/porkadot/install/kubelet.rb
175
+ - lib/porkadot/install/kubernetes.rb
176
+ - lib/porkadot/utils.rb
177
+ - lib/porkadot/utils/hash_recursive_merge.rb
178
+ - lib/porkadot/version.rb
179
+ - porkadot.gemspec
180
+ homepage: https://github.com/yuanying/porkadot
181
+ licenses: []
182
+ metadata:
183
+ homepage_uri: https://github.com/yuanying/porkadot
184
+ source_code_uri: https://github.com/yuanying/porkadot
185
+ changelog_uri: https://github.com/yuanying/porkadot/master/CHANGELOG.md
186
+ post_install_message:
187
+ rdoc_options: []
188
+ require_paths:
189
+ - lib
190
+ required_ruby_version: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ required_rubygems_version: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ requirements: []
201
+ rubygems_version: 3.1.2
202
+ signing_key:
203
+ specification_version: 4
204
+ summary: Porkadot is a CLI tool to deploy Kubernetes cluster.
205
+ test_files: []