clc-promote 0.7.9 → 0.7.10
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/lib/promote/promoter.rb +27 -2
- data/lib/promote/rake_tasks.rb +5 -5
- data/lib/promote/version.rb +1 -1
- data/spec/unit/promote/promoter_spec.rb +13 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5633c6eb35655f0e48f3ca0c541518a2f77ca04
|
4
|
+
data.tar.gz: 5175538852c4345a2b3d79c7fe91be9b89b57ab3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0270705d80833cda8010dbac523b1265a3e853a3fc8e4b59207362f9834a2471f74496df0d948ebbb8dd6497c3c9f39bde5b0786b9243674c1a0fe1d75707a40
|
7
|
+
data.tar.gz: 6e2a1384d06f75ef43b050ffa5540487e664bc4f68126b09345ace9017175cc4de06276a0416d35c51c9d58dc693daeef36c2900bd0298b67dacf672aa557a69
|
data/lib/promote/promoter.rb
CHANGED
@@ -20,9 +20,34 @@ module Promote
|
|
20
20
|
dest.write_cookbook_versions(source.cookbook_versions)
|
21
21
|
end
|
22
22
|
|
23
|
-
def monitor_promotion(source_environment, destination_environments, probe_interval, ui = nil)
|
23
|
+
def monitor_promotion(source_environment, destination_environments, probe_interval, max_wait = 3600, ui = nil)
|
24
24
|
destination_environments.each do |env|
|
25
|
-
promote_to(source_environment, env, ui)
|
25
|
+
promote_to(source_environment, env, ui)
|
26
|
+
start = Time.now.to_i
|
27
|
+
finder = NodeFinder.new("chef_environment:#{env}", config)
|
28
|
+
unconverged = nil
|
29
|
+
converged = []
|
30
|
+
until Time.now.to_i - start > max_wait
|
31
|
+
result = finder.search
|
32
|
+
unconverged = []
|
33
|
+
result.each do |node|
|
34
|
+
if node['ohai_time'].to_i < start
|
35
|
+
unconverged << node
|
36
|
+
elsif converged.grep(/#{node.name}/).empty?
|
37
|
+
converged << node.name
|
38
|
+
ui.info "#{node.name} has converged" if ui
|
39
|
+
end
|
40
|
+
end
|
41
|
+
break if unconverged.count == 0
|
42
|
+
|
43
|
+
ui.stdout.print "." if ui
|
44
|
+
|
45
|
+
sleep probe_interval
|
46
|
+
end
|
47
|
+
|
48
|
+
if unconverged.count > 0
|
49
|
+
raise "Stopping promotion! Nodes (#{unconverged}) are not converging in #{env}"
|
50
|
+
end
|
26
51
|
end
|
27
52
|
end
|
28
53
|
|
data/lib/promote/rake_tasks.rb
CHANGED
@@ -99,9 +99,9 @@ module Promote
|
|
99
99
|
def define_promote_environment
|
100
100
|
namespace "Promote" do
|
101
101
|
desc "Promote one environment from another"
|
102
|
-
task "promote_environment", :source_environment, :
|
103
|
-
puts "Promoting constraints in #{args.source_environment} to #{args.
|
104
|
-
@promoter.
|
102
|
+
task "promote_environment", :source_environment, :destination_environment do |task, args|
|
103
|
+
puts "Promoting constraints in #{args.source_environment} to #{args.destination_environment}"
|
104
|
+
deps = @promoter.promote_to(args.source_environment, args.destination_environment)
|
105
105
|
end
|
106
106
|
end
|
107
107
|
end
|
@@ -110,8 +110,8 @@ module Promote
|
|
110
110
|
namespace "Promote" do
|
111
111
|
desc "Promote a list of environments from another"
|
112
112
|
task "promote_environments", :source_environment, :destination_environments do |task, args|
|
113
|
-
puts "Promoting constraints in #{args.source_environment} to #{args.
|
114
|
-
|
113
|
+
puts "Promoting constraints in #{args.source_environment} to #{args.destination_environments}"
|
114
|
+
@promoter.monitor_promotion(args.source_environment, args.destination_environments, 60 * 5)
|
115
115
|
end
|
116
116
|
end
|
117
117
|
end
|
data/lib/promote/version.rb
CHANGED
@@ -7,6 +7,8 @@ describe Promote::Promoter do
|
|
7
7
|
:client_key => 'key',
|
8
8
|
:chef_server_url => 'https://some.chef.server'}) }
|
9
9
|
|
10
|
+
let(:ui) { Chef::Knife::UI.new(STDOUT, STDERR, STDIN, {}) }
|
11
|
+
|
10
12
|
subject { Promote::Promoter.new(config) }
|
11
13
|
|
12
14
|
context "promote_to" do
|
@@ -63,14 +65,17 @@ describe Promote::Promoter do
|
|
63
65
|
let(:finder_bad){ double('node_finder', :search => [bad_node]) }
|
64
66
|
let (:good_node) {
|
65
67
|
node = Chef::Node.new
|
68
|
+
node.name "good_node"
|
66
69
|
node.default["ohai_time"] = Time.now.to_i + 3600
|
67
70
|
node
|
68
71
|
}
|
69
72
|
let (:bad_node) {
|
70
73
|
node = Chef::Node.new
|
74
|
+
node.name "bad_node"
|
71
75
|
node.default["ohai_time"] = Time.now.to_i - 3600
|
72
76
|
node
|
73
77
|
}
|
78
|
+
let(:ui) { nil }
|
74
79
|
|
75
80
|
before {
|
76
81
|
allow(Promote::NodeFinder).to receive(:new).and_return(finder_good)
|
@@ -78,10 +83,10 @@ describe Promote::Promoter do
|
|
78
83
|
|
79
84
|
context "all environments succeed" do
|
80
85
|
it "promotes all nodes" do
|
81
|
-
expect(subject).to receive(:promote_to).with("env1", "env2",
|
82
|
-
expect(subject).to receive(:promote_to).with("env1", "env3",
|
83
|
-
expect(subject).to receive(:promote_to).with("env1", "env4",
|
84
|
-
subject.monitor_promotion("env1", ["env2", "env3", "env4"], 1)
|
86
|
+
expect(subject).to receive(:promote_to).with("env1", "env2", ui)
|
87
|
+
expect(subject).to receive(:promote_to).with("env1", "env3", ui)
|
88
|
+
expect(subject).to receive(:promote_to).with("env1", "env4", ui)
|
89
|
+
subject.monitor_promotion("env1", ["env2", "env3", "env4"], 0.25, 1, ui)
|
85
90
|
end
|
86
91
|
end
|
87
92
|
|
@@ -91,11 +96,10 @@ describe Promote::Promoter do
|
|
91
96
|
}
|
92
97
|
|
93
98
|
it "stops on failure" do
|
94
|
-
|
95
|
-
expect(subject).to receive(:promote_to).with("env1", "
|
96
|
-
expect(subject).not_to receive(:promote_to).with("env1", "
|
97
|
-
expect
|
98
|
-
subject.monitor_promotion("env1", ["env2", "env3", "env4"], 1)
|
99
|
+
expect(subject).to receive(:promote_to).with("env1", "env2", ui)
|
100
|
+
expect(subject).to receive(:promote_to).with("env1", "env3", ui)
|
101
|
+
expect(subject).not_to receive(:promote_to).with("env1", "env4", ui)
|
102
|
+
expect{ subject.monitor_promotion("env1", ["env2", "env3", "env4"], 0.25, 1, ui) }.to raise_error(/env3$/)
|
99
103
|
end
|
100
104
|
end
|
101
105
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clc-promote
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- CenturyLink Cloud
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clc-git
|