1
0
mirror of https://github.com/yldio/copilot.git synced 2024-11-14 23:30:05 +02:00
copilot/docker/api/bootstrap-data.js

112 lines
2.6 KiB
JavaScript
Raw Normal View History

2017-06-23 19:24:25 +03:00
'use strict';
const Data = require('portal-api/lib/data');
const Fs = require('fs');
const Path = require('path');
const Piloted = require('piloted');
2017-06-29 17:38:30 +03:00
const Triton = require('triton');
const Url = require('url');
2017-06-23 19:24:25 +03:00
2017-06-29 17:38:30 +03:00
let bootstrapped = false;
let timeoutId;
const loadConfig = function () {
const docker = Piloted.service('docker-compose-api');
const rethink = Piloted.service('rethinkdb');
if (docker && rethink && !bootstrapped) {
bootstrapped = true;
bootstrap({ docker, rethink });
} else if (!bootstrapped && !timeoutId) {
timeoutId = setTimeout(() => {
timeoutId = null;
Piloted.refresh();
}, 1000);
2017-06-23 19:24:25 +03:00
}
};
Piloted.on('refresh', () => {
loadConfig();
});
const bootstrap = function ({ docker, rethink }) {
const settings = {
db: {
host: rethink.address
},
docker: {
protocol: 'https',
host: docker.address,
port: docker.port,
ca: process.env.DOCKER_CERT_PATH
? Fs.readFileSync(Path.join(process.env.DOCKER_CERT_PATH, 'ca.pem'))
: undefined,
cert: process.env.DOCKER_CERT_PATH
? Fs.readFileSync(Path.join(process.env.DOCKER_CERT_PATH, 'cert.pem'))
: undefined,
key: process.env.DOCKER_CERT_PATH
? Fs.readFileSync(Path.join(process.env.DOCKER_CERT_PATH, 'key.pem'))
: undefined
},
triton: {
url: process.env.SDC_URL,
account: process.env.SDC_ACCOUNT,
keyId: process.env.SDC_KEY_ID
}
};
2017-06-29 17:38:30 +03:00
const data = new Data(settings);
2017-06-23 19:24:25 +03:00
const region = process.env.TRITON_DC || 'us-sw-1';
2017-07-17 17:45:14 +03:00
data.connect(err => {
handlerError(err);
2017-06-29 17:38:30 +03:00
2017-06-23 19:24:25 +03:00
data.createDatacenter({ region, name: region }, (err, datacenter) => {
handlerError(err);
2017-06-23 19:24:25 +03:00
2017-07-17 17:45:14 +03:00
Triton.createClient(
{
profile: settings.triton
},
(err, { cloudapi }) => {
handlerError(err);
2017-06-29 17:38:30 +03:00
2017-07-17 17:45:14 +03:00
cloudapi.getAccount((err, { firstName, lastName, email, login }) => {
handlerError(err);
2017-06-29 17:38:30 +03:00
2017-07-17 17:45:14 +03:00
data.createUser(
{ firstName, lastName, email, login },
(err, user) => {
handlerError(err);
2017-07-17 17:45:14 +03:00
data.createPortal(
{
user,
datacenter
},
(err, portal) => {
handlerError(err);
2017-07-17 17:45:14 +03:00
console.log('data bootstrapped');
process.exit(0);
}
);
}
);
2017-06-29 17:38:30 +03:00
});
2017-07-17 17:45:14 +03:00
}
);
2017-06-23 19:24:25 +03:00
});
});
};
const handlerError = function (err) {
if (err) {
console.error(err);
process.exit(1);
}
};
loadConfig();