@axway/axway-central-cli
Version:
Manage APIs, services and publish to the Amplify Marketplace
148 lines (144 loc) • 7.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.testables = exports.gatewayConnectivity = exports.completeInstall = exports.askConfigType = exports.askBundleType = exports.amplifyAgentsNs = exports.GraylogInstallMethods = exports.ConfigFiles = void 0;
var _chalk = _interopRequireDefault(require("chalk"));
var _snooplogg = _interopRequireDefault(require("snooplogg"));
var _Kubectl = require("../../common/Kubectl");
var _basicPrompts = require("../../common/basicPrompts");
var _inputs = require("./helpers/inputs");
var _types = require("../../common/types");
var _utils = require("../../common/utils");
var helpers = _interopRequireWildcard(require("./helpers"));
var _graylogTemplates = require("./helpers/templates/graylogTemplates");
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: graylog');
const amplifyAgentsNs = exports.amplifyAgentsNs = 'amplify-agents';
// ConfigFiles - all the config file that are used in the setup
const ConfigFiles = exports.ConfigFiles = {
helmOverride: 'agent-overrides.yaml'
};
// GraylogPrompts - prompts for user inputs
const prompts = {
agentNamespace: 'Enter the namespace to use for the Amplify Graylog Agents',
enterUrl: 'Enter the Graylog base URL that the agent will use',
enterUsername: 'Enter the Graylog user name',
enterPassword: 'Enter the password for Graylog user',
enterBasePathSegmentLen: 'Enter the base path segment length that agent will use for lookup'
};
const askBundleType = async () => {
return _types.BundleType.TRACEABILITY;
};
exports.askBundleType = askBundleType;
const askConfigType = async () => {
return _types.AgentConfigTypes.HELM;
};
//
// Questions for the configuration of Graylog agent
//
exports.askConfigType = askConfigType;
const askURL = async () => await (0, _basicPrompts.askInput)({
msg: prompts.enterUrl,
allowEmptyInput: false,
validate: (0, _basicPrompts.validateRegex)(helpers.GitLabRegexPatterns.gitLabBaseURLRegex, helpers.invalidValueExampleErrMsg('BaseURL', 'https://www.testdomain.com'))
});
const askUsername = async () => await (0, _basicPrompts.askInput)({
msg: prompts.enterUsername,
allowEmptyInput: false
});
const askPassword = async () => await (0, _basicPrompts.askInput)({
msg: prompts.enterPassword
});
const askBasePathSegmentLen = async () => await (0, _basicPrompts.askInput)({
msg: prompts.enterBasePathSegmentLen,
type: 'number',
defaultValue: 2
});
const gatewayConnectivity = async _installConfig => {
console.log(_chalk.default.gray(`The Amplify Graylog Agent needs to be deployed to your Kubernetes cluster to discover APIs for publishing to Amplify Engage.`));
const {
error
} = await _Kubectl.kubectl.isInstalled();
if (error) {
throw new Error(`Kubectl is required to fill out the following prompts. It appears to be missing or misconfigured.\n${error}`);
}
const graylogAgentValues = new _graylogTemplates.GraylogAgentValues();
graylogAgentValues.namespace = await (0, _inputs.askNamespace)(prompts.agentNamespace, amplifyAgentsNs);
graylogAgentValues.url = await askURL();
graylogAgentValues.userName = await askUsername();
graylogAgentValues.password = await askPassword();
graylogAgentValues.basePathSegmentLen = await askBasePathSegmentLen();
return graylogAgentValues;
};
exports.gatewayConnectivity = gatewayConnectivity;
const generateSuccessHelpMsg = namespace => {
console.log(`Graylog Agent override file has been placed at ${process.cwd()}/${ConfigFiles.helmOverride}`);
helpers.helmImageSecretInfo(namespace);
let agentHelmInfo = new Set();
agentHelmInfo.add({
helmReleaseName: 'graylog-agent',
helmChartName: 'axway/graylog-agent',
overrideFileName: ConfigFiles.helmOverride,
imageSecretOverrides: `--set image.pullSecret=<image-pull-secret-name>`
});
helpers.helmInstallInfo('Graylog', namespace, agentHelmInfo);
console.log('Configuration file(s) have been successfully created.\n');
console.log(_chalk.default.gray(`\nAdditional information about agent features can be found here:\n${helpers.agentsDocsUrl.GRAYLOG}`));
};
const completeInstall = async installConfig => {
// Add final settings to graylogAgentValues
const graylogAgentValues = installConfig.gatewayConfig;
if (graylogAgentValues.namespace.isNew) {
await helpers.createNamespace(graylogAgentValues.namespace.name);
}
graylogAgentValues.centralConfig = installConfig.centralConfig;
graylogAgentValues.graylogSecret = helpers.amplifyAgentsCredsSecret;
graylogAgentValues.agentKeysSecret = helpers.amplifyAgentsKeysSecret;
// read file content
await helpers.createSecret(graylogAgentValues.namespace.name, helpers.amplifyAgentsKeysSecret, async () => {
if (installConfig.centralConfig.ampcDosaInfo.isNew) {
console.log(_chalk.default.yellow(`The secret '${helpers.amplifyAgentsKeysSecret}' will be created with the same "private_key.pem" and "public_key.pem" that was auto generated to create the Service Account.`));
}
await helpers.createAmplifyAgentKeysSecret(graylogAgentValues.namespace.name, helpers.amplifyAgentsKeysSecret, 'publicKey', graylogAgentValues.centralConfig.dosaAccount.publicKey, 'privateKey', graylogAgentValues.centralConfig.dosaAccount.privateKey);
});
await helpers.createSecret(graylogAgentValues.namespace.name, helpers.amplifyAgentsCredsSecret, async () => {
await createGraylogCredsSecret(graylogAgentValues.namespace.name, helpers.amplifyAgentsCredsSecret, graylogAgentValues.userName, graylogAgentValues.password);
});
graylogAgentValues.traceabilityConfig = installConfig.traceabilityConfig;
console.log('Generating the configuration file(s)...');
(0, _utils.writeTemplates)(ConfigFiles.helmOverride, graylogAgentValues, helpers.graylogHelmOverrideTemplate);
generateSuccessHelpMsg(graylogAgentValues.namespace.name);
};
exports.completeInstall = completeInstall;
const createGraylogCredsSecret = async (namespace, secretName, user, password) => {
const {
error
} = await _Kubectl.kubectl.create('secret', `-n ${namespace} generic ${secretName} \
--from-literal=username=${user} \
--from-literal=password=${password}`);
if (error) {
throw Error(error);
}
console.log(`Created ${secretName} in the ${namespace} namespace.`);
};
const GraylogInstallMethods = exports.GraylogInstallMethods = {
GetBundleType: askBundleType,
GetDeploymentType: askConfigType,
AskGatewayQuestions: gatewayConnectivity,
FinalizeGatewayInstall: completeInstall,
ConfigFiles: Object.values(ConfigFiles),
AgentNameMap: {
[_types.AgentTypes.ca]: _types.AgentNames.GRAYLOG_CA
},
GatewayDisplay: _types.GatewayTypes.GRAYLOG
};
const testables = exports.testables = {
prompts,
ConfigFiles
};