engineyard-serverside 1.5.24 → 1.5.25

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.
@@ -30,6 +30,7 @@ module EY
30
30
  create_revision_file
31
31
  run_with_callbacks(:bundle)
32
32
  setup_services
33
+ check_for_ey_config
33
34
  symlink_configs
34
35
  conditionally_enable_maintenance_page
35
36
  run_with_callbacks(:migrate)
@@ -52,6 +53,23 @@ module EY
52
53
  raise
53
54
  end
54
55
 
56
+ def parse_configured_services
57
+ result = YAML.load_file "#{c.shared_path}/config/ey_services_config_deploy.yml"
58
+ return {} unless result.is_a?(Hash)
59
+ result
60
+ rescue
61
+ {}
62
+ end
63
+
64
+ def check_for_ey_config
65
+ if gemfile? && lockfile
66
+ configured_services = parse_configured_services
67
+ if !configured_services.empty? && !lockfile.has_ey_config?
68
+ warning "Gemfile.lock does not contain ey_config. Add it to get EY::Config access to: #{configured_services.keys.join(', ')}."
69
+ end
70
+ end
71
+ end
72
+
55
73
  def check_repository
56
74
  if gemfile?
57
75
  info "~> Gemfile found."
@@ -286,6 +304,7 @@ WRAP
286
304
 
287
305
  def setup_services
288
306
  info "~> Setting up external services."
307
+ previously_configured_services = parse_configured_services
289
308
  begin
290
309
  sudo(services_command_check)
291
310
  rescue StandardError => e
@@ -294,11 +313,13 @@ WRAP
294
313
  end
295
314
  sudo(services_setup_command)
296
315
  rescue StandardError => e
297
- warning <<-WARNING
316
+ unless previously_configured_services.empty?
317
+ warning <<-WARNING
298
318
  External services configuration not updated. Using previous version.
299
319
  Deploy again if your services configuration appears incomplete or out of date.
300
320
  #{e}
301
- WARNING
321
+ WARNING
322
+ end
302
323
  end
303
324
 
304
325
  def symlink_configs(release_to_link=c.release_path)
@@ -15,6 +15,10 @@ module EY
15
15
  parse
16
16
  end
17
17
 
18
+ def has_ey_config?
19
+ @contents.index(/^\s+ey_config\s\([^\)]+\)$/)
20
+ end
21
+
18
22
  def any_database_adapter?
19
23
  any_ruby_adapter = %w[mysql2 mysql do_mysql pg do_postgres].any? do |type|
