Finally fixed issue with editing a credential. Need to call Owner change after loading data and after resetting form. Also removed default from Owner radio button on create and set to required so that user has to actively make a choice. Started working on Job Template detail changes. Job Template is currently broke.

This commit is contained in:
Chris Houseknecht
2013-11-02 19:37:52 +00:00
committed by Chris Church
parent 413a799829
commit 0466629718
6 changed files with 74 additions and 50 deletions

View File

@@ -116,7 +116,7 @@ function CredentialsAdd ($scope, $rootScope, $compile, $location, $log, $routePa
LookUpInit({ LookUpInit({
scope: scope, scope: scope,
form: form, form: form,
current_item: ($routeParams.user_id) ? $routeParams.user_id : null, current_item: (!Empty($routeParams.user_id)) ? $routeParams.user_id : null,
list: UserList, list: UserList,
field: 'user' field: 'user'
}); });
@@ -124,7 +124,7 @@ function CredentialsAdd ($scope, $rootScope, $compile, $location, $log, $routePa
LookUpInit({ LookUpInit({
scope: scope, scope: scope,
form: form, form: form,
current_item: ($routeParams.team_id) ? $routeParams.team_id : null, current_item: (!Empty($routeParams.team_id)) ? $routeParams.team_id : null,
list: TeamList, list: TeamList,
field: 'team' field: 'team'
}); });
@@ -188,7 +188,7 @@ function CredentialsAdd ($scope, $rootScope, $compile, $location, $log, $routePa
data['kind'] = scope['kind'].value; data['kind'] = scope['kind'].value;
if (!Empty(data.team) && Empty(data.user)) { if (Empty(data.team) && Empty(data.user)) {
Alert('Missing User or Team', 'You must provide either a User or a Team. If this credential will only be accessed by a specific ' + Alert('Missing User or Team', 'You must provide either a User or a Team. If this credential will only be accessed by a specific ' +
'user, select a User. To allow a team of users to access this credential, select a Team.', 'alert-danger'); 'user, select a User. To allow a team of users to access this credential, select a Team.', 'alert-danger');
} }
@@ -306,7 +306,7 @@ function CredentialsEdit ($scope, $rootScope, $compile, $location, $log, $routeP
LookUpInit({ LookUpInit({
scope: scope, scope: scope,
form: form, form: form,
current_item: ($scope['user_id']) ? scope['user_id'] : null, current_item: (!Empty($scope['user_id'])) ? scope['user_id'] : null,
list: UserList, list: UserList,
field: 'user' field: 'user'
}); });
@@ -314,13 +314,14 @@ function CredentialsEdit ($scope, $rootScope, $compile, $location, $log, $routeP
LookUpInit({ LookUpInit({
scope: scope, scope: scope,
form: form, form: form,
current_item: ($scope['team_id']) ? scope['team_id'] : null, current_item: (!Empty($scope['team_id'])) ? scope['team_id'] : null,
list: TeamList, list: TeamList,
field: 'team' field: 'team'
}); });
setAskCheckboxes(); setAskCheckboxes();
KindChange({ scope: scope, form: form, reset: false }); KindChange({ scope: scope, form: form, reset: false });
OwnerChange({ scope: scope });
}); });
if (scope.removeChoicesReady) { if (scope.removeChoicesReady) {
@@ -428,6 +429,8 @@ function CredentialsEdit ($scope, $rootScope, $compile, $location, $log, $routeP
scope[fld] = master[fld]; scope[fld] = master[fld];
} }
setAskCheckboxes(); setAskCheckboxes();
KindChange({ scope: scope, form: form, reset: false });
OwnerChange({ scope: scope });
}; };
// Related set: Add button // Related set: Add button

View File

