feat: CNS env variables (#675)
This commit is contained in:
parent
e70d80425a
commit
3b427871cf
44
docker/api/bootstrap-data.js
vendored
44
docker/api/bootstrap-data.js
vendored
@ -83,51 +83,57 @@ const bootstrap = function ({ docker, rethink }, cb) {
|
||||
return cb();
|
||||
}
|
||||
|
||||
data.createDatacenter({ region, name: region }, (err, datacenter) => {
|
||||
data.createDatacenter({
|
||||
region,
|
||||
name: region
|
||||
}, (err, datacenter) => {
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
Triton.createClient(
|
||||
{
|
||||
Triton.createClient({
|
||||
profile: settings.triton
|
||||
},
|
||||
(err, { cloudapi }) => {
|
||||
}, (err, { cloudapi }) => {
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
cloudapi.getAccount((err, { firstName, lastName, email, login }) => {
|
||||
cloudapi.getAccount((err, {
|
||||
id,
|
||||
firstName,
|
||||
lastName,
|
||||
email,
|
||||
login
|
||||
}) => {
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
data.createUser(
|
||||
{ firstName, lastName, email, login },
|
||||
(err, user) => {
|
||||
data.createUser({
|
||||
tritonId: id,
|
||||
firstName,
|
||||
lastName,
|
||||
email,
|
||||
login
|
||||
}, (err, user) => {
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
data.createPortal(
|
||||
{
|
||||
data.createPortal({
|
||||
user,
|
||||
datacenter
|
||||
},
|
||||
(err, portal) => {
|
||||
}, (err, portal) => {
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
console.log('data bootstrapped');
|
||||
cb();
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "joyent-cp-frontend",
|
||||
"version": "1.3.2",
|
||||
"version": "1.4.0",
|
||||
"license": "MPL-2.0",
|
||||
"repository": "github:yldio/joyent-portal",
|
||||
"main": "build/",
|
||||
|
@ -5,6 +5,7 @@ import { withRouter } from 'react-router';
|
||||
import { Redirect } from 'react-router-dom';
|
||||
import intercept from 'apr-intercept';
|
||||
import paramCase from 'param-case';
|
||||
import get from 'lodash.get';
|
||||
import remove from 'lodash.remove';
|
||||
import flatten from 'lodash.flatten';
|
||||
import uniq from 'lodash.uniq';
|
||||
@ -17,12 +18,15 @@ import DeploymentGroupBySlugQuery from '@graphql/DeploymentGroupBySlug.gql';
|
||||
import DeploymentGroupCreateMutation from '@graphql/DeploymentGroupCreate.gql';
|
||||
import DeploymentGroupProvisionMutation from '@graphql/DeploymentGroupProvision.gql';
|
||||
import DeploymentGroupConfigQuery from '@graphql/DeploymentGroupConfig.gql';
|
||||
import PortalQuery from '@graphql/Portal.gql';
|
||||
|
||||
import { client } from '@state/store';
|
||||
import { ErrorMessage } from '@components/messaging';
|
||||
import { Environment, Name, Review, Manifest } from '@components/manifest';
|
||||
|
||||
const INTERPOLATE_REGEX = /\$([_a-z][_a-z0-9]*)/gi;
|
||||
const CNS_PRIVATE = 'TRITON_CNS_SEARCH_DOMAIN_PRIVATE';
|
||||
const CNS_PUBLIC = 'TRITON_CNS_SEARCH_DOMAIN_PUBLIC';
|
||||
|
||||
// TODO: move state to redux. why: because in redux we can cache transactional
|
||||
// state between refreshes
|
||||
@ -166,15 +170,22 @@ class DeploymentGroupEditOrCreate extends Component {
|
||||
return environment;
|
||||
}
|
||||
|
||||
const names = forceArray(manifest.match(INTERPOLATE_REGEX)).map(name =>
|
||||
name.replace(/^\$/, '')
|
||||
);
|
||||
const searchDomain = [
|
||||
`${CNS_PRIVATE}=${this.props.tritonId}.${this.props
|
||||
.dataCenter}.cns.joyent.com`,
|
||||
`${CNS_PUBLIC}=${this.props.tritonId}.${this.props
|
||||
.dataCenter}.triton.zone`
|
||||
].join('\n');
|
||||
|
||||
const names = forceArray(manifest.match(INTERPOLATE_REGEX))
|
||||
.map(name => name.replace(/^\$/, ''))
|
||||
.filter(name => [CNS_PRIVATE, CNS_PUBLIC].indexOf(name) < 0);
|
||||
|
||||
const vars = uniq(names)
|
||||
.map(name => `\n${name}=`)
|
||||
.join('');
|
||||
|
||||
return `# define your interpolatable variables here\n${vars}`;
|
||||
return `${searchDomain}\n\n# define your interpolatable variables here\n${vars}`;
|
||||
}
|
||||
|
||||
getDefaultFile(name = '') {
|
||||
@ -317,7 +328,10 @@ class DeploymentGroupEditOrCreate extends Component {
|
||||
};
|
||||
|
||||
this.setState(
|
||||
{ environment: environment || this.props.environment, loading: true },
|
||||
{
|
||||
environment: environment || this.getEnvironmentDefaultValue(),
|
||||
loading: true
|
||||
},
|
||||
getConfig
|
||||
);
|
||||
}
|
||||
@ -480,6 +494,12 @@ class DeploymentGroupEditOrCreate extends Component {
|
||||
}
|
||||
|
||||
export default compose(
|
||||
graphql(PortalQuery, {
|
||||
props: ({ data: { portal = {} } }) => ({
|
||||
dataCenter: get(portal, 'datacenter.region', ''),
|
||||
tritonId: get(portal, 'user.tritonId', '')
|
||||
})
|
||||
}),
|
||||
graphql(DeploymentGroupCreateMutation, {
|
||||
props: ({ mutate }) => ({
|
||||
createDeploymentGroup: variables => mutate({ variables })
|
||||
|
@ -2,6 +2,7 @@ query Portal {
|
||||
portal {
|
||||
user {
|
||||
firstName
|
||||
tritonId
|
||||
}
|
||||
datacenter {
|
||||
id
|
||||
|
@ -7,6 +7,7 @@ type Portal {
|
||||
|
||||
type User {
|
||||
id: ID!
|
||||
tritonId: ID!
|
||||
firstName: String!
|
||||
lastName: String!
|
||||
email: String!
|
||||
|
65
packages/portal-api/bootstrap-data.js
vendored
65
packages/portal-api/bootstrap-data.js
vendored
@ -49,36 +49,77 @@ const ifError = function (err) {
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
process.exit(0);
|
||||
};
|
||||
|
||||
const bootstrap = function () {
|
||||
const bootstrap = function (cb) {
|
||||
const data = new Data(settings);
|
||||
const region = process.env.TRITON_DC || 'us-sw-1';
|
||||
|
||||
data.connect((err) => {
|
||||
ifError(err);
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
data.createDatacenter({ region, name: region }, (err, datacenter) => {
|
||||
ifError(err);
|
||||
data.getDatacenters((err, datacenters) => {
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
// Don't continue since data is already bootstrapped
|
||||
if (datacenters && datacenters.length) {
|
||||
return cb();
|
||||
}
|
||||
|
||||
data.createDatacenter({
|
||||
region,
|
||||
name: region
|
||||
}, (err, datacenter) => {
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
Triton.createClient({
|
||||
profile: settings.triton
|
||||
}, (err, { cloudapi }) => {
|
||||
ifError(err);
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
cloudapi.getAccount((err, { firstName, lastName, email, login }) => {
|
||||
ifError(err);
|
||||
cloudapi.getAccount((err, {
|
||||
id,
|
||||
firstName,
|
||||
lastName,
|
||||
email,
|
||||
login
|
||||
}) => {
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
data.createUser({ firstName, lastName, email, login }, (err, user) => {
|
||||
ifError(err);
|
||||
data.createUser({
|
||||
tritonId: id,
|
||||
firstName,
|
||||
lastName,
|
||||
email,
|
||||
login
|
||||
}, (err, user) => {
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
data.createPortal({
|
||||
user,
|
||||
datacenter
|
||||
}, (err, portal) => {
|
||||
ifError(err);
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
console.log('data bootstrapped');
|
||||
process.exit(0);
|
||||
cb();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -87,4 +128,4 @@ const bootstrap = function () {
|
||||
});
|
||||
};
|
||||
|
||||
bootstrap();
|
||||
bootstrap(ifError);
|
||||
|
@ -201,6 +201,7 @@ exports.toInstance = function (clientInstance) {
|
||||
exports.fromUser = function (user) {
|
||||
return {
|
||||
id: user.id,
|
||||
tritonId: user.tritonId,
|
||||
firstName: user.first_name,
|
||||
lastName: user.last_name,
|
||||
email: user.email,
|
||||
@ -211,6 +212,7 @@ exports.fromUser = function (user) {
|
||||
exports.toUser = function (clientUser) {
|
||||
return {
|
||||
id: clientUser.id,
|
||||
tritonId: clientUser.tritonId,
|
||||
first_name: clientUser.firstName,
|
||||
last_name: clientUser.lastName,
|
||||
email: clientUser.email,
|
||||
|
@ -23,7 +23,11 @@ const goodOptions = {
|
||||
consoleReporter: [{
|
||||
module: 'good-squeeze',
|
||||
name: 'Squeeze',
|
||||
args: [{ log: '*', response: '*', error: '*' }]
|
||||
args: [{
|
||||
log: '*',
|
||||
response: '*',
|
||||
error: '*'
|
||||
}]
|
||||
}, {
|
||||
module: 'good-console'
|
||||
}, 'stdout']
|
||||
@ -39,17 +43,18 @@ server.register([
|
||||
},
|
||||
{
|
||||
register: Toppsy,
|
||||
options: { namespace: 'portal', subsystem: 'api' }
|
||||
options: {
|
||||
namespace: 'portal',
|
||||
subsystem: 'api'
|
||||
}
|
||||
],
|
||||
(err) => {
|
||||
}
|
||||
], (err) => {
|
||||
handlerError(err);
|
||||
server.start((err) => {
|
||||
handlerError(err);
|
||||
console.log(`server started at http://localhost:${server.info.port}`);
|
||||
});
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
function handlerError (error) {
|
||||
if (error) {
|
||||
|
Loading…
Reference in New Issue
Block a user