ironic-ui/ironic_ui/static/dashboard/admin/ironic/edit-portgroup/edit-portgroup.controller.js
Peter Piela d56e262bff Adds support for directly patching boolean attributes
Prior to this change we patched boolean attributes using a 'True'/'False'
string values, and relied on client code to do appropriate coercion.
This approach means that we lose type information in the UI code. With
this change we use the boolean value in the patch process.

Change-Id: I9199f97e2434fe505b633f49ebfa74581d2bc589
2017-07-29 09:26:29 -04:00

106 lines
3.5 KiB
JavaScript

/*
* Copyright 2017 Cray Inc.
*
* 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';
/**
* Controller used to edit a specified node portgroup
*/
angular
.module('horizon.dashboard.admin.ironic')
.controller('EditPortgroupController', EditPortgroupController);
EditPortgroupController.$inject = [
'$controller',
'$uibModalInstance',
'horizon.framework.widgets.toast.service',
'$log',
'horizon.app.core.openstack-service-api.ironic',
'horizon.dashboard.admin.ironic.update-patch.service',
'portgroup'
];
function EditPortgroupController($controller,
$uibModalInstance,
toastService,
$log,
ironic,
updatePatchService,
portgroup) {
var ctrl = this;
$controller('BasePortgroupController',
{ctrl: ctrl,
$uibModalInstance: $uibModalInstance});
ctrl.modalTitle = gettext("Edit Portgroup");
ctrl.submitButtonTitle = gettext("Update Portgroup");
// Initialize form fields
ctrl.address.value = portgroup.address;
ctrl.name.value = portgroup.name;
ctrl.standalone_ports_supported.value =
portgroup.standalone_ports_supported ? 'True' : 'False';
ctrl.mode.value = portgroup.mode;
ctrl.properties.properties = angular.copy(portgroup.properties);
ctrl.extra.properties = angular.copy(portgroup.extra);
/**
* Apply updates to the portgroup being edited
*
* @return {void}
*/
ctrl.updatePortgroup = function() {
var patcher = new updatePatchService.UpdatePatch();
$log.info("Updating portgroup " + JSON.stringify(portgroup));
patcher.buildPatch(portgroup.address, ctrl.address.value, "/address");
patcher.buildPatch(portgroup.name, ctrl.name.value, "/name");
patcher.buildPatch(portgroup.standalone_ports_supported,
ctrl.standalone_ports_supported.value === 'True',
"/standalone_ports_supported");
patcher.buildPatch(portgroup.mode,
ctrl.mode.value,
"/mode");
patcher.buildPatch(portgroup.properties,
ctrl.properties.properties,
"/properties");
patcher.buildPatch(portgroup.extra, ctrl.extra.properties, "/extra");
var patch = patcher.getPatch();
$log.info("patch = " + JSON.stringify(patch.patch));
if (patch.status === updatePatchService.UpdatePatch.status.OK) {
ironic.updatePortgroup(portgroup.uuid, patch.patch)
.then(function(portgroup) {
$uibModalInstance.close(portgroup);
});
} else {
toastService.add('error',
gettext('Unable to create portgroup update patch.'));
}
};
ctrl.submit = function() {
ctrl.updatePortgroup();
};
}
})();