get functional yaml files from Helm

10/8/2019

Is there a way to intercept the yaml files from helm after is has built them, but right before the creation of the objects?

What I'm doing now is to create the objects then get them through:

for file in $(kubectl get OBJECT -n maesh -oname); do kubectl get $i -n maesh --export -oyaml > $file.yaml; done

This works fine. I only have to previously craete the object directory, but works. I just was wondering if there is a clean way of doing this.

And, by the way, the reason is because the service mesh of traefik (maesh) is still in diapers, and the only way to install it is through helm. They don't have yet the files in their repo.

-- suren
kubernetes-helm

1 Answer

10/8/2019

You can do

helm template .

this will output something like

---
# Source: my-app/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: release-name-my-app
  annotations:
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"

  labels:
    app.kubernetes.io/name: my-app
    helm.sh/chart: my-app-0.1.0
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "1.0"
    app.kubernetes.io/managed-by: Tiller
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: http
      protocol: TCP
      name: http
  selector:
    app.kubernetes.io/name: my-app
    app.kubernetes.io/instance: release-name

---
# Source: my-app/templates/tests/test-connection.yaml
apiVersion: v1
kind: Pod
metadata:
  name: "release-name-my-app-test-connection"
  labels:
    app.kubernetes.io/name: my-app
    helm.sh/chart: my-app-0.1.0
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "1.0"
    app.kubernetes.io/managed-by: Tiller
  annotations:
    "helm.sh/hook": test-success
spec:
  containers:
    - name: wget
      image: busybox
      command: ['wget']
      args:  ['release-name-my-app:80']
  restartPolicy: Never

---
# Source: my-app/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: release-name-my-app
  labels:
    app.kubernetes.io/name: my-app
    helm.sh/chart: my-app-0.1.0
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "1.0"
    app.kubernetes.io/managed-by: Tiller
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: my-app
      app.kubernetes.io/instance: release-name
  template:
    metadata:
      labels:
        app.kubernetes.io/name: my-app
        app.kubernetes.io/instance: release-name
    spec:
      containers:
        - name: my-app
          image: "nginx:stable"
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /
              port: http
          readinessProbe:
            httpGet:
              path: /
              port: http
          resources:
            {}


---
# Source: my-app/templates/ingress.yaml

and that is valid file with k8s objects.

-- tefozi
Source: StackOverflow