From fff9f61bd86a9b690d1e50f102e05c61386cb455 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Wed, 17 Jun 2020 17:36:52 +0000 Subject: [PATCH 1/9] Add all the new data required for NodeIdentities --- ui-v2/app/adapters/role.js | 2 + ui-v2/app/adapters/token.js | 2 + ui-v2/app/mixins/policy/as-many.js | 63 ++++++++++++++++++++++-------- ui-v2/app/models/role.js | 5 +++ ui-v2/app/models/token.js | 5 +++ ui-v2/yarn.lock | 6 +-- 6 files changed, 63 insertions(+), 20 deletions(-) diff --git a/ui-v2/app/adapters/role.js b/ui-v2/app/adapters/role.js index 5b7a1f46e9f..210987a7d90 100644 --- a/ui-v2/app/adapters/role.js +++ b/ui-v2/app/adapters/role.js @@ -50,6 +50,7 @@ export default Adapter.extend({ Description: serialized.Description, Policies: serialized.Policies, ServiceIdentities: serialized.ServiceIdentities, + NodeIdentities: serialized.NodeIdentities, ...Namespace(serialized.Namespace), }} `; @@ -66,6 +67,7 @@ export default Adapter.extend({ Description: serialized.Description, Policies: serialized.Policies, ServiceIdentities: serialized.ServiceIdentities, + NodeIdentities: serialized.NodeIdentities, ...Namespace(serialized.Namespace), }} `; diff --git a/ui-v2/app/adapters/token.js b/ui-v2/app/adapters/token.js index afed469dbf5..b19349c958f 100644 --- a/ui-v2/app/adapters/token.js +++ b/ui-v2/app/adapters/token.js @@ -53,6 +53,7 @@ export default Adapter.extend({ Policies: serialized.Policies, Roles: serialized.Roles, ServiceIdentities: serialized.ServiceIdentities, + NodeIdentities: serialized.NodeIdentities, Local: serialized.Local, ...Namespace(serialized.Namespace), }} @@ -84,6 +85,7 @@ export default Adapter.extend({ Policies: serialized.Policies, Roles: serialized.Roles, ServiceIdentities: serialized.ServiceIdentities, + NodeIdentities: serialized.NodeIdentities, Local: serialized.Local, ...Namespace(serialized.Namespace), }} diff --git a/ui-v2/app/mixins/policy/as-many.js b/ui-v2/app/mixins/policy/as-many.js index a7e7eaac973..95da1c848cf 100644 --- a/ui-v2/app/mixins/policy/as-many.js +++ b/ui-v2/app/mixins/policy/as-many.js @@ -3,14 +3,14 @@ import { get } from '@ember/object'; import minimizeModel from 'consul-ui/utils/minimizeModel'; -const normalizeServiceIdentities = function(items) { +const normalizeIdentities = function(items, template, name, dc) { return (items || []).map(function(item) { const policy = { - template: 'service-identity', - Name: item.ServiceName, + template: template, + Name: item[name], }; - if (typeof item.Datacenters !== 'undefined') { - policy.Datacenters = item.Datacenters; + if (typeof item[dc] !== 'undefined') { + policy[dc] = item[dc]; } return policy; }); @@ -25,17 +25,17 @@ const normalizePolicies = function(items) { }; }); }; -const serializeServiceIdentities = function(items) { +const serializeIdentities = function(items, template, name, dc) { return items .filter(function(item) { - return get(item, 'template') === 'service-identity'; + return get(item, 'template') === template; }) .map(function(item) { const identity = { - ServiceName: get(item, 'Name'), + [name]: get(item, 'Name'), }; - if (get(item, 'Datacenters')) { - identity.Datacenters = get(item, 'Datacenters'); + if (typeof get(item, dc) !== 'undefined') { + identity[dc] = get(item, dc); } return identity; }); @@ -51,9 +51,18 @@ export default Mixin.create({ respondForQueryRecord: function(respond, query) { return this._super(function(cb) { return respond((headers, body) => { - body.Policies = normalizePolicies(body.Policies).concat( - normalizeServiceIdentities(body.ServiceIdentities) - ); + body.Policies = normalizePolicies(body.Policies) + .concat( + normalizeIdentities( + body.ServiceIdentities, + 'service-identity', + 'ServiceName', + 'Datacenters' + ) + ) + .concat( + normalizeIdentities(body.NodeIdentities, 'node-identity', 'NodeName', 'Datacenter') + ); return cb(headers, body); }); }, query); @@ -64,9 +73,18 @@ export default Mixin.create({ return cb( headers, body.map(function(item) { - item.Policies = normalizePolicies(item.Policies).concat( - normalizeServiceIdentities(item.ServiceIdentities) - ); + item.Policies = normalizePolicies(item.Policies) + .concat( + normalizeIdentities( + item.ServiceIdentities, + 'service-identity', + 'ServiceName', + 'Datacenters' + ) + ) + .concat( + normalizeIdentities(item.NodeIdentities, 'node-identity', 'NodeName', 'Datacenter') + ); return item; }) ); @@ -75,7 +93,18 @@ export default Mixin.create({ }, serialize: function(snapshot, options) { const data = this._super(...arguments); - data.ServiceIdentities = serializeServiceIdentities(data.Policies); + data.ServiceIdentities = serializeIdentities( + data.Policies, + 'service-identity', + 'ServiceName', + 'Datacenters' + ); + data.NodeIdentities = serializeIdentities( + data.Policies, + 'node-identity', + 'NodeName', + 'Datacenter' + ); data.Policies = minimizeModel(serializePolicies(data.Policies)); return data; }, diff --git a/ui-v2/app/models/role.js b/ui-v2/app/models/role.js index 6731540d9df..5813fdaed9f 100644 --- a/ui-v2/app/models/role.js +++ b/ui-v2/app/models/role.js @@ -22,6 +22,11 @@ export default Model.extend({ return []; }, }), + NodeIdentities: attr({ + defaultValue: function() { + return []; + }, + }), // frontend only for ordering where CreateIndex can't be used CreateTime: attr('date'), // diff --git a/ui-v2/app/models/token.js b/ui-v2/app/models/token.js index 1f6a2e57e98..5b570728719 100644 --- a/ui-v2/app/models/token.js +++ b/ui-v2/app/models/token.js @@ -39,6 +39,11 @@ export default Model.extend({ return []; }, }), + NodeIdentities: attr({ + defaultValue: function() { + return []; + }, + }), CreateTime: attr('date'), Hash: attr('string'), CreateIndex: attr('number'), diff --git a/ui-v2/yarn.lock b/ui-v2/yarn.lock index 2a15de73f80..4b86ba6a973 100644 --- a/ui-v2/yarn.lock +++ b/ui-v2/yarn.lock @@ -1211,9 +1211,9 @@ js-yaml "^3.13.1" "@hashicorp/consul-api-double@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@hashicorp/consul-api-double/-/consul-api-double-3.0.0.tgz#a1ad94f33e006d01cebf2b22d1f87efef1756ece" - integrity sha512-wB1YgDBN3eOvNWRzSOc2k0eVE7C8YHFC5rJEdNWWTzjOokj6zDr40g2yLiaDMXl21XQs5LE8kNstEe8pf2+JUQ== + version "3.1.0" + resolved "https://registry.yarnpkg.com/@hashicorp/consul-api-double/-/consul-api-double-3.1.0.tgz#6f0cfc32d99b6f0c876d473ff8fdc489b7403904" + integrity sha512-TsRvkBJTzMaXlSyaFT4HU+Phhk+7K2kWPmnuM41cqkHsCLfoTllQ37avQyLYGM/57yfd0ajbI4M6IKoYJnQUWg== "@hashicorp/ember-cli-api-double@^3.1.0": version "3.1.0" From 4b620239538f77d20ac14597ff65fa962d6df88c Mon Sep 17 00:00:00 2001 From: John Cowen Date: Wed, 17 Jun 2020 17:38:06 +0000 Subject: [PATCH 2/9] Add potential NodeIdentity to the token list component --- ui-v2/app/components/consul-token-list/index.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-v2/app/components/consul-token-list/index.hbs b/ui-v2/app/components/consul-token-list/index.hbs index 8f5b8f3aaa6..3751d999e2f 100644 --- a/ui-v2/app/components/consul-token-list/index.hbs +++ b/ui-v2/app/components/consul-token-list/index.hbs @@ -36,7 +36,7 @@
Identities
{{#each (append (get policies 'identities')) as |item|}} - Service Identity: {{item.Name}} + {{if (eq item.template 'service-identity') 'Service' 'Node'}} Identity: {{item.Name}} {{/each}}
From 1c7fe26d9861fe6277c9360e442b7646ff6997da Mon Sep 17 00:00:00 2001 From: John Cowen Date: Wed, 17 Jun 2020 17:39:15 +0000 Subject: [PATCH 3/9] Amend the policy-form/selector to allow node identity creation --- ui-v2/app/components/policy-form/index.hbs | 43 +++++++++++++++---- ui-v2/app/components/policy-form/index.js | 6 ++- .../app/components/policy-form/pageobject.js | 2 +- ui-v2/app/components/policy-selector/index.js | 2 +- ui-v2/app/templates/dc/nspaces/-form.hbs | 2 +- 5 files changed, 42 insertions(+), 13 deletions(-) diff --git a/ui-v2/app/components/policy-form/index.hbs b/ui-v2/app/components/policy-form/index.hbs index 2c603640d46..01137a65262 100644 --- a/ui-v2/app/components/policy-form/index.hbs +++ b/ui-v2/app/components/policy-form/index.hbs @@ -3,11 +3,11 @@ {{#yield-slot name='template'}} {{else}}
- Policy{{if allowServiceIdentity ' or service identity?' ''}} + Policy{{if allowIdentity ' or identity?' ''}}
- {{#if allowServiceIdentity}} + {{#if allowIdentity}}

- A Service Identity is default policy with a configurable service name. This saves you some time and effort you're using Consul for Connect features. + Identities are default policies with configurable names. They save you some time and effort you're using Consul for Connect features.

{{! this should use radio-group }}
@@ -34,17 +34,38 @@ +{{#if (eq item.template 'node-identity')}} + + + +{{else}}
Valid datacenters
-{{#if isScoped }} + {{#if isScoped }} +
{{#each datacenters as |dc| }}
+ + + {{/if}} {{/if}} {{#if (eq item.template '') }}