Set Admin Password at NG Launch Instance dialog

This patch allows to set admin password at Angular Launch Instance
dialog when 'can_set_password' is true in OPENSTACK_HYPERVISOR_FEATURES.

Closes-Bug: #1439905
Closes-Bug: #1609777

Change-Id: I3307521df524da30b910f0001165cefa2be6c8bb
This commit is contained in:
Tatiana Ovchinnikova 2021-01-12 20:25:53 -06:00
parent 29260bbf13
commit c2d3f61d4d
5 changed files with 82 additions and 3 deletions

View File

@ -60,6 +60,7 @@
ctrl.createKeyPair = createKeyPair;
ctrl.importKeyPair = importKeyPair;
ctrl.setKeypairRequired = setKeypairRequired;
ctrl.setAdminPasswordChange = setAdminPasswordChange;
ctrl.tableData = {
available: launchInstanceModel.keypairs,
@ -105,6 +106,10 @@
'OPENSTACK_HYPERVISOR_FEATURES.requires_keypair'
).then(setKeypairRequired);
ctrl.setAdminPassword = false;
ctrl.adminPassConfError = gettext('Passwords do not match.');
//////////
/**
@ -200,6 +205,11 @@
function setKeypairRequired(setting) {
ctrl.isKeypairRequired = setting ? 1 : 0;
}
function setAdminPasswordChange() {
ctrl.confirmedAdminPassword = null;
launchInstanceModel.newInstanceSpec.admin_pass = null;
}
}
})();

View File

@ -19,7 +19,7 @@
describe('Launch Instance Keypair Step', function() {
describe('LaunchInstanceKeypairController', function() {
var ctrl, q, settings;
var ctrl, q, settings, model;
var $uibModal = { open: angular.noop };
var toastServiceMock = {add: angular.noop};
@ -28,6 +28,7 @@
beforeEach(function() {
settings = {
OPENSTACK_HYPERVISOR_FEATURES: {
can_set_password: true,
requires_keypair: false
}
};
@ -48,7 +49,7 @@
beforeEach(inject(function($controller, $q) {
q = $q;
var model = {
model = {
newInstanceSpec: {
key_pair: ['key1']
},
@ -189,6 +190,17 @@
ctrl.setKeypairRequired(false);
expect(ctrl.isKeypairRequired).toBe(0);
});
it('defines setAdminPassword', function() {
expect(ctrl.setAdminPassword).toBeDefined();
expect(ctrl.setAdminPassword).toBe(false);
});
it('clears password fields when setAdminPassword is changed', function() {
ctrl.setAdminPasswordChange();
expect(ctrl.confirmedAdminPassword).toBe(null);
expect(model.newInstanceSpec.admin_pass).toBe(null);
});
});
});

View File

@ -25,4 +25,56 @@
table="ctrl">
</hz-dynamic-table>
</transfer-table> <!-- End Key Pairs Table -->
<settings-service required-settings='["OPENSTACK_HYPERVISOR_FEATURES.can_set_password"]'>
<div class="admin-password">
<div class="themable-checkbox">
<input ng-change="ctrl.setAdminPasswordChange()"
ng-model="ctrl.setAdminPassword"
type="checkbox"
id="setPassword">
<label for="setPassword">
<span translate>Set admin password</span>
</label>
</div>
<div class="container">
<div class="row">
<div ng-if="ctrl.setAdminPassword" ng-form="adminPasswordForm">
<div class="col-sm-3">
<div class="form-group">
<label class="control-label" translate for="adminPassword">Password</label>
<input class="form-control"
id="adminPassword"
name="adminPassword"
ng-model="model.newInstanceSpec.admin_pass"
type="password">
</div>
</div>
<div class="col-sm-3">
<div class="form-group"
ng-class="{ 'has-error':
adminPasswordForm['confirmPassword'].$invalid &&
adminPasswordForm['confirmPassword'].$dirty }">
<label class="control-label" translate for="confirmPassword">Confirm password</label>
<input id="confirmPassword"
name="confirmPassword"
class="form-control"
hz-password-match="model.newInstanceSpec.admin_pass"
ng-model="ctrl.confirmedAdminPassword"
type="password">
<span class="help-block"
ng-show="adminPasswordForm['confirmPassword'].$invalid &&
adminPasswordForm['confirmPassword'].$dirty">
{$ ctrl.adminPassConfError $}
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</settings-service> <!-- End Admin Password Form-->
</div> <!-- End Controller -->

View File

@ -1041,7 +1041,7 @@
expect(finalSpec.key_pair).toBeUndefined();
});
it('stips null properties', function() {
it('strips null properties', function() {
model.newInstanceSpec.useless = null;
var finalSpec = model.createInstance();

View File

@ -0,0 +1,5 @@
---
features:
- |
Setting 'can_set_password' to True in OPENSTACK_HYPERVISOR_FEATURES adds
the option to set admin password from AngularJS Launch Instance dialog.