public
Authored by
CY.Wang
Service Discovery for MongoDB and PostgreSQL on Cloud Foundry and Docker Swarm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import { readFile } from 'fs';
import { promisify } from 'util';
export async function discoverMongooseEnvVars() {
const TAG = '#discoverMongooseEnvVars';
const {
VCAP_SERVICES,
MONGO_INITDB_ROOT_USERNAME,
MONGO_INITDB_ROOT_PASSWORD_FILE,
MONGODB_HOST,
MONGODB_PORT,
MONGODB_DATABASE,
MONGODB_AUTH_SOURCE,
MONGOOSE_DEBUG,
MONGOOSE_AUTO_INDEX,
} = process.env;
let {
MONGODB_URL,
MONGO_INITDB_ROOT_PASSWORD,
} = process.env;
if (VCAP_SERVICES) {
const {
credentials,
} = JSON.parse(VCAP_SERVICES).mongodb[0];
const url = new URL(credentials.uri);
const { searchParams } = url;
if (!searchParams.has('replicaSet') && credentials.replicaSetName) {
searchParams.set('replicaSet', credentials.replicaSetName);
}
process.env.MONGODB_URL = MONGODB_URL = url.toString();
}
if (MONGODB_URL) { return console.log(TAG, 'MONGODB_URL', MONGODB_URL); }
console.log(TAG, 'MONGO_INITDB_ROOT_USERNAME', MONGO_INITDB_ROOT_USERNAME);
console.log(TAG, 'MONGO_INITDB_ROOT_PASSWORD', typeof MONGO_INITDB_ROOT_PASSWORD);
console.log(TAG, 'MONGO_INITDB_ROOT_PASSWORD_FILE', MONGO_INITDB_ROOT_PASSWORD_FILE);
let HIDE_PSWD = '';
if (!MONGO_INITDB_ROOT_PASSWORD && MONGO_INITDB_ROOT_PASSWORD_FILE) {
MONGO_INITDB_ROOT_PASSWORD = (await promisify(readFile)(MONGO_INITDB_ROOT_PASSWORD_FILE)).toString();
HIDE_PSWD = `${typeof MONGO_INITDB_ROOT_PASSWORD}(${MONGO_INITDB_ROOT_PASSWORD.length})`;
console.log(TAG, 'MONGO_INITDB_ROOT_PASSWORD', HIDE_PSWD);
}
console.log(TAG, 'MONGODB_HOST', MONGODB_HOST);
console.log(TAG, 'MONGODB_PORT', MONGODB_PORT);
console.log(TAG, 'MONGODB_DATABASE', MONGODB_DATABASE);
console.log(TAG, 'MONGODB_AUTH_SOURCE', MONGODB_AUTH_SOURCE);
MONGODB_URL = `
mongodb://${MONGO_INITDB_ROOT_USERNAME}:${MONGO_INITDB_ROOT_PASSWORD}@${MONGODB_HOST}:${MONGODB_PORT}/${MONGODB_DATABASE}
`.trim();
if (MONGODB_AUTH_SOURCE) { MONGODB_URL += '?authSource=' + MONGODB_AUTH_SOURCE; }
const MONGODB_URL_HIDE_PSWD = MONGO_INITDB_ROOT_PASSWORD ?
MONGODB_URL.replace(MONGO_INITDB_ROOT_PASSWORD, HIDE_PSWD) :
MONGODB_URL;
console.log(TAG, 'MONGODB_URL', MONGODB_URL_HIDE_PSWD);
process.env.MONGODB_URL = MONGODB_URL;
console.log(TAG, 'MONGOOSE_DEBUG', MONGOOSE_DEBUG);
console.log(TAG, 'MONGOOSE_AUTO_INDEX', MONGOOSE_AUTO_INDEX);
}
export async function discoverPGEnvVars() {
const TAG = '#discoverPGEnvVars';
const {
VCAP_SERVICES,
} = process.env;
if (VCAP_SERVICES) {
const {
credentials,
} = JSON.parse(VCAP_SERVICES).postgresql[0];
process.env = Object.assign({
PGHOST: credentials.host,
PGPORT: credentials.port,
PGUSER: credentials.username,
PGPASSWORD: credentials.password,
PGDATABASE: credentials.database,
}, process.env);
}
const {
PGHOST,
PGPORT,
PGUSER,
PGDATABASE,
POSTGRES_PASSWORD_FILE,
} = process.env;
let {
PGPASSWORD,
} = process.env;
console.log(TAG, 'PGHOST', PGHOST);
console.log(TAG, 'PGPORT', PGPORT);
console.log(TAG, 'PGUSER', PGUSER);
console.log(TAG, 'PGDATABASE', PGDATABASE);
console.log(TAG, 'PGPASSWORD', typeof PGPASSWORD);
console.log(TAG, 'POSTGRES_PASSWORD_FILE', POSTGRES_PASSWORD_FILE);
let HIDE_PSWD = '';
if (!PGPASSWORD && POSTGRES_PASSWORD_FILE) {
PGPASSWORD = (await promisify(readFile)(POSTGRES_PASSWORD_FILE)).toString();
HIDE_PSWD = `${typeof PGPASSWORD}(${PGPASSWORD.length})`;
console.log(TAG, 'PGPASSWORD', HIDE_PSWD);
process.env.PGPASSWORD = PGPASSWORD;
}
}
Please register or sign in to comment