It has been a long time since the last stable release v0.9. Recently, I decide to implement some features that I always want to have at work. Hope these new features can also help you.
Nested Manifests
In v1.0, arrays and functions in components are flattened. This is useful for sharing manifests across components.
For instance, a database in Kubernetes is typically composed by a Deployment
and a Service
. To include a database in a component, before v1.0, you have to flatten these two manifests in the component by yourself. After v1.0, they are flattened automatically.
In this way, a database can be used as a single resource, which can be used everywhere in your components.
function createDatabase() {
return [new Deployment(), new Service()];
}
// Before v1.0
module.exports = [new Deployment(), ...createDatabase()];
// After v1.0
module.exports = [new Deployment(), createDatabase()];
More Information in ValidationError
There was only path
and index
in ValidationError
before v1.0. Sometimes it might be difficult to find where the error is. In v1.0, apiVersion
, kind
, namespace
and name
are added to ValidationError
. The following is an example of the new error message.
ValidationError: data.metadata.annotations['dependencies'] should be string
- path: ".../components/config-api"
- index: [0]
- kind: "apps/v1/Deployment"
- name: "config-api"
at resolveComponent (.../node_modules/@kosko/generate/src/generate.ts:81:15)
at resolveComponent (.../node_modules/@kosko/generate/src/generate.ts:59:28)
at Object.generate (.../node_modules/@kosko/generate/src/generate.ts:134:30)
at generateHandler (.../node_modules/@kosko/cli/src/commands/generate/index.ts:156:18)
at handler (.../node_modules/@kosko/cli/src/commands/generate/index.ts:200:20)
at Object.run (.../node_modules/@kosko/cli/src/index.ts:12:3)
Loading Kubernetes YAML
If you have been using Kubernetes for a while, you may have a lot of existing Kubernetes YAML files just like me. Instead of migrating YAML into JavaScript, try use the new package @kosko/yaml
.
@kosko/yaml
reads YAML files and transforms data into kubernetes-models classes, so your manifests are validated against Kubernetes OpenAPI schema.
const { loadFile } = require("@kosko/yaml");
module.exports = loadFile("manifest.yaml");
This package works better with "nested manifests", so please don't forget to upgrade to Kosko v1.0 first.
For more details, please check here.
Breaking Changes
- Drop support for Node.js 8.
@kosko/generate
- The type of
Manifest.index
andValidationError.index
is changed fromnumber
tonumber[]
. - The type of
Manifest.data
is changed fromany
tounknown
.
- The type of