@@ -107,9 +107,10 @@ def roll_forward!
107
107
next_attempt = nil
108
108
while cont
109
109
update_config do
110
- session = Session . new ( @config . failures )
111
- cont = roll_forward_step! session
112
- next_attempt = session . next_attempt
110
+ Session . new ( @config . failures ) . tap do |session |
111
+ roll_forward_step! session
112
+ next_attempt , cont = session . next_attempt , session . any_actions_executed?
113
+ end
113
114
end
114
115
end
115
116
if next_attempt
@@ -159,70 +160,62 @@ def roll_forward_step! session
159
160
raise ExpectedDelay , "No IP address assigned yet"
160
161
end
161
162
162
- jecloud_installed = false
163
- session . action "#{ server . uuid } -ssh" do
164
- session . action "#{ server . uuid } -sudo-test" do
165
- x = server_session . sudo! ( "echo ok" ) . strip
166
- if x == 'ok'
167
- $log. debug "sudo test ok"
168
- else
169
- raise UnexpectedExternalProblem , "sudo does not work on #{ server . public_ip } "
170
- end
163
+ session . check "#{ server . uuid } -sudo-test" do
164
+ x = server_session . sudo! ( "echo ok" ) . strip
165
+ if x == 'ok'
166
+ $log. debug "sudo test ok"
167
+ else
168
+ raise UnexpectedExternalProblem , "sudo does not work on #{ server . public_ip } "
171
169
end
170
+ end
172
171
172
+ jecloud_installed = session . check ( "#{ server . uuid } -is-jecloud-up-to-date" ) do
173
173
jecloud_version = server_session . exec! ( "jecloud print-version || echo 'NONE'" ) . strip
174
- $log. debug "JeCloud version on the server: #{ jecloud_version } "
175
- if jecloud_version =~ /^\d +\. \d +(?:\. \d +(?:\. \d +)?)?$/
176
- if jecloud_version . pad_numbers >= JeCloud ::VERSION . pad_numbers
177
- $log. debug "JeCloud installed on the server is good enough."
178
- jecloud_installed = true
179
- end
174
+ ( jecloud_version =~ /^\d +\. \d +(?:\. \d +(?:\. \d +)?)?$/ && jecloud_version . pad_numbers >= JeCloud ::VERSION . pad_numbers ) . tap do |is_good_enough |
175
+ $log. debug "JeCloud version on the server: #{ jecloud_version } (#{ is_good_enough ? 'Good to go!' : 'Need to (re)install JeCloud.' } )"
180
176
end
177
+ end
178
+
179
+ session . action "#{ server . uuid } -install-jecloud" , :unless => jecloud_installed do
180
+ yum_packages = %w/ gcc gcc-c++ openssl openssl-devel ruby-devel rubygems git /
181
+
182
+ $log. debug "Installing yum packages: #{ yum_packages . join ( ' ' ) } "
183
+ server_session . sudo_print! ( "yum install -y #{ yum_packages . join ( ' ' ) } " )
184
+ $log. info "Installed yum packages: #{ yum_packages . join ( ' ' ) } "
185
+
186
+ $log. debug "Rebuilding JeCloud locally"
187
+ puts `rake build`
188
+ raise UnexpectedExternalProblem , "JeCloud build failed" unless $?. success?
181
189
182
- session . action "#{ server . uuid } -install-jecloud" , :unless => jecloud_installed do
183
- yum_packages = %w/ gcc gcc-c++ openssl openssl-devel ruby-devel rubygems git /
184
-
185
- $log. debug "Installing yum packages: #{ yum_packages . join ( ' ' ) } "
186
- server_session . sudo_print! ( "yum install -y #{ yum_packages . join ( ' ' ) } " )
187
- $log. info "Installed yum packages: #{ yum_packages . join ( ' ' ) } "
188
-
189
- $log. debug "Rebuilding JeCloud locally"
190
- puts `rake build`
191
- raise UnexpectedExternalProblem , "JeCloud build failed" unless $?. success?
192
-
193
- remote_path = "/tmp/#{ File . basename ( GEM_FILE ) } "
194
- $log. debug "Uploading JeCloud gem into #{ server . public_ip } :#{ remote_path } "
195
- server_session . sftp . file . open ( remote_path , 'w' ) do |of |
196
- of . write ( File . read ( GEM_FILE ) )
197
- end
198
- server_session . sftp . loop
199
-
200
- $log. debug "Uninstalling old JeCloud version if any"
201
- server_session . sudo_print! ( "gem uninstall --executables jecloud" )
202
-
203
- $log. debug "Installing JeCloud gem"
204
- server_session . sudo_print! ( "gem install --no-rdoc --no-ri #{ remote_path } " )
205
-
206
- jecloud_version = server_session . exec! ( "jecloud print-version || echo 'NONE'" ) . strip
207
- if jecloud_version == JeCloud ::VERSION
208
- $log. info "Installed JeCloud on #{ server . public_ip } "
209
- else
210
- puts jecloud_version
211
- raise UnexpectedExternalProblem , "Installation of JeCloud failed on #{ server . public_ip } "
212
- end
190
+ remote_path = "/tmp/#{ File . basename ( GEM_FILE ) } "
191
+ $log. debug "Uploading JeCloud gem into #{ server . public_ip } :#{ remote_path } "
192
+ server_session . sftp . file . open ( remote_path , 'w' ) do |of |
193
+ of . write ( File . read ( GEM_FILE ) )
213
194
end
195
+ server_session . sftp . loop
214
196
215
- # deployment requested?
216
- if server . deployment?
217
- # pretend that it succeeded
218
- server . deployment = nil
219
- return true
197
+ $log. debug "Uninstalling old JeCloud version if any"
198
+ server_session . sudo_print! ( "gem uninstall --executables jecloud" )
199
+
200
+ $log. debug "Installing JeCloud gem"
201
+ server_session . sudo_print! ( "gem install --no-rdoc --no-ri #{ remote_path } " )
202
+
203
+ jecloud_version = server_session . exec! ( "jecloud print-version || echo 'NONE'" ) . strip
204
+ if jecloud_version == JeCloud ::VERSION
205
+ $log. info "Installed JeCloud on #{ server . public_ip } "
206
+ else
207
+ puts jecloud_version
208
+ raise UnexpectedExternalProblem , "Installation of JeCloud failed on #{ server . public_ip } "
220
209
end
221
210
end
211
+
212
+ session . action "#{ server . uuid } -start-deployment" , :if => server . deployment? do
213
+ # pretend that it succeeded
214
+ server . deployment = nil
215
+ end
222
216
end
223
217
server_session . close!
224
218
end
225
- return false
226
219
end
227
220
228
221
private
0 commit comments