Commit c022f712 authored by Muhammad Umair Khan's avatar Muhammad Umair Khan
Browse files

add k8s tilt file for automation

parent f75d3a07
Loading
Loading
Loading
Loading

Tiltfile

0 → 100644
+288 −0
Original line number Diff line number Diff line
# ============================================
# MEC Sandbox Tiltfile
# ============================================
# Automates the build > dockerize > deploy cycle for meepctl.
#
# Usage:
#   tilt up              # Start watching (platform must already be deployed)
#   tilt down            # Stop watching
#
# Tilt UI: http://localhost:10350
#
# What this does:
#   - Watches go-apps/<app>/ for Go code changes > build + dockerize + restart pods
#   - Watches charts/<sandbox-app>/ for chart changes > re-dockerize meep-virt-engine + redeploy
#   - Watches charts/<core-app>/ for chart changes > redeploy core app
#   - Provides manual buttons for dep management
# ============================================

# ---- Configuration ----

# Core apps: Go source + chart changes trigger build/dockerize/deploy
CORE_APPS = [
    'meep-auth-svc',
    'meep-mon-engine',
    'meep-platform-ctrl',
    'meep-sandbox-api',
    'meep-virt-engine',
    'meep-webhook',
]

# Sandbox MEC API apps: Go source changes trigger build/dockerize/restart
# Chart changes trigger meep-virt-engine re-dockerize + redeploy
SANDBOX_APPS = [
    'meep-ams',            # MEC021
    'meep-app-enablement', # MEC011
    'meep-dai',            # MEC016
    'meep-federation',     # MEC040
    'meep-gis-engine',
    'meep-iot',            # MEC033
    'meep-loc-serv',       # MEC013
    'meep-metrics-engine',
    'meep-rnis',           # MEC012
    'meep-sandbox-ctrl',
    'meep-sss',            # MEC046
    'meep-tm',             # MEC015
    'meep-vis',            # MEC030
    'meep-wais',           # MEC028
]

# Dependency apps: manual buttons only (these rarely change)
DEP_APPS = [
    'meep-cert-manager',
    'meep-couchdb',
    'meep-docker-registry',
    'meep-grafana',
    'meep-influxdb',
    'meep-ingress',
    'meep-kube-state-metrics',
    'meep-open-map-tiles',
    'meep-postgis',
    'meep-prometheus',
    'meep-redis',
    'meep-thanos',
    'meep-thanos-archive',
]

# ============================================
# Helper: restart all K8s deployments using a given image name
# ============================================
# Sandbox deployments have unpredictable names (e.g. mep1-mec033-1 uses meep-iot image).
# This finds ALL deployments across ALL namespaces using the given image and restarts them.
def restart_deploys_by_image_cmd(app):
    col_spec = 'NS:.metadata.namespace,NAME:.metadata.name,IMAGE:.spec.template.spec.containers' + '[0]' + '.image'
    cmd = 'echo "Restarting deployments using image: ' + app + '..." && '
    cmd = cmd + 'kubectl get deploy -A -o custom-columns=' + col_spec + ' --no-headers '
    cmd = cmd + '| grep ' + app + ' '
    cmd = cmd + '| while read NS NAME IMAGE; do '
    cmd = cmd + 'echo "  Restarting $NS/$NAME"; '
    cmd = cmd + 'kubectl rollout restart deploy "$NAME" -n "$NS"; '
    cmd = cmd + 'done; '
    cmd = cmd + 'echo "Done."'
    return cmd

# ============================================
# CORE APPS - Go code changes
# ============================================
# When Go source code changes:
#   build > dockerize > force redeploy via meepctl
# ============================================

for app in CORE_APPS:
    # Skip meep-virt-engine here; it gets special handling below
    if app == 'meep-virt-engine':
        continue

    local_resource(
        app + ':code',
        cmd='echo "=== [' + app + '] Go code changed ===" && meepctl build ' + app + ' --nolint && meepctl dockerize ' + app + ' && meepctl deploy core ' + app + ' --force',
        deps=['go-apps/' + app + '/'],
        ignore=[
            'go-apps/' + app + '/vendor/',
        ],
        auto_init=False,
        trigger_mode=TRIGGER_MODE_AUTO,
        labels=['core'],
    )

# ============================================
# CORE APPS - Chart changes
# ============================================
# When a core app's Helm chart changes:
#   force redeploy only (no build/dockerize needed)
# ============================================

for app in CORE_APPS:
    if app == 'meep-virt-engine':
        continue

    local_resource(
        app + ':chart',
        cmd='echo "=== [' + app + '] Helm chart changed ===" && meepctl deploy core ' + app + ' --force',
        deps=['charts/' + app + '/'],
        auto_init=False,
        trigger_mode=TRIGGER_MODE_AUTO,
        labels=['core'],
    )

# ============================================
# SANDBOX APPS - Go code changes
# ============================================
# When sandbox app Go source changes:
#   build > dockerize > restart all K8s deployments using that image
#   (sandbox deployments have dynamic names, so we find them by image)
# ============================================

