42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# File 'lib/dapp/kube/dapp/command/deploy.rb', line 42
def kube_run_deploy(release)
log_process("Deploy release #{release.name}") do
release_exists = shellout("helm status #{release.name}").status.success?
watch_hooks_by_type = release.jobs.values
.reduce({}) do |res, job|
if job.annotations['dapp/watch-logs'].to_s == 'true'
job.annotations['helm.sh/hook'].to_s.split(',').each do |hook_type|
res[hook_type] ||= []
res[hook_type] << job
end
end
res
end
.tap do |res|
res.values.each do |jobs|
jobs.sort_by! {|job| job.annotations['helm.sh/hook-weight'].to_i}
end
end
watch_hooks = if release_exists
watch_hooks_by_type['pre-upgrade'].to_a + watch_hooks_by_type['post-upgrade'].to_a
else
watch_hooks_by_type['pre-install'].to_a + watch_hooks_by_type['post-install'].to_a
end
watch_hooks_thr = Thread.new do
watch_hooks.each {|job| Kubernetes::Manager::Job.new(self, job.name).watch_till_done!}
end
deployment_managers = release.deployments.values
.map {|deployment| Kubernetes::Manager::Deployment.new(self, deployment.name)}
deployment_managers.each(&:before_deploy)
release.deploy!
deployment_managers.each(&:after_deploy)
watch_hooks_thr.kill if watch_hooks_thr.alive?
begin
::Timeout::timeout(self.options[:timeout] || 300) do
deployment_managers.each {|deployment_manager| deployment_manager.watch_till_ready!}
end
rescue ::Timeout::Error
raise Kube::Error::Base, code: :deploy_timeout
end
end
end
|