magnum-ui/magnum_ui/static/dashboard/container-infra/clusters/workflow/cluster-template.controller.js
Simon Merrick 108c693991 Improve cluster launch workflow
+ Improve the launch work flow form.
  + Add REST endpoint for available ingress controllers
  + Add REST endpint for available addons

Change-Id: Ic76d4d853bce0b1bfd107ca1bd6a7231939845df
Depends-On: https://review.opendev.org/#/c/697000/
2019-12-18 15:43:03 +13:00

141 lines
4.7 KiB
JavaScript

/**
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
(function() {
'use strict';
/**
* @ngdoc controller
* @name clusterTemplateController
* @ngController
*
* @description
* Controller to show cluster template info for info step in workflow
*/
angular
.module('horizon.dashboard.container-infra.clusters')
.controller(
'horizon.dashboard.container-infra.clusters.workflow.clusterTemplateController',
clusterTemplateController);
clusterTemplateController.$inject = [
'$scope',
'horizon.app.core.openstack-service-api.magnum'
];
function clusterTemplateController($scope, magnum) {
var ctrl = this;
init();
function init() {
ctrl.clusterTemplate = {
name: "",
id: "",
coe: "",
image_id: "",
public: "",
registry_enabled: "",
tls_disabled: "",
apiserver_port: "",
keypair_id: "",
docker_volume_size: ""
};
}
loadClusterTemplate($scope.model.cluster_template_id);
function loadClusterTemplate(id, old) {
if (id !== old) {
if (id === '' || typeof id === 'undefined') {
$scope.model.keypair = "";
init();
} else {
magnum.getClusterTemplate(id).then(onGetClusterTemplate);
}
}
}
function onGetClusterTemplate(response) {
var MODEL_DEFAULTS = $scope.model.DEFAULTS;
var template = response.data;
ctrl.clusterTemplate = template;
// master_lb_enabled=false? Only allow a single Master Node
$scope.model.isSingleMasterNode = template.hasOwnProperty('master_lb_enabled') &&
template.master_lb_enabled === false;
$scope.model.master_count = $scope.model.isSingleMasterNode ? 1 : $scope.model.master_count;
// Only alter the model if the value is default and exists in the response
// Warning: This is loosely coupled with default states.
// Sets response.key -> model.key
setResponseAsDefaultIfUnset('keypair_id', 'keypair');
setResponseAsDefaultIfUnset('master_count', 'master_count');
setResponseAsDefaultIfUnset('master_flavor_id', 'master_flavor_id');
setResponseAsDefaultIfUnset('node_count', 'node_count');
setResponseAsDefaultIfUnset('flavor_id', 'flavor_id');
if (template.floating_ip_enabled !== null) {
$scope.model.floating_ip_enabled = template.floating_ip_enabled;
}
if (!template.labels) { return; }
$scope.model.templateLabels = template.labels;
// If a template label exists as a field on the form -> Set it as a default
setLabelResponseAsDefault('auto_scaling_enabled', 'auto_scaling_enabled', true);
setLabelResponseAsDefault('auto_healing_enabled', 'auto_healing_enabled', true);
// Set default `ingress_controller` based on its label
if (template.labels.ingress_controller !== null &&
$scope.model.ingressControllers && $scope.model.ingressControllers.length > 0) {
$scope.model.ingress_controller = MODEL_DEFAULTS.ingress_controller;
$scope.model.ingressControllers.forEach(function(controller) {
if (controller.labels && controller.labels.ingress_controller &&
controller.labels.ingress_controller === template.labels.ingress_controller) {
$scope.model.ingress_controller = controller;
}
});
}
function setResponseAsDefaultIfUnset(responseKey, modelKey) {
if ($scope.model[modelKey] === MODEL_DEFAULTS[modelKey] &&
template[responseKey] !== null) {
$scope.model[modelKey] = template[responseKey];
}
}
function setLabelResponseAsDefault(labelKey, modelKey, isValueBoolean) {
if (template.labels[labelKey] !== null) {
$scope.model[modelKey] = isValueBoolean
? template.labels[labelKey] === 'true'
: template.labels[labelKey];
}
}
}
function watchClusterTemplateId() {
return $scope.model.cluster_template_id;
}
var clusterTemplateWatcher = $scope.$watch(
watchClusterTemplateId, loadClusterTemplate, true
);
$scope.$on('$destroy', function() {
clusterTemplateWatcher();
});
}
})();