20
24
  @contents.index(/^\s+#{type}\s\([^\)]+\)$/)
@@ -1,5 +1,5 @@
1
1
  module EY
2
2
  module Serverside
3
- VERSION = '1.5.24'
3
+ VERSION = '1.5.25'
4
4
  end
5
5
  end
File without changes
@@ -32,24 +32,98 @@ describe "Deploying an application with services" do
32
32
  be_exist
33
33
  end
34
34
 
35
+ describe "a deploy without ey_config" do
36
+ before do
37
+ @deployer = setup_deploy
38
+ @deployer.mock_gemfile_contents <<-EOF
39
+ source :rubygems
40
+ gem 'rake'
41
+ gem 'pg'
42
+ EOF
43
+ @deployer.mock_lockfile_contents <<-EOF
44
+ GEM
45
+ remote: http://rubygems.org/
46
+ specs:
47
+ pg (0.11.0)
48
+ rake (0.9.2.2)
49
+
50
+ PLATFORMS
51
+ ruby
52
+
53
+ DEPENDENCIES
54
+ pg
55
+ rake
56
+ EOF
57
+ end
58
+
59
+ describe "with services" do
60
+ before do
61
+ @shared_services_file = @deploy_dir.join('shared', 'config', 'ey_services_config_deploy.yml')
62
+ @services_yml = {"servicio" => {"foo" => "bar"}}.to_yaml
63
+ @deployer.mock_services_setup!("echo '#{@services_yml}' > #{@shared_services_file}")
64
+ @deployer.deploy
65
+ end
66
+
67
+ it "warns about missing ey_config" do
68
+ @deployer.infos.should be_any { |info| info =~ /WARNING: Gemfile.lock does not contain ey_config/ }
69
+ end
70
+
71
+ end
72
+ describe "without services" do
73
+ before do
74
+ @deployer.deploy
75
+ end
76
+
77
+ it "works without warnings" do
78
+ @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
79
+ end
80
+
81
+ end
82
+ end
83
+
84
+ describe "deploy with invalid yaml ey_services_config_deploy" do
85
+ before do
86
+ @shared_services_file = @deploy_dir.join('shared', 'config', 'ey_services_config_deploy.yml')
87
+ @symlinked_services_file = @deploy_dir.join('current', 'config', 'ey_services_config_deploy.yml')
88
+ @invalid_services_yml = "42"
89
+
90
+ @deployer = setup_deploy
91
+ @deployer.mock_services_setup!("echo '#{@invalid_services_yml}' > #{@shared_services_file}")
92
+ @deployer.deploy
93
+ end
94
+
95
+ it "works without warning" do
96
+ @shared_services_file.should exist
97
+ @shared_services_file.should_not be_symlink
98
+ @shared_services_file.read.should == "#{@invalid_services_yml}\n"
99
+
100
+ @symlinked_services_file.should exist
101
+ @symlinked_services_file.should be_symlink
102
+ @shared_services_file.read.should == "#{@invalid_services_yml}\n"
103
+
104
+ @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
105
+ end
106
+ end
107
+
35
108
  describe "a succesful deploy" do
36
109
  before do
37
110
  @shared_services_file = @deploy_dir.join('shared', 'config', 'ey_services_config_deploy.yml')
38
111
  @symlinked_services_file = @deploy_dir.join('current', 'config', 'ey_services_config_deploy.yml')
112
+ @services_yml = {"servicio" => {"foo" => "bar"}}.to_yaml
39
113
 
40
114
  @deployer = setup_deploy
41
- @deployer.mock_services_setup!("echo 'somefilecontents' > #{@shared_services_file}")
115
+ @deployer.mock_services_setup!("echo '#{@services_yml}' > #{@shared_services_file}")
42
116
  @deployer.deploy
43
117
  end
44
118
 
45
119
  it "creates and symlinks ey_services_config_deploy.yml" do
46
120
  @shared_services_file.should exist
47
121
  @shared_services_file.should_not be_symlink
48
- @shared_services_file.read.should == "somefilecontents\n"
122
+ @shared_services_file.read.should == "#{@services_yml}\n"
49
123
 
50
124
  @symlinked_services_file.should exist
51
125
  @symlinked_services_file.should be_symlink
52
- @shared_services_file.read.should == "somefilecontents\n"
126
+ @shared_services_file.read.should == "#{@services_yml}\n"
53
127
 
54
128
  @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
55
129
  end
@@ -64,11 +138,11 @@ describe "Deploying an application with services" do
64
138
  it "silently fails" do
65
139
  @shared_services_file.should exist
66
140
  @shared_services_file.should_not be_symlink
67
- @shared_services_file.read.should == "somefilecontents\n"
141
+ @shared_services_file.read.should == "#{@services_yml}\n"
68
142
 
69
143
  @symlinked_services_file.should exist
70
144
  @symlinked_services_file.should be_symlink
71
- @shared_services_file.read.should == "somefilecontents\n"
145
+ @shared_services_file.read.should == "#{@services_yml}\n"
72
146
 
73
147
  @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
74
148
  end
@@ -79,38 +153,51 @@ describe "Deploying an application with services" do
79
153
  before do
80
154
  @deployer = setup_deploy
81
155
  @deployer.mock_services_setup!("notarealcommandsoitwillexitnonzero")
82
- @deployer.deploy
83
156
  end
84
157
 
85
- it "logs a warning and symlinks the existing config file" do
158
+ it "logs a warning and symlinks the existing config file when there is existing services file" do
159
+ @deployer.deploy
160
+
86
161
  @shared_services_file.should exist
87
162
  @shared_services_file.should_not be_symlink
88
- @shared_services_file.read.should == "somefilecontents\n"
163
+ @shared_services_file.read.should == "#{@services_yml}\n"
89
164
 
90
165
  @symlinked_services_file.should exist
91
166
  @symlinked_services_file.should be_symlink
92
- @shared_services_file.read.should == "somefilecontents\n"
167
+ @shared_services_file.read.should == "#{@services_yml}\n"
93
168
 
94
169
  @deployer.infos.should be_any { |info| info =~ /WARNING: External services configuration not updated/ }
95
170
  end
96
171
 
172
+ it "does not log a warning or symlink a config file when there is no existing services file" do
173
+ FileUtils.rm(@shared_services_file)
174
+ @deployer.deploy
175
+
176
+ @shared_services_file.should_not exist
177
+ @symlinked_services_file.should_not exist
178
+
179
+ @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
180
+ end
181
+
97
182
  end
98
183
 
99
184
  describe "followed by another successfull deploy" do
100
185
  before do
101
186
  @deployer = setup_deploy
102
- @deployer.mock_services_setup!("echo 'otherfilecontents' > #{@shared_services_file}")
187
+ @services_yml = {"servicio" => {"foo" => "bar2"}}.to_yaml
188
+
189
+ @deployer.mock_services_setup!("echo '#{@services_yml}' > #{@shared_services_file}")
103
190
  @deployer.deploy
104
191
  end
105
192
 
106
193
  it "replaces the config with the new one (and symlinks)" do
107
194
  @shared_services_file.should exist
108
195
  @shared_services_file.should_not be_symlink
109
- @shared_services_file.read.should == "otherfilecontents\n"
196
+ @shared_services_file.read.should == "#{@services_yml}\n"
110
197
 
111
198
  @symlinked_services_file.should exist
112
199
  @symlinked_services_file.should be_symlink
113
- @shared_services_file.read.should == "otherfilecontents\n"
200
+ @shared_services_file.read.should == "#{@services_yml}\n"
114
201
 
115
202
  @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
116
203
  end
@@ -6,6 +6,8 @@ class FullTestDeploy < EY::Serverside::Deploy
6
6
  @infos = []
7
7
  @debugs = []
8
8
  @commands = []
9
+ @gemfile_contents = nil
10
+ @lockfile_contents = nil
9
11
  end
10
12
 
11
13
  # stfu
@@ -84,6 +86,14 @@ class FullTestDeploy < EY::Serverside::Deploy
84
86
  @mock_services_setup_command = value
85
87
  end
86
88
 
89
+ def mock_gemfile_contents(gemfile_contents)
90
+ @gemfile_contents = gemfile_contents
91
+ end
92
+
93
+ def mock_lockfile_contents(lockfile_contents)
94
+ @lockfile_contents = lockfile_contents
95
+ end
96
+
87
97
  end
88
98
 
89
99
  module EY::Serverside::Strategies::IntegrationSpec
@@ -119,21 +129,23 @@ module EY::Serverside::Strategies::IntegrationSpec
119
129
  end
120
130
 
121
131
  def gemfile_contents
122
- <<-EOF
132
+ @gemfile_contents || <<-EOF
123
133
  source :rubygems
124
134
  gem 'rake'
125
135
  gem 'pg'
136
+ gem 'ey_config'
126
137
  EOF
127
138
  end
128
139
 
129
140
  # Generated using Bundler v1.0.21
130
141
  def lockfile_contents
131
- <<-EOF
142
+ @lockfile_contents || <<-EOF
132
143
  GEM
133
144
  remote: http://rubygems.org/
134
145
  specs:
135
146
  pg (0.11.0)
136
147
  rake (0.9.2.2)
148
+ ey_config (0.0.1)
137
149
 
138
150
  PLATFORMS
139
151
  ruby
@@ -141,6 +153,7 @@ PLATFORMS
141
153
  DEPENDENCIES
142
154
  pg
143
155
  rake
156
+ ey_config
144
157
  EOF
145
158
  end
146
159
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: engineyard-serverside
3
3
  version: !ruby/object:Gem::Version
4
- hash: 51
4
+ hash: 49
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 5
9
- - 24
10
- version: 1.5.24
9
+ - 25
10
+ version: 1.5.25
11
11
  platform: ruby
12
12
  authors:
13
13
  - EY Cloud Team
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-01-12 00:00:00 Z
18
+ date: 2012-01-13 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -284,6 +284,7 @@ files:
284
284
  - spec/custom_deploy_spec.rb
285
285
  - spec/deploy_hook_spec.rb
286
286
  - spec/deprecation_spec.rb
287
+ - spec/fixtures/gitrepo/bar
287
288
  - spec/fixtures/gitrepo/foo
288
289
  - spec/fixtures/gitrepo.tar.gz
289
290
  - spec/fixtures/invalid_hook.rb
@@ -351,6 +352,7 @@ test_files:
351
352
  - spec/custom_deploy_spec.rb
352
353
  - spec/deploy_hook_spec.rb
353
354
  - spec/deprecation_spec.rb
355
+ - spec/fixtures/gitrepo/bar
354
356
  - spec/fixtures/gitrepo/foo
355
357
  - spec/fixtures/gitrepo.tar.gz
356
358
  - spec/fixtures/invalid_hook.rb