staypuft 0.5.3 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/app/assets/stylesheets/staypuft/staypuft.css.scss +4 -0
- data/app/lib/actions/staypuft/host/assert_report_success.rb +49 -0
- data/app/lib/actions/staypuft/host/deploy.rb +6 -4
- data/app/lib/actions/staypuft/host/{report_check.rb → report_wait.rb} +2 -16
- data/app/lib/actions/staypuft/hostgroup/ordered_deploy.rb +26 -7
- data/lib/staypuft/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YWI4ZTliYmU2MjdjNjk0ZDg1Yzk5Yzk3NDg4YjVmMjE1MjYxNjI2OA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NjQ4Y2U3OTJhNmRkZGQ5ZmRhYzg0NzVhMDM5NzAyYzAxZDczYmRmZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NGU3Y2Q4ODIxMWY5ZWU5NDRkNmRjYjNiMTQwMWNjZGNjY2U0OTg1OGQ2YjI5
|
10
|
+
YTZjMGI3NTc2YzkxMTM5Njk0NDQzYTI0OTA4YTU4ZWQ1ZGY5ODkwZGM4M2Jm
|
11
|
+
MDVlYjgwMzkxZjY3ZDdhZWVhZTgwOWQxZTEyMzQ5NTgzZTYwMGM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NjEyMTlhMDQ5MjgwNjcyZGJiNTU5ZjdhZmU0OWNlZTExY2YwMDYyODM3ODhk
|
14
|
+
ZmZiYjcxMTlhN2IwNzk0ODQ5OGQxODA3YTFjZThmN2M4ZTk3ZjdjOTI0Yzdm
|
15
|
+
MmI4YTljZDllM2JhZjViOWE2MDQwMmZhNGNhZGNkZDFiZTcxNTc=
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Actions
|
2
|
+
module Staypuft
|
3
|
+
module Host
|
4
|
+
class AssertReportSuccess < Dynflow::Action
|
5
|
+
|
6
|
+
middleware.use Actions::Staypuft::Middleware::AsCurrentUser
|
7
|
+
|
8
|
+
def plan(host_id)
|
9
|
+
plan_self host_id: host_id
|
10
|
+
end
|
11
|
+
|
12
|
+
def run(event = nil)
|
13
|
+
case event
|
14
|
+
when Dynflow::Action::Skip
|
15
|
+
output[:status] = true
|
16
|
+
else
|
17
|
+
output[:status] = assert_latest_report_success(input[:host_id])
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def assert_latest_report_success(host_id)
|
24
|
+
host = ::Host.find(host_id)
|
25
|
+
report = host.reports.order('reported_at DESC').first
|
26
|
+
|
27
|
+
unless report
|
28
|
+
fail(::Staypuft::Exception, "No Puppet report found for host: #{host_id}")
|
29
|
+
end
|
30
|
+
|
31
|
+
check_for_failures(report, host_id)
|
32
|
+
report_change?(report)
|
33
|
+
end
|
34
|
+
|
35
|
+
def report_change?(report)
|
36
|
+
report.status['applied'] > 0
|
37
|
+
end
|
38
|
+
|
39
|
+
def check_for_failures(report, host_id)
|
40
|
+
if report.status['failed'] > 0
|
41
|
+
output[:report_id] = report.id
|
42
|
+
fail(::Staypuft::Exception, "Latest Puppet run contains failures for host: #{host_id}")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -15,20 +15,22 @@ module Actions
|
|
15
15
|
module Host
|
16
16
|
class Deploy < Dynflow::Action
|
17
17
|
|
18
|
-
def plan(host)
|
18
|
+
def plan(host, check_success = true)
|
19
19
|
Type! host, ::Host::Base
|
20
20
|
|
21
21
|
input.update host: { id: host.id, name: host.name }
|
22
22
|
|
23
23
|
sequence do
|
24
|
-
plan_action Actions::Staypuft::Host::Update, host, :environment => nil
|
25
24
|
puppet_run = plan_action Host::PuppetRun, host
|
26
|
-
plan_action Host::
|
25
|
+
plan_action Host::ReportWait, host.id, puppet_run.output[:executed_at]
|
26
|
+
if check_success
|
27
|
+
plan_action Host::AssertReportSuccess, host.id
|
28
|
+
end
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
30
32
|
def task_output
|
31
|
-
steps = planned_actions(Host::
|
33
|
+
steps = planned_actions(Host::ReportWait).inject([]) { |s, a| s + a.steps[1..2] }.compact
|
32
34
|
progress = if steps.empty?
|
33
35
|
1
|
34
36
|
else
|
@@ -14,7 +14,7 @@ module Actions
|
|
14
14
|
module Staypuft
|
15
15
|
module Host
|
16
16
|
|
17
|
-
class
|
17
|
+
class ReportWait < Actions::Base
|
18
18
|
|
19
19
|
middleware.use Actions::Staypuft::Middleware::AsCurrentUser
|
20
20
|
include Dynflow::Action::Polling
|
@@ -69,21 +69,7 @@ module Actions
|
|
69
69
|
def host_ready?(host_id, after)
|
70
70
|
host = ::Host.find(host_id)
|
71
71
|
report = host.reports.where('reported_at > ?', after).first
|
72
|
-
return
|
73
|
-
|
74
|
-
check_for_failures(report, host.id)
|
75
|
-
report_change?(report)
|
76
|
-
end
|
77
|
-
|
78
|
-
def report_change?(report)
|
79
|
-
report.status['applied'] > 0
|
80
|
-
end
|
81
|
-
|
82
|
-
def check_for_failures(report, id)
|
83
|
-
if report.status['failed'] > 0
|
84
|
-
output[:report_id] = report.id
|
85
|
-
fail(::Staypuft::Exception, "Latest Puppet Run Contains Failures for Host: #{id}")
|
86
|
-
end
|
72
|
+
return !!report
|
87
73
|
end
|
88
74
|
|
89
75
|
end
|
@@ -41,18 +41,34 @@ module Actions
|
|
41
41
|
|
42
42
|
input.update hostgroups: {}
|
43
43
|
hostgroups.each do |hostgroup|
|
44
|
-
|
45
|
-
|
44
|
+
input[:hostgroups].update hostgroup.id => { name: hostgroup.name, hosts: {} }
|
45
|
+
hostgroup_hosts = (hostgroup.hosts & hosts_to_deploy_filter)
|
46
46
|
|
47
|
-
|
47
|
+
# wait till all hosts are ready
|
48
|
+
concurrence do
|
49
|
+
hostgroup_hosts.each do |host|
|
48
50
|
input[:hostgroups][hostgroup.id][:hosts].update host.id => host.name
|
49
51
|
|
50
|
-
|
51
|
-
|
52
|
-
|
52
|
+
plan_action Host::WaitUntilReady, host
|
53
|
+
plan_action Host::Update, host, :environment => nil
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# run puppet twice without checking for puppet success
|
58
|
+
2.times do
|
59
|
+
concurrence do
|
60
|
+
hostgroup_hosts.each do |host|
|
61
|
+
plan_action Host::Deploy, host, false
|
53
62
|
end
|
54
63
|
end
|
55
64
|
end
|
65
|
+
|
66
|
+
# run puppet once and check it succeeded
|
67
|
+
concurrence do
|
68
|
+
hostgroup_hosts.each do |host|
|
69
|
+
plan_action Host::Deploy, host
|
70
|
+
end
|
71
|
+
end
|
56
72
|
end
|
57
73
|
|
58
74
|
enable_puppet_agent hosts_to_deploy
|
@@ -87,7 +103,10 @@ module Actions
|
|
87
103
|
|
88
104
|
concurrence do
|
89
105
|
hosts.zip(puppet_runs).each do |host, puppet_run|
|
90
|
-
|
106
|
+
sequence do
|
107
|
+
plan_action Actions::Staypuft::Host::ReportWait, host.id, puppet_run.output[:executed_at]
|
108
|
+
plan_action Actions::Staypuft::Host::AssertReportSuccess, host.id
|
109
|
+
end
|
91
110
|
end
|
92
111
|
end
|
93
112
|
end
|
data/lib/staypuft/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: staypuft
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Staypuft team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: foreman-tasks
|
@@ -126,10 +126,11 @@ files:
|
|
126
126
|
- app/helpers/staypuft/hosts_helper.rb
|
127
127
|
- app/lib/actions/staypuft/deployment/deploy.rb
|
128
128
|
- app/lib/actions/staypuft/deployment/populate.rb
|
129
|
+
- app/lib/actions/staypuft/host/assert_report_success.rb
|
129
130
|
- app/lib/actions/staypuft/host/create.rb
|
130
131
|
- app/lib/actions/staypuft/host/deploy.rb
|
131
132
|
- app/lib/actions/staypuft/host/puppet_run.rb
|
132
|
-
- app/lib/actions/staypuft/host/
|
133
|
+
- app/lib/actions/staypuft/host/report_wait.rb
|
133
134
|
- app/lib/actions/staypuft/host/trigger_provisioning.rb
|
134
135
|
- app/lib/actions/staypuft/host/update.rb
|
135
136
|
- app/lib/actions/staypuft/host/wait_until_provisioned.rb
|