dapp 0.11.0 → 0.12.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 +4 -4
- data/config/en/net_status.yml +36 -4
- data/lib/dapp.rb +84 -36
- data/lib/dapp/cli.rb +3 -2
- data/lib/dapp/cli/command/base.rb +69 -0
- data/lib/dapp/config/config.rb +17 -0
- data/lib/dapp/config/directive/base.rb +90 -3
- data/lib/dapp/dapp.rb +6 -14
- data/lib/dapp/dapp/dappfile.rb +20 -27
- data/lib/dapp/dapp/deps/base.rb +2 -2
- data/lib/dapp/dapp/lock.rb +1 -1
- data/lib/dapp/dapp/logging/base.rb +11 -7
- data/lib/dapp/dapp/logging/process.rb +4 -2
- data/lib/dapp/dapp/shellout/base.rb +2 -2
- data/lib/dapp/dapp/ssh_agent.rb +2 -2
- data/lib/dapp/deployment.rb +1 -0
- data/lib/dapp/deployment/app.rb +120 -0
- data/lib/dapp/deployment/cli/cli.rb +1 -0
- data/lib/dapp/deployment/cli/command/base.rb +14 -0
- data/lib/dapp/deployment/cli/command/deployment.rb +21 -0
- data/lib/dapp/deployment/cli/command/deployment/apply.rb +26 -0
- data/lib/dapp/deployment/cli/command/deployment/minikube_setup.rb +13 -0
- data/lib/dapp/deployment/cli/command/deployment/mrproper.rb +13 -0
- data/lib/dapp/deployment/cli/command/deployment/secret_generate.rb +13 -0
- data/lib/dapp/deployment/cli/command/deployment/secret_key_generate.rb +13 -0
- data/lib/dapp/deployment/config/config.rb +46 -0
- data/lib/dapp/deployment/config/directive/app.rb +28 -0
- data/lib/dapp/deployment/config/directive/app/instance_methods.rb +51 -0
- data/lib/dapp/deployment/config/directive/base.rb +13 -0
- data/lib/dapp/deployment/config/directive/deployment.rb +11 -0
- data/lib/dapp/deployment/config/directive/expose.rb +68 -0
- data/lib/dapp/deployment/config/directive/group.rb +27 -0
- data/lib/dapp/deployment/config/directive/job.rb +28 -0
- data/lib/dapp/deployment/config/directive/mod/group.rb +22 -0
- data/lib/dapp/deployment/config/directive/mod/jobs.rb +26 -0
- data/lib/dapp/deployment/config/directive/namespace.rb +26 -0
- data/lib/dapp/deployment/config/directive/namespace/instance_methods.rb +37 -0
- data/lib/dapp/deployment/core_ext/hash.rb +19 -0
- data/lib/dapp/deployment/dapp/command/apply.rb +83 -0
- data/lib/dapp/deployment/dapp/command/common.rb +17 -0
- data/lib/dapp/deployment/dapp/command/minikube_setup.rb +393 -0
- data/lib/dapp/deployment/dapp/command/mrproper.rb +12 -0
- data/lib/dapp/deployment/dapp/command/secret_generate.rb +17 -0
- data/lib/dapp/deployment/dapp/command/secret_key_generate.rb +13 -0
- data/lib/dapp/deployment/dapp/dapp.rb +18 -0
- data/lib/dapp/deployment/dapp/dappfile.rb +23 -0
- data/lib/dapp/deployment/deployment.rb +46 -0
- data/lib/dapp/deployment/error/app.rb +7 -0
- data/lib/dapp/deployment/error/base.rb +7 -0
- data/lib/dapp/deployment/error/command.rb +7 -0
- data/lib/dapp/deployment/error/config.rb +7 -0
- data/lib/dapp/deployment/error/deployment.rb +7 -0
- data/lib/dapp/deployment/error/kubernetes.rb +7 -0
- data/lib/dapp/deployment/kube_app.rb +277 -0
- data/lib/dapp/deployment/kube_base.rb +97 -0
- data/lib/dapp/deployment/kube_deployment.rb +51 -0
- data/lib/dapp/deployment/kubernetes.rb +174 -0
- data/lib/dapp/deployment/kubernetes/error.rb +20 -0
- data/lib/dapp/deployment/mod/jobs.rb +37 -0
- data/lib/dapp/deployment/mod/namespace.rb +58 -0
- data/lib/dapp/deployment/mod/system_environments.rb +30 -0
- data/lib/dapp/deployment/secret.rb +93 -0
- data/lib/dapp/dimg/artifact.rb +1 -1
- data/lib/dapp/dimg/build/stage/artifact_default.rb +35 -23
- data/lib/dapp/dimg/build/stage/base.rb +1 -1
- data/lib/dapp/dimg/build/stage/before_setup.rb +0 -2
- data/lib/dapp/dimg/build/stage/build_artifact.rb +0 -2
- data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +2 -2
- data/lib/dapp/dimg/build/stage/install/install.rb +0 -1
- data/lib/dapp/dimg/build/stage/setup/setup.rb +0 -1
- data/lib/dapp/dimg/cli/cli.rb +1 -1
- data/lib/dapp/dimg/cli/command/base.rb +14 -0
- data/lib/dapp/dimg/cli/{dimg.rb → command/dimg.rb} +5 -7
- data/lib/dapp/dimg/cli/{bp.rb → command/dimg/bp.rb} +3 -3
- data/lib/dapp/dimg/cli/{build.rb → command/dimg/build.rb} +3 -3
- data/lib/dapp/dimg/cli/{build_context.rb → command/dimg/build_context.rb} +3 -3
- data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/export.rb +4 -4
- data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/import.rb +4 -4
- data/lib/dapp/dimg/cli/{cleanup.rb → command/dimg/cleanup.rb} +3 -3
- data/lib/dapp/dimg/cli/{list.rb → command/dimg/list.rb} +3 -3
- data/lib/dapp/dimg/cli/{mrproper.rb → command/dimg/mrproper.rb} +4 -4
- data/lib/dapp/dimg/cli/{push.rb → command/dimg/push.rb} +5 -5
- data/lib/dapp/dimg/cli/{run.rb → command/dimg/run.rb} +8 -8
- data/lib/dapp/dimg/cli/{spush.rb → command/dimg/spush.rb} +4 -4
- data/lib/dapp/dimg/cli/{stage_image.rb → command/dimg/stage_image.rb} +3 -3
- data/lib/dapp/dimg/cli/{stages.rb → command/dimg/stages.rb} +3 -3
- data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_local.rb +6 -6
- data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_repo.rb +5 -5
- data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/flush_local.rb +5 -5
- data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/flush_repo.rb +6 -6
- data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/pull.rb +6 -6
- data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/push.rb +6 -6
- data/lib/dapp/dimg/cli/{tag.rb → command/dimg/tag.rb} +6 -6
- data/lib/dapp/dimg/config/config.rb +20 -0
- data/lib/dapp/dimg/config/directive/artifact_dimg.rb +19 -0
- data/lib/dapp/dimg/config/directive/artifact_group.rb +45 -0
- data/lib/dapp/dimg/config/directive/dimg.rb +36 -0
- data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +149 -0
- data/lib/dapp/dimg/config/directive/dimg/validation.rb +128 -0
- data/lib/dapp/dimg/config/directive/dimg_group.rb +64 -0
- data/lib/dapp/dimg/config/directive/dimg_group_base.rb +46 -0
- data/lib/dapp/dimg/config/directive/docker/dimg.rb +4 -4
- data/lib/dapp/dimg/config/directive/shell/dimg.rb +1 -1
- data/lib/dapp/dimg/dapp/command/bp.rb +4 -4
- data/lib/dapp/dimg/dapp/command/build.rb +2 -2
- data/lib/dapp/dimg/dapp/command/build_context/common.rb +2 -2
- data/lib/dapp/dimg/dapp/command/build_context/export.rb +1 -1
- data/lib/dapp/dimg/dapp/command/build_context/import.rb +1 -1
- data/lib/dapp/dimg/dapp/command/cleanup.rb +1 -1
- data/lib/dapp/dimg/dapp/command/common.rb +19 -4
- data/lib/dapp/dimg/dapp/command/list.rb +1 -1
- data/lib/dapp/dimg/dapp/command/mrproper.rb +3 -3
- data/lib/dapp/dimg/dapp/command/push.rb +6 -5
- data/lib/dapp/dimg/dapp/command/run.rb +1 -1
- data/lib/dapp/dimg/dapp/command/spush.rb +4 -3
- data/lib/dapp/dimg/dapp/command/stage_image.rb +2 -2
- data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +1 -1
- data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +3 -3
- data/lib/dapp/dimg/dapp/command/stages/common.rb +4 -4
- data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +1 -1
- data/lib/dapp/dimg/dapp/command/stages/flush_repo.rb +1 -1
- data/lib/dapp/dimg/dapp/command/stages/pull.rb +5 -4
- data/lib/dapp/dimg/dapp/command/stages/push.rb +4 -3
- data/lib/dapp/dimg/dapp/command/tag.rb +3 -2
- data/lib/dapp/dimg/dapp/dapp.rb +33 -0
- data/lib/dapp/dimg/dapp/dappfile.rb +25 -0
- data/lib/dapp/dimg/dimg.rb +3 -3
- data/lib/dapp/dimg/dimg/path.rb +1 -1
- data/lib/dapp/dimg/dimg/stages.rb +1 -1
- data/lib/dapp/dimg/dimg/tags.rb +5 -5
- data/lib/dapp/dimg/docker_registry.rb +3 -7
- data/lib/dapp/dimg/git_artifact.rb +30 -14
- data/lib/dapp/dimg/git_repo/base.rb +13 -1
- data/lib/dapp/dimg/git_repo/own.rb +9 -1
- data/lib/dapp/dimg/image/docker.rb +9 -3
- data/lib/dapp/helper/cli.rb +3 -1
- data/lib/dapp/helper/net_status.rb +5 -1
- data/lib/dapp/helper/trivia.rb +1 -1
- data/lib/dapp/version.rb +2 -2
- metadata +84 -38
- data/lib/dapp/cli/base.rb +0 -63
- data/lib/dapp/config/base.rb +0 -54
- data/lib/dapp/dimg/build/stage/mod/git_artifact_dependencies.rb +0 -23
- data/lib/dapp/dimg/cli/base.rb +0 -16
- data/lib/dapp/dimg/config/artifact_dimg.rb +0 -17
- data/lib/dapp/dimg/config/artifact_group.rb +0 -43
- data/lib/dapp/dimg/config/base.rb +0 -7
- data/lib/dapp/dimg/config/dimg.rb +0 -24
- data/lib/dapp/dimg/config/dimg/instance_methods.rb +0 -179
- data/lib/dapp/dimg/config/dimg/validation.rb +0 -126
- data/lib/dapp/dimg/config/dimg_group.rb +0 -61
- data/lib/dapp/dimg/config/dimg_group_base.rb +0 -54
- data/lib/dapp/dimg/config/dimg_group_main.rb +0 -22
- data/lib/dapp/dimg/dapp/command.rb +0 -21
@@ -0,0 +1,83 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Deployment
|
3
|
+
module Dapp
|
4
|
+
module Command
|
5
|
+
module Apply
|
6
|
+
def deployment_apply
|
7
|
+
repo = option_repo
|
8
|
+
image_version = options[:image_version]
|
9
|
+
|
10
|
+
validate_repo_name!(repo)
|
11
|
+
validate_tag_name!(image_version)
|
12
|
+
|
13
|
+
log_process("Applying deployment #{deployment.name}", verbose: true) do
|
14
|
+
with_log_indent do
|
15
|
+
deployment.kube.delete_unknown_resources!
|
16
|
+
|
17
|
+
deployment.to_kube_bootstrap_pods(repo, image_version).each do |name, spec|
|
18
|
+
next if deployment.kube.pod_succeeded?(name)
|
19
|
+
deployment.kube.delete_pod!(name) if deployment.kube.pod_exist?(name)
|
20
|
+
log_process(:bootstrap, verbose: true) do
|
21
|
+
with_log_indent do
|
22
|
+
deployment.kube.run_job!(spec, name)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
deployment.to_kube_before_apply_job_pods(repo, image_version).each do |name, spec|
|
28
|
+
log_process(:before_apply_job, verbose: true) do
|
29
|
+
deployment.kube.delete_pod!(name) if deployment.kube.pod_exist?(name)
|
30
|
+
with_log_indent do
|
31
|
+
deployment.kube.run_job!(spec, name)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
deployment.apps.each do |app|
|
37
|
+
log_process("Applying app #{app.name}", verbose: true) do
|
38
|
+
with_log_indent do
|
39
|
+
(app.kube.existing_deployments_names - app.to_kube_deployments(repo, image_version).keys).each do |deployment_name|
|
40
|
+
app.kube.delete_deployment!(deployment_name)
|
41
|
+
end
|
42
|
+
|
43
|
+
(app.kube.existing_services_names - app.to_kube_services.keys).each do |service_name|
|
44
|
+
app.kube.delete_service!(service_name)
|
45
|
+
end
|
46
|
+
|
47
|
+
app.to_kube_bootstrap_pods(repo, image_version).each do |name, spec|
|
48
|
+
next if app.kube.pod_succeeded?(name)
|
49
|
+
app.kube.delete_pod!(name) if app.kube.pod_exist?(name)
|
50
|
+
log_process(:bootstrap, verbose: true) do
|
51
|
+
with_log_indent do
|
52
|
+
app.kube.run_job!(spec, name)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
app.to_kube_before_apply_job_pods(repo, image_version).each do |name, spec|
|
58
|
+
log_process(:before_apply_job, verbose: true) do
|
59
|
+
app.kube.delete_pod!(name) if app.kube.pod_exist?(name)
|
60
|
+
with_log_indent do
|
61
|
+
app.kube.run_job!(spec, name)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
app.to_kube_deployments(repo, image_version).each do |name, spec|
|
67
|
+
app.kube.apply_deployment!(name, spec)
|
68
|
+
end
|
69
|
+
|
70
|
+
app.to_kube_services.each do |name, spec|
|
71
|
+
app.kube.apply_service!(name, spec)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Deployment
|
3
|
+
module Dapp
|
4
|
+
module Command
|
5
|
+
module Common
|
6
|
+
def deployment
|
7
|
+
@deployment ||= Deployment.new(dapp: self)
|
8
|
+
end
|
9
|
+
|
10
|
+
def secret
|
11
|
+
@secret ||= Secret.new(ENV['DAPP_SECRET_KEY']) if ENV.key?('DAPP_SECRET_KEY')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,393 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Deployment
|
3
|
+
module Dapp
|
4
|
+
module Command
|
5
|
+
module MinikubeSetup
|
6
|
+
class MinikubeSetupError < Error::Command
|
7
|
+
def initialize(**net_status)
|
8
|
+
super(**net_status, context: :minikube_setup)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def deployment_minikube_setup
|
13
|
+
_minikube_restart_minikube
|
14
|
+
|
15
|
+
# NOTICE: На данный момент выключено из-за непригодной
|
16
|
+
# NOTICE: для использования медленности 'minikube mount' томов
|
17
|
+
# _minikube_run_minikube_persisted_storage_daemon
|
18
|
+
|
19
|
+
_minikube_wait_till_ready
|
20
|
+
_minikube_run_registry
|
21
|
+
_minikube_run_registry_forwarder_daemon
|
22
|
+
end
|
23
|
+
|
24
|
+
def _minikube_set_original_sudo_caller_process_user!
|
25
|
+
if ENV['SUDO_UID'] and ENV['SUDO_GID']
|
26
|
+
original_uid = ENV['SUDO_UID'].to_i
|
27
|
+
original_gid = ENV['SUDO_GID'].to_i
|
28
|
+
if original_uid != Process.uid && ENV['HOME'] == Etc.getpwuid(original_uid).dir
|
29
|
+
Process::Sys.setgid(original_gid)
|
30
|
+
Process::Sys.setuid(original_uid)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def _minikube_restart_minikube
|
36
|
+
log_process(:restart_minikube, verbose: true) do
|
37
|
+
raise MinikubeSetupError, code: :minikube_not_found if shellout('which minikube').exitstatus == 1
|
38
|
+
|
39
|
+
Process.fork do
|
40
|
+
_minikube_set_original_sudo_caller_process_user!
|
41
|
+
|
42
|
+
begin
|
43
|
+
if shellout!('minikube status', force_log: true).stdout.split("\n").map(&:strip).first == 'minikubeVM: Running'
|
44
|
+
shellout! 'minikube stop', force_log: true
|
45
|
+
end
|
46
|
+
shellout! 'minikube start --insecure-registry localhost:5000', force_log: true
|
47
|
+
rescue ::Dapp::Error::Shellout
|
48
|
+
exit 1
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
_, status = Process.wait2
|
53
|
+
raise MinikubeSetupError, code: :cannot_restart_minikube unless status.success?
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def _minikube_run_daemon(name, &blk)
|
58
|
+
pid_file_path = "/run/dapp_#{name}_daemon.pid"
|
59
|
+
old_daemon_pid = begin
|
60
|
+
File.open(pid_file_path, 'r').read.strip.to_i
|
61
|
+
rescue Errno::ENOENT
|
62
|
+
end
|
63
|
+
if old_daemon_pid
|
64
|
+
begin
|
65
|
+
if Process.kill(0, old_daemon_pid)
|
66
|
+
Process.kill('TERM', old_daemon_pid)
|
67
|
+
end
|
68
|
+
if Process.kill(0, old_daemon_pid)
|
69
|
+
Process.kill('KILL', old_daemon_pid)
|
70
|
+
end
|
71
|
+
rescue Errno::ESRCH
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
daemon_pid = Process.fork do
|
76
|
+
File.open(pid_file_path, 'w') {|f| f.write "#{Process.pid}\n"}
|
77
|
+
yield
|
78
|
+
end
|
79
|
+
Process.detach(daemon_pid)
|
80
|
+
|
81
|
+
daemon_ok = true
|
82
|
+
begin
|
83
|
+
Process.kill(0, daemon_pid)
|
84
|
+
|
85
|
+
5.times do
|
86
|
+
sleep 1
|
87
|
+
Process.kill(0, daemon_pid)
|
88
|
+
end
|
89
|
+
rescue Errno::ESRCH
|
90
|
+
daemon_ok = false
|
91
|
+
end
|
92
|
+
raise MinikubeSetupError, code: :"#{name}_daemon_failed" unless daemon_ok
|
93
|
+
end
|
94
|
+
|
95
|
+
def _minikube_run_minikube_persisted_storage_daemon
|
96
|
+
log_process(:run_minikube_persisted_storage_daemon) do
|
97
|
+
_minikube_run_daemon(:minikube_persisted_storage) do
|
98
|
+
_minikube_set_original_sudo_caller_process_user!
|
99
|
+
|
100
|
+
STDIN.reopen '/dev/null'
|
101
|
+
STDOUT.reopen '/dev/null', 'a'
|
102
|
+
|
103
|
+
mountdir = File.join(ENV['HOME'], '.minikube', 'persisted_storage')
|
104
|
+
FileUtils.mkdir_p mountdir
|
105
|
+
|
106
|
+
exec "minikube mount #{mountdir}"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def _minikube_wait_till_ready
|
112
|
+
log_process(:wait_till_minikube_ready) do
|
113
|
+
600.times do
|
114
|
+
begin
|
115
|
+
return if _minikube_kubernetes.service?('kube-dns')
|
116
|
+
rescue Kubernetes::Error::ConnectionRefused
|
117
|
+
end
|
118
|
+
|
119
|
+
sleep 1
|
120
|
+
end
|
121
|
+
|
122
|
+
raise MinikubeSetupError, code: :minikube_readiness_timeout
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def _minikube_run_registry
|
127
|
+
log_process(:run_registry) do
|
128
|
+
_minikube_kubernetes.with_query(gracePeriodSeconds: 0) do
|
129
|
+
with_log_indent do
|
130
|
+
if _minikube_kubernetes.replicationcontroller? _minikube_registry_replicationcontroller_spec['metadata']['name']
|
131
|
+
_minikube_kubernetes.delete_replicationcontroller! _minikube_registry_replicationcontroller_spec['metadata']['name']
|
132
|
+
|
133
|
+
shutdown_ok = false
|
134
|
+
600.times do
|
135
|
+
unless _minikube_kubernetes.replicationcontroller? _minikube_registry_replicationcontroller_spec['metadata']['name']
|
136
|
+
shutdown_ok = true
|
137
|
+
break
|
138
|
+
end
|
139
|
+
sleep 1
|
140
|
+
end
|
141
|
+
raise MinikubeSetupError, code: :registry_replicationcontroller_shutdown_failed unless shutdown_ok
|
142
|
+
end
|
143
|
+
|
144
|
+
_minikube_kubernetes.delete_pods! labelSelector: 'k8s-app=kube-registry'
|
145
|
+
shutdown_ok = false
|
146
|
+
600.times do
|
147
|
+
unless _minikube_find_registry_pod
|
148
|
+
shutdown_ok = true
|
149
|
+
break
|
150
|
+
end
|
151
|
+
sleep 1
|
152
|
+
end
|
153
|
+
raise MinikubeSetupError, code: :registry_pod_shutdown_failed unless shutdown_ok
|
154
|
+
|
155
|
+
if _minikube_kubernetes.service? _minikube_registry_service_spec['metadata']['name']
|
156
|
+
_minikube_kubernetes.delete_service! _minikube_registry_service_spec['metadata']['name']
|
157
|
+
|
158
|
+
shutdown_ok = false
|
159
|
+
600.times do
|
160
|
+
unless _minikube_kubernetes.service? _minikube_registry_service_spec['metadata']['name']
|
161
|
+
shutdown_ok = true
|
162
|
+
break
|
163
|
+
end
|
164
|
+
sleep 1
|
165
|
+
end
|
166
|
+
raise MinikubeSetupError, code: :registry_service_shutdown_failed unless shutdown_ok
|
167
|
+
end
|
168
|
+
|
169
|
+
if _minikube_kubernetes.pod? _minikube_registry_proxy_pod_spec['metadata']['name']
|
170
|
+
_minikube_kubernetes.delete_pod! _minikube_registry_proxy_pod_spec['metadata']['name']
|
171
|
+
|
172
|
+
shutdown_ok = false
|
173
|
+
600.times do
|
174
|
+
unless _minikube_kubernetes.pod? _minikube_registry_proxy_pod_spec['metadata']['name']
|
175
|
+
shutdown_ok = true
|
176
|
+
break
|
177
|
+
end
|
178
|
+
sleep 1
|
179
|
+
end
|
180
|
+
raise MinikubeSetupError, code: :registry_proxy_pod_shutdown_failed unless shutdown_ok
|
181
|
+
end
|
182
|
+
|
183
|
+
_minikube_kubernetes.create_replicationcontroller!(_minikube_registry_replicationcontroller_spec)
|
184
|
+
registry_pod_ok = false
|
185
|
+
600.times do
|
186
|
+
if registry_pod = _minikube_find_registry_pod
|
187
|
+
if registry_pod['status']['phase'] == 'Running'
|
188
|
+
registry_pod_ok = true
|
189
|
+
@_minikube_registry_pod_name = registry_pod['metadata']['name']
|
190
|
+
break
|
191
|
+
end
|
192
|
+
end
|
193
|
+
sleep 1
|
194
|
+
end
|
195
|
+
raise MinikubeSetupError, code: :registry_pod_not_ok unless registry_pod_ok
|
196
|
+
|
197
|
+
_minikube_kubernetes.create_service!(_minikube_registry_service_spec)
|
198
|
+
registry_service_ok = false
|
199
|
+
600.times do
|
200
|
+
if _minikube_kubernetes.service? _minikube_registry_service_spec['metadata']['name']
|
201
|
+
registry_service_ok = true
|
202
|
+
break
|
203
|
+
end
|
204
|
+
sleep 1
|
205
|
+
end
|
206
|
+
raise MinikubeSetupError, code: :registry_service_not_ok unless registry_service_ok
|
207
|
+
|
208
|
+
_minikube_kubernetes.create_pod! _minikube_registry_proxy_pod_spec
|
209
|
+
registry_proxy_pod_ok = false
|
210
|
+
600.times do
|
211
|
+
if _minikube_kubernetes.pod? _minikube_registry_proxy_pod_spec['metadata']['name']
|
212
|
+
registry_proxy_pod = _minikube_kubernetes.pod(_minikube_registry_proxy_pod_spec['metadata']['name'])
|
213
|
+
if registry_proxy_pod['status']['phase'] == 'Running'
|
214
|
+
registry_proxy_pod_ok = true
|
215
|
+
break
|
216
|
+
end
|
217
|
+
end
|
218
|
+
sleep 1
|
219
|
+
end
|
220
|
+
raise MinikubeSetupError, code: :registry_proxy_pod_not_ok unless registry_proxy_pod_ok
|
221
|
+
end
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
def _minikube_run_registry_forwarder_daemon
|
227
|
+
log_process(:run_registry_forwarder_daemon) do
|
228
|
+
registry_port_in_use = begin
|
229
|
+
Socket.tcp('localhost', 5000).close
|
230
|
+
true
|
231
|
+
rescue Errno::ECONNREFUSED
|
232
|
+
false
|
233
|
+
end
|
234
|
+
raise MinikubeSetupError, code: :registry_port_in_use, data: {host: 'localhost', port: 5000} if registry_port_in_use
|
235
|
+
|
236
|
+
_minikube_run_daemon(:registry_forwarder) do
|
237
|
+
STDIN.reopen '/dev/null'
|
238
|
+
STDOUT.reopen '/dev/null', 'a'
|
239
|
+
|
240
|
+
exec "kubectl port-forward --namespace kube-system #{_minikube_registry_pod_name} 5000:5000"
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
def _minikube_find_registry_pod
|
246
|
+
_minikube_kubernetes.pod_list(labelSelector: "k8s-app=kube-registry")['items'].first
|
247
|
+
end
|
248
|
+
|
249
|
+
def _minikube_registry_pod_name
|
250
|
+
@_minikube_registry_pod_name
|
251
|
+
end
|
252
|
+
|
253
|
+
def _minikube_kubernetes
|
254
|
+
@kubernetes ||= Kubernetes.new(namespace: 'kube-system')
|
255
|
+
end
|
256
|
+
|
257
|
+
def _minikube_registry_replicationcontroller_spec
|
258
|
+
{
|
259
|
+
'metadata' => {
|
260
|
+
'name' => 'kube-registry',
|
261
|
+
'namespace' => 'kube-system',
|
262
|
+
'labels' => {
|
263
|
+
'k8s-app' => 'kube-registry',
|
264
|
+
'version' => 'v0',
|
265
|
+
'kubernetes.io/cluster-service' => 'true'
|
266
|
+
}
|
267
|
+
},
|
268
|
+
'spec' => {
|
269
|
+
'replicas' => 1,
|
270
|
+
'selector' => {
|
271
|
+
'k8s-app' => 'kube-registry',
|
272
|
+
'version' => 'v0'
|
273
|
+
},
|
274
|
+
'template' => {
|
275
|
+
'metadata' => {
|
276
|
+
'labels' => {
|
277
|
+
'k8s-app' => 'kube-registry',
|
278
|
+
'version' => 'v0',
|
279
|
+
'kubernetes.io/cluster-service' => 'true'
|
280
|
+
}
|
281
|
+
},
|
282
|
+
'spec' => {
|
283
|
+
'containers' => [
|
284
|
+
{
|
285
|
+
'name' => 'registry',
|
286
|
+
'image' => 'registry:2',
|
287
|
+
'env' => [
|
288
|
+
{
|
289
|
+
'name' => 'REGISTRY_HTTP_ADDR',
|
290
|
+
'value' => ':5000'
|
291
|
+
},
|
292
|
+
{
|
293
|
+
'name' => 'REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY',
|
294
|
+
'value' => '/var/lib/registry'
|
295
|
+
}
|
296
|
+
],
|
297
|
+
'volumeMounts' => [
|
298
|
+
{
|
299
|
+
'name' => 'image-store',
|
300
|
+
'mountPath' => '/var/lib/registry'
|
301
|
+
}
|
302
|
+
],
|
303
|
+
'ports' => [
|
304
|
+
{
|
305
|
+
'containerPort' => 5000,
|
306
|
+
'name' => 'registry',
|
307
|
+
'protocol' => 'TCP'
|
308
|
+
}
|
309
|
+
]
|
310
|
+
}
|
311
|
+
],
|
312
|
+
'volumes' => [
|
313
|
+
{
|
314
|
+
'name' => 'image-store',
|
315
|
+
'hostPath' => {
|
316
|
+
'path' => '/var/lib/docker/registry_data'
|
317
|
+
}
|
318
|
+
}
|
319
|
+
]
|
320
|
+
}
|
321
|
+
}
|
322
|
+
}
|
323
|
+
}
|
324
|
+
end
|
325
|
+
|
326
|
+
def _minikube_registry_service_spec
|
327
|
+
{
|
328
|
+
'metadata' => {
|
329
|
+
'name' => 'kube-registry',
|
330
|
+
'namespace' => 'kube-system',
|
331
|
+
'labels' => {
|
332
|
+
'k8s-app' => 'kube-registry',
|
333
|
+
'kubernetes.io/cluster-service' => 'true',
|
334
|
+
'kubernetes.io/name' => 'KubeRegistry'
|
335
|
+
}
|
336
|
+
},
|
337
|
+
'spec' => {
|
338
|
+
'selector' => {
|
339
|
+
'k8s-app' => 'kube-registry'
|
340
|
+
},
|
341
|
+
'ports' => [
|
342
|
+
{
|
343
|
+
'name' => 'registry',
|
344
|
+
'port' => 5000,
|
345
|
+
'protocol' => 'TCP'
|
346
|
+
}
|
347
|
+
]
|
348
|
+
}
|
349
|
+
}
|
350
|
+
end
|
351
|
+
|
352
|
+
def _minikube_registry_proxy_pod_spec
|
353
|
+
{
|
354
|
+
'metadata' => {
|
355
|
+
'name' => 'kube-registry-proxy',
|
356
|
+
'namespace' => 'kube-system'
|
357
|
+
},
|
358
|
+
'spec' => {
|
359
|
+
'containers' => [
|
360
|
+
{
|
361
|
+
'name' => 'kube-registry-proxy',
|
362
|
+
'image' => 'gcr.io/google_containers/kube-registry-proxy:0.3',
|
363
|
+
'env' => [
|
364
|
+
{
|
365
|
+
'name' => 'REGISTRY_HOST',
|
366
|
+
'value' => 'kube-registry.kube-system.svc.cluster.local'
|
367
|
+
},
|
368
|
+
{
|
369
|
+
'name' => 'REGISTRY_PORT',
|
370
|
+
'value' => '5000'
|
371
|
+
},
|
372
|
+
{
|
373
|
+
'name' => 'FORWARD_PORT',
|
374
|
+
'value' => '5000'
|
375
|
+
}
|
376
|
+
],
|
377
|
+
'ports' => [
|
378
|
+
{
|
379
|
+
'name' => 'registry',
|
380
|
+
'containerPort' => 5000,
|
381
|
+
'hostPort' => 5000
|
382
|
+
}
|
383
|
+
]
|
384
|
+
}
|
385
|
+
]
|
386
|
+
}
|
387
|
+
}
|
388
|
+
end
|
389
|
+
end
|
390
|
+
end
|
391
|
+
end
|
392
|
+
end
|
393
|
+
end
|