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.
Files changed (154) hide show
  1. checksums.yaml +4 -4
  2. data/config/en/net_status.yml +36 -4
  3. data/lib/dapp.rb +84 -36
  4. data/lib/dapp/cli.rb +3 -2
  5. data/lib/dapp/cli/command/base.rb +69 -0
  6. data/lib/dapp/config/config.rb +17 -0
  7. data/lib/dapp/config/directive/base.rb +90 -3
  8. data/lib/dapp/dapp.rb +6 -14
  9. data/lib/dapp/dapp/dappfile.rb +20 -27
  10. data/lib/dapp/dapp/deps/base.rb +2 -2
  11. data/lib/dapp/dapp/lock.rb +1 -1
  12. data/lib/dapp/dapp/logging/base.rb +11 -7
  13. data/lib/dapp/dapp/logging/process.rb +4 -2
  14. data/lib/dapp/dapp/shellout/base.rb +2 -2
  15. data/lib/dapp/dapp/ssh_agent.rb +2 -2
  16. data/lib/dapp/deployment.rb +1 -0
  17. data/lib/dapp/deployment/app.rb +120 -0
  18. data/lib/dapp/deployment/cli/cli.rb +1 -0
  19. data/lib/dapp/deployment/cli/command/base.rb +14 -0
  20. data/lib/dapp/deployment/cli/command/deployment.rb +21 -0
  21. data/lib/dapp/deployment/cli/command/deployment/apply.rb +26 -0
  22. data/lib/dapp/deployment/cli/command/deployment/minikube_setup.rb +13 -0
  23. data/lib/dapp/deployment/cli/command/deployment/mrproper.rb +13 -0
  24. data/lib/dapp/deployment/cli/command/deployment/secret_generate.rb +13 -0
  25. data/lib/dapp/deployment/cli/command/deployment/secret_key_generate.rb +13 -0
  26. data/lib/dapp/deployment/config/config.rb +46 -0
  27. data/lib/dapp/deployment/config/directive/app.rb +28 -0
  28. data/lib/dapp/deployment/config/directive/app/instance_methods.rb +51 -0
  29. data/lib/dapp/deployment/config/directive/base.rb +13 -0
  30. data/lib/dapp/deployment/config/directive/deployment.rb +11 -0
  31. data/lib/dapp/deployment/config/directive/expose.rb +68 -0
  32. data/lib/dapp/deployment/config/directive/group.rb +27 -0
  33. data/lib/dapp/deployment/config/directive/job.rb +28 -0
  34. data/lib/dapp/deployment/config/directive/mod/group.rb +22 -0
  35. data/lib/dapp/deployment/config/directive/mod/jobs.rb +26 -0
  36. data/lib/dapp/deployment/config/directive/namespace.rb +26 -0
  37. data/lib/dapp/deployment/config/directive/namespace/instance_methods.rb +37 -0
  38. data/lib/dapp/deployment/core_ext/hash.rb +19 -0
  39. data/lib/dapp/deployment/dapp/command/apply.rb +83 -0
  40. data/lib/dapp/deployment/dapp/command/common.rb +17 -0
  41. data/lib/dapp/deployment/dapp/command/minikube_setup.rb +393 -0
  42. data/lib/dapp/deployment/dapp/command/mrproper.rb +12 -0
  43. data/lib/dapp/deployment/dapp/command/secret_generate.rb +17 -0
  44. data/lib/dapp/deployment/dapp/command/secret_key_generate.rb +13 -0
  45. data/lib/dapp/deployment/dapp/dapp.rb +18 -0
  46. data/lib/dapp/deployment/dapp/dappfile.rb +23 -0
  47. data/lib/dapp/deployment/deployment.rb +46 -0
  48. data/lib/dapp/deployment/error/app.rb +7 -0
  49. data/lib/dapp/deployment/error/base.rb +7 -0
  50. data/lib/dapp/deployment/error/command.rb +7 -0
  51. data/lib/dapp/deployment/error/config.rb +7 -0
  52. data/lib/dapp/deployment/error/deployment.rb +7 -0
  53. data/lib/dapp/deployment/error/kubernetes.rb +7 -0
  54. data/lib/dapp/deployment/kube_app.rb +277 -0
  55. data/lib/dapp/deployment/kube_base.rb +97 -0
  56. data/lib/dapp/deployment/kube_deployment.rb +51 -0
  57. data/lib/dapp/deployment/kubernetes.rb +174 -0
  58. data/lib/dapp/deployment/kubernetes/error.rb +20 -0
  59. data/lib/dapp/deployment/mod/jobs.rb +37 -0
  60. data/lib/dapp/deployment/mod/namespace.rb +58 -0
  61. data/lib/dapp/deployment/mod/system_environments.rb +30 -0
  62. data/lib/dapp/deployment/secret.rb +93 -0
  63. data/lib/dapp/dimg/artifact.rb +1 -1
  64. data/lib/dapp/dimg/build/stage/artifact_default.rb +35 -23
  65. data/lib/dapp/dimg/build/stage/base.rb +1 -1
  66. data/lib/dapp/dimg/build/stage/before_setup.rb +0 -2
  67. data/lib/dapp/dimg/build/stage/build_artifact.rb +0 -2
  68. data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +2 -2
  69. data/lib/dapp/dimg/build/stage/install/install.rb +0 -1
  70. data/lib/dapp/dimg/build/stage/setup/setup.rb +0 -1
  71. data/lib/dapp/dimg/cli/cli.rb +1 -1
  72. data/lib/dapp/dimg/cli/command/base.rb +14 -0
  73. data/lib/dapp/dimg/cli/{dimg.rb → command/dimg.rb} +5 -7
  74. data/lib/dapp/dimg/cli/{bp.rb → command/dimg/bp.rb} +3 -3
  75. data/lib/dapp/dimg/cli/{build.rb → command/dimg/build.rb} +3 -3
  76. data/lib/dapp/dimg/cli/{build_context.rb → command/dimg/build_context.rb} +3 -3
  77. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/export.rb +4 -4
  78. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/import.rb +4 -4
  79. data/lib/dapp/dimg/cli/{cleanup.rb → command/dimg/cleanup.rb} +3 -3
  80. data/lib/dapp/dimg/cli/{list.rb → command/dimg/list.rb} +3 -3
  81. data/lib/dapp/dimg/cli/{mrproper.rb → command/dimg/mrproper.rb} +4 -4
  82. data/lib/dapp/dimg/cli/{push.rb → command/dimg/push.rb} +5 -5
  83. data/lib/dapp/dimg/cli/{run.rb → command/dimg/run.rb} +8 -8
  84. data/lib/dapp/dimg/cli/{spush.rb → command/dimg/spush.rb} +4 -4
  85. data/lib/dapp/dimg/cli/{stage_image.rb → command/dimg/stage_image.rb} +3 -3
  86. data/lib/dapp/dimg/cli/{stages.rb → command/dimg/stages.rb} +3 -3
  87. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_local.rb +6 -6
  88. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_repo.rb +5 -5
  89. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/flush_local.rb +5 -5
  90. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/flush_repo.rb +6 -6
  91. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/pull.rb +6 -6
  92. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/push.rb +6 -6
  93. data/lib/dapp/dimg/cli/{tag.rb → command/dimg/tag.rb} +6 -6
  94. data/lib/dapp/dimg/config/config.rb +20 -0
  95. data/lib/dapp/dimg/config/directive/artifact_dimg.rb +19 -0
  96. data/lib/dapp/dimg/config/directive/artifact_group.rb +45 -0
  97. data/lib/dapp/dimg/config/directive/dimg.rb +36 -0
  98. data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +149 -0
  99. data/lib/dapp/dimg/config/directive/dimg/validation.rb +128 -0
  100. data/lib/dapp/dimg/config/directive/dimg_group.rb +64 -0
  101. data/lib/dapp/dimg/config/directive/dimg_group_base.rb +46 -0
  102. data/lib/dapp/dimg/config/directive/docker/dimg.rb +4 -4
  103. data/lib/dapp/dimg/config/directive/shell/dimg.rb +1 -1
  104. data/lib/dapp/dimg/dapp/command/bp.rb +4 -4
  105. data/lib/dapp/dimg/dapp/command/build.rb +2 -2
  106. data/lib/dapp/dimg/dapp/command/build_context/common.rb +2 -2
  107. data/lib/dapp/dimg/dapp/command/build_context/export.rb +1 -1
  108. data/lib/dapp/dimg/dapp/command/build_context/import.rb +1 -1
  109. data/lib/dapp/dimg/dapp/command/cleanup.rb +1 -1
  110. data/lib/dapp/dimg/dapp/command/common.rb +19 -4
  111. data/lib/dapp/dimg/dapp/command/list.rb +1 -1
  112. data/lib/dapp/dimg/dapp/command/mrproper.rb +3 -3
  113. data/lib/dapp/dimg/dapp/command/push.rb +6 -5
  114. data/lib/dapp/dimg/dapp/command/run.rb +1 -1
  115. data/lib/dapp/dimg/dapp/command/spush.rb +4 -3
  116. data/lib/dapp/dimg/dapp/command/stage_image.rb +2 -2
  117. data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +1 -1
  118. data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +3 -3
  119. data/lib/dapp/dimg/dapp/command/stages/common.rb +4 -4
  120. data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +1 -1
  121. data/lib/dapp/dimg/dapp/command/stages/flush_repo.rb +1 -1
  122. data/lib/dapp/dimg/dapp/command/stages/pull.rb +5 -4
  123. data/lib/dapp/dimg/dapp/command/stages/push.rb +4 -3
  124. data/lib/dapp/dimg/dapp/command/tag.rb +3 -2
  125. data/lib/dapp/dimg/dapp/dapp.rb +33 -0
  126. data/lib/dapp/dimg/dapp/dappfile.rb +25 -0
  127. data/lib/dapp/dimg/dimg.rb +3 -3
  128. data/lib/dapp/dimg/dimg/path.rb +1 -1
  129. data/lib/dapp/dimg/dimg/stages.rb +1 -1
  130. data/lib/dapp/dimg/dimg/tags.rb +5 -5
  131. data/lib/dapp/dimg/docker_registry.rb +3 -7
  132. data/lib/dapp/dimg/git_artifact.rb +30 -14
  133. data/lib/dapp/dimg/git_repo/base.rb +13 -1
  134. data/lib/dapp/dimg/git_repo/own.rb +9 -1
  135. data/lib/dapp/dimg/image/docker.rb +9 -3
  136. data/lib/dapp/helper/cli.rb +3 -1
  137. data/lib/dapp/helper/net_status.rb +5 -1
  138. data/lib/dapp/helper/trivia.rb +1 -1
  139. data/lib/dapp/version.rb +2 -2
  140. metadata +84 -38
  141. data/lib/dapp/cli/base.rb +0 -63
  142. data/lib/dapp/config/base.rb +0 -54
  143. data/lib/dapp/dimg/build/stage/mod/git_artifact_dependencies.rb +0 -23
  144. data/lib/dapp/dimg/cli/base.rb +0 -16
  145. data/lib/dapp/dimg/config/artifact_dimg.rb +0 -17
  146. data/lib/dapp/dimg/config/artifact_group.rb +0 -43
  147. data/lib/dapp/dimg/config/base.rb +0 -7
  148. data/lib/dapp/dimg/config/dimg.rb +0 -24
  149. data/lib/dapp/dimg/config/dimg/instance_methods.rb +0 -179
  150. data/lib/dapp/dimg/config/dimg/validation.rb +0 -126
  151. data/lib/dapp/dimg/config/dimg_group.rb +0 -61
  152. data/lib/dapp/dimg/config/dimg_group_base.rb +0 -54
  153. data/lib/dapp/dimg/config/dimg_group_main.rb +0 -22
  154. 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