@axway/axway-central-cli
Version:
Manage APIs, services and publish to the Amplify Marketplace
214 lines (206 loc) • 12.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.testables = exports.gatewayConnectivity = exports.defaultLogFiles = exports.completeInstall = exports.askConfigType = exports.askBundleType = exports.IBMAPIConnectInstallMethods = exports.ConfigFiles = void 0;
var _chalk = _interopRequireDefault(require("chalk"));
var _snooplogg = _interopRequireDefault(require("snooplogg"));
var _basicPrompts = require("../../common/basicPrompts");
var _types = require("../../common/types");
var _utils = require("../../common/utils");
var helpers = _interopRequireWildcard(require("./helpers"));
var _ibmAPIConnectTemplates = require("./helpers/templates/ibmAPIConnectTemplates");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
// @ts-ignore
const {
log
} = (0, _snooplogg.default)('engage: install: agents: ibmAPIConnect');
const daImage = `${_types.PublicDockerRepoBaseUrl}${_types.BasePaths.DockerAgentPublicRepo}/${_types.AgentNames.IBMAPICONNECT_DA}`;
const taImage = `${_types.PublicDockerRepoBaseUrl}${_types.BasePaths.DockerAgentPublicRepo}/${_types.AgentNames.IBMAPICONNECT_TA}`;
const defaultLogFiles = exports.defaultLogFiles = '/group-*_instance-*.log';
// ConfigFiles - all the config file that are used in the setup
const ConfigFiles = exports.ConfigFiles = {
DAEnvVars: `${helpers.configFiles.DA_ENV_VARS}`,
TAEnvVars: `${helpers.configFiles.TA_ENV_VARS}`,
IBMAPIConnectDABinaryFile: 'discovery_agent',
IBMAPIConnectDAYaml: 'discovery_agent.yml',
IBMAPIConnectTABinaryFile: 'traceability_agent',
IBMAPIConnectTAYaml: 'traceability_agent.yml'
};
// IBMAPIConnectPrompts - prompts for user inputs
const IBMAPIConnectPrompts = {
configTypeMsg: 'Select the mode of installation',
enterApiConnectURL: 'Enter the IBM API Connect URL',
enterApiConnectOrgName: 'Enter the IBM API Connect Organization Name',
enterApiConnectCatalogName: 'Enter the IBM API Connect Catalog Name',
enterApiConnectAuthAPIKey: 'Enter the IBM API Connect Auth API Key',
enterApiConnectAuthClientID: 'Enter the IBM API Connect Client ID',
enterApiConnectAuthClientSecret: 'Enter the IBM API Connect Client Secret',
enterApiConnectConsumerOrgOwnerUser: 'Enter the IBM API Connect Consumer Organization Owner User',
enterApiConnectConsumerOrgOwnerRegistry: 'Enter the IBM API Connect Consumer Organization Owner User Registry',
enterApiConnectAnalyticsServerName: 'Enter the IBM API Connect Analytics Server Name'
};
const askBundleType = async () => {
return await (0, _basicPrompts.askList)({
msg: helpers.agentMessages.selectAgentType,
choices: [_types.BundleType.ALL_AGENTS, _types.BundleType.DISCOVERY, _types.BundleType.TRACEABILITY]
});
};
exports.askBundleType = askBundleType;
const askConfigType = async () => {
return _types.AgentConfigTypes.DOCKERIZED;
};
//
// Questions for the configuration of IBM API Connect agents
//
exports.askConfigType = askConfigType;
const askIBMAPIConnectURL = async () => await (0, _basicPrompts.askInput)({
msg: IBMAPIConnectPrompts.enterApiConnectURL
});
const askIBMAPIConnectOrgName = async () => await (0, _basicPrompts.askInput)({
msg: IBMAPIConnectPrompts.enterApiConnectOrgName
});
const askIBMAPIConnectCatalogName = async () => await (0, _basicPrompts.askInput)({
msg: IBMAPIConnectPrompts.enterApiConnectCatalogName
});
const askIBMAPIConnectAuthAPIKey = async () => await (0, _basicPrompts.askInput)({
msg: IBMAPIConnectPrompts.enterApiConnectAuthAPIKey
});
const askIBMAPIConnectClientID = async () => await (0, _basicPrompts.askInput)({
msg: IBMAPIConnectPrompts.enterApiConnectAuthClientID
});
const askIBMAPIConnectClientSecret = async () => await (0, _basicPrompts.askInput)({
msg: IBMAPIConnectPrompts.enterApiConnectAuthClientSecret
});
const askIBMAPIConnectOrgOwnerUser = async () => await (0, _basicPrompts.askInput)({
msg: IBMAPIConnectPrompts.enterApiConnectConsumerOrgOwnerUser
});
const askIBMAPIConnectOrgOwnerRegistry = async () => await (0, _basicPrompts.askInput)({
msg: IBMAPIConnectPrompts.enterApiConnectConsumerOrgOwnerRegistry
});
const askIBMAPIConnectAnalyticsServerName = async () => await (0, _basicPrompts.askInput)({
msg: IBMAPIConnectPrompts.enterApiConnectAnalyticsServerName
});
const gatewayConnectivity = async installConfig => {
const ibmAPIConnectAgentValues = new _ibmAPIConnectTemplates.IBMAPIConnectAgentValues();
console.log('\nCONNECTION TO IBM API Connect:');
console.log(_chalk.default.gray(`The discovery agent needs to connect to the IBM API Connect Gateway to discover API's for publishing to Amplify.\nThe traceability agent needs to connect to IBM API Connect for collecting APIs transactions. These will be forwarded to the Business Insights.\n`));
await askCommonPrompts(ibmAPIConnectAgentValues);
// IBM API Connect Discovery Agent Prompts
if (installConfig.switches.isDaEnabled) {
console.log(_chalk.default.gray(`\nDiscovery Agent Configuration\n`));
await askDiscoveryPrompts(ibmAPIConnectAgentValues);
}
// IBM API Connect Traceability Agent Prompts
if (installConfig.switches.isTaEnabled) {
console.log(_chalk.default.gray(`\nTraceability Agent Configuration\n`));
await askTraceabilityPrompts(ibmAPIConnectAgentValues);
}
return ibmAPIConnectAgentValues;
};
exports.gatewayConnectivity = gatewayConnectivity;
const generateSuccessHelpMsg = installConfig => {
if (installConfig.centralConfig.ampcDosaInfo.isNew && !installConfig.switches.isHelmInstall) {
console.log(_chalk.default.yellow('\nPlease make sure to copy the "private_key.pem" and "public_key.pem" files for the existing service account you selected.'));
}
dockerSuccessMsg(installConfig);
console.log(_chalk.default.gray(`\nAdditional information about agent features can be found here:\n${helpers.agentsDocsUrl.IBMAPICONNECT}`));
};
const dockerSuccessMsg = installConfig => {
let dockerInfo;
const runDaLinuxMsg = `docker run -it --env-file ${helpers.pwd}/${helpers.configFiles.DA_ENV_VARS} -v ${helpers.pwd}:/keys ${helpers.eolChar}`;
const runDaWinMsg = `docker run -it --env-file ${helpers.pwdWin}/${helpers.configFiles.DA_ENV_VARS} -v ${helpers.pwdWin}:/keys ${helpers.eolCharWin}`;
const runTaLinuxMsg = `docker run -it --env-file ${helpers.pwd}/${helpers.configFiles.TA_ENV_VARS} -v ${helpers.pwd}:/keys ${helpers.eolChar}`;
const runTaWinMsg = `docker run -it --env-file ${helpers.pwdWin}/${helpers.configFiles.TA_ENV_VARS} -v ${helpers.pwdWin}:/keys ${helpers.eolCharWin}`;
const startDaLinuxMsg = `\nStart the Discovery Agent on a Linux based machine`;
const startDaWinMsg = `\nStart the Discovery Agent on a Windows machine`;
const startTaLinuxMsg = `\nStart the Traceability Agent on a Linux based machine`;
const startTaWinMsg = `\nStart the Traceability Agent on a Windows machine`;
if (installConfig.switches.isDaEnabled && installConfig.switches.isTaEnabled) {
dockerInfo = `To utilize the agents, pull the latest Docker images and run them using the appropriate supplied environment files, (${helpers.configFiles.DA_ENV_VARS} & ${helpers.configFiles.TA_ENV_VARS}):`;
} else if (installConfig.switches.isDaEnabled) {
dockerInfo = `To utilize the discovery agent, pull the latest Docker image and run it using the supplied environment file, (${helpers.configFiles.DA_ENV_VARS}):`;
} else {
dockerInfo = `To utilize the traceability agent, pull the latest Docker image and run it using the supplied environment file, (${helpers.configFiles.TA_ENV_VARS}):`;
}
console.log(_chalk.default.whiteBright(dockerInfo), '\n');
if (installConfig.switches.isDaEnabled) {
const daImageVersion = `${daImage}:${installConfig.daVersion}`;
console.log(_chalk.default.white('Pull the latest image of the Discovery Agent:'));
console.log(_chalk.default.cyan(`docker pull ${daImageVersion}`));
console.log(_chalk.default.white(_utils.isWindows ? startDaWinMsg : startDaLinuxMsg));
console.log(_chalk.default.cyan(_utils.isWindows ? runDaWinMsg : runDaLinuxMsg));
console.log('\t', _chalk.default.cyan(`-v /data ${daImageVersion}`), '\n');
}
if (installConfig.switches.isTaEnabled) {
const taImageVersion = `${taImage}:${installConfig.taVersion}`;
console.log(_chalk.default.white('Pull the latest image of the Traceability Agent:'));
console.log(_chalk.default.cyan(`docker pull ${taImageVersion}`));
console.log(_chalk.default.white(_utils.isWindows ? startTaWinMsg : startTaLinuxMsg));
console.log(_chalk.default.cyan(_utils.isWindows ? runTaWinMsg : runTaLinuxMsg));
console.log('\t', _chalk.default.cyan(`-v /data ${taImageVersion}`), '\n');
}
};
async function askCommonPrompts(ibmAPIConnectAgentValues) {
// IBM API Connect URL
ibmAPIConnectAgentValues.apiConnectURL = await askIBMAPIConnectURL();
// IBM API Connect Org Name
ibmAPIConnectAgentValues.apiConnectOrgName = await askIBMAPIConnectOrgName();
// IBM API Connect Catalog Name
ibmAPIConnectAgentValues.apiConnectCatalogName = await askIBMAPIConnectCatalogName();
// IBM API Connect Auth API Key
ibmAPIConnectAgentValues.apiConnectAuthAPIKey = await askIBMAPIConnectAuthAPIKey();
// IBM API Connect Auth Client ID
ibmAPIConnectAgentValues.apiConnectAuthClientID = await askIBMAPIConnectClientID();
// IBM API Connect Auth Client Secret
ibmAPIConnectAgentValues.apiConnectAuthClientSecret = await askIBMAPIConnectClientSecret();
}
// IBM API Connect DA prompts
async function askDiscoveryPrompts(ibmAPIConnectAgentValues) {
// IBM API Connect Consumer Org Owner User
ibmAPIConnectAgentValues.apiConnectConsumerOrgOwnerUser = await askIBMAPIConnectOrgOwnerUser();
// IBM API Connect Consumer Org Owner Registry
ibmAPIConnectAgentValues.apiConnectConsumerOrgOwnerRegistry = await askIBMAPIConnectOrgOwnerRegistry();
}
async function askTraceabilityPrompts(ibmAPIConnectAgentValues) {
// IBM API Connect Analytics Server Name
ibmAPIConnectAgentValues.apiConnectAnalyticsServerName = await askIBMAPIConnectAnalyticsServerName();
}
const completeInstall = async installConfig => {
/**
* Create agent resources
*/
const ibmAPIConnectAgentValues = installConfig.gatewayConfig;
// Add final settings to ibmAPIConnectAgentValues
ibmAPIConnectAgentValues.centralConfig = installConfig.centralConfig;
ibmAPIConnectAgentValues.traceabilityConfig = installConfig.traceabilityConfig;
console.log('Generating the configuration file(s)...');
if (installConfig.switches.isDaEnabled) {
(0, _utils.writeTemplates)(ConfigFiles.DAEnvVars, ibmAPIConnectAgentValues, helpers.ibmAPIConnectDAEnvVarTemplate);
}
if (installConfig.switches.isTaEnabled) {
(0, _utils.writeTemplates)(ConfigFiles.TAEnvVars, ibmAPIConnectAgentValues, helpers.ibmAPIConnectTAEnvVarTemplate);
}
console.log('Configuration file(s) have been successfully created.\n');
generateSuccessHelpMsg(installConfig);
};
exports.completeInstall = completeInstall;
const IBMAPIConnectInstallMethods = exports.IBMAPIConnectInstallMethods = {
GetBundleType: askBundleType,
GetDeploymentType: askConfigType,
AskGatewayQuestions: gatewayConnectivity,
FinalizeGatewayInstall: completeInstall,
ConfigFiles: Object.values(ConfigFiles),
AgentNameMap: {
[_types.AgentTypes.da]: _types.AgentNames.IBMAPICONNECT_DA,
[_types.AgentTypes.ta]: _types.AgentNames.IBMAPICONNECT_TA
},
GatewayDisplay: _types.GatewayTypes.IBMAPICONNECT
};
const testables = exports.testables = {
IBMAPIConnectPrompts,
ConfigFiles,
defaultLogFiles
};