Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Show

Show expanded resource definitions

It will traverse the visible elements in the jsonnet output and render any object that looks like a kubernetes resource

  • has a kind field
  • has an apiVersion field

Help

Show expanded resource definitions                                                                                                                                                                                 
                                                                                                         
Usage:                                                                                                                                                                                                             
  kubecfg show [flags]                                                                                                                                                                                             
                                                                                                         
Flags:                                                                                                   
  -e, --exec string                        Inline code
      --export-dir string                  Split yaml stream into multiple files and write files into a directory. If the directory exists it must be empty.
      --export-filename-extension string   Override the file extension used when creating filenames when using export-filename-format
      --export-filename-format string      Go template expression used to render path names for resources. (default "{{.apiVersion}}.{{.kind}}-{{default \"default\" .metadata.namespace}}.{{.metadata.name}}")
  -o, --format string                      Output format.  Supported values are: json, yaml (default "yaml")
  -h, --help                               help for show
      --overlay-code string                Inline Jsonnet code to compose to each of the input files
      --overlay-code-file string           Jsonnet file to compose to each of the input files
      --reorder string                     --reorder=server: Reorder resources like the 'update' command does. --reorder=client: TODO
      --show-provenance                    Add provenance annotations showing the file and the field path to each rendered k8s object

Jsonnet Code

local kubecfg = import 'kubecfg.libsonnet';

{
  local outer = self,

  container:: {
    name: 'busybox',
    image: 'busybox:latest',
  },

  deployment: {
    local this = self,

    apiVersion: 'extensions/v1beta1',
    kind: 'Deployment',
    metadata: {
      name: 'busybox',
      labels: { name: 'busybox' },
    },
    spec: {
      replicas: 1,
      template: {
        metadata: { labels: this.metadata.labels },
        spec: {
          containers: [outer.container],
        },
      },
    },
  },
}

Basic Rendering

render jsonnet to stdout in YAML format

kubecfg show source.jsonnet

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    name: busybox
  name: busybox
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: busybox
    spec:
      containers:
      - image: busybox:latest
        name: busybox

render to stdout in JSON format

kubecfg show -o json source.jsonnet

{
  "apiVersion": "extensions/v1beta1",
  "kind": "Deployment",
  "metadata": {
    "labels": {
      "name": "busybox"
    },
    "name": "busybox"
  },
  "spec": {
    "replicas": 1,
    "template": {
      "metadata": {
        "labels": {
          "name": "busybox"
        }
      },
      "spec": {
        "containers": [
          {
            "image": "busybox:latest",
            "name": "busybox"
          }
        ]
      }
    }
  }
}

Export Manifests to files

It is possible to export the manifests as a set of split files ( 1 per resource ) to a directory. This can be usefl when using other tools , like Flux or ArgoCD, to actually deploy manifests to a cluster

kubecfg show --export-dir output/ --export-filename-format "{{.apiVersion}}.{{.kind}}-{{default \"default\" .metadata.namespace}}.{{.metadata.name}}" show.jsonnet

➜ ls -1 output 
extensions-v1beta1.Deployment-default.busybox.yaml

➜ cat output/extensions-v1beta1.Deployment-default.busybox.yaml 
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    name: busybox
  name: busybox
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: busybox
    spec:
      containers:
      - image: busybox:latest
        name: busybox

Inline usage

It is possible to exec inline code with kubecfg, this is useful for debugging purposes

kubecfg show -e "(import 'show.jsonnet') + { deployment+: { metadata+: {namespace: 'foo'}}}"

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    name: busybox
  name: busybox
  namespace: foo
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: busybox
    spec:
      containers:
      - image: busybox:latest
        name: busybox

Inline code (-e, --overlay-code, --ext-code and --tla-code) can use kubecfg without importing kubecfg.libsonnet first. See Using kubecfg without importing it.