-
Notifications
You must be signed in to change notification settings - Fork 298
/
config.js
124 lines (109 loc) · 3.89 KB
/
config.js
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
120
121
122
123
124
var dns = require('dns');
var getMongoPodLabels = function() {
return process.env.MONGO_SIDECAR_POD_LABELS || false;
};
var getMongoPodLabelCollection = function() {
var podLabels = getMongoPodLabels();
if (!podLabels) {
return false;
}
var labels = process.env.MONGO_SIDECAR_POD_LABELS.split(',');
for (var i in labels) {
var keyAndValue = labels[i].split('=');
labels[i] = {
key: keyAndValue[0],
value: keyAndValue[1]
};
}
return labels;
};
var getk8sROServiceAddress = function() {
return process.env.KUBERNETES_SERVICE_HOST + ":" + process.env.KUBERNETES_SERVICE_PORT
};
/**
* @returns k8sClusterDomain should the name of the kubernetes domain where the cluster is running.
* Can be convigured via the environmental variable 'KUBERNETES_CLUSTER_DOMAIN'.
*/
var getK8sClusterDomain = function() {
var domain = process.env.KUBERNETES_CLUSTER_DOMAIN || "cluster.local";
verifyCorrectnessOfDomain(domain);
return domain;
};
/**
* Calls a reverse DNS lookup to ensure that the given custom domain name matches the actual one.
* Raises a console warning if that is not the case.
* @param clusterDomain the domain to verify.
*/
var verifyCorrectnessOfDomain = function(clusterDomain) {
if (!clusterDomain) {
return;
}
var servers = dns.getServers();
if (!servers || !servers.length) {
console.log("dns.getServers() didn't return any results when verifying the cluster domain '%s'.", clusterDomain);
return;
}
// In the case that we can resolve the DNS servers, we get the first and try to retrieve its host.
dns.reverse(servers[0], function(err, host) {
if (err) {
console.warn("Error occurred trying to verify the cluster domain '%s'", clusterDomain);
}
else if (host.length < 1 || !host[0].endsWith(clusterDomain)) {
console.warn("Possibly wrong cluster domain name! Detected '%s' but expected similar to '%s'", clusterDomain, host);
}
else {
console.log("The cluster domain '%s' was successfully verified.", clusterDomain);
}
});
};
/**
* @returns k8sMongoServiceName should be the name of the (headless) k8s service operating the mongo pods.
*/
var getK8sMongoServiceName = function() {
return process.env.KUBERNETES_MONGO_SERVICE_NAME || false;
};
/**
* @returns mongoPort this is the port on which the mongo instances run. Default is 27017.
*/
var getMongoDbPort = function() {
var mongoPort = process.env.MONGO_PORT || 27017;
console.log("Using mongo port: %s", mongoPort);
return mongoPort;
};
/**
* @returns boolean to define the RS as a configsvr or not. Default is false
*/
var isConfigRS = function() {
var configSvr = (process.env.CONFIG_SVR || '').trim().toLowerCase();
var configSvrBool = /^(?:y|yes|true|1)$/i.test(configSvr);
if (configSvrBool) {
console.log("ReplicaSet is configured as a configsvr");
}
return configSvrBool;
};
/**
* @returns boolean
*/
var stringToBool = function(boolStr) {
var isTrue = ( boolStr === 'true' ) || false;
return isTrue;
};
module.exports = {
namespace: process.env.KUBE_NAMESPACE,
username: process.env.MONGODB_USERNAME,
password: process.env.MONGODB_PASSWORD,
database: process.env.MONGODB_DATABASE || 'local',
loopSleepSeconds: process.env.MONGO_SIDECAR_SLEEP_SECONDS || 5,
unhealthySeconds: process.env.MONGO_SIDECAR_UNHEALTHY_SECONDS || 15,
mongoSSLEnabled: stringToBool(process.env.MONGO_SSL_ENABLED),
mongoSSLAllowInvalidCertificates: stringToBool(process.env.MONGO_SSL_ALLOW_INVALID_CERTIFICATES),
mongoSSLAllowInvalidHostnames: stringToBool(process.env.MONGO_SSL_ALLOW_INVALID_HOSTNAMES),
env: process.env.NODE_ENV || 'local',
mongoPodLabels: getMongoPodLabels(),
mongoPodLabelCollection: getMongoPodLabelCollection(),
k8sROServiceAddress: getk8sROServiceAddress(),
k8sMongoServiceName: getK8sMongoServiceName(),
k8sClusterDomain: getK8sClusterDomain(),
mongoPort: getMongoDbPort(),
isConfigRS: isConfigRS(),
};