ConfigMap¶
ConfigMap are used to store configuration data. They provide a dictionary based data structure that can be consumed in various shapes and forms.
Use an existing ConfigMap
¶
You can reference to an existing ConfigMap
like so. Note that this does not create a new object,
and will therefore not be included in the resulting manifest.
import * as kplus from 'cdk8s-plus-30';
import { Construct } from 'constructs';
import { App, Chart, ChartProps } from 'cdk8s';
export class MyChart extends Chart {
constructor(scope: Construct, id: string, props?: ChartProps) {
super(scope, id, props);
const config: kplus.IConfigMap = kplus.ConfigMap.fromConfigMapName(this, 'ConfigMap', 'config');
// the 'config' constant can later be used by API's that require an IConfigMap.
// for example when creating a volume.
kplus.Volume.fromConfigMap(this, 'Volume', config);
}
}
const app = new App();
new MyChart(app, 'VolumeFromConfigMap');
app.synth();
Adding data¶
You can create config maps and add some data to them like so:
import * as kplus from 'cdk8s-plus-30';
import { Construct } from 'constructs';
import { App, Chart, ChartProps } from 'cdk8s';
export class MyChart extends Chart {
constructor(scope: Construct, id: string, props?: ChartProps) {
super(scope, id, props);
const config = new kplus.ConfigMap(this, 'Config');
config.addData('url', 'https://my-endpoint:8080');
}
}
const app = new App();
new MyChart(app, 'ConfigMap');
app.synth();
Creating a volume from a directory¶
Here is a nifty little trick you can use to create a volume that contains a directory on the client machine (machine that runs cdk8s synth
):
import * as kplus from 'cdk8s-plus-30';
import * as path from 'path';
import { Construct } from 'constructs';
import { App, Chart, ChartProps } from 'cdk8s';
export class MyChart extends Chart {
constructor(scope: Construct, id: string, props?: ChartProps) {
super(scope, id, props);
const appMap = new kplus.ConfigMap(this, 'Config');
// add the files in the directory to the config map.
// this will create a key for each file.
// note: this directory needs to exist
// note: that only top level files will be included, sub-directories are not yet supported.
appMap.addDirectory(path.join(__dirname, 'app'));
const appVolume = kplus.Volume.fromConfigMap(this, 'ConfigMap', appMap);
const mountPath = '/var/app';
const pod = new kplus.Pod(this, 'Pod');
const container = pod.addContainer({
image: 'node',
command: [ 'node', 'app.js' ],
workingDir: mountPath,
});
// from here, just mount the volume to a container, and run your app!
container.mount(mountPath, appVolume);
}
}
const app = new App();
new MyChart(app, 'AppWithDir');
app.synth();