68 lines
3.4 KiB
Plaintext
68 lines
3.4 KiB
Plaintext
# The dev loop, rig's half. `make tilt` from rig's folder, or from an overlay's forwarder.
|
|
# rig owns this file: who we are, the context guard, the registry, the overlay's manifests.
|
|
# The workload's half is the overlay's own Tiltfile, included at the end; edit that one.
|
|
# Notes: docs/notes/Tiltfile.md
|
|
|
|
# ── who we are, and on which ports ─────────────────────────────────────────
|
|
# Asked of ctrl/ports.sh (via lib/config.sh), never recomputed here in Starlark.
|
|
_facts = str(local('bash ports.sh active', quiet=True)).split()
|
|
CLUSTER = _facts[0]
|
|
CTX = _facts[1]
|
|
HTTP = _facts[2]
|
|
HTTPS = _facts[3]
|
|
TILT = _facts[4]
|
|
REGISTRY = _facts[5]
|
|
# Absolute paths, or '-' when there is none.
|
|
MANIFESTS = '' if _facts[6] == '-' else _facts[6]
|
|
OVERLAY = '' if _facts[7] == '-' else _facts[7]
|
|
|
|
# ── refuse to deploy into the wrong cluster ────────────────────────────────
|
|
# Tilt fixes the context before parsing this file, so it can only be refused here.
|
|
# `make tilt` passes --context; this catches a bare `tilt up`.
|
|
allow_k8s_contexts(CTX)
|
|
if k8s_context() != CTX:
|
|
fail("Wrong kubectl context: '%s'. This is %s — run: make tilt, or tilt up --context %s"
|
|
% (k8s_context(), CLUSTER, CTX))
|
|
|
|
# ── images go to this environment's own registry ───────────────────────────
|
|
# Fail closed: name the registry rather than let Tilt infer it, or a miss pushes
|
|
# an unqualified image to docker.io.
|
|
default_registry('localhost:' + REGISTRY)
|
|
|
|
# ── the overlay's manifests ────────────────────────────────────────────────
|
|
# Every namespace they use must exist before anything lands in it, and kustomize
|
|
# does not order resources, so create them here (idempotent). The Namespaces they
|
|
# declare are grouped as 'infra', whatever they are named.
|
|
if MANIFESTS:
|
|
_yaml = kustomize(MANIFESTS)
|
|
k8s_yaml(_yaml)
|
|
_declared = []
|
|
_namespaces = {}
|
|
for _o in decode_yaml_stream(_yaml):
|
|
if not _o:
|
|
continue
|
|
_md = _o.get('metadata') or {}
|
|
if _o.get('kind') == 'Namespace':
|
|
_declared.append(_md.get('name'))
|
|
_namespaces[_md.get('name')] = True
|
|
elif _md.get('namespace'):
|
|
_namespaces[_md.get('namespace')] = True
|
|
for _ns in sorted(_namespaces.keys()):
|
|
local('kubectl --context %s create namespace %s --dry-run=client -o yaml | kubectl --context %s apply -f -'
|
|
% (CTX, _ns, CTX), quiet=True)
|
|
if _declared:
|
|
k8s_resource(objects=[_n + ':namespace' for _n in _declared], new_name='infra')
|
|
|
|
# ── the workload's half: the overlay's Tiltfile ────────────────────────────
|
|
# Included, so its relative paths resolve from the overlay's own folder. It reads
|
|
# these facts with os.getenv and never needs a path back into rig.
|
|
os.putenv('RIG_CLUSTER', CLUSTER)
|
|
os.putenv('RIG_CONTEXT', CTX)
|
|
os.putenv('RIG_HTTP_PORT', HTTP)
|
|
os.putenv('RIG_HTTPS_PORT', HTTPS)
|
|
os.putenv('RIG_TILT_PORT', TILT)
|
|
os.putenv('RIG_REGISTRY', 'localhost:' + REGISTRY)
|
|
os.putenv('RIG_OVERLAY_DIR', OVERLAY)
|
|
if OVERLAY and os.path.exists(OVERLAY + '/Tiltfile'):
|
|
include(OVERLAY + '/Tiltfile')
|