berlioz
Version:
Berlioz - cloud deployment and migration services
78 lines (75 loc) • 2.93 kB
JavaScript
module.exports = (section, logger, {Promise, _, helper, gcp, deployment, cluster}) => {
section
.onQueryAll(() => {
return [];
})
.onExtractNaming(obj => [obj.id])
.onExtractId(obj => obj.id)
.onQuery(id => {
return {
id: id
}
})
.onExtractConfig(obj => {
return {
};
})
.onExtractRelations(item => {
var sqlDn = item.meta.root.breakDn(item.naming[0]);
item.relation(sqlDn.metaName, sqlDn.naming);
})
.onAutoConfig((item, action) => {
if (action == 'delete') {
return true;
}
var sqlRel = item.findRelation('gcp-sql');
var sqlId = sqlRel.targetItem.id;
if (!sqlId) {
helper.postponeWithTimeout(1 * 60, `SQL ${sqlRel.targetDn} is not yet ready`);
return false;
}
logger.info("[GCP_SQL_SCRIPT] Checking sqlID: %s...", sqlId);
return gcp.Sql.queryRunningInstanceOperations(sqlId)
.then(operations => {
if (operations.length == 0) {
return true;
} else {
logger.info("[GCP_SQL_SCRIPT] sqlID: %s is busy. operations: ", sqlId, operations);
helper.postponeWithTimeout(2 * 60, `SQL ${sqlId} is busy`);
return false;
}
});
})
.onCreate(delta => {
var sqlId = delta.findRelation('gcp-sql').targetItem.id;
logger.info("[GCP_SQL_SCRIPT] sqlID: %s", sqlId);
logger.info("[GCP_SQL_SCRIPT] src: ", delta.runtime.src);
logger.info("[GCP_SQL_SCRIPT] dest: ", delta.runtime.dest);
return Promise.resolve()
.then(() => {
if (delta.runtime.src.bucket) {
return gcp.Storage.copyDirectory(
delta.runtime.src.bucket, delta.runtime.src.key,
delta.runtime.dest.bucket, '/');
}
if (delta.runtime.src.path) {
return gcp.Storage.uploadLocalDirectory(
delta.runtime.src.path,
delta.runtime.dest.bucket, '');
}
throw new Error('Could not upload gcp sql script');
})
.then(() => {
return gcp.Sql.importSql(
sqlId,
'sys',
`gs://${delta.runtime.dest.bucket}/init.sql`);
})
.then(() => {
return {
id: delta.naming[0]
}
})
})
;
}