clc-promote 0.7.9 → 0.7.10
Sign up to get free protection for your applications and to get access to all the features.
- 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
|