UNPKG

@axway/axway-central-cli

Version:

Manage APIs, services and publish to the Amplify Marketplace

359 lines (350 loc) 14.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.updateSubResourceType = exports.createSecret = exports.createNewIDPSecretResource = exports.createNewIDPResource = exports.createNewDataPlaneSecretResource = exports.createNewDataPlaneResource = exports.createNewAgentResource = exports.createDosaAndCerts = exports.createByResourceType = exports.createBackUpConfigs = void 0; var _chalk = _interopRequireDefault(require("chalk")); var _snooplogg = _interopRequireDefault(require("snooplogg")); var _fsExtra = _interopRequireDefault(require("fs-extra")); var _bashCommands = require("../../../common/bashCommands"); var _Kubectl = require("../../../common/Kubectl"); var _PlatformClient = require("../../../common/PlatformClient"); var _types = require("../../../common/types"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const { log } = (0, _snooplogg.default)('central: install: helpers: creators'); const createBackUpConfigs = async configFiles => { let fileExist = false; let dateTimeStamp = new Date().toISOString().slice(0, 10).concat(' ').concat(new Date().toLocaleTimeString('it-IT')).replace(/:\s*/g, '.'); const backupDate = `${dateTimeStamp}-`; for (let configFile of configFiles) { if (_fsExtra.default.existsSync(configFile)) { fileExist = true; let backupFile = backupDate + configFile; await _fsExtra.default.copyFile(configFile, backupFile).then(() => { console.log(`Created backup file ${backupFile}`); }).catch(err => { console.error(err); }); } } return fileExist; }; exports.createBackUpConfigs = createBackUpConfigs; const createDosaAndCerts = async (client, name) => { console.log('Creating a new service account.'); const { publicKey, privateKey } = await (0, _bashCommands.createKeyPair)(); const publicCert = _fsExtra.default.readFileSync(publicKey).toString(); const account = await client.createServiceAccount({ name: name, desc: name, publicKey: publicCert, roles: [_PlatformClient.PlatformServiceAccountRole.ApiCentralAdmin] }); console.log(_chalk.default.green(`New service account "${account.name}" with clientId "${account.client_id}" has been successfully created.`)); console.log(_chalk.default.green(`The private key has been placed at ${privateKey}\nThe public key has been placed at ${publicKey}`)); return new _types.DosaAccount(account.client_id, publicKey, privateKey); }; exports.createDosaAndCerts = createDosaAndCerts; const updateSubResourceType = async (client, defsManager, name, resourceType, resourceShortName, scopeName = '', subResources = {}) => { var _defs$0$resource$spec, _defs$0$resource$spec2; const defs = defsManager.findDefsByWord(resourceShortName); if (!defs) { throw Error(`the server doesn't have a resource type "${resourceType}"`); } const knownSubResourcesNames = (_defs$0$resource$spec = (_defs$0$resource$spec2 = defs[0].resource.spec.subResources) === null || _defs$0$resource$spec2 === void 0 ? void 0 : _defs$0$resource$spec2.names) !== null && _defs$0$resource$spec !== void 0 ? _defs$0$resource$spec : []; for (let [key, value] of Object.entries(subResources)) { if (knownSubResourcesNames.includes(key)) { console.log(`Updating subresource ${key} on ${resourceType}`); const resource = { name }; Object.assign(resource, { [key]: value }); await client.updateSubResource({ resourceDef: defs[0].resource, resource: resource, subResourceName: key, scopeDef: defs[0].scope ? defs[0].scope : undefined, scopeName: defs[0].scope ? scopeName || name : undefined }); } } }; exports.updateSubResourceType = updateSubResourceType; const createByResourceType = async (client, defsManager, name, resourceType, resourceShortName, spec = {}, scopeName = '', subResources = {}) => { var _defs$0$resource$spec3, _defs$0$resource$spec4; console.log(`Creating a new ${resourceType}`); // NOTE: only a first found set is used const defs = defsManager.findDefsByWord(resourceShortName); if (!defs) { throw Error(`the server doesn't have a resource type "${resourceType}"`); } // @ts-ignore payload const resource = { name, spec }; const knownSubResourcesNames = (_defs$0$resource$spec3 = (_defs$0$resource$spec4 = defs[0].resource.spec.subResources) === null || _defs$0$resource$spec4 === void 0 ? void 0 : _defs$0$resource$spec4.names) !== null && _defs$0$resource$spec3 !== void 0 ? _defs$0$resource$spec3 : []; for (let [key, value] of Object.entries(subResources)) { if (knownSubResourcesNames.includes(key)) { Object.assign(resource, { [key]: value }); } } const withSubRes = subResources !== null; const result = await client.createResource({ resource, resourceDef: defs[0].resource, scopeDef: defs[0].scope ? defs[0].scope : undefined, scopeName: defs[0].scope ? scopeName || name : undefined, withSubResources: withSubRes }); if (!result.data) { var _result$error; const errMsg = `cannot create a new ${resourceType.toLowerCase()}`; if ((_result$error = result.error) !== null && _result$error !== void 0 && _result$error.length) { throw Error(`${errMsg}: ${result.error[0].detail}.`); } else { throw Error(`${errMsg}.`); } } else { console.log(`New ${resourceType.toLowerCase()} "${result.data.name}" has been successfully created.`); } return result.data.name; }; exports.createByResourceType = createByResourceType; const createNewAgentResource = async (client, defsManager, envName, dataPlaneType, agentResource, agentType, owningTeam, agentName, dataPlaneName, frequency, queue, config, filterDA) => { console.log(`Creating a new ${agentResource}, with data plane type: ${dataPlaneType}.`); // NOTE: only a first found set is used const defs = defsManager.findDefsByWord(agentType); if (!defs) { throw Error(`the server doesn't have a resource type "${agentType}"`); } // create the dataplane object let withSubResources = false; let dataplane = {}; if (dataPlaneName) { dataplane.name = dataPlaneName; withSubResources = true; } frequency ? dataplane.frequency = frequency : null; queue ? agentResource === _types.AgentResourceKind.da ? dataplane.queueDiscovery = queue : dataplane.queueTrafficCollection = queue : null; config ? null : config = { owningTeam: owningTeam, filter: dataPlaneType === _types.DataPlaneNames.AWS || _types.DataPlaneNames.AZURE ? filterDA === null || filterDA === void 0 ? void 0 : filterDA.trim() : '' }; const result = await client.createResource({ // @ts-ignore payload resource: { title: agentName, spec: { dataplaneType: dataPlaneType, config: config }, dataplane: dataplane }, resourceDef: defs[0].resource, scopeDef: defs[0].scope ? defs[0].scope : undefined, scopeName: envName, withSubResources: withSubResources }); if (!result.data) { var _result$error2; const errMsg = `cannot create a new agent`; if ((_result$error2 = result.error) !== null && _result$error2 !== void 0 && _result$error2.length) { throw Error(`${errMsg}: ${result.error[0].detail}.`); } else { throw Error(`${errMsg}.`); } } else { console.log(`New agent of type "${defs[0].resource.name}" named "${result.data.name}" has been successfully created.`); } return result.data.name; }; /** * @description Helper func to create a new DataPlane resource * @param client API Service Client * @param defsManager Definition Manager * @param envName Environment Name * @param dataPlaneType DataPlane Type */ exports.createNewAgentResource = createNewAgentResource; const createNewDataPlaneResource = async (client, defsManager, envName, dataPlaneType, config) => { console.log(`Creating a new Dataplane resource, with type: ${dataPlaneType}.`); // NOTE: only a first found set is used const defs = defsManager.findDefsByWord("dp"); if (!defs) { throw Error(`the server doesn't have a resource type "Dataplane"`); } const result = await client.createResource({ // @ts-ignore payload resource: { title: dataPlaneType + " Dataplane", spec: { type: dataPlaneType, config: config } }, resourceDef: defs[0].resource, scopeDef: defs[0].scope ? defs[0].scope : undefined, scopeName: envName }); if (!result.data) { var _result$error3; const errMsg = `cannot create a new dataplane`; if ((_result$error3 = result.error) !== null && _result$error3 !== void 0 && _result$error3.length) { throw Error(`${errMsg}: ${result.error[0].detail}.`); } else { throw Error(`${errMsg}.`); } } else { console.log(`New dataplane of type "${defs[0].resource.name}" named "${result.data.name}" has been successfully created.`); } return result.data; }; /** * @description Helper func to create a new DataPlane resource * @param client API Service Client * @param defsManager Definition Manager * @param envName Environment Name * @param dataPlaneName DataPlane Name * @param accessData Encrypted Access Data */ exports.createNewDataPlaneResource = createNewDataPlaneResource; const createNewDataPlaneSecretResource = async (client, defsManager, envName, dataPlaneType, dataPlaneName, accessData) => { console.log(`Creating a new DataplaneSecret resource.`); // NOTE: only a first found set is used const defs = defsManager.findDefsByWord("dps"); if (!defs) { throw Error(`the server doesn't have a resource type "DataplaneSecret"`); } const result = await client.createResource({ // @ts-ignore payload resource: { title: dataPlaneType + " Dataplane Secret", spec: { dataplane: dataPlaneName, data: accessData } }, resourceDef: defs[0].resource, scopeDef: defs[0].scope ? defs[0].scope : undefined, scopeName: envName }); log(result); if (!result.data) { var _result$error4; const errMsg = `cannot create a new agent`; if ((_result$error4 = result.error) !== null && _result$error4 !== void 0 && _result$error4.length) { throw Error(`${errMsg}: ${result.error[0].detail}.`); } else { throw Error(`${errMsg}.`); } } else { console.log(`New secret of type "${defs[0].resource.name}" named "${result.data.name}" has been successfully created.`); } return result.data; }; /** * @description Helper func to create a new Identity Provider resource * @param client API Service Client * @param defsManager Definition Manager * @param idpConfig IDP Configuration from inputs */ exports.createNewDataPlaneSecretResource = createNewDataPlaneSecretResource; const createNewIDPResource = async (client, defsManager, idpConfig) => { console.log(`Creating a new Identity Provider resource.`); // NOTE: only a first found set is used const defs = defsManager.findDefsByWord("idp"); if (!defs) { throw Error(`the server doesn't have a resource type Identity Provider`); } const result = await client.createResource({ // @ts-ignore payload resource: { title: idpConfig.title, spec: idpConfig.getSpec() }, resourceDef: defs[0].resource, scopeDef: defs[0].scope ? defs[0].scope : undefined }); log(result); if (!result.data) { var _result$error5; const errMsg = `cannot create a new agent`; if ((_result$error5 = result.error) !== null && _result$error5 !== void 0 && _result$error5.length) { throw Error(`${errMsg}: ${result.error[0].detail}.`); } else { throw Error(`${errMsg}.`); } } else { console.log(`New Identity Provider of type "${defs[0].resource.name}" named "${result.data.name}" has been successfully created.`); } return result.data; }; /** * @description Helper func to create a new Identity Provider Secret resource * @param client API Service Client * @param defsManager Definition Manager * @param idpAuthConfig IDP Auth Configuration from inputs * @param idpResource IDP Configuration received after creating the IDP from inputs */ exports.createNewIDPResource = createNewIDPResource; const createNewIDPSecretResource = async (client, defsManager, idpAuthConfig, idpResource) => { console.log(`Creating a new Identity Provider Secret resource.`); // NOTE: only a first found set is used const defs = defsManager.findDefsByWord("idpsec"); if (!defs) { throw Error(`the server doesn't have a resource type Identity Provider Secret`); } const result = await client.createResource({ // @ts-ignore payload resource: { title: idpResource.title + ' IDPSecret', spec: idpAuthConfig.getSpec() }, resourceDef: defs[0].resource, scopeDef: defs[0].scope ? defs[0].scope : undefined, scopeName: idpResource.name }); log(result); if (!result.data) { var _result$error6; const errMsg = `cannot create a new agent`; if ((_result$error6 = result.error) !== null && _result$error6 !== void 0 && _result$error6.length) { throw Error(`${errMsg}: ${result.error[0].detail}.`); } else { throw Error(`${errMsg}.`); } } else { console.log(`New Identity Provider of type "${defs[0].resource.name}" named "${result.data.name}" has been successfully created.`); } return result.data; }; /** * @description Helper func to check for existing secret, and clean up old secret before creating a new one. * @param namespace Namespace to create the secret in. * @param secretName The name of the secret. * @param createFunc A function that will create the secret */ exports.createNewIDPSecretResource = createNewIDPSecretResource; const createSecret = async (namespace, secretName, createFunc) => { const secrets = await _Kubectl.kubectl.get('secrets', `-n ${namespace} ${secretName}`); // NotFound errors are ok. Throw an error for anything else. if (secrets.error && !secrets.error.includes('NotFound')) { throw Error(secrets.error); } // delete the secret if it already exists and then re-create it. if (secrets.data.length > 0) { await _Kubectl.kubectl.delete('secret', `-n ${namespace} ${secretName}`); } await createFunc(); }; exports.createSecret = createSecret;