for app in SANDBOX_APPS:
    local_resource(
        app + ':code',
        cmd='echo "=== [' + app + '] Go code changed ===" && meepctl build ' + app + ' --nolint && meepctl dockerize ' + app + ' && ' + restart_deploys_by_image_cmd(app),
        deps=['go-apps/' + app + '/'],
        ignore=[
            'go-apps/' + app + '/vendor/',
        ],
        auto_init=False,
        trigger_mode=TRIGGER_MODE_AUTO,
        labels=['sandbox'],
    )

# ============================================
# MEEP-VIRT-ENGINE - Special handling
# ============================================
# meep-virt-engine bundles ALL sandbox Helm charts as docker-data.
# Triggers:
#   1. Own Go code changes > build + dockerize + deploy -f
#   2. ANY sandbox chart changes > dockerize + deploy -f
#      (because charts are packaged into virt-engine's Docker image)
# ============================================

# 1. meep-virt-engine own Go code changes
local_resource(
    'meep-virt-engine:code',
    cmd='echo "=== [meep-virt-engine] Go code changed ===" && meepctl build meep-virt-engine --nolint && meepctl dockerize meep-virt-engine && meepctl deploy core meep-virt-engine --force',
    deps=['go-apps/meep-virt-engine/'],
    ignore=[
        'go-apps/meep-virt-engine/vendor/',
    ],
    auto_init=False,
    trigger_mode=TRIGGER_MODE_AUTO,
    labels=['core'],
)

# 2. meep-virt-engine chart change (its own chart)
local_resource(
    'meep-virt-engine:chart',
    cmd='echo "=== [meep-virt-engine] Helm chart changed ===" && meepctl deploy core meep-virt-engine --force',
    deps=['charts/meep-virt-engine/'],
    auto_init=False,
    trigger_mode=TRIGGER_MODE_AUTO,
    labels=['core'],
)

# 3. ANY sandbox app chart changes > re-dockerize + redeploy meep-virt-engine
#    (because sandbox charts are packaged inside virt-engine's Docker image)
sandbox_chart_deps = ['charts/' + app + '/' for app in SANDBOX_APPS]
local_resource(
    'meep-virt-engine:sandbox-charts',
    cmd='echo "=== [meep-virt-engine] Sandbox chart changed ===" && echo "Re-dockerizing meep-virt-engine to bundle updated charts..." && meepctl dockerize meep-virt-engine && meepctl deploy core meep-virt-engine --force',
    deps=sandbox_chart_deps,
    auto_init=False,
    trigger_mode=TRIGGER_MODE_AUTO,
    labels=['core'],
)

# ============================================
# DEPENDENCY APPS - Manual buttons
# ============================================
# Dependencies are deployed once and rarely change.
# These are manual-trigger buttons in the Tilt UI.
# ============================================

local_resource(
    'dep:deploy-all',
    cmd='meepctl deploy dep',
    auto_init=False,
    trigger_mode=TRIGGER_MODE_MANUAL,
    labels=['dep'],
)

local_resource(
    'dep:delete-all',
    cmd='meepctl delete dep',
    auto_init=False,
    trigger_mode=TRIGGER_MODE_MANUAL,
    labels=['dep'],
)

for app in DEP_APPS:
    local_resource(
        'dep:' + app,
        cmd='meepctl deploy dep ' + app + ' --force',
        auto_init=False,
        trigger_mode=TRIGGER_MODE_MANUAL,
        labels=['dep'],
    )

# ============================================
# UTILITY - Manual buttons
# ============================================

local_resource(
    'util:deploy-core-all',
    cmd='meepctl deploy core',
    auto_init=False,
    trigger_mode=TRIGGER_MODE_MANUAL,
    labels=['util'],
)

local_resource(
    'util:delete-core-all',
    cmd='meepctl delete core',
    auto_init=False,
    trigger_mode=TRIGGER_MODE_MANUAL,
    labels=['util'],
)

local_resource(
    'util:build-all',
    cmd='meepctl build all',
    auto_init=False,
    trigger_mode=TRIGGER_MODE_MANUAL,
    labels=['util'],
)

local_resource(
    'util:dockerize-all',
    cmd='meepctl dockerize all',
    auto_init=False,
    trigger_mode=TRIGGER_MODE_MANUAL,
    labels=['util'],
)

local_resource(
    'util:docker-prune',
    cmd='docker image prune -f',
    auto_init=False,
    trigger_mode=TRIGGER_MODE_MANUAL,
    labels=['util'],
)

local_resource(
    'util:pod-status',
    cmd='kubectl get pods -A | grep meep-',
    auto_init=False,
    trigger_mode=TRIGGER_MODE_MANUAL,
    labels=['util'],
)

# ============================================
# meep-ingress-certs - chart-only core app (no Go code)
# ============================================
local_resource(
    'meep-ingress-certs:chart',
    cmd='echo "=== [meep-ingress-certs] Chart changed ===" && meepctl deploy core meep-ingress-certs --force',
    deps=['charts/meep-ingress-certs/'],
    auto_init=False,
    trigger_mode=TRIGGER_MODE_AUTO,
    labels=['core'],
)