https://github.com/influxdata/k8s-jsonnet-libs
Jsonnet Libs repo - mostly generated with jsonnet-libs/k8s project
https://github.com/influxdata/k8s-jsonnet-libs
Last synced: 3 months ago
JSON representation
Jsonnet Libs repo - mostly generated with jsonnet-libs/k8s project
- Host: GitHub
- URL: https://github.com/influxdata/k8s-jsonnet-libs
- Owner: influxdata
- Created: 2021-07-09T16:22:19.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2024-11-13T18:13:46.000Z (7 months ago)
- Last Synced: 2025-01-14T04:13:07.768Z (5 months ago)
- Language: Jsonnet
- Size: 9.5 MB
- Stars: 7
- Watchers: 5
- Forks: 1
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# k8s-jsonnet-libs
Jsonnet Libs repo - mostly generated with jsonnet-libs/k8s projectThis project uses https://github.com/jsonnet-libs/k8s to generate jsonnet-libs
## Add a new set of CRD to the project
### Create or update a new lib
Create a folder in `libs/`:
```bash
mkdir libs/
```Setup `config.jsonnet`, this example is for rendering a lib from CRDs:
```jsonnet
# libs//config.jsonnet
local config = import 'jsonnet/config.jsonnet';config.new(
name='',
specs=[
{
# output directory, usually the version of the upstream application/CRD
output: '',# openapi spec v2 endpoint
# Use the localhost k3s endpoint in case `crds` is defined
openapi: 'http://localhost:8001/openapi/v2',# prefix Regex that should match the reverse of the CRDs spec.group
# for example `group: networking.istio.io`
# would become ^io\\.istio\\.networking\\..*"
prefix: '^\\.\\..*',# crds Endpoints of the CRD manifests, should be omitted if there is an openapi spec
crds: ['https://url.to.crd.manifest//manifests/crd-all.gen.yaml'],# localName used in the docs for the example(s)
localName: '',
},
]
)
```## Generate jsonnet libraries
```bash
$ make libs/ # Generate the library
```or to generate all libraries
```bash
$ make all
```## Customizing
Because the generator only creates the most minimal yet functional code, more
sophisticated utilities like constructors (`deployment.new(name, replicas,
containers)`, etc) are not created.For that, there are two methods for extending:
### `custom` patches
The [`custom/`](https://github.com/jsonnet-libs/k8s/tree/master/libs/k8s/custom)
directory contains a set of `.libsonnet` files, that are _automatically merged_
with the generated result in `main.libsonnet`, so they become part of the
exported API.For example the patches in `libs/k8s`:
```
libs/k8s/
├── config.jsonnet # Config to generate the k8s jsonnet libraries
├── README.md.tmpl # Template for the index of the generated docs
└── custom
└── core
├── apps.libsonnet # Constructors for `core/v1`, ported from `ksonnet-gen` and `kausal.libsonnet`
├── autoscaling.libsonnet # Extends `autoscaling/v2beta2`
├── batch.libsonnet # Constructors for `batch/v1beta1`, `batch/v2alpha1`, ported from `kausal.libsonnet`
├── core.libsonnet # Constructors for `apps/v1`, `apps/v1beta1`, ported from `ksonnet-gen` and `kausal.libsonnet`
├── list.libsonnet # Adds `core.v1.List`
├── mapContainers.libsonnet # Adds `mapContainers` functions for fields that support them
├── rbac.libsonnet # Adds helper functions to rbac objects
└── volumeMounts.libsonnet # Adds helper functions to mount volumes
```A reference for these must also be made in the `config.jsonnet`:
```jsonnet
# libs/k8s/config.jsonnet
local config = import 'jsonnet/config.jsonnet';config.new(
name='k8s',
specs=[
{
...
patchDir: 'custom/core',
},
]
)
```### Extensions
Extensions serve a similar purpose as `custom/` patches, but are **not
automatically applied**. However, they are still part of the final artifact, but
need to added by the user themselves.Extensions can be applied as so:
```jsonnet
(import "github.com/jsonnet-libs/k8s-libsonnet/1.21/main.libsonnet")
+ (import "github.com/jsonnet-libs/k8s-libsonnet/extensions/.libsonnet")
```A reference for these must also be made in the `config.jsonnet`:
```jsonnet
# libs/k8s/config.jsonnet
local config = import 'jsonnet/config.jsonnet';config.new(
name='k8s',
specs=[
{
...
extensionsDir: 'extensions/core',
},
]
)
```