pk-template
Version:
p template engine for kubernetes
183 lines • 14.1 kB
JavaScript
;
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = require("path");
const Yaml = __importStar(require("../pk-yaml"));
const fs_1 = require("fs");
class PkProjectConf {
constructor(data) {
this.data = data;
this.getApp = (name) => this.data.apps.find(app => app.name == name);
this.getEnv = (name) => this.data.envs && this.data.envs.find(e => e.name === name);
this.getModule = (name) => this.data.modules.find(m => m.name == name);
}
addApp(app) {
if (this.getApp(app.name)) {
throw new Error(`app ${app.name} already exists`);
}
this.data.apps.push(app);
}
prepareEnv(envName) {
if (!this.data.envs) {
this.data.envs = [];
}
const env = this.data.envs.find(e => e.name == envName);
if (env) {
return env;
}
const newEnv = {
name: envName,
values: {},
clusters: [],
};
this.data.envs.push(newEnv);
return newEnv;
}
prepareAppEnv(appName, envName) {
const app = this.getApp(appName);
if (!app) {
throw new Error(`app ${appName} does not exists`);
}
if (!app.envs) {
app.envs = [];
}
const env = app.envs.find(e => e.name == envName);
if (env) {
return env;
}
const newEnv = {
name: envName,
values: {},
clusters: [],
};
app.envs.push(newEnv);
return newEnv;
}
getMergedEnv(appName, envName, clusterName) {
const app = this.getApp(appName);
if (!app) {
throw new Error(`app ${appName} not exits`);
}
const env = app.envs
? app.envs.find(e => e.name === envName)
: this.getEnv(envName);
if (!env) {
return undefined;
}
if (!env.clusters.includes(clusterName)) {
return undefined;
}
return Object.assign({}, (env || {}), { values: Object.assign({}, (this.data.values || {}), (env && env.values || {})) });
}
addEnv(env) {
if (this.getEnv(env.name)) {
throw new Error(`env ${env.name} already exists`);
}
this.data.envs.push(env);
}
addModule(module) {
if (this.getModule(module.name)) {
throw new Error(`module ${module.name} already exists`);
}
this.data.modules.push(module);
}
upsertModule(module) {
const idx = this.data.modules.findIndex(m => m.name == module.name);
if (idx >= 0) {
this.data.modules[idx] = module;
}
else {
this.addModule(module);
}
}
isDeployExecutable(branch, appName, envName, clusterName) {
if (!branch || !this.data.deploy || this.data.deploy.length === 0) {
return true;
}
const deployConfs = this.data.deploy.filter(d => d.branch === branch);
if (deployConfs.length === 0) {
return false;
}
const accepted = (accpets, denies, item, name) => {
if (accpets && denies) {
throw new Error(`deploy option ${name} and -${name} can not be used at the same time.`);
}
if (accpets) {
return accpets.includes(item);
}
else if (denies) {
return !denies.includes(item);
}
else { // both not exists
return true;
}
};
return deployConfs.some(conf => accepted(conf.apps, conf['-apps'], appName, 'apps')
&& accepted(conf.envs, conf['-envs'], envName, 'envs')
&& accepted(conf.clusters, conf['-clusters'], clusterName, 'clusters'));
}
static exists(dir) {
return dir
? fs_1.existsSync(path_1.join(dir, PkProjectConf.FILENAME))
: fs_1.existsSync(PkProjectConf.FILENAME);
}
static create(projectName, owner) {
return new PkProjectConf({
project: {
name: projectName,
owner: owner,
},
values: {},
apps: [],
envs: [],
modules: [],
deploy: [],
});
}
static save(conf, dir) {
const content = Yaml.dumpYaml(conf.data);
fs_1.writeFileSync(`${dir}/${PkProjectConf.FILENAME}`, content, 'utf8');
}
static tryLoad(uri) {
try {
const json = fs_1.readFileSync(uri, 'utf8');
return json;
}
catch (e) {
return null;
}
}
static _find(dir) {
while (true) {
let projectPath = path_1.resolve(dir, PkProjectConf.FILENAME);
const content = PkProjectConf.tryLoad(projectPath);
if (content) {
const file = Yaml.parseYaml(content);
return {
projectPath,
projectRoot: path_1.dirname(projectPath),
projectConf: new PkProjectConf(file),
};
}
const parent = path_1.resolve(dir, '../');
if (parent == null || parent === dir) {
return { projectPath: null, projectConf: null, projectRoot: null };
}
dir = parent;
}
}
static find(uri) {
return uri
? PkProjectConf._find(uri + '/')
: PkProjectConf._find(process.cwd() + '/');
}
}
PkProjectConf.FILENAME = "pk-project.yaml";
exports.PkProjectConf = PkProjectConf;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdENvbmYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGstY29uZi9wcm9qZWN0Q29uZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSwrQkFBOEM7QUFDOUMsaURBQW1DO0FBRW5DLDJCQUE2RDtBQUU3RCxNQUFhLGFBQWE7SUFHeEIsWUFBbUIsSUFBb0I7UUFBcEIsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFTdkMsV0FBTSxHQUFHLENBQUMsSUFBWSxFQUFzQixFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztRQXNFNUYsV0FBTSxHQUFHLENBQUMsSUFBWSxFQUFzQixFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztRQWdCM0csY0FBUyxHQUFHLENBQUMsSUFBWSxFQUF5QixFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztJQTlGakcsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFXO1FBQ2hCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLENBQUM7U0FDbkQ7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FB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