Skip to content

Commit

Permalink
Backport of chor: change cluster name param to have datacenter.name a…
Browse files Browse the repository at this point in the history
…s default value into release/1.18.x (#20652)

* backport of commit 214abc3

* backport of commit 6bbcc99

* backport of commit 6b84fbe

---------

Co-authored-by: valeriia-ruban <[email protected]>
  • Loading branch information
1 parent 00a3f24 commit 4532ba6
Show file tree
Hide file tree
Showing 9 changed files with 24 additions and 71 deletions.
1 change: 0 additions & 1 deletion ui/packages/consul-ui/app/components/hcp-nav-item/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ export default class HcpLinkItemComponent extends Component {

@action
onLinkToConsulCentral() {
this.hcpLinkModal.setResourceId(this.args.linkData?.resourceId);
this.hcpLinkModal.show();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ export default class LinkToHcpBannerComponent extends Component {
}
@action
onClusterLink() {
this.hcpLinkModal.setResourceId(this.args.linkData?.resourceId);
this.hcpLinkModal.show();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</Hds::Form::Radio::Group>
{{#if (and this.isReadOnlyAccessLevelSelected (can "read acls") (can "create tokens"))}}
<div class="link-to-hcp-modal__generate-token">
{{#if globalReadonlyPolicy.data}}
{{#if (and globalReadonlyPolicy globalReadonlyPolicy.data)}}
<p class="hds-typography-display-100 hds-font-weight-medium font-family-sans-display">
Generate a read-only ACL token now (preferred) or copy an existing token’s secret ID
</p>
Expand Down Expand Up @@ -97,7 +97,7 @@
@icon="external-link"
@iconPosition="trailing"
data-test-link-to-hcp-modal-next-button
@href={{hcp-authentication-link this.hcpLinkModal.resourceId this.accessLevel}}
@href={{hcp-authentication-link @dc this.accessLevel}}
/>
<Hds::Button type="button" @text="Cancel" @color="secondary"
data-test-link-to-hcp-modal-cancel-button
Expand Down
18 changes: 10 additions & 8 deletions ui/packages/consul-ui/app/components/link-to-hcp-modal/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@ export default class LinkToHcpModalComponent extends Component {
isGeneratingToken = false;
AccessLevel = ACCESS_LEVEL;

constructor(args, owner) {
super(...arguments);
// it is needed for .lookup to not flakey in tests
this.hideModal = this.hcpLinkModal.hide.bind(this.hcpLinkModal);
}

get isReadOnlyAccessLevelSelected() {
return this.accessLevel === this.AccessLevel.GLOBALREADONLY;
}
Expand All @@ -35,10 +41,6 @@ export default class LinkToHcpModalComponent extends Component {
return this.token && this.token.length > 0;
}

deactivateModal = () => {
this.hcpLinkModal.hide();
};

onGenerateTokenClicked = (policy) => {
this.isGeneratingToken = true;
let token = this.tokenRepo.create({
Expand All @@ -53,12 +55,12 @@ export default class LinkToHcpModalComponent extends Component {
});
};

@action
onCancel() {
this.deactivateModal();
}
@action
onAccessModeChanged({ target }) {
this.accessLevel = target.value;
}
@action
deactivateModal() {
this.hideModal();
}
}
15 changes: 3 additions & 12 deletions ui/packages/consul-ui/app/helpers/hcp-authentication-link.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,19 @@ import Helper from '@ember/component/helper';
import { inject as service } from '@ember/service';

/**
* A resourceId Looks like:
* organization/b4432207-bb9c-438e-a160-b98923efa979/project/4b09958c-fa91-43ab-8029-eb28d8cee9d4/hashicorp.consul.global-network-manager.cluster/test-from-api
* organization/${organizationId}/project/${projectId}/hashicorp.consul.global-network-manager.cluster/${clusterName}
*
* A HCP URL looks like:
* https://portal.cloud.hashicorp.com/services/consul/clusters/self-managed/link-existing?cluster_name=test-from-api&cluster_version=1.18.0&cluster_access_mode=CONSUL_ACCESS_LEVEL_GLOBAL_READ_WRITE&redirect_url=localhost:8500/services
*/
export const HCP_PREFIX =
'https://portal.cloud.hashicorp.com/services/consul/clusters/self-managed/link-existing';
export default class hcpAuthenticationLink extends Helper {
@service('env') env;
compute([resourceId, accessMode], hash) {
compute([datacenterName, accessMode]) {
let url = new URL(HCP_PREFIX);
const clusterVersion = this.env.var('CONSUL_VERSION');

// if resourceId is empty, we still might want the user to get to the HCP sign-in page
if (resourceId) {
// Array looks like: ["organization", organizationId, "project", projectId, "hashicorp.consul.global-network-manager.cluster", "Cluster Id"]
const [, , , , , clusterName] = resourceId.split('/');
if (clusterName) {
url.searchParams.append('cluster_name', clusterName);
}
if (datacenterName) {
url.searchParams.append('cluster_name', datacenterName);
}

if (clusterVersion) {
Expand Down
6 changes: 1 addition & 5 deletions ui/packages/consul-ui/app/services/hcp-link-modal.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,12 @@ import { tracked } from '@glimmer/tracking';

export default class HcpLinkModalService extends Service {
@tracked isModalVisible = false;
@tracked resourceId = null;

show(hcpLinkData) {
show() {
this.isModalVisible = true;
}

hide() {
this.isModalVisible = false;
}
setResourceId(resourceId) {
this.resourceId = resourceId;
}
}
11 changes: 0 additions & 11 deletions ui/packages/consul-ui/tests/acceptance/link-to-hcp-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import { module, test } from 'qunit';
import { click, visit } from '@ember/test-helpers';
import { setupApplicationTest } from 'ember-qunit';
import HcpLinkModalService from 'consul-ui/services/hcp-link-modal';

const bannerSelector = '[data-test-link-to-hcp-banner]';
const linkToHcpSelector = '[data-test-link-to-hcp]';
Expand All @@ -15,20 +14,10 @@ const linkToHcpModalSelector = '[data-test-link-to-hcp-modal]';
const linkToHcpModalCancelButtonSelector = '[data-test-link-to-hcp-modal-cancel-button]';
module('Acceptance | link to hcp', function (hooks) {
setupApplicationTest(hooks);
const correctResourceId =
'organization/b4432207-bb9c-438e-a160-b98923efa979/project/4b09958c-fa91-43ab-8029-eb28d8cee9d4/hashicorp.consul.global-network-manager.cluster/test-from-api';

hooks.beforeEach(function () {
// clear local storage so we don't have any settings
window.localStorage.clear();
this.owner.register(
'service:hcp-link-modal',
class extends HcpLinkModalService {
setResourceId(resourceId) {
super.setResourceId(correctResourceId);
}
}
);
});

test('the banner and nav item are initially displayed on services page', async function (assert) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@ const modalGenerateTokenMissedPolicyAlertSelector =
'[data-test-link-to-hcp-modal-missed-policy-alert]';
const modalNextButtonSelector = '[data-test-link-to-hcp-modal-next-button]';
const modalCancelButtonSelector = '[data-test-link-to-hcp-modal-cancel-button]';
const resourceId =
'organization/b4432207-bb9c-438e-a160-b98923efa979/project/4b09958c-fa91-43ab-8029-eb28d8cee9d4/hashicorp.consul.global-network-manager.cluster/test-from-api';

module('Integration | Component | link-to-hcp-modal', function (hooks) {
let originalClipboardWriteText;
Expand Down Expand Up @@ -71,7 +69,6 @@ module('Integration | Component | link-to-hcp-modal', function (hooks) {
this.owner.register(
'service:hcp-link-modal',
class Stub extends Service {
resourceId = resourceId;
hide = hideModal;
}
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,9 @@ import { setupRenderingTest } from 'ember-qunit';
import { HCP_PREFIX } from 'consul-ui/helpers/hcp-authentication-link';
import { EnvStub } from 'consul-ui/services/env';

// organization/b4432207-bb9c-438e-a160-b98923efa979/project/4b09958c-fa91-43ab-8029-eb28d8cee9d4/hashicorp.consul.global-network-manager.cluster/test-from-api
const clusterName = 'hello';
const clusterVersion = '1.18.0';
const accessMode = 'CONSUL_ACCESS_LEVEL_GLOBAL_READ_WRITE';
const projectId = '4b09958c-fa91-43ab-8029-eb28d8cee9d4';
const realResourceId = `organization/b4432207-bb9c-438e-a160-b98923efa979/project/${projectId}/hashicorp.consul.global-network-manager.cluster/${clusterName}`;
module('Integration | Helper | hcp-authentication-link', function (hooks) {
setupRenderingTest(hooks);
hooks.beforeEach(function () {
Expand All @@ -29,48 +26,31 @@ module('Integration | Helper | hcp-authentication-link', function (hooks) {
);
});
test('it makes a URL out of a real resourceId', async function (assert) {
this.resourceId = realResourceId;
this.dcName = clusterName;

await render(hbs`{{hcp-authentication-link resourceId}}`);
await render(hbs`{{hcp-authentication-link dcName}}`);

assert.equal(
this.element.textContent.trim(),
`${HCP_PREFIX}?cluster_name=${clusterName}&cluster_version=${clusterVersion}`
);
});

test('it returns correct link with invalid resourceId', async function (assert) {
this.resourceId = 'invalid';
test('it returns correct link without dc name', async function (assert) {
this.dcName = null;

await render(hbs`{{hcp-authentication-link resourceId}}`);
assert.equal(
this.element.textContent.trim(),
`${HCP_PREFIX}?cluster_version=${clusterVersion}`
);

// not enough items in id
this.resourceId =
'`organization/b4432207-bb9c-438e-a160-b98923efa979/project/${projectId}/hashicorp.consul.global-network-manager.cluster`';
await render(hbs`{{hcp-authentication-link resourceId}}`);
assert.equal(
this.element.textContent.trim(),
`${HCP_PREFIX}?cluster_version=${clusterVersion}`
);

// value is null
this.resourceId = null;
await render(hbs`{{hcp-authentication-link resourceId}}`);
await render(hbs`{{hcp-authentication-link dcName}}`);
assert.equal(
this.element.textContent.trim(),
`${HCP_PREFIX}?cluster_version=${clusterVersion}`
);
});

test('it makes a URL out of a real resourceId and accessLevel, if passed', async function (assert) {
this.resourceId = realResourceId;
test('it makes a URL out of a dc name and accessLevel, if passed', async function (assert) {
this.dcName = clusterName;
this.accessMode = accessMode;

await render(hbs`{{hcp-authentication-link resourceId accessMode}}`);
await render(hbs`{{hcp-authentication-link dcName accessMode}}`);

assert.equal(
this.element.textContent.trim(),
Expand Down

0 comments on commit 4532ba6

Please sign in to comment.