2024-01-26 17:57:18 +00:00
|
|
|
/**
|
|
|
|
* Copyright (c) HashiCorp, Inc.
|
|
|
|
* SPDX-License-Identifier: BUSL-1.1
|
|
|
|
*/
|
|
|
|
|
|
|
|
import RepositoryService from 'consul-ui/services/repository';
|
|
|
|
import dataSource from 'consul-ui/decorators/data-source';
|
|
|
|
|
|
|
|
export default class HcpLinkService extends RepositoryService {
|
2024-02-01 23:04:01 +00:00
|
|
|
/**
|
|
|
|
* Data looks like
|
|
|
|
* {
|
|
|
|
* "data": {
|
|
|
|
* "clientId": "5wZyAPvDFbgDdO3439m8tufwO9hElphu",
|
|
|
|
* "clientSecret": "SWX0XShcp3doc7RF8YCjJ-WATyeMAjFaf1eA0mnzlNHLF4IXbFz6xyjSZvHzAR_i",
|
|
|
|
* "resourceId": "organization/b4432207-bb9c-438e-a160-b98923efa979/project/4b09958c-fa91-43ab-8029-eb28d8cee9d4/hashicorp.consul.global-network-manager.cluster/test-from-api"
|
|
|
|
* },
|
|
|
|
* "generation": "01HMSDHXQTCQGD3Z68B3H58YFE",
|
|
|
|
* "id": {
|
|
|
|
* "name": "global",
|
|
|
|
* "tenancy": {
|
|
|
|
* "peerName": "local"
|
|
|
|
* },
|
|
|
|
* "type": {
|
|
|
|
* "group": "hcp",
|
|
|
|
* "groupVersion": "v2",
|
|
|
|
* "kind": "Link"
|
|
|
|
* },
|
|
|
|
* "uid": "01HMSDHXQTCQGD3Z68B10WBWHX"
|
|
|
|
* },
|
|
|
|
* "status": {
|
|
|
|
* "consul.io/hcp/link": {
|
|
|
|
* "conditions": [
|
|
|
|
* {
|
|
|
|
* "message": "Failed to link to HCP",
|
|
|
|
* "reason": "FAILED",
|
|
|
|
* "state": "STATE_FALSE",
|
|
|
|
* "type": "linked"
|
|
|
|
* }
|
|
|
|
* ],
|
|
|
|
* "observedGeneration": "01HMSDHXQTCQGD3Z68B3H58YFE",
|
|
|
|
* "updatedAt": "2024-01-22T20:24:57.141144170Z"
|
|
|
|
* }
|
|
|
|
* },
|
|
|
|
* "version": "57"
|
|
|
|
* }
|
|
|
|
*/
|
2024-01-26 17:57:18 +00:00
|
|
|
@dataSource('/:partition/:ns/:dc/hcp-link')
|
|
|
|
async fetch({ partition, ns, dc }, { uri }, request) {
|
|
|
|
let result;
|
|
|
|
try {
|
|
|
|
result = (
|
|
|
|
await request`
|
|
|
|
GET /api/hcp/v2/link/global
|
|
|
|
`
|
|
|
|
)((headers, body) => {
|
2024-02-01 23:04:01 +00:00
|
|
|
const isLinked = (body.status['consul.io/hcp/link']['conditions'] || []).some(
|
|
|
|
(condition) => condition.type === 'linked' && condition.state === 'STATE_TRUE'
|
|
|
|
);
|
|
|
|
const resourceId = body.data?.resourceId;
|
|
|
|
|
2024-01-26 17:57:18 +00:00
|
|
|
return {
|
|
|
|
meta: {
|
|
|
|
version: 2,
|
|
|
|
uri: uri,
|
|
|
|
},
|
|
|
|
body: {
|
2024-02-01 23:04:01 +00:00
|
|
|
isLinked,
|
|
|
|
resourceId,
|
2024-01-26 17:57:18 +00:00
|
|
|
},
|
|
|
|
headers,
|
|
|
|
};
|
|
|
|
});
|
|
|
|
} catch (e) {
|
|
|
|
// set linked to false if the global link is not found
|
|
|
|
if (e.statusCode === 404) {
|
|
|
|
result = Promise.resolve({ isLinked: false });
|
|
|
|
} else {
|
|
|
|
result = Promise.resolve(null);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|