clc-promote 0.7.11 → 0.8.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ba0b9b13e41b7847ad771a60df668435e1f57535
4
- data.tar.gz: 5a088cfa97247148ca799d5c9cd7716d916be6c4
3
+ metadata.gz: 51ac1711f235f79d4b72524866f866a3102fe775
4
+ data.tar.gz: 1b58e49d41e138be59c1740bead020ae83cdd8f5
5
5
  SHA512:
6
- metadata.gz: 0812c0e3e59a7af1e456501e89aee87ec8851adaa9c02f4c5dea090002d19e6c63cf3712176c37b3d40fa9df6d8f94160bf4cbcd204f108778e6ec277e05a88c
7
- data.tar.gz: b107b748207b37b47da4a9fc9881a9eee591bd15e9650450e450cbf37125cccdeb78a9f8aebad9bcaf1be35d5dd91577741947710235ad373ffdd0d5a8b3bc87
6
+ metadata.gz: 63359bcc4e3bb5347c9ecf0476bed57784b1da22c92a80bca824d66987cd127148ffcc917357989c105e2b3cac9666bea564f5257349486817f02c6d9df59879
7
+ data.tar.gz: 80827f613f6d462f7421ca8eb4e8520c9ff66c1a6fedd8389178b192b504b472cbd717730361c2057beaaf8235e029eb00eff0644bcd1f9703b4db7c7a861be3
@@ -21,37 +21,17 @@ module Promote
21
21
  end
22
22
 
23
23
  def monitor_promotion(source_environment, destination_environments, probe_interval, max_wait = 3600, ui = nil)
24
+ ui.info "Waiting for #{source_environment} to finish" if ui
25
+ check_promotion(source_environment, probe_interval, max_wait, ui)
26
+
24
27
  uploader = Uploader.new(config)
25
28
 
26
29
  destination_environments.each do |env|
27
30
  ui.confirm "Promote #{source_environment} to #{env}" if ui
28
31
  promote_to(source_environment, env, ui)
29
- uploader.upload_environment(env)
30
- start = Time.now.to_i
31
- finder = NodeFinder.new("chef_environment:#{env}", config)
32
- unconverged = nil
33
- converged = []
34
- until Time.now.to_i - start > max_wait
35
- result = finder.search
36
- unconverged = []
37
- result.each do |node|
38
- if node['ohai_time'].to_i < start
39
- unconverged << node
40
- elsif converged.grep(/#{node.name}/).empty?
41
- converged << node.name
42
- ui.info "#{node.name} has converged" if ui
43
- end
44
- end
45
- break if unconverged.count == 0
46
-
47
- ui.stdout.print "." if ui
48
-
49
- sleep probe_interval
50
- end
32
+ uploader.upload_environment(env, ui)
51
33
 
52
- if unconverged.count > 0
53
- raise "Stopping promotion! Nodes (#{unconverged}) are not converging in #{env}"
54
- end
34
+ check_promotion(env, probe_interval, max_wait, ui)
55
35
  end
56
36
  end
57
37
 
@@ -116,5 +96,33 @@ module Promote
116
96
  )
117
97
  Chef::ChefFS::FileSystem.copy_to(pattern, fs_config.chef_fs, local, nil, Chef::Config)
118
98
  end
