Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -655,115 +655,6 @@ private void validateTemplateUrl(String url) {
validateTemplateThread.start();
}

/**
* Cancelable thread to validate a template and update the validation
* status.
*/
private final class ValidateTemplateThread extends CancelableThread {

private final ValidateTemplateRequest rq;

private ValidateTemplateThread(ValidateTemplateRequest rq) {
this.rq = rq;
}

@Override
public void run() {
ValidateTemplateResult validateTemplateResult;
Stack existingStack = null;

Map templateMap;
try {

// TODO: region should come from context for file-based actions
AmazonCloudFormation cf = getCloudFormationClient();
validateTemplateResult = cf.validateTemplate(rq);

if ( wizard.getDataModel().getMode() == Mode.Update && wizard.getDataModel().getStackName() != LOADING_STACKS ) {
DescribeStacksResult describeStacks = cf.describeStacks(new DescribeStacksRequest()
.withStackName(wizard.getDataModel().getStackName()));
if ( describeStacks.getStacks().size() == 1 ) {
existingStack = describeStacks.getStacks().iterator().next();
}
}

String templateBody = null;
if ( rq.getTemplateBody() != null ) {
templateBody = rq.getTemplateBody();
} else {
InputStream in = new URL(rq.getTemplateURL()).openStream();
try {
templateBody = IOUtils.toString(in);
} finally {
IOUtils.closeQuietly(in);
}
}

templateMap = parseTemplate(templateBody);
wizard.getDataModel().setTemplateBody(templateBody);

} catch ( Exception e ) {
templateValidationException = e;
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
synchronized ( this ) {
if ( !isCanceled() ) {
templateValidated.setValue(INVALID);
}
}
}
});
setRunning(false);
return;
}

final List<TemplateParameter> templateParams = validateTemplateResult.getParameters();
final Map templateJson = templateMap;
final List<String> requiredCapabilities = validateTemplateResult.getCapabilities();
final Stack stack = existingStack;

Display.getDefault().syncExec(new Runnable() {

@Override
public void run() {
try {
synchronized ( this ) {
if ( !isCanceled() ) {
wizard.getDataModel().getParametersDataModel().setTemplateParameters(templateParams);
wizard.setNeedsSecondPage(!templateParams.isEmpty());
wizard.getDataModel().getParametersDataModel().setTemplate(templateJson);
wizard.getDataModel().setRequiredCapabilities(requiredCapabilities);
if ( stack != null ) {
for ( Parameter param : stack.getParameters() ) {
boolean noEcho = false;

// This is a pain, but any "noEcho" parameters get returned as asterisks in the service response.
// The customer must fill these values out again, even for a running stack.
for ( TemplateParameter templateParam : wizard.getDataModel().getParametersDataModel().getTemplateParameters() ) {
if (templateParam.getNoEcho() && templateParam.getParameterKey().equals(param.getParameterKey())) {
noEcho = true;
break;
}
}

if ( !noEcho ) {
wizard.getDataModel().getParametersDataModel().getParameterValues()
.put(param.getParameterKey(), param.getParameterValue());
}
}
}
templateValidated.setValue(VALID);
}
}
} finally {
setRunning(false);
}
}
});
}
}

/**
* Parses the (already validated) template given and returns a map of its
* structure.
Expand Down
Loading