mumoshu/helm-x

feat: replicated/ship integration

mumoshu opened this issue · 6 comments

https://github.com/replicatedhq/ship

The integration would basically run ship so that ship runs helm template and kustomize to generate a set of kubernetes manifests, which is then consumed by helm-x as a helm chart

ship provides two commands ship inti and ship update, which basically fetches the upstream helm chart, run helm template, generate kustomization.yaml files, run kustomize build to produce a rendered.yaml to be applied later.

The file tree after ship init looks like:

$ tree .
.
├── base
│   ├── deployment.yaml
│   ├── kustomization.yaml
│   ├── pvc.yaml
│   ├── secrets.yaml
│   ├── svc.yaml
│   └── tests
│       ├── test-configmap.yaml
│       └── test.yaml
├── overlays
│   └── ship
│       └── kustomization.yaml
└── rendered.yaml

4 directories, 9 files

What helm-x would need here is the part of ship that runs helm fetch, and helm template, kustomize build, so that helm-x can instlal the kustomize output as a helm chart.

...and we won't need rendered.yaml in helm-x.

Generated kustomization.yamls are:

$ cat base/kustomization.yaml
kind: ""
apiversion: ""
resources:
- deployment.yaml
- pvc.yaml
- secrets.yaml
- svc.yaml
- tests/test-configmap.yaml
- tests/test.yaml

$ cat overlays/ship/kustomization.yaml
kind: ""
apiversion: ""
bases:
- ../../base

So can we just add --kustomize-patches-json6902 extensions/v1beta1/Ingress/myingress=myjsonpatch.yaml or --kustomize-patches-strategic-merge patch.yaml to helm-x?

Kustomize JSON pathes: https://github.com/kubernetes-sigs/kustomize/blob/master/examples/jsonpatch.md

Kustomize Strategic-merge patches: https://github.com/kubernetes-sigs/kustomize/tree/master/examples/wordpress

An useful extension in helm-x would be that extensions/v1beta1/Ingress/myingress=myjsonpatch.yaml can be replaced with a single yaml file containing:

# "target" syntax borrowed from kustomize
target:
    group: extensions
    version: v1beta1
    kind: Ingress
    name: my-ingress
# Single RFC6902 JSON Patch document = A sequence of JSON Patch "operations"
# https://triple-underscore.github.io/RFC6902-ja.html
patch:
- op: replace
  path: /spec/rules/0/host
  value: foo.bar.io
- op: add
  path: /spec/rules/0/http/paths/-
  value:
    path: '/test'
    backend:
      serviceName: my-test
      servicePort: 8081

#Or externalize the `patch` section by:
patchFile: myjsonpatch.yaml

Added --json-patch FILE and --strategic-merge-patch FILE flags via #8. Probably we won't need this in short term. Feel free to reopen if anyone wants this!