mirror of
https://github.com/yldio/copilot.git
synced 2024-12-01 07:30:07 +02:00
135 lines
2.9 KiB
JavaScript
135 lines
2.9 KiB
JavaScript
'use strict';
|
|
|
|
const Data = require('portal-api/lib/data');
|
|
const Fs = require('fs');
|
|
const Path = require('path');
|
|
const Piloted = require('piloted');
|
|
const Triton = require('triton');
|
|
const Url = require('url');
|
|
|
|
|
|
let timeoutId;
|
|
const loadConfig = function () {
|
|
const docker = Piloted.service('compose-api');
|
|
const rethink = Piloted.service('rethinkdb');
|
|
|
|
const retry = () => {
|
|
timeoutId = setTimeout(() => {
|
|
timeoutId = null;
|
|
Piloted.refresh();
|
|
}, 1000);
|
|
};
|
|
|
|
if (docker && rethink) {
|
|
bootstrap({ docker, rethink }, (err) => {
|
|
if (err) {
|
|
console.error(err);
|
|
return retry();
|
|
}
|
|
|
|
process.exit(0);
|
|
});
|
|
} else if (!timeoutId) {
|
|
retry();
|
|
}
|
|
};
|
|
|
|
Piloted.on('refresh', () => {
|
|
loadConfig();
|
|
});
|
|
|
|
|
|
const bootstrap = function ({ docker, rethink }, cb) {
|
|
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
|
|
}
|
|
};
|
|
|
|
const data = new Data(settings);
|
|
const region = process.env.TRITON_DC || 'us-sw-1';
|
|
|
|
data.connect((err) => {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
|
|
data.getPortal({}, (err, portal) => {
|
|
// Don't continue since data is already bootstrapped
|
|
if (portal) {
|
|
return cb();
|
|
}
|
|
|
|
data.createDatacenter({
|
|
region,
|
|
name: region
|
|
}, (err, datacenter) => {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
|
|
Triton.createClient({
|
|
profile: settings.triton
|
|
}, (err, { cloudapi }) => {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
|
|
cloudapi.getAccount({}, (err, body) => {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
|
|
const { id, firstName, lastName, email, login } = body;
|
|
|
|
data.createUser({
|
|
tritonId: id,
|
|
firstName,
|
|
lastName,
|
|
email,
|
|
login
|
|
}, (err, user) => {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
|
|
data.createPortal({
|
|
user,
|
|
datacenter
|
|
}, (err, portal) => {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
|
|
console.log('data bootstrapped');
|
|
cb();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
};
|
|
|
|
loadConfig();
|