99
+
100
+ def check_promotion(environment_to_check, probe_interval, max_wait, ui)
101
+ start = Time.now.to_i
102
+ finder = NodeFinder.new("chef_environment:#{environment_to_check}", config)
103
+ unconverged = nil
104
+ converged = []
105
+ until Time.now.to_i - start > max_wait
106
+ result = finder.search
107
+ unconverged = []
108
+ result.each do |node|
109
+ if node['ohai_time'].to_i < start
110
+ unconverged << node
111
+ elsif converged.grep(/#{node.name}/).empty?
112
+ converged << node.name
113
+ ui.info "#{node.name} has converged" if ui
114
+ end
115
+ end
116
+ break if unconverged.count == 0
117
+
118
+ ui.stdout.print "." if ui
119
+
120
+ sleep probe_interval
121
+ end
122
+
123
+ if unconverged.count > 0
124
+ raise "Stopping promotion! Nodes (#{unconverged}) are not converging in #{environment_to_check}"
125
+ end
126
+ end
119
127
  end
120
128
  end
@@ -112,7 +112,7 @@ module Promote
112
112
  task "promote_environments", :source_environment, :destination_environments do |task, args|
113
113
  puts "Promoting constraints in #{args.source_environment} to #{args.destination_environments}"
114
114
  ui = Chef::Knife::UI.new(STDOUT, STDERR, STDIN, {})
115
- @promoter.monitor_promotion(args.source_environment, args.destination_environments, 5, 3600, ui)
115
+ @promoter.monitor_promotion(args.source_environment, args.destination_environments.split(' '), 5, 3600, ui)
116
116
  end
117
117
  end
118
118
  end
@@ -59,8 +59,8 @@ module Promote
59
59
  end
60
60
  end
61
61
 
62
- def upload_environment(environment_name)
63
- upload_file("/environments/#{environment_name}.json")
62
+ def upload_environment(environment_name, ui = nil)
63
+ upload_file("/environments/#{environment_name}.json", nil, ui)
64
64
  end
65
65
 
66
66
  def upload_environments
@@ -73,11 +73,15 @@ module Promote
73
73
 
74
74
  def upload_data_bags
75
75
  data_bag_directory = File.join(config.temp_directory, "data_bags")
76
- chef_fs_directory = Chef::ChefFS::FileSystem::ChefRepositoryFileSystemRootDir.new(
77
- {
78
- 'data_bags' => [data_bag_directory]
79
- }
80
- )
76
+
77
+ chef_fs_directory = nil
78
+ with_chef_server(config) do
79
+ chef_fs_directory = Chef::ChefFS::FileSystem::ChefRepositoryFileSystemRootDir.new(
80
+ {
81
+ 'data_bags' => [data_bag_directory]
82
+ }
83
+ )
84
+ end
81
85
 
82
86
  config.reset_temp_dir
83
87
 
@@ -135,16 +139,22 @@ module Promote
135
139
  end
136
140
  end
137
141
 
138
- def upload_file(file_path, src = Chef::ChefFS::Config.new.local_fs)
142
+ def upload_file(file_path, src = nil, ui = nil)
143
+ ui.info "Uploading #{file_path} to #{config.chef_server_url}" if ui
139
144
  pattern = Chef::ChefFS::FilePattern.new(file_path)
140
145
 
141
146
  with_chef_server(config) do
147
+ fs_config = Chef::ChefFS::Config.new
148
+ src ||= fs_config.local_fs
149
+
142
150
  Chef::ChefFS::FileSystem.copy_to(
143
151
  pattern,
144
152
  src,
145
- Chef::ChefFS::Config.new.chef_fs,
153
+ fs_config.chef_fs,
146
154
  nil,
147
- Chef::Config
155
+ Chef::Config,
156
+ ui,
157
+ proc { |entry| fs_config.format_path(entry) }
148
158
  )
149
159
  end
150
160
 
@@ -1,3 +1,3 @@
1
1
  module Promote
2
- VERSION = '0.7.11'
2
+ VERSION = '0.8.0'
3
3
  end
@@ -11,11 +11,14 @@ describe Kitchen::Provisioner::Environment do
11
11
  let(:suite) do
12
12
  double('suite', :name => "fries")
13
13
  end
14
+ let(:platform) do
15
+ double('platform', :os_type => "shake")
16
+ end
14
17
  let(:transport) do
15
18
  double('transport', :sudo => config[:sudo], :shell => "bourne")
16
19
  end
17
20
  let(:instance) do
18
- double('instance', :name => "coolbeans", :logger => logger, :suite => suite, :transport => transport, :verifier => {:test_base_path => 'base_path'})
21
+ double('instance', :name => "coolbeans", :logger => logger, :suite => suite, :platform => platform, :transport => transport, :verifier => {:test_base_path => 'base_path'})
19
22
  end
20
23
  let(:downloader) { double('downloader') }
21
24
  let(:fake_berks) { double('berksfile', :install => nil, :update => nil, :list => [
@@ -87,12 +87,25 @@ describe Promote::Promoter do
87
87
  it "promotes all nodes" do
88
88
  %w{env2 env3 env4}.each do |env|
89
89
  expect(subject).to receive(:promote_to).with("env1", env, ui)
90
- expect(uploader).to receive(:upload_environment).with(env)
90
+ expect(uploader).to receive(:upload_environment).with(env, ui)
91
91
  end
92
92
  subject.monitor_promotion("env1", ["env2", "env3", "env4"], 0.25, 1, ui)
93
93
  end
94
94
  end
95
95
 
96
+ context "source environment does not fully converge" do
97
+ before {
98
+ allow(Promote::NodeFinder).to receive(:new).with("chef_environment:env1", config).and_return(finder_bad)
99
+ }
100
+
101
+ it "promotes no nodes" do
102
+ expect(subject).not_to receive(:promote_to)
103
+ expect(uploader).not_to receive(:upload_environment)
104
+
105
+ expect{ subject.monitor_promotion("env1", ["env2", "env3", "env4"], 0.25, 1, ui) }.to raise_error(/env1$/)
106
+ end
107
+ end
108
+
96
109
  context "stops promotion when promotion fails" do
97
110
  before {
98
111
  allow(Promote::NodeFinder).to receive(:new).with("chef_environment:env3", config).and_return(finder_bad)
@@ -101,7 +114,7 @@ describe Promote::Promoter do
101
114
  it "stops on failure" do
102
115
  %w{env2 env3}.each do |env|
103
116
  expect(subject).to receive(:promote_to).with("env1", env, ui)
104
- expect(uploader).to receive(:upload_environment).with(env)
117
+ expect(uploader).to receive(:upload_environment).with(env, ui)
105
118
  end
106
119
  expect(subject).not_to receive(:promote_to).with("env1", "env4", ui)
107
120
  expect(uploader).not_to receive(:upload_environment).with("env4")
@@ -14,6 +14,7 @@ describe Promote::Uploader do
14
14
  subject { Promote::Uploader.new(config) }
15
15
 
16
16
  before {
17
+ Chef::Config[:chef_repo_path] = config.repo_root
17
18
  allow(Chef::ChefFS::FileSystem).to receive(:copy_to)
18
19
  }
19
20
 
@@ -186,7 +187,7 @@ describe Promote::Uploader do
186
187
  let(:env_name) { "my_test" }
187
188
 
188
189
  it "uploads the environment" do
189
- expect(Chef::ChefFS::FileSystem).to receive(:copy_to).with(an_instance_of(Chef::ChefFS::FilePattern), anything(), anything(), anything(), anything()) do |arg|
190
+ expect(Chef::ChefFS::FileSystem).to receive(:copy_to).with(an_instance_of(Chef::ChefFS::FilePattern), anything(), anything(), anything(), anything(), anything(), anything()) do |arg|
190
191
  expect(arg.pattern).to eq(File.join("/environments", "#{env_name}.json"))
191
192
  end
192
193
  subject.upload_environment(env_name)
@@ -202,7 +203,9 @@ describe Promote::Uploader do
202
203
  an_instance_of(Chef::ChefFS::FileSystem::ChefRepositoryFileSystemRootDir),
203
204
  anything(),
204
205
  anything(),
205
- anything()
206
+ anything(),
207
+ anything(),
208
+ anything()
206
209
  ) do |file_pattern, source|
207
210
  expect(file_pattern.pattern).to eq(File.join("/environments/*.json"))
208
211
  expect(source.child_paths["environments"]).to eq(local_environments)
@@ -220,6 +223,8 @@ describe Promote::Uploader do
220
223
  an_instance_of(Chef::ChefFS::FileSystem::ChefRepositoryFileSystemRootDir),
221
224
  anything(),
222
225
  anything(),
226
+ anything(),
227
+ anything(),
223
228
  anything()
224
229
  ) do |file_pattern, source|
225
230
  expect(file_pattern.pattern).to eq(File.join("/roles/*.json"))
@@ -270,6 +275,8 @@ describe Promote::Uploader do
270
275
  an_instance_of(Chef::ChefFS::FileSystem::ChefRepositoryFileSystemRootDir),
271
276
  anything(),
272
277
  anything(),
278
+ anything(),
279
+ anything(),
273
280
  anything()
274
281
  ) do |file_pattern, source|
275
282
  expect(file_pattern.pattern).to eq("/data_bags/**/*.json")
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.11
4
+ version: 0.8.0
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-20 00:00:00.000000000 Z
11
+ date: 2015-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clc-git