@@ -124,6 +124,7 @@ function JobTemplatesAdd ($scope, $rootScope, $compile, $location, $log, $routeP
}); });
LookUpInit({ LookUpInit({
url: GetBasePath('credentials') + '?cloud=false',
scope: scope, scope: scope,
form: form, form: form,
current_item: null, current_item: null,
@@ -131,6 +132,15 @@ function JobTemplatesAdd ($scope, $rootScope, $compile, $location, $log, $routeP
field: 'credential' field: 'credential'
}); });
LookUpInit({
url: GetBasePath('credentials') + '?cloud=true',
scope: scope,
form: form,
current_item: null,
list: CredentialList,
field: 'cloud_credential'
});
// Update playbook select whenever project value changes // Update playbook select whenever project value changes
var selectPlaybook = function(oldValue, newValue) { var selectPlaybook = function(oldValue, newValue) {
if (oldValue != newValue) { if (oldValue != newValue) {

View File

@@ -72,7 +72,7 @@ angular.module('JobTemplateFormDefinition', [])
awRequiredWhen: {variable: "playbookrequired", init: "true" }, awRequiredWhen: {variable: "playbookrequired", init: "true" },
column: 1 column: 1
}, },
credential: { // FIXME: Lookup only credentials with kind=ssh credential: {
label: 'Credential', label: 'Credential',
type: 'lookup', type: 'lookup',
sourceModel: 'credential', sourceModel: 'credential',
@@ -82,7 +82,7 @@ angular.module('JobTemplateFormDefinition', [])
editRequired: false, editRequired: false,
column: 1 column: 1
}, },
cloud_credential: { // FIXME: Lookup only credentials with kind=aws/rax cloud_credential: {
label: 'Cloud Credential', label: 'Cloud Credential',
type: 'lookup', type: 'lookup',
sourceModel: 'cloud_credential', sourceModel: 'cloud_credential',

View File

@@ -16,34 +16,36 @@ angular.module('CredentialsHelper', ['Utilities'])
var form = params.form; var form = params.form;
var reset = params.reset; var reset = params.reset;
// Set field labels // Put things in a default state
if (scope.kind.value !== 'ssh') { scope['usernameLabel'] = 'Username';
scope['usernameLabel'] = 'Username'; scope['passwordLabel'] = 'Password';
scope['passwordLabel'] = 'Password'; scope['passwordConfirmLabel'] = 'Confirm Password';
scope['passwordConfirmLabel'] = 'Confirm Password'; scope['aws_required'] = false;
scope['sshKeyDataLabel'] = 'SCM Private Key'; scope['rackspace_required'] = false;
} scope['sshKeyDataLabel'] = 'SSH Private Key';
else { form.fields['password'].clear = true;
scope['usernameLabel'] = 'SSH Username'; form.fields['password'].ask = true;
scope['passwordLabel'] = 'SSH Password';
scope['passwordConfirmLabel'] = 'Confirm SSH Password'; // Apply kind specific settings
scope['sshKeyDataLabel'] = 'SSH Private Key'; switch(scope['kind'].value) {
case 'aws':
scope['aws_required'] = true;
break;
case 'rax':
scope['rackspace_required'] = true;
form.fields['password'].ask = false;
break;
case 'ssh':
scope['usernameLabel'] = 'SSH Username';
scope['passwordLabel'] = 'SSH Password';
scope['passwordConfirmLabel'] = 'Confirm SSH Password';
break;
case 'scm':
scope['sshKeyDataLabel'] = 'SCM Private Key';
break;
} }
scope['aws_required'] = (scope.kind.value == 'aws') ? true : false; // Reset all the field values related to Kind.
if (scope.kind.value == 'rax') {
scope['rackspace_required'] = true;
form.fields['password'].clear = true;
form.fields['password'].ask = true;
}
else {
scope['rackspace_required'] = false;
form.fields['password'].clear = false;
form.fields['password'].ask = false;
}
// Reset all the fields related to Kind.
if (reset) { if (reset) {
scope['access_key'] = null; scope['access_key'] = null;
scope['secret_key'] = null; scope['secret_key'] = null;

View File

@@ -610,15 +610,18 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', '
} }
var data = { var data = {
name: form.name, name: scope['name'],
description: form.description, description: scope['description'],
scm_tags: '' }; };
if (inventory_id) { if (inventory_id) {
data['inventory'] = inventory_id; data['inventory'] = inventory_id;
} }
if (json_data) { if ($.isEmptyObject(json_data)) {
data['variables'] = "";
}
else {
data['variables'] = JSON.stringify(json_data, undefined, '\t'); data['variables'] = JSON.stringify(json_data, undefined, '\t');
} }

View File

@@ -462,29 +462,35 @@ angular.module('Utilities',['RestServices', 'Utilities'])
} }
}]) }])
/* DeugForm(form_name) /* DeugForm({ form: <form object>, scope: <current scope object> });
* *
* Use to log the $pristine and $invalid properties of each form element. Helpful when form * Use to log the $pristine and $valid properties of each form element. Helpful when form
* buttons fail to enable/disable properly. * buttons fail to enable/disable properly.
* *
*/ */
.factory('DebugForm', [ function() { .factory('DebugForm', [ function() {
return function(form_name) { return function(params) {
$('form[name="' + form_name + '"]').find('select, input, button, textarea').each(function(index){ var form = params.form;
var name = $(this).attr('name'); var scope = params.scope;
if (name) { for (var fld in form.fields) {
if (scope['job_templates_form'][name]) { if (scope[form.name + '_form'][fld]) {
console.log(name + ' pristine: ' + scope['job_templates_form'][name].$pristine); console.log(fld + ' valid: ' + scope[form.name + '_form'][fld].$valid);
console.log(name + ' invalid: ' + scope['job_templates_form'][name].$invalid); }
} if (form.fields[fld].sourceModel) {
} if (scope[form.name + '_form'][form.fields[fld].sourceModel + '_' + form.fields[fld].sourceField]) {
}); console.log(form.fields[fld].sourceModel + '_' + form.fields[fld].sourceField + ' valid: ' +
scope[form.name + '_form'][form.fields[fld].sourceModel + '_' + form.fields[fld].sourceField].$valid);
}
}
}
console.log('form pristine: ' + scope[form.name + '_form'].$pristine);
console.log('form valid: ' + scope[form.name + '_form'].$valid);
} }
}]) }])
/* Empty() /* Empty()
* *
* Test if a value is 'empty'. Returns true if val is null/''/undefined * Test if a value is 'empty'. Returns true if val is null | '' | undefined
* *
*/ */
.factory('Empty', [ function() { .factory('Empty', [ function() {