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,50 @@
1
+
2
+ module Porkadot; module Cmd; module Install; module Bootstrap
3
+ class Cli < Porkadot::SubCommandBase
4
+ include Porkadot::Utils
5
+
6
+ def initialize(*arg)
7
+ super
8
+ end
9
+
10
+ default_task :all
11
+ desc "all", "Install all bootstrap components"
12
+ def all
13
+ invoke :node
14
+ invoke :kubernetes
15
+ invoke :cleanup
16
+ end
17
+
18
+ desc "node", "Install bootstrap node"
19
+ def node
20
+ logger.info "Installing bootstrap node"
21
+ bootstrap = Porkadot::Install::Bootstrap.new(self.config)
22
+ kubelets = Porkadot::Install::KubeletList.new(self.config)
23
+ kubelets.install hosts: [bootstrap.host]
24
+ bootstrap.install
25
+ ""
26
+ end
27
+
28
+ desc "kubernetes", "Install bootstrap kubernetes"
29
+ def kubernetes
30
+ logger.info "Installing bootstrap kubernetes"
31
+ bootstrap = Porkadot::Install::Bootstrap.new(self.config)
32
+ k8s = Porkadot::Install::Kubernetes.new(self.config)
33
+ k8s.install(bootstrap.host)
34
+ ""
35
+ end
36
+
37
+ desc "cleanup", "Cleanup bootstrap node"
38
+ def cleanup
39
+ logger.info "Cleanup bootstrap node"
40
+ bootstrap = Porkadot::Install::Bootstrap.new(self.config)
41
+ bootstrap.cleanup
42
+ ""
43
+ end
44
+
45
+ def self.subcommand_prefix
46
+ 'install bootstrap'
47
+ end
48
+ end
49
+
50
+ end; end; end; end
@@ -0,0 +1,36 @@
1
+
2
+ module Porkadot; module Cmd; module Install
3
+ class Cli < Porkadot::SubCommandBase
4
+ include Porkadot::Utils
5
+
6
+ default_task :all
7
+ desc "all", "Install Kubernetes cluster"
8
+ def all
9
+ invoke :kubelet, [], options
10
+ invoke :bootstrap, [], options
11
+ end
12
+
13
+ desc "kubelet", "Install kubelet to nodes"
14
+ option :node, type: :string
15
+ option :force, type: :boolean, default: false
16
+ def kubelet
17
+ logger.info "Installing kubelet"
18
+ kubelets = Porkadot::Install::KubeletList.new(self.config)
19
+ nodes = []
20
+ if node = options[:node]
21
+ nodes = kubelets[node]
22
+ else
23
+ nodes = kubelets.kubelets.values
24
+ end
25
+ kubelets.install hosts: nodes, force: options[:force]
26
+ ""
27
+ end
28
+
29
+ desc "bootstrap", "Install bootstrap components"
30
+ subcommand "bootstrap", Porkadot::Cmd::Install::Bootstrap::Cli
31
+
32
+ def self.subcommand_prefix
33
+ 'install'
34
+ end
35
+ end
36
+ end; end; end
@@ -0,0 +1,68 @@
1
+ require 'forwardable'
2
+
3
+ module Porkadot; module Cmd; module Render; module Certs
4
+ class Cli < Porkadot::SubCommandBase
5
+ include Porkadot::Utils
6
+
7
+ def initialize(*arg)
8
+ super
9
+ end
10
+
11
+ default_task :all
12
+ desc "all", "Render all certificates to deploy Kubernetes cluster"
13
+ def all
14
+ invoke :etcd
15
+ invoke :kubernetes
16
+ end
17
+
18
+ desc 'etcd', "Render certificates to deploy Etcd"
19
+ def etcd
20
+ logger.info "Generating etcd certificates"
21
+ certs = Porkadot::Assets::Certs.new(config).etcd
22
+ logger.info "--> CA key and certs"
23
+ certs.ca_key
24
+ certs.ca_cert(true)
25
+ logger.info "--> Client key and certs"
26
+ certs.client_key
27
+ certs.client_cert(true)
28
+ ''
29
+ end
30
+
31
+ desc 'kubernetes', "Render certificates to deploy Kubernetes"
32
+ def kubernetes
33
+ logger.info "Generating kubernetes certificates"
34
+ certs = Porkadot::Assets::Certs.new(config).kubernetes
35
+ logger.info "--> CA key and certs"
36
+ certs.ca_key
37
+ certs.ca_cert(true)
38
+ logger.info "--> API server key and certs"
39
+ certs.apiserver_key
40
+ certs.apiserver_cert(true)
41
+ logger.info "--> Kubelet client key and certs"
42
+ certs.kubelet_client_key
43
+ certs.kubelet_client_cert
44
+ # logger.info "--> Bootstrap client key and certs"
45
+ # bootstrap_client_key = self.private_key(self.assets.k8s_bootstrap_key_path)
46
+ # self.client_cert(self.assets.k8s_bootstrap_cert_path, '/O=porkadot:node-bootstrappers/CN=node-bootstrapper', bootstrap_client_key, ca_cert, ca_key)
47
+ logger.info "--> Admin client key and certs"
48
+ certs.client_key
49
+ certs.client_cert(true)
50
+ logger.info "--> Private key for signing service account tokens"
51
+ certs.sa_private_key
52
+ certs.sa_public_key
53
+
54
+ front_proxy_certs = Porkadot::Assets::Certs.new(config).front_proxy
55
+ logger.info "--> Front-proxy CA key and certs"
56
+ front_proxy_certs.ca_key
57
+ front_proxy_certs.ca_cert(true)
58
+ logger.info "--> Front-proxy client key and certs"
59
+ front_proxy_certs.client_key
60
+ front_proxy_certs.client_cert(true)
61
+ ''
62
+ end
63
+
64
+ def self.subcommand_prefix
65
+ 'render certs'
66
+ end
67
+ end
68
+ end; end; end; end
@@ -0,0 +1,67 @@
1
+
2
+ module Porkadot; module Cmd; module Render
3
+ class Cli < Porkadot::SubCommandBase
4
+ include Porkadot::Utils
5
+
6
+ default_task :all
7
+ desc "all", "Render all assets to deploy Kubernetes cluster"
8
+ def all
9
+ invoke "porkadot:cmd:render:certs:cli:all", [], options
10
+ invoke :kubelet, [], options
11
+ invoke :etcd, [], options
12
+ invoke :bootstrap, [], options
13
+ invoke :kubernetes, [], options
14
+ end
15
+
16
+ desc "certs", "Render certificates to deploy Kubernetes"
17
+ subcommand "certs", Porkadot::Cmd::Render::Certs::Cli
18
+
19
+ desc "kubelet", "Render kubelet related files"
20
+ option :node, type: :string
21
+ def kubelet
22
+ logger.info "Generating kubelet related files"
23
+ kubelets = Porkadot::Assets::KubeletList.new(self.config)
24
+ if node = options[:node]
25
+ kubelets[node].render
26
+ else
27
+ kubelets.render
28
+ end
29
+ ""
30
+ end
31
+
32
+ desc "etcd", "Render etcd related files"
33
+ option :node, type: :string
34
+ def etcd
35
+ logger.info "Generating etcd related files"
36
+ etcds = Porkadot::Assets::EtcdList.new(self.config)
37
+ if node = options[:node]
38
+ etcds[node].render
39
+ else
40
+ etcds.render
41
+ end
42
+ ""
43
+ end
44
+
45
+ desc "bootstrap", "Render bootstrap related files"
46
+ def bootstrap
47
+ logger.info "Generating bootstrap related files"
48
+ bootstrap = Porkadot::Assets::Bootstrap.new(self.config)
49
+ kubelet = Porkadot::Assets::Kubelet.new(self.config.bootstrap.kubelet_config)
50
+ kubelet.render
51
+ bootstrap.render
52
+ ""
53
+ end
54
+
55
+ desc "kubernetes", "Render kubernetes manifests"
56
+ def kubernetes
57
+ logger.info "Generating kubernetes manifests"
58
+ k8s = Porkadot::Assets::Kubernetes.new(self.config)
59
+ k8s.render
60
+ ""
61
+ end
62
+
63
+ def self.subcommand_prefix
64
+ 'render'
65
+ end
66
+ end
67
+ end; end; end
@@ -0,0 +1,4 @@
1
+ module Porkadot::Cmd
2
+ end
3
+
4
+ require 'porkadot/cmd/cli'
@@ -0,0 +1,115 @@
1
+ require 'yaml'
2
+ require 'hashie'
3
+ require 'logger'
4
+
5
+ module Porkadot
6
+ class Raw < ::Hashie::Mash
7
+ disable_warnings :keys, :min
8
+ end
9
+
10
+ class Config
11
+ attr_reader :raw
12
+ attr_reader :logger
13
+
14
+ def initialize path
15
+ default_config = {}
16
+ open(File.expand_path(File.join(Porkadot::ROOT, 'porkadot', 'default.yaml'))) do |io|
17
+ default_config = YAML::load(io)
18
+ end
19
+ open(File.expand_path(path)) do |io|
20
+ @raw = ::Porkadot::Raw.new(default_config.rmerge(YAML.load(io)))
21
+ end
22
+ @logger = Logger.new(STDOUT)
23
+ end
24
+
25
+ def certs
26
+ @certs ||= Porkadot::Configs::Certs.new(self)
27
+ return @certs
28
+ end
29
+
30
+ def connection
31
+ self.raw.connection
32
+ end
33
+
34
+ def lb
35
+ @lb ||= Porkadot::Configs::Lb.new(self)
36
+ return @lb
37
+ end
38
+
39
+ def cni
40
+ @cni ||= Porkadot::Configs::Cni.new(self)
41
+ return @cni
42
+ end
43
+
44
+ def bootstrap
45
+ @bootstrap ||= Porkadot::Configs::Bootstrap.new(self)
46
+ return @bootstrap
47
+ end
48
+
49
+ def kubernetes
50
+ @kubernetes ||= Porkadot::Configs::Kubernetes.new(self)
51
+ return @kubernetes
52
+ end
53
+ alias k8s kubernetes
54
+
55
+ def etcd
56
+ @etcd ||= Porkadot::Configs::Etcd.new(self)
57
+ return @etcd
58
+ end
59
+
60
+ def nodes
61
+ @nodes ||= {}.tap do |nodes|
62
+ self.raw.nodes.each do |k, v|
63
+ nodes[k] = Porkadot::Configs::Kubelet.new(self, k, v)
64
+ end
65
+ end
66
+ return @nodes
67
+ end
68
+
69
+ def etcd_nodes
70
+ @etcd_nodes ||= {}.tap do |nodes|
71
+ self.raw.nodes.each do |k, v|
72
+ if v && v.labels && v.labels.to_hash.keys.include?(Porkadot::ETCD_MEMBER_LABEL)
73
+ nodes[k] = Porkadot::Configs::EtcdNode.new(self, k, v)
74
+ end
75
+ end
76
+ end
77
+ return @etcd_nodes
78
+ end
79
+
80
+ def assets_dir
81
+ File.expand_path(raw.local.assets_dir)
82
+ end
83
+
84
+ end
85
+
86
+ module ConfigUtils
87
+
88
+ def config
89
+ return @config
90
+ end
91
+
92
+ def logger
93
+ return @config.logger
94
+ end
95
+
96
+ def raw
97
+ return @raw
98
+ end
99
+
100
+ def asset_path file
101
+ File.join(self.target_path, file.to_s)
102
+ end
103
+ alias path asset_path
104
+
105
+ def method_missing name, *args
106
+ return nil if self.raw.nil?
107
+ self.raw[name]
108
+ end
109
+
110
+ def respond_to_missing? sym, include_private
111
+ return false if self.raw.nil?
112
+ self.raw.respond_to_missing?(sym, include_private) ? true : super
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,67 @@
1
+
2
+ module Porkadot; module Configs
3
+ class Bootstrap
4
+ class Kubelet < Porkadot::Configs::Kubelet
5
+ attr_reader :bootstrap_config
6
+ def initialize bootstrap_config
7
+ @bootstrap_config = bootstrap_config
8
+ # TODO: specify default node
9
+ super bootstrap_config.config, 'bootstrap', bootstrap_config.raw.node
10
+ end
11
+
12
+ def control_plane_endpoint
13
+ "127.0.0.1:#{bootstrap_config.config.k8s.apiserver.bind_port}"
14
+ end
15
+
16
+ def target_path
17
+ File.join(bootstrap_config.target_path, 'kubelet')
18
+ end
19
+ end
20
+
21
+ include Porkadot::ConfigUtils
22
+ attr_reader :kubelet_config
23
+
24
+ def initialize config
25
+ @config = config
26
+ @raw = config.raw.bootstrap
27
+ @kubelet_config = Kubelet.new(self)
28
+ end
29
+
30
+ def target_path
31
+ File.join(self.config.assets_dir, 'bootstrap')
32
+ end
33
+
34
+ def bootstrap_path
35
+ File.join(self.target_path, 'bootstrap')
36
+ end
37
+
38
+ def secrets_path
39
+ File.join(self.bootstrap_path, 'secrets')
40
+ end
41
+
42
+ def kubeconfig_path
43
+ File.join(self.bootstrap_path, 'kubeconfig-bootstrap.yaml')
44
+ end
45
+
46
+ def manifests_path
47
+ File.join(self.target_path, 'manifests')
48
+ end
49
+
50
+ def apiserver_path
51
+ File.join(self.manifests_path, 'kube-apiserver.bootstrap.yaml')
52
+ end
53
+
54
+ def controller_manager_path
55
+ File.join(self.manifests_path, 'kube-controller-manager.bootstrap.yaml')
56
+ end
57
+
58
+ def scheduler_path
59
+ File.join(self.manifests_path, 'kube-scheduler.bootstrap.yaml')
60
+ end
61
+
62
+ def install_sh_path
63
+ File.join(self.target_path, 'install.sh')
64
+ end
65
+ end
66
+
67
+ end; end
@@ -0,0 +1,33 @@
1
+
2
+ module Porkadot; module Configs; class Certs
3
+ class Etcd
4
+ include Porkadot::Configs::CertsUtils
5
+ attr_reader :config
6
+ attr_reader :logger
7
+
8
+ def initialize config
9
+ @config = config
10
+ @logger = config.logger
11
+ end
12
+
13
+ def target_dir
14
+ File.join(self.certs_root_dir, 'etcd')
15
+ end
16
+
17
+ def ca_key_path
18
+ File.join(self.target_dir, 'ca.key')
19
+ end
20
+
21
+ def ca_cert_path
22
+ File.join(self.target_dir, 'ca.crt')
23
+ end
24
+
25
+ def client_key_path
26
+ File.join(self.target_dir, 'etcd-client.key')
27
+ end
28
+
29
+ def client_cert_path
30
+ File.join(self.target_dir, 'etcd-client.crt')
31
+ end
32
+ end
33
+ end; end; end
@@ -0,0 +1,33 @@
1
+
2
+ module Porkadot; module Configs; class Certs
3
+ class FrontProxy
4
+ include Porkadot::Configs::CertsUtils
5
+ attr_reader :config
6
+ attr_reader :logger
7
+
8
+ def initialize config
9
+ @config = config
10
+ @logger = config.logger
11
+ end
12
+
13
+ def target_dir
14
+ File.join(self.certs_root_dir, 'kubernetes')
15
+ end
16
+
17
+ def ca_key_path
18
+ File.join(self.target_dir, 'front-proxy-ca.key')
19
+ end
20
+
21
+ def ca_cert_path
22
+ File.join(self.target_dir, 'front-proxy-ca.crt')
23
+ end
24
+
25
+ def client_key_path
26
+ File.join(self.target_dir, 'front-proxy-client.key')
27
+ end
28
+
29
+ def client_cert_path
30
+ File.join(self.target_dir, 'front-proxy-client.crt')
31
+ end
32
+ end
33
+ end; end; end
@@ -0,0 +1,89 @@
1
+
2
+ module Porkadot; module Configs; class Certs
3
+ class Kubernetes
4
+ include Porkadot::Configs::CertsUtils
5
+ attr_reader :config
6
+ attr_reader :logger
7
+
8
+ def initialize config
9
+ @config = config
10
+ @logger = config.logger
11
+ end
12
+
13
+ def additional_sans
14
+ dns_names = []
15
+ ips = []
16
+ if self.config.k8s.control_plane_endpoint
17
+ host = self.config.k8s.control_plane_endpoint.split(':')[0]
18
+ self.ipaddr?(host) ? ips << host : dns_names << host
19
+ end
20
+ self.config.nodes.each do |_, node|
21
+ k = node.name
22
+ v = node
23
+ next unless v.labels && v.labels.include?(Porkadot::K8S_MASTER_LABEL)
24
+ self.ipaddr?(k) ? ips << k : dns_names << k
25
+ if v.hostname
26
+ self.ipaddr?(v.hostname) ? ips << v.hostname : dns_names << v.hostname
27
+ end
28
+ end
29
+
30
+ sans = dns_names.map {|v| "DNS:#{v}"} + ips.map {|v| "IP:#{v}"}
31
+ default_sans = %W(
32
+ DNS:kubernetes
33
+ DNS:kubernetes.default
34
+ DNS:kubernetes.default.svc
35
+ DNS:kubernetes.default.svc.#{self.config.k8s.networking.dns_domain}
36
+ DNS:localhost
37
+ IP:#{self.config.k8s.networking.kubernetes_ip}
38
+ IP:127.0.0.1
39
+ )
40
+ return default_sans + sans.uniq
41
+ end
42
+
43
+ def target_dir
44
+ File.join(self.certs_root_dir, 'kubernetes')
45
+ end
46
+
47
+ def ca_key_path
48
+ File.join(self.target_dir, 'ca.key')
49
+ end
50
+
51
+ def ca_cert_path
52
+ File.join(self.target_dir, 'ca.crt')
53
+ end
54
+
55
+ def apiserver_key_path
56
+ File.join(self.target_dir, 'apiserver.key')
57
+ end
58
+
59
+ def apiserver_cert_path
60
+ File.join(self.target_dir, 'apiserver.crt')
61
+ end
62
+
63
+ def kubelet_client_key_path
64
+ File.join(self.target_dir, 'kubelet-client.key')
65
+ end
66
+
67
+ def kubelet_client_cert_path
68
+ File.join(self.target_dir, 'kubelet-client.crt')
69
+ end
70
+
71
+ def admin_key_path
72
+ File.join(self.target_dir, 'admin.key')
73
+ end
74
+ alias_method :client_key_path, :admin_key_path
75
+
76
+ def admin_cert_path
77
+ File.join(self.target_dir, 'admin.crt')
78
+ end
79
+ alias_method :client_cert_path, :admin_cert_path
80
+
81
+ def sa_private_key_path
82
+ File.join(self.target_dir, 'sa.key')
83
+ end
84
+
85
+ def sa_public_key_path
86
+ File.join(self.target_dir, 'sa.pub')
87
+ end
88
+ end
89
+ end; end; end
@@ -0,0 +1,50 @@
1
+ require 'ipaddr'
2
+
3
+ module Porkadot; module Configs
4
+
5
+ module CertsUtils
6
+
7
+ def certs_root_dir
8
+ File.join(self.config.assets_dir, 'certs')
9
+ end
10
+
11
+ def ipaddr?(addr)
12
+ IPAddr.new(addr)
13
+ return true
14
+ rescue IPAddr::InvalidAddressError
15
+ return false
16
+ end
17
+
18
+ end
19
+
20
+ class Certs
21
+ include CertsUtils
22
+ attr_reader :config
23
+ attr_reader :logger
24
+
25
+ def initialize config
26
+ @config = config
27
+ @logger = config.logger
28
+ end
29
+
30
+ def etcd
31
+ @etcd ||= ::Porkadot::Configs::Certs::Etcd.new(config)
32
+ return @etcd
33
+ end
34
+
35
+ def kubernetes
36
+ @kubernetes ||= ::Porkadot::Configs::Certs::Kubernetes.new(config)
37
+ return @kubernetes
38
+ end
39
+
40
+ def front_proxy
41
+ @front_proxy ||= ::Porkadot::Configs::Certs::FrontProxy.new(config)
42
+ return @front_proxy
43
+ end
44
+ end
45
+
46
+ end; end
47
+
48
+ require 'porkadot/configs/certs/etcd'
49
+ require 'porkadot/configs/certs/k8s'
50
+ require 'porkadot/configs/certs/front_proxy'
@@ -0,0 +1,22 @@
1
+
2
+ module Porkadot; module Configs
3
+ class Cni
4
+ include Porkadot::ConfigUtils
5
+ attr_reader :type
6
+
7
+ def initialize config
8
+ @config = config
9
+ @type = config.raw.cni.type
10
+ @raw = config.raw.cni.send(config.raw.cni.type.to_sym)
11
+ end
12
+
13
+ def target_path
14
+ File.join(self.config.assets_dir, 'kubernetes')
15
+ end
16
+
17
+ def manifests_path
18
+ File.join(self.target_path, 'manifests')
19
+ end
20
+
21
+ end
22
+ end; end