Skip to content

Commit

Permalink
feat(runjob): add ability to read props file even if job fails (spinn…
Browse files Browse the repository at this point in the history
…aker#3855)

* feat(runjob): add ability to read props file even if job fails

* fixup! feat(runjob): add ability to read props file even if job fails
  • Loading branch information
marchello2000 authored Aug 11, 2020
1 parent 707d449 commit 63a3322
Showing 1 changed file with 23 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import com.fasterxml.jackson.core.type.TypeReference
import com.fasterxml.jackson.databind.ObjectMapper
import com.netflix.frigga.Names
import com.netflix.spinnaker.kork.core.RetrySupport
import com.netflix.spinnaker.kork.exceptions.ConfigurationException
import com.netflix.spinnaker.orca.api.pipeline.models.ExecutionStatus
import com.netflix.spinnaker.orca.api.pipeline.OverridableTimeoutRetryableTask
import com.netflix.spinnaker.orca.api.pipeline.models.StageExecution
Expand Down Expand Up @@ -128,30 +129,35 @@ public class WaitOnJobCompletion extends AbstractCloudProviderAwareTask implemen
Map job = objectMapper.readValue(jobStream, new TypeReference<Map>() {})
outputs.jobStatus = job

outputs.completionDetails = job.completionDetails
switch ((String) job.jobState) {
case "Succeeded":
status = ExecutionStatus.SUCCEEDED
outputs.completionDetails = job.completionDetails

if (stage.context.propertyFile) {
Map<String, Object> properties = [:]
retrySupport.retry({
properties = katoRestService.getFileContents(appName, account, location, name, stage.context.propertyFile)
if (properties.size() == 0) {
throw new IllegalStateException("Expected properties file ${stage.context.propertyFile} but it was either missing, empty or contained invalid syntax")
}
}, 6, 5000, false) // retry for 30 seconds
outputs << properties
outputs.propertyFileContents = properties
}

return
break

case "Failed":
status = ExecutionStatus.TERMINAL
outputs.completionDetails = job.completionDetails
return
break
}

if ((status == ExecutionStatus.SUCCEEDED) || (status == ExecutionStatus.TERMINAL)) {
if (stage.context.propertyFile) {
Map<String, Object> properties = [:]
retrySupport.retry({
properties = katoRestService.getFileContents(appName, account, location, name, stage.context.propertyFile)
if (properties.size() == 0) {
if (status == ExecutionStatus.SUCCEEDED) {
throw new ConfigurationException("Expected properties file ${stage.context.propertyFile} but it was either missing, empty or contained invalid syntax")
} else {
throw new ConfigurationException("Expected properties file ${stage.context.propertyFile} but it was either missing, empty or contained invalid syntax (this may be because the job failed)")
}
}
}, 6, 5000, false) // retry for 30 seconds
outputs << properties
outputs.propertyFileContents = properties
}
}

}

TaskResult.builder(status).context(outputs).outputs(outputs).build()
Expand Down

0 comments on commit 63a3322

Please sign in to comment.