Skip to content

Instantly share code, notes, and snippets.

@vrabbi
Last active August 2, 2022 08:34
Show Gist options
  • Select an option

  • Save vrabbi/1f6ae2ef934997fa2adb01bef0a28202 to your computer and use it in GitHub Desktop.

Select an option

Save vrabbi/1f6ae2ef934997fa2adb01bef0a28202 to your computer and use it in GitHub Desktop.
#@data/values
---
workload:
metadata:
name: test-workload
namespace: default
params:
chart_name: tanzu-java-web-app
chart_repo:
name: demo-repo
kind: HelmRepository
image_key_path: image.repository
chart_values:
service:
type: LoadBalancer
image:
pullPolicy: IfNotPresent
images:
image:
image: test-image@sha256:1234546
#@ load("@ytt:data", "data")
#@ load("@ytt:assert", "assert")
#@ load("@ytt:yaml", "yaml")
#@ load("@ytt:struct", "struct")
#@ load("@ytt:overlay", "overlay")
#@ load("@ytt:regexp", "regexp")
#@ def merge_labels(fixed_values):
#@ labels = {}
#@ if hasattr(data.values.workload.metadata, "labels"):
#@ labels.update(data.values.workload.metadata.labels)
#@ end
#@ labels.update(fixed_values)
#@ return labels
#@ end
#@ def is_monorepo_approach():
#@ if 'gitops_server_address' in data.values.params and 'gitops_repository_owner' in data.values.params and 'gitops_repository_name' in data.values.params:
#@ return True
#@ end
#@ if 'gitops_server_address' in data.values.params or 'gitops_repository_owner' in data.values.params or 'gitops_repository_name' in data.values.params:
#@ 'gitops_server_address' in data.values.params or assert.fail("missing param: gitops_server_address")
#@ 'gitops_repository_owner' in data.values.params or assert.fail("missing param: gitops_repository_owner")
#@ 'gitops_repository_name' in data.values.params or assert.fail("missing param: gitops_repository_name")
#@ end
#@ return False
#@ end
#@ def has_git_params():
#@ if 'gitops_repository_prefix' in data.values.params:
#@ return True
#@ end
#@
#@ if 'gitops_repository' in data.values.params:
#@ return True
#@ end
#@
#@ return False
#@ end
#@ def is_gitops():
#@ return is_monorepo_approach() or has_git_params()
#@ end
#@ def param(key):
#@ if not key in data.values.params:
#@ return None
#@ end
#@ return data.values.params[key]
#@ end
#@ def strip_trailing_slash(some_string):
#@ if some_string[-1] == "/":
#@ return some_string[:-1]
#@ end
#@ return some_string
#@ end
#@ def mono_repository():
#@ strip_trailing_slash(data.values.params.gitops_server_address)
#@ return "/".join([
#@ strip_trailing_slash(data.values.params.gitops_server_address),
#@ strip_trailing_slash(data.values.params.gitops_repository_owner),
#@ data.values.params.gitops_repository_name,
#@ ]) + ".git"
#@ end
#@ def git_repository():
#@ if is_monorepo_approach():
#@ return mono_repository()
#@ end
#@
#@ if 'gitops_repository' in data.values.params:
#@ return param("gitops_repository")
#@ end
#@
#@ prefix = param("gitops_repository_prefix")
#@ return prefix + data.values.workload.metadata.name + ".git"
#@ end
#@ def image():
#@ return "/".join([
#@ data.values.params.registry.server,
#@ data.values.params.registry.repository,
#@ "-".join([
#@ data.values.workload.metadata.name,
#@ data.values.workload.metadata.namespace,
#@ "bundle",
#@ ])
#@ ]) + ":" + data.values.workload.metadata.uid
#@ end
#@ def as_dict(parts, leaf):
#@ if len(parts) == 0:
#@ return leaf
#@ end
#@ return {parts[0]: as_dict(parts[1:], leaf)}
#@ end
#@ def split_dot_path(path):
#@ # "replace any dot that does NOT have a leading slash with ':::'
#@ path = regexp.replace("([^\\\])\.", path, "$1:::")
#@ path = path.replace("\.", ".") # consume escaping of '.'
#@ return path.split(":::")
#@ end
#@ def image_path():
#@ if hasattr(data.values.params, "image_key_path"):
#@ return data.values.params.image_key_path
#@ else:
#@ return "image.repository"
#@ end
#@ end
#@ chart_config = as_dict(split_dot_path(image_path()), data.values.images.image.image)
#@ config_source = data.values.params
#@ def chart_overrides():
#@ return data.values.params
#@ end
#@ def image_override():
#@overlay/match-child-defaults missing_ok=True
chart_values: #@ chart_config
#@ end
#@ def chart_values():
#@ if hasattr(data.values.params, "chart_values"):
#@ return struct.encode(yaml.decode(yaml.encode(overlay.apply(chart_overrides(), image_override())))).chart_values
#@ else:
#@ return struct.encode(yaml.decode(yaml.encode(image_override()))).chart_values
#@ end
#@ end
#@ def helm_release():
---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: #@ data.values.workload.metadata.name
namespace: #@ data.values.workload.metadata.namespace
labels: #@ merge_labels({ "app.kubernetes.io/component": "helm-release", "app.tanzu.vmware.com/release-type": "helm" })
spec:
interval: 5m
chart:
spec:
chart: #@ data.values.params.chart_name
#@ if/end hasattr(data.values.params, "chart_version"):
version: #@ data.values.params.chart_version
sourceRef:
kind: #@ data.values.params.chart_repo.kind
name: #@ data.values.params.chart_repo.name
#@ if/end hasattr(data.values.params.chart_repo, "namespace"):
namespace: #@ data.values.params.chart_repo.namespace
interval: 1m
upgrade:
remediation:
remediateLastFailure: true
values: #@ chart_values()
#@ end
---
apiVersion: v1
kind: ConfigMap
metadata:
name: #@ "{}-helm-release".format(data.values.workload.metadata.name)
labels: #@ merge_labels({ "app.kubernetes.io/component": "config" })
data:
helm-release.yaml: #@ yaml.encode(helm_release())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment