in software/cm/ansible/src/main/java/org/apache/brooklyn/entity/cm/ansible/AnsibleSshWorkflowStep.java [67:114]
protected Object doTaskBody(WorkflowStepInstanceExecutionContext context) {
SshMachineLocation machine = Locations.findUniqueSshMachineLocation(context.getEntity().getLocations()).orThrow("No SSH location available for workflow at " + context.getEntity());
Object extraVars = context.getInput(ANSIBLE_VARS);
String playbookName = context.getInput(ANSIBLE_PLAYBOOK);
String playbookUrl = context.getInput(ANSIBLE_PLAYBOOK_URL);
Object playbookYamlO = context.getInput(ANSIBLE_PLAYBOOK_YAML);
if (playbookUrl != null && playbookYamlO != null) {
throw new IllegalArgumentException( "You cannot specify both "+ AnsibleConfig.ANSIBLE_PLAYBOOK_URL.getName() +
" and " + AnsibleConfig.ANSIBLE_PLAYBOOK_YAML.getName() + " as arguments.");
}
if (playbookUrl == null && playbookYamlO == null) {
throw new IllegalArgumentException("You have to specify either " + AnsibleConfig.ANSIBLE_PLAYBOOK_URL.getName() +
" or " + AnsibleConfig.ANSIBLE_PLAYBOOK_YAML.getName() + " as arguments.");
}
String playbookYaml;
try {
playbookYaml = playbookYamlO==null ? null : playbookYamlO instanceof String ? (String) playbookYamlO :
BeanWithTypeUtils.newYamlMapper(context.getManagementContext(), false, null, false).writeValueAsString(playbookYamlO);
} catch (JsonProcessingException e) {
throw Exceptions.propagateAnnotated("Invalid YAML supplied for playbook", e);
}
if (playbookName==null) playbookName = "playbook-"+Strings.firstNonNull(playbookUrl, playbookYaml).hashCode();
if (!Boolean.FALSE.equals(context.getInput(INSTALL_ANSIBLE))) {
DynamicTasks.queue(AnsiblePlaybookTasks.installAnsible(getInstallDir(context), false));
DynamicTasks.queue(AnsiblePlaybookTasks.setUpHostsFile(false));
}
if (extraVars != null) {
DynamicTasks.queue(AnsiblePlaybookTasks.configureExtraVars(getRunDir(context), extraVars, false));
}
if (Strings.isNonBlank(playbookUrl)) {
DynamicTasks.queue(AnsiblePlaybookTasks.installPlaybook(getRunDir(context), playbookName, playbookUrl));
}
if (Strings.isNonBlank(playbookYaml)) {
DynamicTasks.queue(AnsiblePlaybookTasks.buildPlaybookFile(getRunDir(context), playbookName, playbookYaml));
}
ProcessTaskFactory<Map<?,?>> tf = SshWorkflowStep.customizeProcessTaskFactory(context, AnsiblePlaybookTasks.runAnsible(getRunDir(context), extraVars, playbookName));
return DynamicTasks.queue(tf).asTask().getUnchecked();
}