cdk8s
Version:
This is the core library of Cloud Development Kit (CDK) for Kubernetes (cdk8s). cdk8s apps synthesize into standard Kubernetes manifests which can be applied to any Kubernetes cluster.
1,510 lines (953 loc) • 122 kB
Markdown
# API Reference <a name="API Reference" id="api-reference"></a>
## Constructs <a name="Constructs" id="Constructs"></a>
### ApiObject <a name="ApiObject" id="cdk8s.ApiObject"></a>
#### Initializers <a name="Initializers" id="cdk8s.ApiObject.Initializer"></a>
```typescript
import { ApiObject } from 'cdk8s'
new ApiObject(scope: Construct, id: string, props: ApiObjectProps)
```
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| <code><a href="#cdk8s.ApiObject.Initializer.parameter.scope">scope</a></code> | <code>constructs.Construct</code> | the construct scope. |
| <code><a href="#cdk8s.ApiObject.Initializer.parameter.id">id</a></code> | <code>string</code> | namespace. |
| <code><a href="#cdk8s.ApiObject.Initializer.parameter.props">props</a></code> | <code><a href="#cdk8s.ApiObjectProps">ApiObjectProps</a></code> | options. |
---
##### `scope`<sup>Required</sup> <a name="scope" id="cdk8s.ApiObject.Initializer.parameter.scope"></a>
- *Type:* constructs.Construct
the construct scope.
---
##### `id`<sup>Required</sup> <a name="id" id="cdk8s.ApiObject.Initializer.parameter.id"></a>
- *Type:* string
namespace.
---
##### `props`<sup>Required</sup> <a name="props" id="cdk8s.ApiObject.Initializer.parameter.props"></a>
- *Type:* <a href="#cdk8s.ApiObjectProps">ApiObjectProps</a>
options.
---
#### Methods <a name="Methods" id="Methods"></a>
| **Name** | **Description** |
| --- | --- |
| <code><a href="#cdk8s.ApiObject.toString">toString</a></code> | Returns a string representation of this construct. |
| <code><a href="#cdk8s.ApiObject.addDependency">addDependency</a></code> | Create a dependency between this ApiObject and other constructs. |
| <code><a href="#cdk8s.ApiObject.addJsonPatch">addJsonPatch</a></code> | Applies a set of RFC-6902 JSON-Patch operations to the manifest synthesized for this API object. |
| <code><a href="#cdk8s.ApiObject.toJson">toJson</a></code> | Renders the object to Kubernetes JSON. |
---
##### `toString` <a name="toString" id="cdk8s.ApiObject.toString"></a>
```typescript
public toString(): string
```
Returns a string representation of this construct.
##### `addDependency` <a name="addDependency" id="cdk8s.ApiObject.addDependency"></a>
```typescript
public addDependency(dependencies: ...IConstruct[]): void
```
Create a dependency between this ApiObject and other constructs.
These can be other ApiObjects, Charts, or custom.
###### `dependencies`<sup>Required</sup> <a name="dependencies" id="cdk8s.ApiObject.addDependency.parameter.dependencies"></a>
- *Type:* ...constructs.IConstruct[]
the dependencies to add.
---
##### `addJsonPatch` <a name="addJsonPatch" id="cdk8s.ApiObject.addJsonPatch"></a>
```typescript
public addJsonPatch(ops: ...JsonPatch[]): void
```
Applies a set of RFC-6902 JSON-Patch operations to the manifest synthesized for this API object.
*Example*
```typescript
kubePod.addJsonPatch(JsonPatch.replace('/spec/enableServiceLinks', true));
```
###### `ops`<sup>Required</sup> <a name="ops" id="cdk8s.ApiObject.addJsonPatch.parameter.ops"></a>
- *Type:* ...<a href="#cdk8s.JsonPatch">JsonPatch</a>[]
The JSON-Patch operations to apply.
---
##### `toJson` <a name="toJson" id="cdk8s.ApiObject.toJson"></a>
```typescript
public toJson(): any
```
Renders the object to Kubernetes JSON.
To disable sorting of dictionary keys in output object set the
`CDK8S_DISABLE_SORT` environment variable to any non-empty value.
#### Static Functions <a name="Static Functions" id="Static Functions"></a>
| **Name** | **Description** |
| --- | --- |
| <code><a href="#cdk8s.ApiObject.isConstruct">isConstruct</a></code> | Checks if `x` is a construct. |
| <code><a href="#cdk8s.ApiObject.isApiObject">isApiObject</a></code> | Return whether the given object is an `ApiObject`. |
| <code><a href="#cdk8s.ApiObject.of">of</a></code> | Returns the `ApiObject` named `Resource` which is a child of the given construct. |
---
##### `isConstruct` <a name="isConstruct" id="cdk8s.ApiObject.isConstruct"></a>
```typescript
import { ApiObject } from 'cdk8s'
ApiObject.isConstruct(x: any)
```
Checks if `x` is a construct.
Use this method instead of `instanceof` to properly detect `Construct`
instances, even when the construct library is symlinked.
Explanation: in JavaScript, multiple copies of the `constructs` library on
disk are seen as independent, completely different libraries. As a
consequence, the class `Construct` in each copy of the `constructs` library
is seen as a different class, and an instance of one class will not test as
`instanceof` the other class. `npm install` will not create installations
like this, but users may manually symlink construct libraries together or
use a monorepo tool: in those cases, multiple copies of the `constructs`
library can be accidentally installed, and `instanceof` will behave
unpredictably. It is safest to avoid using `instanceof`, and using
this type-testing method instead.
###### `x`<sup>Required</sup> <a name="x" id="cdk8s.ApiObject.isConstruct.parameter.x"></a>
- *Type:* any
Any object.
---
##### `isApiObject` <a name="isApiObject" id="cdk8s.ApiObject.isApiObject"></a>
```typescript
import { ApiObject } from 'cdk8s'
ApiObject.isApiObject(o: any)
```
Return whether the given object is an `ApiObject`.
We do attribute detection since we can't reliably use 'instanceof'.
###### `o`<sup>Required</sup> <a name="o" id="cdk8s.ApiObject.isApiObject.parameter.o"></a>
- *Type:* any
The object to check.
---
##### `of` <a name="of" id="cdk8s.ApiObject.of"></a>
```typescript
import { ApiObject } from 'cdk8s'
ApiObject.of(c: IConstruct)
```
Returns the `ApiObject` named `Resource` which is a child of the given construct.
If `c` is an `ApiObject`, it is returned directly. Throws an
exception if the construct does not have a child named `Default` _or_ if
this child is not an `ApiObject`.
###### `c`<sup>Required</sup> <a name="c" id="cdk8s.ApiObject.of.parameter.c"></a>
- *Type:* constructs.IConstruct
The higher-level construct.
---
#### Properties <a name="Properties" id="Properties"></a>
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| <code><a href="#cdk8s.ApiObject.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
| <code><a href="#cdk8s.ApiObject.property.apiGroup">apiGroup</a></code> | <code>string</code> | The group portion of the API version (e.g. `authorization.k8s.io`). |
| <code><a href="#cdk8s.ApiObject.property.apiVersion">apiVersion</a></code> | <code>string</code> | The object's API version (e.g. `authorization.k8s.io/v1`). |
| <code><a href="#cdk8s.ApiObject.property.chart">chart</a></code> | <code><a href="#cdk8s.Chart">Chart</a></code> | The chart in which this object is defined. |
| <code><a href="#cdk8s.ApiObject.property.kind">kind</a></code> | <code>string</code> | The object kind. |
| <code><a href="#cdk8s.ApiObject.property.metadata">metadata</a></code> | <code><a href="#cdk8s.ApiObjectMetadataDefinition">ApiObjectMetadataDefinition</a></code> | Metadata associated with this API object. |
| <code><a href="#cdk8s.ApiObject.property.name">name</a></code> | <code>string</code> | The name of the API object. |
---
##### `node`<sup>Required</sup> <a name="node" id="cdk8s.ApiObject.property.node"></a>
```typescript
public readonly node: Node;
```
- *Type:* constructs.Node
The tree node.
---
##### `apiGroup`<sup>Required</sup> <a name="apiGroup" id="cdk8s.ApiObject.property.apiGroup"></a>
```typescript
public readonly apiGroup: string;
```
- *Type:* string
The group portion of the API version (e.g. `authorization.k8s.io`).
---
##### `apiVersion`<sup>Required</sup> <a name="apiVersion" id="cdk8s.ApiObject.property.apiVersion"></a>
```typescript
public readonly apiVersion: string;
```
- *Type:* string
The object's API version (e.g. `authorization.k8s.io/v1`).
---
##### `chart`<sup>Required</sup> <a name="chart" id="cdk8s.ApiObject.property.chart"></a>
```typescript
public readonly chart: Chart;
```
- *Type:* <a href="#cdk8s.Chart">Chart</a>
The chart in which this object is defined.
---
##### `kind`<sup>Required</sup> <a name="kind" id="cdk8s.ApiObject.property.kind"></a>
```typescript
public readonly kind: string;
```
- *Type:* string
The object kind.
---
##### `metadata`<sup>Required</sup> <a name="metadata" id="cdk8s.ApiObject.property.metadata"></a>
```typescript
public readonly metadata: ApiObjectMetadataDefinition;
```
- *Type:* <a href="#cdk8s.ApiObjectMetadataDefinition">ApiObjectMetadataDefinition</a>
Metadata associated with this API object.
---
##### `name`<sup>Required</sup> <a name="name" id="cdk8s.ApiObject.property.name"></a>
```typescript
public readonly name: string;
```
- *Type:* string
The name of the API object.
If a name is specified in `metadata.name` this will be the name returned.
Otherwise, a name will be generated by calling
`Chart.of(this).generatedObjectName(this)`, which by default uses the
construct path to generate a DNS-compatible name for the resource.
---
### App <a name="App" id="cdk8s.App"></a>
Represents a cdk8s application.
#### Initializers <a name="Initializers" id="cdk8s.App.Initializer"></a>
```typescript
import { App } from 'cdk8s'
new App(props?: AppProps)
```
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| <code><a href="#cdk8s.App.Initializer.parameter.props">props</a></code> | <code><a href="#cdk8s.AppProps">AppProps</a></code> | configuration options. |
---
##### `props`<sup>Optional</sup> <a name="props" id="cdk8s.App.Initializer.parameter.props"></a>
- *Type:* <a href="#cdk8s.AppProps">AppProps</a>
configuration options.
---
#### Methods <a name="Methods" id="Methods"></a>
| **Name** | **Description** |
| --- | --- |
| <code><a href="#cdk8s.App.toString">toString</a></code> | Returns a string representation of this construct. |
| <code><a href="#cdk8s.App.synth">synth</a></code> | Synthesizes all manifests to the output directory. |
| <code><a href="#cdk8s.App.synthYaml">synthYaml</a></code> | Synthesizes the app into a YAML string. |
---
##### `toString` <a name="toString" id="cdk8s.App.toString"></a>
```typescript
public toString(): string
```
Returns a string representation of this construct.
##### `synth` <a name="synth" id="cdk8s.App.synth"></a>
```typescript
public synth(): void
```
Synthesizes all manifests to the output directory.
##### `synthYaml` <a name="synthYaml" id="cdk8s.App.synthYaml"></a>
```typescript
public synthYaml(): string
```
Synthesizes the app into a YAML string.
#### Static Functions <a name="Static Functions" id="Static Functions"></a>
| **Name** | **Description** |
| --- | --- |
| <code><a href="#cdk8s.App.isConstruct">isConstruct</a></code> | Checks if `x` is a construct. |
| <code><a href="#cdk8s.App.of">of</a></code> | *No description.* |
---
##### `isConstruct` <a name="isConstruct" id="cdk8s.App.isConstruct"></a>
```typescript
import { App } from 'cdk8s'
App.isConstruct(x: any)
```
Checks if `x` is a construct.
Use this method instead of `instanceof` to properly detect `Construct`
instances, even when the construct library is symlinked.
Explanation: in JavaScript, multiple copies of the `constructs` library on
disk are seen as independent, completely different libraries. As a
consequence, the class `Construct` in each copy of the `constructs` library
is seen as a different class, and an instance of one class will not test as
`instanceof` the other class. `npm install` will not create installations
like this, but users may manually symlink construct libraries together or
use a monorepo tool: in those cases, multiple copies of the `constructs`
library can be accidentally installed, and `instanceof` will behave
unpredictably. It is safest to avoid using `instanceof`, and using
this type-testing method instead.
###### `x`<sup>Required</sup> <a name="x" id="cdk8s.App.isConstruct.parameter.x"></a>
- *Type:* any
Any object.
---
##### `of` <a name="of" id="cdk8s.App.of"></a>
```typescript
import { App } from 'cdk8s'
App.of(c: IConstruct)
```
###### `c`<sup>Required</sup> <a name="c" id="cdk8s.App.of.parameter.c"></a>
- *Type:* constructs.IConstruct
---
#### Properties <a name="Properties" id="Properties"></a>
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| <code><a href="#cdk8s.App.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
| <code><a href="#cdk8s.App.property.charts">charts</a></code> | <code><a href="#cdk8s.Chart">Chart</a>[]</code> | Returns all the charts in this app, sorted topologically. |
| <code><a href="#cdk8s.App.property.outdir">outdir</a></code> | <code>string</code> | The output directory into which manifests will be synthesized. |
| <code><a href="#cdk8s.App.property.outputFileExtension">outputFileExtension</a></code> | <code>string</code> | The file extension to use for rendered YAML files. |
| <code><a href="#cdk8s.App.property.resolvers">resolvers</a></code> | <code><a href="#cdk8s.IResolver">IResolver</a>[]</code> | Resolvers used by this app. |
| <code><a href="#cdk8s.App.property.yamlOutputType">yamlOutputType</a></code> | <code><a href="#cdk8s.YamlOutputType">YamlOutputType</a></code> | How to divide the YAML output into files. |
---
##### `node`<sup>Required</sup> <a name="node" id="cdk8s.App.property.node"></a>
```typescript
public readonly node: Node;
```
- *Type:* constructs.Node
The tree node.
---
##### `charts`<sup>Required</sup> <a name="charts" id="cdk8s.App.property.charts"></a>
```typescript
public readonly charts: Chart[];
```
- *Type:* <a href="#cdk8s.Chart">Chart</a>[]
Returns all the charts in this app, sorted topologically.
---
##### `outdir`<sup>Required</sup> <a name="outdir" id="cdk8s.App.property.outdir"></a>
```typescript
public readonly outdir: string;
```
- *Type:* string
The output directory into which manifests will be synthesized.
---
##### `outputFileExtension`<sup>Required</sup> <a name="outputFileExtension" id="cdk8s.App.property.outputFileExtension"></a>
```typescript
public readonly outputFileExtension: string;
```
- *Type:* string
- *Default:* .k8s.yaml
The file extension to use for rendered YAML files.
---
##### `resolvers`<sup>Required</sup> <a name="resolvers" id="cdk8s.App.property.resolvers"></a>
```typescript
public readonly resolvers: IResolver[];
```
- *Type:* <a href="#cdk8s.IResolver">IResolver</a>[]
Resolvers used by this app.
This includes both custom resolvers
passed by the `resolvers` property, as well as built-in resolvers.
---
##### `yamlOutputType`<sup>Required</sup> <a name="yamlOutputType" id="cdk8s.App.property.yamlOutputType"></a>
```typescript
public readonly yamlOutputType: YamlOutputType;
```
- *Type:* <a href="#cdk8s.YamlOutputType">YamlOutputType</a>
- *Default:* YamlOutputType.FILE_PER_CHART
How to divide the YAML output into files.
---
### Chart <a name="Chart" id="cdk8s.Chart"></a>
#### Initializers <a name="Initializers" id="cdk8s.Chart.Initializer"></a>
```typescript
import { Chart } from 'cdk8s'
new Chart(scope: Construct, id: string, props?: ChartProps)
```
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| <code><a href="#cdk8s.Chart.Initializer.parameter.scope">scope</a></code> | <code>constructs.Construct</code> | *No description.* |
| <code><a href="#cdk8s.Chart.Initializer.parameter.id">id</a></code> | <code>string</code> | *No description.* |
| <code><a href="#cdk8s.Chart.Initializer.parameter.props">props</a></code> | <code><a href="#cdk8s.ChartProps">ChartProps</a></code> | *No description.* |
---
##### `scope`<sup>Required</sup> <a name="scope" id="cdk8s.Chart.Initializer.parameter.scope"></a>
- *Type:* constructs.Construct
---
##### `id`<sup>Required</sup> <a name="id" id="cdk8s.Chart.Initializer.parameter.id"></a>
- *Type:* string
---
##### `props`<sup>Optional</sup> <a name="props" id="cdk8s.Chart.Initializer.parameter.props"></a>
- *Type:* <a href="#cdk8s.ChartProps">ChartProps</a>
---
#### Methods <a name="Methods" id="Methods"></a>
| **Name** | **Description** |
| --- | --- |
| <code><a href="#cdk8s.Chart.toString">toString</a></code> | Returns a string representation of this construct. |
| <code><a href="#cdk8s.Chart.addDependency">addDependency</a></code> | Create a dependency between this Chart and other constructs. |
| <code><a href="#cdk8s.Chart.generateObjectName">generateObjectName</a></code> | Generates a app-unique name for an object given it's construct node path. |
| <code><a href="#cdk8s.Chart.toJson">toJson</a></code> | Renders this chart to a set of Kubernetes JSON resources. |
---
##### `toString` <a name="toString" id="cdk8s.Chart.toString"></a>
```typescript
public toString(): string
```
Returns a string representation of this construct.
##### `addDependency` <a name="addDependency" id="cdk8s.Chart.addDependency"></a>
```typescript
public addDependency(dependencies: ...IConstruct[]): void
```
Create a dependency between this Chart and other constructs.
These can be other ApiObjects, Charts, or custom.
###### `dependencies`<sup>Required</sup> <a name="dependencies" id="cdk8s.Chart.addDependency.parameter.dependencies"></a>
- *Type:* ...constructs.IConstruct[]
the dependencies to add.
---
##### `generateObjectName` <a name="generateObjectName" id="cdk8s.Chart.generateObjectName"></a>
```typescript
public generateObjectName(apiObject: ApiObject): string
```
Generates a app-unique name for an object given it's construct node path.
Different resource types may have different constraints on names
(`metadata.name`). The previous version of the name generator was
compatible with DNS_SUBDOMAIN but not with DNS_LABEL.
For example, `Deployment` names must comply with DNS_SUBDOMAIN while
`Service` names must comply with DNS_LABEL.
Since there is no formal specification for this, the default name
generation scheme for kubernetes objects in cdk8s was changed to DNS_LABEL,
since it’s the common denominator for all kubernetes resources
(supposedly).
You can override this method if you wish to customize object names at the
chart level.
###### `apiObject`<sup>Required</sup> <a name="apiObject" id="cdk8s.Chart.generateObjectName.parameter.apiObject"></a>
- *Type:* <a href="#cdk8s.ApiObject">ApiObject</a>
The API object to generate a name for.
---
##### `toJson` <a name="toJson" id="cdk8s.Chart.toJson"></a>
```typescript
public toJson(): any[]
```
Renders this chart to a set of Kubernetes JSON resources.
#### Static Functions <a name="Static Functions" id="Static Functions"></a>
| **Name** | **Description** |
| --- | --- |
| <code><a href="#cdk8s.Chart.isConstruct">isConstruct</a></code> | Checks if `x` is a construct. |
| <code><a href="#cdk8s.Chart.isChart">isChart</a></code> | Return whether the given object is a Chart. |
| <code><a href="#cdk8s.Chart.of">of</a></code> | Finds the chart in which a node is defined. |
---
##### `isConstruct` <a name="isConstruct" id="cdk8s.Chart.isConstruct"></a>
```typescript
import { Chart } from 'cdk8s'
Chart.isConstruct(x: any)
```
Checks if `x` is a construct.
Use this method instead of `instanceof` to properly detect `Construct`
instances, even when the construct library is symlinked.
Explanation: in JavaScript, multiple copies of the `constructs` library on
disk are seen as independent, completely different libraries. As a
consequence, the class `Construct` in each copy of the `constructs` library
is seen as a different class, and an instance of one class will not test as
`instanceof` the other class. `npm install` will not create installations
like this, but users may manually symlink construct libraries together or
use a monorepo tool: in those cases, multiple copies of the `constructs`
library can be accidentally installed, and `instanceof` will behave
unpredictably. It is safest to avoid using `instanceof`, and using
this type-testing method instead.
###### `x`<sup>Required</sup> <a name="x" id="cdk8s.Chart.isConstruct.parameter.x"></a>
- *Type:* any
Any object.
---
##### `isChart` <a name="isChart" id="cdk8s.Chart.isChart"></a>
```typescript
import { Chart } from 'cdk8s'
Chart.isChart(x: any)
```
Return whether the given object is a Chart.
We do attribute detection since we can't reliably use 'instanceof'.
###### `x`<sup>Required</sup> <a name="x" id="cdk8s.Chart.isChart.parameter.x"></a>
- *Type:* any
---
##### `of` <a name="of" id="cdk8s.Chart.of"></a>
```typescript
import { Chart } from 'cdk8s'
Chart.of(c: IConstruct)
```
Finds the chart in which a node is defined.
###### `c`<sup>Required</sup> <a name="c" id="cdk8s.Chart.of.parameter.c"></a>
- *Type:* constructs.IConstruct
a construct node.
---
#### Properties <a name="Properties" id="Properties"></a>
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| <code><a href="#cdk8s.Chart.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
| <code><a href="#cdk8s.Chart.property.apiObjects">apiObjects</a></code> | <code><a href="#cdk8s.ApiObject">ApiObject</a>[]</code> | Returns all the included API objects. |
| <code><a href="#cdk8s.Chart.property.labels">labels</a></code> | <code>{[ key: string ]: string}</code> | Labels applied to all resources in this chart. |
| <code><a href="#cdk8s.Chart.property.namespace">namespace</a></code> | <code>string</code> | The default namespace for all objects in this chart. |
---
##### `node`<sup>Required</sup> <a name="node" id="cdk8s.Chart.property.node"></a>
```typescript
public readonly node: Node;
```
- *Type:* constructs.Node
The tree node.
---
##### `apiObjects`<sup>Required</sup> <a name="apiObjects" id="cdk8s.Chart.property.apiObjects"></a>
```typescript
public readonly apiObjects: ApiObject[];
```
- *Type:* <a href="#cdk8s.ApiObject">ApiObject</a>[]
Returns all the included API objects.
---
##### `labels`<sup>Required</sup> <a name="labels" id="cdk8s.Chart.property.labels"></a>
```typescript
public readonly labels: {[ key: string ]: string};
```
- *Type:* {[ key: string ]: string}
Labels applied to all resources in this chart.
This is an immutable copy.
---
##### `namespace`<sup>Optional</sup> <a name="namespace" id="cdk8s.Chart.property.namespace"></a>
```typescript
public readonly namespace: string;
```
- *Type:* string
The default namespace for all objects in this chart.
---
### Helm <a name="Helm" id="cdk8s.Helm"></a>
Represents a Helm deployment.
Use this construct to import an existing Helm chart and incorporate it into your constructs.
#### Initializers <a name="Initializers" id="cdk8s.Helm.Initializer"></a>
```typescript
import { Helm } from 'cdk8s'
new Helm(scope: Construct, id: string, props: HelmProps)
```
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| <code><a href="#cdk8s.Helm.Initializer.parameter.scope">scope</a></code> | <code>constructs.Construct</code> | *No description.* |
| <code><a href="#cdk8s.Helm.Initializer.parameter.id">id</a></code> | <code>string</code> | *No description.* |
| <code><a href="#cdk8s.Helm.Initializer.parameter.props">props</a></code> | <code><a href="#cdk8s.HelmProps">HelmProps</a></code> | *No description.* |
---
##### `scope`<sup>Required</sup> <a name="scope" id="cdk8s.Helm.Initializer.parameter.scope"></a>
- *Type:* constructs.Construct
---
##### `id`<sup>Required</sup> <a name="id" id="cdk8s.Helm.Initializer.parameter.id"></a>
- *Type:* string
---
##### `props`<sup>Required</sup> <a name="props" id="cdk8s.Helm.Initializer.parameter.props"></a>
- *Type:* <a href="#cdk8s.HelmProps">HelmProps</a>
---
#### Methods <a name="Methods" id="Methods"></a>
| **Name** | **Description** |
| --- | --- |
| <code><a href="#cdk8s.Helm.toString">toString</a></code> | Returns a string representation of this construct. |
---
##### `toString` <a name="toString" id="cdk8s.Helm.toString"></a>
```typescript
public toString(): string
```
Returns a string representation of this construct.
#### Static Functions <a name="Static Functions" id="Static Functions"></a>
| **Name** | **Description** |
| --- | --- |
| <code><a href="#cdk8s.Helm.isConstruct">isConstruct</a></code> | Checks if `x` is a construct. |
---
##### `isConstruct` <a name="isConstruct" id="cdk8s.Helm.isConstruct"></a>
```typescript
import { Helm } from 'cdk8s'
Helm.isConstruct(x: any)
```
Checks if `x` is a construct.
Use this method instead of `instanceof` to properly detect `Construct`
instances, even when the construct library is symlinked.
Explanation: in JavaScript, multiple copies of the `constructs` library on
disk are seen as independent, completely different libraries. As a
consequence, the class `Construct` in each copy of the `constructs` library
is seen as a different class, and an instance of one class will not test as
`instanceof` the other class. `npm install` will not create installations
like this, but users may manually symlink construct libraries together or
use a monorepo tool: in those cases, multiple copies of the `constructs`
library can be accidentally installed, and `instanceof` will behave
unpredictably. It is safest to avoid using `instanceof`, and using
this type-testing method instead.
###### `x`<sup>Required</sup> <a name="x" id="cdk8s.Helm.isConstruct.parameter.x"></a>
- *Type:* any
Any object.
---
#### Properties <a name="Properties" id="Properties"></a>
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| <code><a href="#cdk8s.Helm.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
| <code><a href="#cdk8s.Helm.property.apiObjects">apiObjects</a></code> | <code><a href="#cdk8s.ApiObject">ApiObject</a>[]</code> | Returns all the included API objects. |
| <code><a href="#cdk8s.Helm.property.releaseName">releaseName</a></code> | <code>string</code> | The helm release name. |
---
##### `node`<sup>Required</sup> <a name="node" id="cdk8s.Helm.property.node"></a>
```typescript
public readonly node: Node;
```
- *Type:* constructs.Node
The tree node.
---
##### `apiObjects`<sup>Required</sup> <a name="apiObjects" id="cdk8s.Helm.property.apiObjects"></a>
```typescript
public readonly apiObjects: ApiObject[];
```
- *Type:* <a href="#cdk8s.ApiObject">ApiObject</a>[]
Returns all the included API objects.
---
##### `releaseName`<sup>Required</sup> <a name="releaseName" id="cdk8s.Helm.property.releaseName"></a>
```typescript
public readonly releaseName: string;
```
- *Type:* string
The helm release name.
---
### Include <a name="Include" id="cdk8s.Include"></a>
Reads a YAML manifest from a file or a URL and defines all resources as API objects within the defined scope.
The names (`metadata.name`) of imported resources will be preserved as-is
from the manifest.
#### Initializers <a name="Initializers" id="cdk8s.Include.Initializer"></a>
```typescript
import { Include } from 'cdk8s'
new Include(scope: Construct, id: string, props: IncludeProps)
```
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| <code><a href="#cdk8s.Include.Initializer.parameter.scope">scope</a></code> | <code>constructs.Construct</code> | *No description.* |
| <code><a href="#cdk8s.Include.Initializer.parameter.id">id</a></code> | <code>string</code> | *No description.* |
| <code><a href="#cdk8s.Include.Initializer.parameter.props">props</a></code> | <code><a href="#cdk8s.IncludeProps">IncludeProps</a></code> | *No description.* |
---
##### `scope`<sup>Required</sup> <a name="scope" id="cdk8s.Include.Initializer.parameter.scope"></a>
- *Type:* constructs.Construct
---
##### `id`<sup>Required</sup> <a name="id" id="cdk8s.Include.Initializer.parameter.id"></a>
- *Type:* string
---
##### `props`<sup>Required</sup> <a name="props" id="cdk8s.Include.Initializer.parameter.props"></a>
- *Type:* <a href="#cdk8s.IncludeProps">IncludeProps</a>
---
#### Methods <a name="Methods" id="Methods"></a>
| **Name** | **Description** |
| --- | --- |
| <code><a href="#cdk8s.Include.toString">toString</a></code> | Returns a string representation of this construct. |
---
##### `toString` <a name="toString" id="cdk8s.Include.toString"></a>
```typescript
public toString(): string
```
Returns a string representation of this construct.
#### Static Functions <a name="Static Functions" id="Static Functions"></a>
| **Name** | **Description** |
| --- | --- |
| <code><a href="#cdk8s.Include.isConstruct">isConstruct</a></code> | Checks if `x` is a construct. |
---
##### `isConstruct` <a name="isConstruct" id="cdk8s.Include.isConstruct"></a>
```typescript
import { Include } from 'cdk8s'
Include.isConstruct(x: any)
```
Checks if `x` is a construct.
Use this method instead of `instanceof` to properly detect `Construct`
instances, even when the construct library is symlinked.
Explanation: in JavaScript, multiple copies of the `constructs` library on
disk are seen as independent, completely different libraries. As a
consequence, the class `Construct` in each copy of the `constructs` library
is seen as a different class, and an instance of one class will not test as
`instanceof` the other class. `npm install` will not create installations
like this, but users may manually symlink construct libraries together or
use a monorepo tool: in those cases, multiple copies of the `constructs`
library can be accidentally installed, and `instanceof` will behave
unpredictably. It is safest to avoid using `instanceof`, and using
this type-testing method instead.
###### `x`<sup>Required</sup> <a name="x" id="cdk8s.Include.isConstruct.parameter.x"></a>
- *Type:* any
Any object.
---
#### Properties <a name="Properties" id="Properties"></a>
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| <code><a href="#cdk8s.Include.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
| <code><a href="#cdk8s.Include.property.apiObjects">apiObjects</a></code> | <code><a href="#cdk8s.ApiObject">ApiObject</a>[]</code> | Returns all the included API objects. |
---
##### `node`<sup>Required</sup> <a name="node" id="cdk8s.Include.property.node"></a>
```typescript
public readonly node: Node;
```
- *Type:* constructs.Node
The tree node.
---
##### `apiObjects`<sup>Required</sup> <a name="apiObjects" id="cdk8s.Include.property.apiObjects"></a>
```typescript
public readonly apiObjects: ApiObject[];
```
- *Type:* <a href="#cdk8s.ApiObject">ApiObject</a>[]
Returns all the included API objects.
---
## Structs <a name="Structs" id="Structs"></a>
### ApiObjectMetadata <a name="ApiObjectMetadata" id="cdk8s.ApiObjectMetadata"></a>
Metadata associated with this object.
#### Initializer <a name="Initializer" id="cdk8s.ApiObjectMetadata.Initializer"></a>
```typescript
import { ApiObjectMetadata } from 'cdk8s'
const apiObjectMetadata: ApiObjectMetadata = { ... }
```
#### Properties <a name="Properties" id="Properties"></a>
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| <code><a href="#cdk8s.ApiObjectMetadata.property.annotations">annotations</a></code> | <code>{[ key: string ]: string}</code> | Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. |
| <code><a href="#cdk8s.ApiObjectMetadata.property.finalizers">finalizers</a></code> | <code>string[]</code> | Namespaced keys that tell Kubernetes to wait until specific conditions are met before it fully deletes resources marked for deletion. |
| <code><a href="#cdk8s.ApiObjectMetadata.property.labels">labels</a></code> | <code>{[ key: string ]: string}</code> | Map of string keys and values that can be used to organize and categorize (scope and select) objects. |
| <code><a href="#cdk8s.ApiObjectMetadata.property.name">name</a></code> | <code>string</code> | The unique, namespace-global, name of this object inside the Kubernetes cluster. |
| <code><a href="#cdk8s.ApiObjectMetadata.property.namespace">namespace</a></code> | <code>string</code> | Namespace defines the space within each name must be unique. |
| <code><a href="#cdk8s.ApiObjectMetadata.property.ownerReferences">ownerReferences</a></code> | <code><a href="#cdk8s.OwnerReference">OwnerReference</a>[]</code> | List of objects depended by this object. |
---
##### `annotations`<sup>Optional</sup> <a name="annotations" id="cdk8s.ApiObjectMetadata.property.annotations"></a>
```typescript
public readonly annotations: {[ key: string ]: string};
```
- *Type:* {[ key: string ]: string}
- *Default:* No annotations.
Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata.
They are not queryable and should be
preserved when modifying objects.
> [http://kubernetes.io/docs/user-guide/annotations](http://kubernetes.io/docs/user-guide/annotations)
---
##### `finalizers`<sup>Optional</sup> <a name="finalizers" id="cdk8s.ApiObjectMetadata.property.finalizers"></a>
```typescript
public readonly finalizers: string[];
```
- *Type:* string[]
- *Default:* No finalizers.
Namespaced keys that tell Kubernetes to wait until specific conditions are met before it fully deletes resources marked for deletion.
Must be empty before the object is deleted from the registry. Each entry is
an identifier for the responsible component that will remove the entry from
the list. If the deletionTimestamp of the object is non-nil, entries in
this list can only be removed. Finalizers may be processed and removed in
any order. Order is NOT enforced because it introduces significant risk of
stuck finalizers. finalizers is a shared field, any actor with permission
can reorder it. If the finalizer list is processed in order, then this can
lead to a situation in which the component responsible for the first
finalizer in the list is waiting for a signal (field value, external
system, or other) produced by a component responsible for a finalizer later
in the list, resulting in a deadlock. Without enforced ordering finalizers
are free to order amongst themselves and are not vulnerable to ordering
changes in the list.
> [https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/](https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/)
---
##### `labels`<sup>Optional</sup> <a name="labels" id="cdk8s.ApiObjectMetadata.property.labels"></a>
```typescript
public readonly labels: {[ key: string ]: string};
```
- *Type:* {[ key: string ]: string}
- *Default:* No labels.
Map of string keys and values that can be used to organize and categorize (scope and select) objects.
May match selectors of replication controllers and services.
> [http://kubernetes.io/docs/user-guide/labels](http://kubernetes.io/docs/user-guide/labels)
---
##### `name`<sup>Optional</sup> <a name="name" id="cdk8s.ApiObjectMetadata.property.name"></a>
```typescript
public readonly name: string;
```
- *Type:* string
- *Default:* an app-unique name generated by the chart
The unique, namespace-global, name of this object inside the Kubernetes cluster.
Normally, you shouldn't specify names for objects and let the CDK generate
a name for you that is application-unique. The names CDK generates are
composed from the construct path components, separated by dots and a suffix
that is based on a hash of the entire path, to ensure uniqueness.
You can supply custom name allocation logic by overriding the
`chart.generateObjectName` method.
If you use an explicit name here, bear in mind that this reduces the
composability of your construct because it won't be possible to include
more than one instance in any app. Therefore it is highly recommended to
leave this unspecified.
---
##### `namespace`<sup>Optional</sup> <a name="namespace" id="cdk8s.ApiObjectMetadata.property.namespace"></a>
```typescript
public readonly namespace: string;
```
- *Type:* string
- *Default:* undefined (will be assigned to the 'default' namespace)
Namespace defines the space within each name must be unique.
An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation.
Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces
---
##### `ownerReferences`<sup>Optional</sup> <a name="ownerReferences" id="cdk8s.ApiObjectMetadata.property.ownerReferences"></a>
```typescript
public readonly ownerReferences: OwnerReference[];
```
- *Type:* <a href="#cdk8s.OwnerReference">OwnerReference</a>[]
- *Default:* automatically set by Kubernetes
List of objects depended by this object.
If ALL objects in the list have
been deleted, this object will be garbage collected. If this object is
managed by a controller, then an entry in this list will point to this
controller, with the controller field set to true. There cannot be more
than one managing controller.
Kubernetes sets the value of this field automatically for objects that are
dependents of other objects like ReplicaSets, DaemonSets, Deployments, Jobs
and CronJobs, and ReplicationControllers. You can also configure these
relationships manually by changing the value of this field. However, you
usually don't need to and can allow Kubernetes to automatically manage the
relationships.
> [https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/](https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/)
---
### ApiObjectMetadataDefinitionOptions <a name="ApiObjectMetadataDefinitionOptions" id="cdk8s.ApiObjectMetadataDefinitionOptions"></a>
Options for `ApiObjectMetadataDefinition`.
#### Initializer <a name="Initializer" id="cdk8s.ApiObjectMetadataDefinitionOptions.Initializer"></a>
```typescript
import { ApiObjectMetadataDefinitionOptions } from 'cdk8s'
const apiObjectMetadataDefinitionOptions: ApiObjectMetadataDefinitionOptions = { ... }
```
#### Properties <a name="Properties" id="Properties"></a>
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| <code><a href="#cdk8s.ApiObjectMetadataDefinitionOptions.property.annotations">annotations</a></code> | <code>{[ key: string ]: string}</code> | Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. |
| <code><a href="#cdk8s.ApiObjectMetadataDefinitionOptions.property.finalizers">finalizers</a></code> | <code>string[]</code> | Namespaced keys that tell Kubernetes to wait until specific conditions are met before it fully deletes resources marked for deletion. |
| <code><a href="#cdk8s.ApiObjectMetadataDefinitionOptions.property.labels">labels</a></code> | <code>{[ key: string ]: string}</code> | Map of string keys and values that can be used to organize and categorize (scope and select) objects. |
| <code><a href="#cdk8s.ApiObjectMetadataDefinitionOptions.property.name">name</a></code> | <code>string</code> | The unique, namespace-global, name of this object inside the Kubernetes cluster. |
| <code><a href="#cdk8s.ApiObjectMetadataDefinitionOptions.property.namespace">namespace</a></code> | <code>string</code> | Namespace defines the space within each name must be unique. |
| <code><a href="#cdk8s.ApiObjectMetadataDefinitionOptions.property.ownerReferences">ownerReferences</a></code> | <code><a href="#cdk8s.OwnerReference">OwnerReference</a>[]</code> | List of objects depended by this object. |
| <code><a href="#cdk8s.ApiObjectMetadataDefinitionOptions.property.apiObject">apiObject</a></code> | <code><a href="#cdk8s.ApiObject">ApiObject</a></code> | Which ApiObject instance is the metadata attached to. |
---
##### `annotations`<sup>Optional</sup> <a name="annotations" id="cdk8s.ApiObjectMetadataDefinitionOptions.property.annotations"></a>
```typescript
public readonly annotations: {[ key: string ]: string};
```
- *Type:* {[ key: string ]: string}
- *Default:* No annotations.
Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata.
They are not queryable and should be
preserved when modifying objects.
> [http://kubernetes.io/docs/user-guide/annotations](http://kubernetes.io/docs/user-guide/annotations)
---
##### `finalizers`<sup>Optional</sup> <a name="finalizers" id="cdk8s.ApiObjectMetadataDefinitionOptions.property.finalizers"></a>
```typescript
public readonly finalizers: string[];
```
- *Type:* string[]
- *Default:* No finalizers.
Namespaced keys that tell Kubernetes to wait until specific conditions are met before it fully deletes resources marked for deletion.
Must be empty before the object is deleted from the registry. Each entry is
an identifier for the responsible component that will remove the entry from
the list. If the deletionTimestamp of the object is non-nil, entries in
this list can only be removed. Finalizers may be processed and removed in
any order. Order is NOT enforced because it introduces significant risk of
stuck finalizers. finalizers is a shared field, any actor with permission
can reorder it. If the finalizer list is processed in order, then this can
lead to a situation in which the component responsible for the first
finalizer in the list is waiting for a signal (field value, external
system, or other) produced by a component responsible for a finalizer later
in the list, resulting in a deadlock. Without enforced ordering finalizers
are free to order amongst themselves and are not vulnerable to ordering
changes in the list.
> [https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/](https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/)
---
##### `labels`<sup>Optional</sup> <a name="labels" id="cdk8s.ApiObjectMetadataDefinitionOptions.property.labels"></a>
```typescript
public readonly labels: {[ key: string ]: string};
```
- *Type:* {[ key: string ]: string}
- *Default:* No labels.
Map of string keys and values that can be used to organize and categorize (scope and select) objects.
May match selectors of replication controllers and services.
> [http://kubernetes.io/docs/user-guide/labels](http://kubernetes.io/docs/user-guide/labels)
---
##### `name`<sup>Optional</sup> <a name="name" id="cdk8s.ApiObjectMetadataDefinitionOptions.property.name"></a>
```typescript
public readonly name: string;
```
- *Type:* string
- *Default:* an app-unique name generated by the chart
The unique, namespace-global, name of this object inside the Kubernetes cluster.
Normally, you shouldn't specify names for objects and let the CDK generate
a name for you that is application-unique. The names CDK generates are
composed from the construct path components, separated by dots and a suffix
that is based on a hash of the entire path, to ensure uniqueness.
You can supply custom name allocation logic by overriding the
`chart.generateObjectName` method.
If you use an explicit name here, bear in mind that this reduces the
composability of your construct because it won't be possible to include
more than one instance in any app. Therefore it is highly recommended to
leave this unspecified.
---
##### `namespace`<sup>Optional</sup> <a name="namespace" id="cdk8s.ApiObjectMetadataDefinitionOptions.property.namespace"></a>
```typescript
public readonly namespace: string;
```
- *Type:* string
- *Default:* undefined (will be assigned to the 'default' namespace)
Namespace defines the space within each name must be unique.
An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation.
Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces
---
##### `ownerReferences`<sup>Optional</sup> <a name="ownerReferences" id="cdk8s.ApiObjectMetadataDefinitionOptions.property.ownerReferences"></a>
```typescript
public readonly ownerReferences: OwnerReference[];
```
- *Type:* <a href="#cdk8s.OwnerReference">OwnerReference</a>[]
- *Default:* automatically set by Kubernetes
List of objects depended by this object.
If ALL objects in the list have
been deleted, this object will be garbage collected. If this object is
managed by a controller, then an entry in this list will point to this
controller, with the controller field set to true. There cannot be more
than one managing controller.
Kubernetes sets the value of this field automatically for objects that are
dependents of other objects like ReplicaSets, DaemonSets, Deployments, Jobs
and CronJobs, and ReplicationControllers. You can also configure these
relationships manually by changing the value of this field. However, you
usually don't need to and can allow Kubernetes to automatically manage the
relationships.
> [https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/](https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/)
---
##### `apiObject`<sup>Required</sup> <a name="apiObject" id="cdk8s.ApiObjectMetadataDefinitionOptions.property.apiObject"></a>
```typescript
public readonly apiObject: ApiObject;
```
- *Type:* <a href="#cdk8s.ApiObject">ApiObject</a>
Which ApiObject instance is the metadata attached to.
---
### ApiObjectProps <a name="ApiObjectProps" id="cdk8s.ApiObjectProps"></a>
Options for defining API objects.
#### Initializer <a name="Initializer" id="cdk8s.ApiObjectProps.Initializer"></a>
```typescript
import { ApiObjectProps } from 'cdk8s'
const apiObjectProps: ApiObjectProps = { ... }
```
#### Properties <a name="Properties" id="Properties"></a>
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| <code><a href="#cdk8s.ApiObjectProps.property.apiVersion">apiVersion</a></code> | <code>string</code> | API version. |
| <code><a href="#cdk8s.ApiObjectProps.property.kind">kind</a></code> | <code>string</code> | Resource kind. |
| <code><a href="#cdk8s.ApiObjectProps.property.metadata">metadata</a></code> | <code><a href="#cdk8s.ApiObjectMetadata">ApiObjectMetadata</a></code> | Object metadata. |
---
##### `apiVersion`<sup>Required</sup> <a name="apiVersion" id="cdk8s.ApiObjectProps.property.apiVersion"></a>
```typescript
public readonly apiVersion: string;
```
- *Type:* string
API version.
---
##### `kind`<sup>Required</sup> <a name="kind" id="cdk8s.ApiObjectProps.property.kind"></a>
```typescript
public readonly kind: string;
```
- *Type:* string
Resource kind.
---
##### `metadata`<sup>Optional</sup> <a name="metadata" id="cdk8s.ApiObjectProps.property.metadata"></a>
```typescript
public readonly metadata: ApiObjectMetadata;
```
- *Type:* <a href="#cdk8s.ApiObjectMetadata">ApiObjectMetadata</a>
Object metadata.
If `name` is not specified, an app-unique name will be allocated by the
framework based on the path of the construct within thes construct tree.
---
### AppProps <a name="AppProps" id="cdk8s.AppProps"></a>
#### Initializer <a name="Initializer" id="cdk8s.AppProps.Initializer"></a>
```typescript
import { AppProps } from 'cdk8s'
const appProps: AppProps = { ... }
```
#### Properties <a name="Properties" id="Properties"></a>
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| <code><a href="#cdk8s.AppProps.property.outdir">outdir</a></code> | <code>string</code> | The directory to output Kubernetes manifests. |
| <code><a href="#cdk8s.AppProps.property.outputFileExtension">outputFileExtension</a></code> | <code>string</code> | The file extension to use for rendered YAML files. |
| <code><a href="#cdk8s.AppProps.property.recordConstructMetadata">recordConstructMetadata</a></code> | <code>boolean</code> | When set to true, the output directory will contain a `construct-metadata.json` file that holds construct related metadata on every resource in the app. |
| <code><a href="#cdk8s.AppProps.property.resolvers">resolvers</a></code> | <code><a href="#cdk8s.IResolver">IResolver</a>[]</code> | A list of resolvers that can be used to replace property values before they are written to the manifest file. |
| <code><a href="#cdk8s.AppProps.property.yamlOutputType">yamlOutputType</a></code> | <code><a href="#cdk8s.YamlOutputType">YamlOutputType</a></code> | How to divide the YAML output into files. |
---
##### `outdir`<sup>Optional</sup> <a name="outdir" id="cdk8s.AppProps.property.outdir"></a>
```typescript
public readonly outdir: string;
```
- *Type:* string
- *Default:* CDK8S_OUTDIR if defined, otherwise "dist"
The directory to output Kubernetes manifests.
If you synthesize your application using `cdk8s synth`, you must
also pass this value to the CLI using the `--output` option or
the `output` property in the `cdk8s.yaml` configuration file.
Otherwise, the CLI will not know about the output directory,
and synthesis will fail.
This property is intended for internal and testing use.
---
##### `outputFileExtension`<sup>Optional</sup> <a name="outputFileExtension" id="cdk8s.AppProps.property.outputFileExtension"></a>
```typescript
public readonly outputFileExtension: string;
```
- *Type:* string
- *Default:* .k8s.yaml
The file extension to use for rendered YAML files.
---
##### `recordConstructMetadata`<sup>Optional</sup> <a name="recordConstructMetadata" id="cdk8s.AppProps.property.recordConstructMetadata"></a>
```typescript
public readonly recordConstructMetadata: boolean;
```
- *Type:* boolean
- *Default:* false
When set to true, the output directory will contain a `construct-metadata.json` file that holds construct related metadata on every resource in the app.
---
##### `resolvers`<sup>Optional</sup> <a name="resolvers" id="cdk8s.AppProps.property.resolvers"></a>
```typescript
public readonly resolvers: IResolver[];
```
- *Type:* <a href="#cdk8s.IResolver">IResolver</a>[]
- *Default:* no resolvers.
A list