Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes for editing a playbook service template #761

Merged
Merged
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 @@ -23,7 +23,6 @@ ManageIQ.angular.app.controller('catalogItemFormController', ['$scope', 'catalog
provisioning_value: '',
provisioning_variables: {},
provisioning_editMode: false,
provisioning_cloud_type: '',
retirement_repository_id: '',
retirement_playbook_id: '',
retirement_machine_credential_id: '',
Expand All @@ -34,9 +33,10 @@ ManageIQ.angular.app.controller('catalogItemFormController', ['$scope', 'catalog
retirement_value: '',
retirement_variables: {},
retirement_editMode: false,
retirement_cloud_type: ''
};
getRemoveResourcesTypes();
vm.provisioning_cloud_type = '';
vm.retirement_cloud_type = '';
vm.formId = catalogItemFormId;
vm.afterGet = false;
vm.model = "catalogItemModel";
Expand All @@ -46,8 +46,9 @@ ManageIQ.angular.app.controller('catalogItemFormController', ['$scope', 'catalog
if (catalogItemFormId == 'new') {
$scope.newRecord = true;
vm.formOptions();
vm.afterGet = true;
vm.modelCopy = angular.copy( vm.catalogItemModel );
vm.formCloudCredentials(null, null);
vm.afterGet = true;
vm.modelCopy = angular.copy(vm.catalogItemModel);
} else {
vm.newRecord = false;
catalogItemDataFactory.getCatalogItemData(catalogItemFormId).then(function (catalogItemData) {
Expand All @@ -56,38 +57,55 @@ ManageIQ.angular.app.controller('catalogItemFormController', ['$scope', 'catalog
vm.catalogItemModel.description = catalogItemData.description;
vm.catalogItemModel.display = catalogItemData.display;
vm.catalogItemModel.catalog_id = catalogItemData.service_template_catalog_id;
vm.catalogItemModel.provisioning_dialog_id = catalogItemData.provisioning_dialog_id;
vm.catalogItemModel.provisioning_dialog_id = catalogItemData.provisioning_dialog_id;
vm.formOptions();
vm.formCloudCredentials(catalogItemData.config_info.provision.cloud_credential_id, catalogItemData.config_info.retirement.cloud_credential_id);
getConfigInfo(catalogItemData.config_info);
vm.afterGet = true;
vm.modelCopy = angular.copy(vm.catalogItemModel);
});
}
};

var getRemoveResourcesTypes = function() {
if (angular.isUndefined(vm.catalogItemModel.retirement_playbook_id) || vm.catalogItemModel.retirement_playbook_id === '') {
var getRemoveResourcesTypes = function () {
if (angular.isUndefined(vm.catalogItemModel.retirement_repository_id) || vm.catalogItemModel.retirement_repository_id === '') {
vm.catalogItemModel.retirement_remove_resources = 'yes_without_playbook';
vm.catalogItemModel['remove_resources_types'] = {
vm['remove_resources_types'] = {
"No": "no_without_playbook",
"Yes": "yes_without_playbook"
};
} else {
vm.catalogItemModel.retirement_remove_resources = 'no_with_playbook';
vm.catalogItemModel['remove_resources_types'] = {
vm['remove_resources_types'] = {
"No": "no_with_playbook",
"Before Playbook runs": "pre_with_playbook",
"After Playbook runs": "post_with_playbook"
};
}
}

var getConfigInfo = function(configData) {
var getCredentialType = function (prefix, credentialId) {
var url = '/api/authentications/' + credentialId;
API.get(url).then(function (data) {
vm[prefix + '_cloud_type'] = data.type;

if (vm.cloud_types[vm[prefix + '_cloud_type']] !== 'undefined') {
vm['_' + prefix + '_cloud_type'] = data.type;
getCloudCredentialsforType(prefix, data.type);
}
})
};

var setIfDefined = function(value) {
return (typeof value !== 'undefined') ? value : '';
};

var getConfigInfo = function (configData) {
vm.catalogItemModel.provisioning_repository_id = configData.provision.repository_id;
vm.catalogItemModel.provisioning_playbook_id = configData.provision.playbook_id;
vm.catalogItemModel.provisioning_machine_credential_id = configData.provision.credential_id;
vm.catalogItemModel.provisioning_network_credential_id = configData.provision.network_credential_id;
vm.catalogItemModel.provisioning_cloud_credential_id = configData.provision.cloud_credential_id;
vm.catalogItemModel.provisioning_cloud_credential_id = setIfDefined(configData.provision.cloud_credential_id);
vm.catalogItemModel.provisioning_inventory = configData.provision.hosts;
vm.catalogItemModel.provisioning_dialog_existing = configData.provision.dialog_id ? "existing" : "create";
vm.catalogItemModel.provisioning_dialog_id = configData.provision.dialog_id;
Expand All @@ -96,23 +114,25 @@ ManageIQ.angular.app.controller('catalogItemFormController', ['$scope', 'catalog
vm.catalogItemModel.provisioning_value = '';
setExtraVars('provisioning_variables', configData.provision.extra_vars);

vm.catalogItemModel.retirement_remove_resources = configData.retirement.remove_resources;
if (typeof configData.retirement.repository_id !== 'undefined') {
vm.catalogItemModel.retirement_repository_id = configData.retirement.repository_id;
vm.catalogItemModel.retirement_playbook_id = configData.retirement.playbook_id;
getRemoveResourcesTypes();
vm.catalogItemModel.retirement_remove_resources = configData.retirement.remove_resources;
vm.catalogItemModel.retirement_machine_credential_id = configData.retirement.credential_id;
}
vm.catalogItemModel.retirement_network_credential_id = configData.retirement.network_credential_id;
vm.catalogItemModel.retirement_cloud_credential_id = configData.retirement.cloud_credential_id;
vm.catalogItemModel.retirement_cloud_credential_id = setIfDefined(configData.retirement.cloud_credential_id);
vm.catalogItemModel.retirement_inventory = configData.retirement.hosts;
vm.catalogItemModel.retirement_key = '';
vm.catalogItemModel.retirement_value = '';
setExtraVars('retirement_variables', configData.retirement.extra_vars);
};

var setExtraVars = function(variableName, extraVars) {
var setExtraVars = function (variableName, extraVars) {
if (typeof extraVars !== 'undefined')
vm.catalogItemModel[variableName] = extraVars;
$scope.checkFormPristine();
}

var redirectUrl = '/catalog/explorer/' + catalogItemFormId;
Expand All @@ -127,8 +147,9 @@ ManageIQ.angular.app.controller('catalogItemFormController', ['$scope', 'catalog
};

$scope.resetClicked = function() {
vm.catalogItemModel = angular.copy( vm.modelCopy );
vm.catalogItemModel = angular.copy(vm.modelCopy);
vm.formOptions();
cloudCredentialsList(vm.catalogItemModel.provisioning_cloud_credential_id, vm.catalogItemModel.retirement_cloud_credential_id);
$scope.angularForm.$setUntouched(true);
$scope.angularForm.$setPristine(true);
miqService.miqFlash("warn", __("All changes have been reset"));
Expand All @@ -155,7 +176,7 @@ ManageIQ.angular.app.controller('catalogItemFormController', ['$scope', 'catalog
var setConfigInfo = function(configData) {
catalog_item = {
name: configData.name,
description: configData.description,
description: configData.description,
display: configData.display,
service_template_catalog_id: configData.catalog_id,
prov_type: "generic_ansible_playbook",
Expand Down Expand Up @@ -212,42 +233,61 @@ ManageIQ.angular.app.controller('catalogItemFormController', ['$scope', 'catalog
})

// list of service dialogs
API.get("/api/service_dialogs/?expand=resources&attributes=id,label&sort_by=label&sort_order=ascending").then(function (data) {
API.get("/api/service_dialogs/?expand=resources&attributes=id,label&sort_by=label&sort_order=ascending").then(function(data) {
vm.dialogs = data.resources
vm._provisioning_dialog = _.find(vm.dialogs, {id: vm.catalogItemModel.provisioning_dialog_id});
})

// list of repositories
API.get("/api/configuration_script_sources?collection_class=ManageIQ::Providers::EmbeddedAnsible::AutomationManager::ConfigurationScriptSource&expand=resources&attributes=id,name" + sort_options).then(function (data) {
API.get("/api/configuration_script_sources?collection_class=ManageIQ::Providers::EmbeddedAnsible::AutomationManager::ConfigurationScriptSource&expand=resources&attributes=id,name" + sort_options).then(function(data) {
vm.repositories = data.resources;
vm._retirement_repository = _.find(vm.repositories, {id: vm.catalogItemModel.retirement_repository_id});
vm._provisioning_repository = _.find(vm.repositories, {id: vm.catalogItemModel.provisioning_repository_id});
})

// list of machine credentials
API.get("/api/authentications?collection_class=ManageIQ::Providers::EmbeddedAnsible::AutomationManager::MachineCredential&expand=resources&attributes=id,name" + sort_options).then(function (data) {
API.get("/api/authentications?collection_class=ManageIQ::Providers::EmbeddedAnsible::AutomationManager::MachineCredential&expand=resources&attributes=id,name" + sort_options).then(function(data) {
vm.machine_credentials = data.resources;
vm._retirement_machine_credential = _.find(vm.machine_credentials, {id: vm.catalogItemModel.retirement_machine_credential_id});
vm._provisioning_machine_credential = _.find(vm.machine_credentials, {id: vm.catalogItemModel.provisioning_machine_credential_id});
})

// list of network credentials
API.get("/api/authentications?collection_class=ManageIQ::Providers::EmbeddedAnsible::AutomationManager::NetworkCredential&expand=resources&attributes=id,name" + sort_options).then(function (data) {
API.get("/api/authentications?collection_class=ManageIQ::Providers::EmbeddedAnsible::AutomationManager::NetworkCredential&expand=resources&attributes=id,name" + sort_options).then(function(data) {
vm.network_credentials = data.resources;
vm._retirement_network_credential = _.find(vm.network_credentials, {id: vm.catalogItemModel.retirement_network_credential_id});
vm._provisioning_network_credential = _.find(vm.network_credentials, {id: vm.catalogItemModel.provisioning_network_credential_id});
})
};

// list of cloud credentials
vm.formCloudCredentials = function(provisionCredentialId, retirementCredentialId) {
API.options('/api/authentications').then(function(data) {
var cloud_types = {};
angular.forEach(data.data.credential_types.embedded_ansible_credential_types, function(cred_object, cred_type) {
if (cred_object.type == 'cloud')
cloud_types[cred_type] = cred_object.label;
});
vm.cloud_types = getSortedHash(cloud_types);
cloudCredentialsList(provisionCredentialId, retirementCredentialId);
});
};

var cloudCredentialsList = function(provisionCredentialId, retirementCredentialId) {
if (provisionCredentialId) {
getCredentialType('provisioning', provisionCredentialId);
} else {
vm._provisioning_cloud_type = '';
vm._provisioning_cloud_credential_id = '';
}
if (retirementCredentialId) {
getCredentialType('retirement', retirementCredentialId);
} else {
vm._retirement_cloud_type = '';
vm._retirement_cloud_credential_id = '';
}
};

var getSortedHash = function(inputHash) {
var sortedHash = Object.keys(inputHash)
.map(function(key) {
Expand All @@ -265,8 +305,8 @@ ManageIQ.angular.app.controller('catalogItemFormController', ['$scope', 'catalog

// get playbooks for selected repository
vm.repositoryChanged = function(prefix, id) {
API.get("/api/configuration_script_sources/" + id + "?attributes=configuration_script_payloads" + sort_options).then(function(data) {
vm[prefix + '_playbooks'] = data.configuration_script_payloads;
API.get("/api/configuration_script_sources/" + id + "?attributes=configuration_script_payloads" + sort_options).then(function (data) {
vm[prefix + '_playbooks'] = data.configuration_script_payloads;
// if repository has changed
if (id !== vm.catalogItemModel[prefix + '_repository_id']) {
vm.catalogItemModel[prefix + '_playbook_id'] = '';
Expand All @@ -280,8 +320,10 @@ ManageIQ.angular.app.controller('catalogItemFormController', ['$scope', 'catalog
$scope.$watch('vm._provisioning_repository', function(value) {
if (value) {
vm.repositoryChanged("provisioning", value.id)
} else
} else {
vm.catalogItemModel['provisioning_repository_id'] = '';
}
$scope.checkFormPristine();
});

$scope.$watch('vm._retirement_repository', function(value) {
Expand All @@ -292,40 +334,68 @@ ManageIQ.angular.app.controller('catalogItemFormController', ['$scope', 'catalog
vm.catalogItemModel['retirement_repository_id'] = '';
getRemoveResourcesTypes();
}
$scope.checkFormPristine();
});

$scope.cloudTypeChanged = function(prefix) {
var typ = vm.catalogItemModel[prefix + "_cloud_type"];
$scope.checkFormPristine = function() {
if (angular.equals(vm.catalogItemModel, vm.modelCopy)) {
$scope.angularForm.$setPristine();
} else {
$scope.angularForm.$setDirty();
}
};

$scope.cloudTypeChanged = function(prefix, value) {
var valueChanged = (value !== vm[prefix + '_cloud_type']);
if (value) {
vm[prefix + '_cloud_type'] = value;
} else {
vm[prefix + '_cloud_type'] = '';
}
if (valueChanged) {
var typ = vm[prefix + "_cloud_type"];
vm.catalogItemModel[prefix + '_cloud_credential_id'] = '';
getCloudCredentialsforType(prefix, typ);
}
$scope.checkFormPristine();
};

var getCloudCredentialsforType = function(prefix, typ) {
// list of cloud credentials based upon selected cloud type
var url = '/api/authentications?collection_class=' + typ + '&expand=resources&attributes=id,name' + sort_options;
API.get(url).then(function (data) {
API.get(url).then(function(data) {
vm[prefix + '_cloud_credentials'] = data.resources;
findObjectForDropDown(prefix, '_cloud_credential', '_cloud_credentials');
})
};

var findObjectForDropDown = function(prefix, fieldName, listName) {
vm['_' + prefix + fieldName] = _.find(vm[prefix + listName], {id: vm.catalogItemModel[prefix + fieldName + '_id']});
}

vm.playbookTypeChanged = function(prefix) {
if (prefix === "retirement")
getRemoveResourcesTypes();
$scope.checkFormPristine();
};

$scope.$watch('vm._retirement_playbook', function(value) {
if (value) {
vm.catalogItemModel['retirement_playbook_id'] = value.id;
} else
} else {
vm.catalogItemModel['retirement_playbook_id'] = '';
vm.playbookTypeChanged("retirement");
}
$scope.checkFormPristine();
});

$scope.$watch('vm.catalogItemModel.display', function(value) {
vm.catalogItemModel.display = value;
return vm.catalogItemModel.display;
})

$scope.$watch('vm._provisioning_cloud_type', function(value) {
$scope.cloudTypeChanged("provisioning", value);
})

$scope.$watch('vm._retirement_cloud_type', function(value) {
$scope.cloudTypeChanged("retirement", value);
})

vm.addKeyValue = function(prefix) {
vm.catalogItemModel[prefix + "_variables"][vm.catalogItemModel[prefix + "_key"]] = vm.catalogItemModel[prefix + "_value"];
vm.catalogItemModel[prefix + "_key"] = '';
Expand Down Expand Up @@ -390,6 +460,19 @@ ManageIQ.angular.app.controller('catalogItemFormController', ['$scope', 'catalog
$scope.$watch(field_name, function(value) {
if (value)
vm.catalogItemModel[name + '_id'] = value.id;
$scope.checkFormPristine();
});
}

// watch for all the drop downs on screen
"retirement_remove_resources".split(" ").forEach(typeWatch)

function typeWatch(name) {
field_name = "vm.catalogItemModel." + name;
$scope.$watch(field_name, function(value) {
if (value)
vm.catalogItemModel[name] = value;
$scope.checkFormPristine();
});
}

Expand All @@ -404,14 +487,14 @@ ManageIQ.angular.app.controller('catalogItemFormController', ['$scope', 'catalog
vm.catalogItemModel.retirement_playbook_id = vm.catalogItemModel.provisioning_playbook_id;
vm.catalogItemModel.retirement_machine_credential_id = vm.catalogItemModel.provisioning_machine_credential_id;
vm.catalogItemModel.retirement_network_credential_id = vm.catalogItemModel.provisioning_network_credential_id;
vm.catalogItemModel.retirement_cloud_type = vm.catalogItemModel.provisioning_cloud_type;
vm.retirement_cloud_type = vm.provisioning_cloud_type;
vm._retirement_cloud_type = vm.provisioning_cloud_type;
vm.catalogItemModel.retirement_cloud_credential_id = vm.catalogItemModel.provisioning_cloud_credential_id;
if (vm.catalogItemModel.retirement_cloud_type !== '')
$scope.cloudTypeChanged('retirement');
vm.catalogItemModel.retirement_inventory = vm.catalogItemModel.provisioning_inventory;
vm.catalogItemModel.retirement_key = '';
vm.catalogItemModel.retirement_value = '';
vm.catalogItemModel.retirement_variables = angular.copy(vm.catalogItemModel.provisioning_variables);
$scope.checkFormPristine();
}

var closeConfirmationModal = function() {
Expand All @@ -424,7 +507,7 @@ ManageIQ.angular.app.controller('catalogItemFormController', ['$scope', 'catalog
// Javascript function to be called from confirmation modal outside of Angular controller.
function cancelOrCopyProvisioning(buttonType) {
var scope = angular.element("#form_div").scope();
scope.$apply(function () {
scope.$apply(function() {
if (buttonType == "cancel")
scope.cancelCopyProvisioning();
else
Expand Down
1 change: 1 addition & 0 deletions app/views/catalog/_st_angular_form.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"ng-controller" => "catalogItemFormController as vm",
"miq-form" => 'true',
"ng-show" => "vm.afterGet",
"model" => "vm.catalogItemModel",
"model-copy" => 'vm.modelCopy'}
= render :partial => "layouts/flash_msg"
%div
Expand Down
Loading