From 79bd8b2c728772778d110d856e1f7d778aa4fafc Mon Sep 17 00:00:00 2001 From: Jake McDermott Date: Mon, 18 Dec 2017 16:15:24 -0500 Subject: [PATCH] show vault id --- .../list-generator/list-generator.factory.js | 3 +- .../multi-credential-modal.directive.js | 50 +++++++++++++------ .../multi-credential-modal.partial.html | 11 ++-- .../multi-credential.partial.html | 7 ++- .../multi-credential.service.js | 32 +++++++----- 5 files changed, 70 insertions(+), 33 deletions(-) diff --git a/awx/ui/client/src/shared/list-generator/list-generator.factory.js b/awx/ui/client/src/shared/list-generator/list-generator.factory.js index 3b6b762d9f..a94513449e 100644 --- a/awx/ui/client/src/shared/list-generator/list-generator.factory.js +++ b/awx/ui/client/src/shared/list-generator/list-generator.factory.js @@ -552,8 +552,9 @@ export default ['$compile', 'Attr', 'Icon', if(list.fields.info) { customClass = list.fields.name.modalColumnClass || ''; + const infoHeaderClass = _.get(list.fields.info, 'infoHeaderClass', 'List-tableHeader--info'); html += `=0; i--) { if((scope.selectedCredentials.machine && scope.selectedCredentials.machine.credential_type_id === scope.credentialTypeOptions[i].value && @@ -126,13 +127,13 @@ export default ['templateUrl', 'Rest', 'GetBasePath', 'generateList', '$compile' $scope.credential_queryset.credential_type = parseInt($scope.credentialKind); qs.search(GetBasePath('credentials'), $scope.credential_default_params) - .then(res => { - $scope.credential_dataset = res.data; + .then(({ data }) => { + $scope.credential_dataset = data; $scope.credentials = $scope.credential_dataset.results; if(!$scope.listRendered) { if (newValueIsVault) { - $scope.generateCredentialList('checkbox'); + $scope.generateCredentialList('checkbox', $scope.vaultList); } else { $scope.generateCredentialList(); } @@ -148,9 +149,26 @@ export default ['templateUrl', 'Rest', 'GetBasePath', 'generateList', '$compile' $scope.credentials = $scope.credentials || []; $scope.listRendered = false; - let credList = _.cloneDeep(CredentialList); + const credList = _.cloneDeep(CredentialList); + credList.emptyListText = i18n._('No Credentials Matching This Type Have Been Created'); + + const vaultCredList = _.cloneDeep(credList); + + vaultCredList.fields.name.modalColumnClass = 'col-md-6'; + + vaultCredList.fields.info = { + label: i18n._('Vault ID'), + ngBind: 'credential.inputs.vault_id', + key: false, + nosort: true, + modalColumnClass: 'col-md-6', + infoHeaderClass: '', + dataPlacement: 'top' + }; + $scope.list = credList; + $scope.vaultList = vaultCredList; $scope.credential_default_params = { order_by: 'name', @@ -191,21 +209,25 @@ export default ['templateUrl', 'Rest', 'GetBasePath', 'generateList', '$compile' return $scope.toggle_row(credential); }; - $scope.toggle_row = function(selectedRow) { + $scope.toggle_row = function(credential) { let rowDeselected = false; for (let i = $scope.selectedCredentials.extra.length - 1; i >= 0; i--) { - if($scope.selectedCredentials.extra[i].id === selectedRow.id) { + if($scope.selectedCredentials.extra[i].id === credential.id) { $scope.selectedCredentials.extra.splice(i, 1); rowDeselected = true; - } else if(selectedRow.credential_type === $scope.selectedCredentials.extra[i].credential_type) { - if (selectedRow.credential_type !== $scope.credentialKinds.Vault) { + } else if(credential.credential_type === $scope.selectedCredentials.extra[i].credential_type) { + if (credential.credential_type !== $scope.credentialKinds.Vault) { + $scope.selectedCredentials.extra.splice(i, 1); + } else if($scope.selectedCredentials.extra[i].inputs.vault_id === credential.inputs.vault_id) { + // remove existing vault credentials if they have the same vault_id as a recently + // toggled vault credential $scope.selectedCredentials.extra.splice(i, 1); } } } if(!rowDeselected) { $scope.selectedCredentials.extra - .push(_.cloneDeep(selectedRow)); + .push(_.cloneDeep(credential)); } }; diff --git a/awx/ui/client/src/templates/job_templates/multi-credential/multi-credential-modal.partial.html b/awx/ui/client/src/templates/job_templates/multi-credential/multi-credential-modal.partial.html index 45f2ee15f7..95d28195af 100644 --- a/awx/ui/client/src/templates/job_templates/multi-credential/multi-credential-modal.partial.html +++ b/awx/ui/client/src/templates/job_templates/multi-credential/multi-credential-modal.partial.html @@ -34,10 +34,13 @@
- - {{ tag.kind }} - - + + {{ tag.kind }}: + + + {{ tag.kind }} ({{ tag.vault_id }}): + + {{ tag.name }}
diff --git a/awx/ui/client/src/templates/job_templates/multi-credential/multi-credential.partial.html b/awx/ui/client/src/templates/job_templates/multi-credential/multi-credential.partial.html index 3bfb1c6688..95e8a1b670 100644 --- a/awx/ui/client/src/templates/job_templates/multi-credential/multi-credential.partial.html +++ b/awx/ui/client/src/templates/job_templates/multi-credential/multi-credential.partial.html @@ -24,8 +24,11 @@
- - {{ tag.kind }} + + {{ tag.kind }}: + + + {{ tag.kind }} ({{ tag.vault_id }}): {{ tag.name }} diff --git a/awx/ui/client/src/templates/job_templates/multi-credential/multi-credential.service.js b/awx/ui/client/src/templates/job_templates/multi-credential/multi-credential.service.js index 58d80605db..7cf971b33d 100644 --- a/awx/ui/client/src/templates/job_templates/multi-credential/multi-credential.service.js +++ b/awx/ui/client/src/templates/job_templates/multi-credential/multi-credential.service.js @@ -134,16 +134,24 @@ export default ['Rest', 'ProcessErrors', '$q', 'GetBasePath', function(Rest, Pro }); } - return machineCred.concat(extraCreds).concat(vaultCred).map(cred => ({ - name: cred.name, - id: cred.id, - postType: cred.postType, - readOnly: cred.readOnly ? true : false, - kind: typeOpts - .filter(type => { - return parseInt(cred.credential_type) === type.value; - })[0].name + ":" - })); + return machineCred.concat(extraCreds).concat(vaultCred).map(cred => { + const { name, id, postType, readOnly } = cred; + const [type] = typeOpts.filter(type => parseInt(cred.credential_type) === type.value) + + const tagData = { + name: cred.name, + id: cred.id, + postType: cred.postType, + readOnly: cred.readOnly ? true : false, + kind: `${type.name}` + }; + + if (type.name === 'Vault') { + tagData.vault_id = _.get(cred, 'inputs.vault_id'); + } + + return tagData; + }) }; // remove credential from structured selected credential data and tag-view @@ -234,7 +242,7 @@ export default ['Rest', 'ProcessErrors', '$q', 'GetBasePath', function(Rest, Pro // })); // } - // get extra credentials + // get credentials if (data.related.credentials) { Rest.setUrl(data.related.credentials); credDefers.push(Rest.get() @@ -243,7 +251,7 @@ export default ['Rest', 'ProcessErrors', '$q', 'GetBasePath', function(Rest, Pro }) .catch(({data, status}) => { if (status === 403) { - /* User doesn't have read access to the extra credentials, so use summary_fields */ + /* User doesn't have read access to the credentials, so use summary_fields */ credentialGetPermissionDenied = true; selectedCredentials.extra = job_template_obj.summary_fields.credentials; _.map(selectedCredentials.extra, (cred) => {