Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

92 lines
3.0 KiB

/* eslint no-control-regex: "off" */
import Yadda from 'yadda';
import YAML from 'js-yaml';
import { env } from '../env';
export default function(annotations, nspace, dict = new Yadda.Dictionary()) {
dict
.define('model', /(\w+)/, function(model, cb) {
switch (model) {
case 'datacenter':
case 'datacenters':
case 'dcs':
model = 'dc';
break;
case 'services':
model = 'service';
break;
case 'nodes':
model = 'node';
break;
case 'kvs':
model = 'kv';
break;
case 'acls':
model = 'acl';
break;
case 'sessions':
model = 'session';
break;
case 'intentions':
model = 'intention';
break;
}
cb(null, model);
})
.define('number', /(\d+)/, Yadda.converters.integer)
.define('json', /([^\u0000]*)/, function(val, cb) {
// replace any instance of @namespace in the string
val = val.replace(
/@namespace/g,
typeof nspace === 'undefined' || nspace === '' ? 'default' : nspace
);
cb(null, JSON.parse(val));
})
.define('yaml', /([^\u0000]*)/, function(val, cb) {
// sometimes we need to always force a namespace queryParam
// mainly for DELETEs
if (env('CONSUL_NSPACES_ENABLED')) {
val = val.replace(/ns=@!namespace/g, `ns=${nspace || 'default'}`);
} else {
val = val.replace(/&ns=@!namespace/g, '');
val = val.replace(/&ns=\*/g, '');
val = val.replace(/- \/v1\/namespaces/g, '');
}
if (typeof nspace === 'undefined' || nspace === '') {
val = val.replace(/Namespace: @namespace/g, '').replace(/&ns=@namespace/g, '');
}
// replace any other instance of @namespace in the string
val = val.replace(
/@namespace/g,
typeof nspace === 'undefined' || nspace === '' ? 'default' : nspace
);
cb(null, YAML.safeLoad(val));
})
.define('endpoint', /([^\u0000]*)/, function(val, cb) {
// if is @namespace is !important, always replace with namespace
// or if its undefined or empty then use default
if (env('CONSUL_NSPACES_ENABLED')) {
val = val.replace(/ns=@!namespace/g, `ns=${nspace || 'default'}`);
} else {
val = val.replace(/&ns=@!namespace/g, '');
val = val.replace(/&ns=\*/g, '');
}
// for endpoints if namespace isn't specified it should
// never add the ns= unless its !important...
if (typeof nspace !== 'undefined' && nspace !== '') {
val = val.replace(/ns=@namespace/g, `ns=${nspace}`);
} else {
val = val
.replace(/&ns=@namespace/g, '')
.replace(/ns=@namespace&/g, '')
.replace(/ns=@namespace/g, '');
}
cb(null, val);
});
if (typeof nspace !== 'undefined' && nspace !== '') {
dict.define('url', /([^\u0000]*)/, function(val, cb) {
val = `/~${nspace}${val}`;
cb(null, val);
});
}
return dict;
}