running_under_parent_tiltfile = os.getenv("TILT_PARENT", "false") == "true" # The user/pass that you will login to Grafana with grafana_admin_user_pass = os.getenv("GRAFANA_ADMIN_USER_PASS", "oncall") # HELM_PREFIX must be "oncall-dev" as it is hardcoded in dev/helm-local.yml HELM_PREFIX = "oncall-dev" # Use docker registery generated by ctlptl (dev/kind-config.yaml) DOCKER_REGISTRY = "localhost:63628/" if not running_under_parent_tiltfile: # Load the custom Grafana extensions v1alpha1.extension_repo( name="grafana-tilt-extensions", ref="main", url="https://github.com/grafana/tilt-extensions", ) v1alpha1.extension( name="grafana", repo_name="grafana-tilt-extensions", repo_path="grafana" ) load("ext://grafana", "grafana") load("ext://configmap", "configmap_create") load("ext://docker_build_sub", "docker_build_sub") # Tell ops-devenv/Tiltifle where our plugin.json file lives plugin_file = os.path.abspath("grafana-plugin/src/plugin.json") def plugin_json(): return plugin_file allow_k8s_contexts(["kind-kind"]) # Build the image including frontend folder for pytest docker_build_sub( "localhost:63628/oncall/engine:dev", context="./engine", cache_from=["grafana/oncall:latest"], ignore=["./grafana-plugin/test-results/", "./grafana-plugin/dist/", "./grafana-plugin/e2e-tests/"], child_context=".", target="dev", extra_cmds=["ADD ./grafana-plugin/src/plugin.json /etc/grafana-plugin/src/plugin.json"], live_update=[ sync("./engine/", "/etc/app"), run( "cd /etc/app && pip install -r requirements.txt", trigger="./engine/requirements.txt", ), ], ) # Build the plugin in the background local_resource( "build-ui", labels=["OnCallUI"], cmd="cd grafana-plugin && yarn install && yarn build:dev", serve_cmd="cd grafana-plugin && ONCALL_API_URL=http://oncall-dev-engine:8080 yarn watch", allow_parallel=True, ) yaml = helm("helm/oncall", name=HELM_PREFIX, values=["./dev/helm-local.yml", "./dev/helm-local.dev.yml"]) k8s_yaml(yaml) # Generate and load the grafana deploy yaml configmap_create( "grafana-oncall-app-provisioning", namespace="default", from_file="dev/grafana/provisioning/plugins/grafana-oncall-app-provisioning.yaml", ) k8s_resource( objects=["grafana-oncall-app-provisioning:configmap"], new_name="grafana-oncall-app-provisioning-configmap", resource_deps=["build-ui", "engine"], labels=["Grafana"], ) # Use separate grafana helm chart if not running_under_parent_tiltfile: grafana( context="grafana-plugin", plugin_files=["grafana-plugin/src/plugin.json"], namespace="default", deps=["grafana-oncall-app-provisioning-configmap", "build-ui", "engine"], extra_env={ "GF_SECURITY_ADMIN_PASSWORD": "oncall", "GF_SECURITY_ADMIN_USER": "oncall", "GF_AUTH_ANONYMOUS_ENABLED": "false", }, ) k8s_resource( workload="celery", resource_deps=["mariadb", "redis-master"], labels=["OnCallBackend"], ) k8s_resource( workload="engine", port_forwards=8080, resource_deps=["mariadb", "redis-master"], labels=["OnCallBackend"], ) k8s_resource(workload="redis-master", labels=["OnCallDeps"]) k8s_resource(workload="mariadb", labels=["OnCallDeps"]) # name all tilt resources after the k8s object namespace + name def resource_name(id): return id.name.replace(HELM_PREFIX + "-", "") workload_to_resource_function(resource_name)