@provisioner/appengine
Version:
CodeZero provisioner for appengine
188 lines • 7.75 kB
JavaScript
"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