UNPKG

@provisioner/appengine

Version:

CodeZero provisioner for appengine

188 lines 7.75 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createInquireMixin = void 0; const flow_1 = require("../flow"); const inquirer_1 = __importDefault(require("inquirer")); const debug_1 = __importDefault(require("debug")); const debug = debug_1.default('@appengine:createInquire'); exports.createInquireMixin = (base) => class extends base { async createInquire(args) { if (!this.documentHelper.image) await this.inquireApplicationImage(args); if (this.documentHelper.flow) { const flowProcessor = new flow_1.FlowProcessor(inquirer_1.default, this.controller.resource); const result = await flowProcessor.process(this.documentHelper.flow); this.documentHelper.processResult(result); } this.documentHelper.postInquire(); } async inquireApplicationImage(args) { const answers = { tag: this.documentHelper.tag || 'latest', image: this.documentHelper.image }; const responses = await (inquirer_1.default === null || inquirer_1.default === void 0 ? void 0 : inquirer_1.default.prompt([ { type: 'input', name: 'image', message: 'Which docker image would you like to use?', validate: r => r !== '' }, { type: 'input', name: 'tag', message: 'Which image tag would you like to use?', validate: r => r !== '' } ], answers)); this.documentHelper.provisioner.tag = responses.tag; this.documentHelper.provisioner.image = responses.image; await this.askSettings('configs', args); await this.askSettings('secrets', args); } async askSettings(type, args) { const configs = {}; const typeDisplay = type === 'configs' ? 'configuration' : 'secret'; do { const responses = await (inquirer_1.default === null || inquirer_1.default === void 0 ? void 0 : inquirer_1.default.prompt([ { type: 'confirm', name: 'hasVal', message: `Would you like to add a ${typeDisplay} parameter?`, default: false, }, { type: 'input', name: 'key', message: `What is ${typeDisplay} parameter name?`, when: r => r.hasConfig, validate: r => r !== '' }, { type: 'input', name: 'value', message: `What is ${typeDisplay} parameter value?`, when: r => r.hasConfig, validate: r => r !== '' } ])); if (responses.hasVal) configs[responses.key] = responses.value; else break; } while (true); this.documentHelper.processResult({ [type]: { ...configs } }); } async askPorts(args, automated, ports) { if (ports && ports.length > 0 || automated) return ports; let responses = { hasPorts: false, name: '', protocol: 'TCP', port: 8080, targetPort: 0, externalPort: 8080 }; do { responses = await (inquirer_1.default === null || inquirer_1.default === void 0 ? void 0 : inquirer_1.default.prompt([ { type: 'confirm', name: 'hasPorts', message: 'Would you like to expose a port?', default: false, }, { type: 'input', name: 'name', default: 'http', message: 'What is the port name?', when: r => r.hasPorts, validate: r => r !== '' }, { type: 'list', name: 'protocol', default: 'TCP', choices: ['SCTP', 'TCP', 'UDP'], message: 'What protocol shall this port use?', when: r => r.hasPorts, }, { type: 'input', name: 'port', default: 8080, message: 'What is the internal port on the container (port)?', when: r => r.hasPorts, validate: r => this.isNumeric(r) }, { type: 'input', name: 'targetPort', default: responses.port, message: 'Which port would you like to use within the cluster (optional)?', when: r => r.hasPorts, validate: r => this.isNumeric(r) } ])); if (responses.hasPorts) ports.push({ name: responses.name, protocol: responses.protocol, port: Number(responses.port), targetPort: Number(responses.targetPort) }); } while (responses.hasPorts); return ports; } isNumeric(n) { return !isNaN(parseFloat(n)) && isFinite(n); } async askVolumes(args, automated, volumes) { if (volumes && volumes.length > 0 || automated) return volumes; const storageChoices = ['1Gi', '2Gi', '5Gi', '10Gi', '20Gi', '50Gi', '100Gi']; let responses = { hasVolumes: false, storageSize: '', mountPath: '', volumeName: '', subPath: '' }; do { responses = await (inquirer_1.default === null || inquirer_1.default === void 0 ? void 0 : inquirer_1.default.prompt([ { type: 'confirm', name: 'hasVolumes', message: 'Would you like to add a persistent volume?', default: false, }, { type: 'list', name: 'storageSize', message: 'What size data volume would you like to provision?', choices: storageChoices, default: '5Gi', when: r => r.hasVolumes }, { type: 'input', name: 'mountPath', default: '/var', message: 'What path do you want this volume mounted at?', when: r => r.hasVolumes, validate: r => r !== '' }, { type: 'input', name: 'subPath', default: '', message: 'What sub path do you want this volume mounted at?', when: r => r.hasVolumes, }, { type: 'input', name: 'volumeName', default: 'data-var', message: 'What would you like to name this volume?', when: r => r.hasVolumes, validate: r => r !== '' } ])); if (responses.hasVolumes) { volumes.push({ size: responses.storageSize, mountPath: responses.mountPath, name: responses.volumeName, subPath: responses.subPath }); } } while (responses.hasVolumes); return volumes; } }; //# sourceMappingURL=createInquire.js.map