bazel_tools: add helm_install macro and use it in core services
diff --git a/appmanager/BUILD b/appmanager/BUILD
index 9faa2ab..ac84729 100644
--- a/appmanager/BUILD
+++ b/appmanager/BUILD
@@ -1,4 +1,6 @@
load("//:bazel_tools/docker.bzl", "docker_image")
+load("//:bazel_tools/helm.bzl", "helm_install")
+load("@rules_pkg//:pkg.bzl", "pkg_tar")
# TODO(lekva): figure out how to build py_binary with pip dependencies and
# migrate off docker_image rule
@@ -10,3 +12,21 @@
dockerfile = "Dockerfile",
srcs = glob(["**"], exclude=["Dockerfile"]),
)
+
+pkg_tar(
+ name = "chart",
+ srcs = glob(["chart/**"]),
+ extension = "tar.gz",
+ strip_prefix = "./chart",
+)
+
+helm_install(
+ name = "install",
+ namespace = "pcloud-app-manager",
+ release_name = "init",
+ chart = ":chart",
+ args = {
+ "image.name": "localhost:30500/giolekva/pcloud-app-manager",
+ "image.pullPolicy": "Always",
+ },
+)
diff --git a/bazel_tools/helm.bzl b/bazel_tools/helm.bzl
new file mode 100644
index 0000000..7b71492
--- /dev/null
+++ b/bazel_tools/helm.bzl
@@ -0,0 +1,56 @@
+__HELM_INSTALL_TMPL = """
+#!/bin/sh
+# --- begin runfiles.bash initialization ---
+# Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash).
+set -euo pipefail
+if [[ ! -d "\$${{RUNFILES_DIR:-/dev/null}}" && ! -f "\$${{RUNFILES_MANIFEST_FILE:-/dev/null}}" ]]; then
+ if [[ -f "\$$0.runfiles_manifest" ]]; then
+ export RUNFILES_MANIFEST_FILE="\$$0.runfiles_manifest"
+ elif [[ -f "\$$0.runfiles/MANIFEST" ]]; then
+ export RUNFILES_MANIFEST_FILE="\$$0.runfiles/MANIFEST"
+ elif [[ -f "\$$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
+ export RUNFILES_DIR="\$$0.runfiles"
+ fi
+fi
+if [[ -f "\$${{RUNFILES_DIR:-/dev/null}}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
+ source "\$${{RUNFILES_DIR}}/bazel_tools/tools/bash/runfiles/runfiles.bash"
+elif [[ -f "\$${{RUNFILES_MANIFEST_FILE:-/dev/null}}" ]]; then
+ source "\$$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \
+ "\$$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)"
+else
+ echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash"
+ exit 1
+fi
+# --- end runfiles.bash initialization ---
+CHART_TARBALL=\$$(rlocation __main__/{package}/{chart})
+helm --namespace={namespace} install --create-namespace {release_name} \$$CHART_TARBALL {args}
+"""
+
+def helm_install(name, namespace, release_name, chart, args):
+ args_str = ""
+ for arg, value in args.items():
+ args_str += "--set %s=%s " % (arg, value)
+ native.genrule(
+ name = "%s.sh" % name,
+ executable = False,
+ srcs = [chart,],
+ outs = ["helm_install.sh",],
+ cmd = """cat > $@ <<EOM
+%s
+EOM
+""" % __HELM_INSTALL_TMPL.format(
+ namespace = namespace,
+ release_name = release_name,
+ package = native.package_name(),
+ chart = "%s.tar.gz" % chart.split(":")[1],
+ args = args_str,
+ ))
+ native.sh_binary(
+ name = name,
+ srcs = ["helm_install.sh",],
+ data = [
+ chart,
+ ],
+ deps = [
+ "@bazel_tools//tools/bash/runfiles",
+ ])
diff --git a/controller/BUILD b/controller/BUILD
index bfdf0b1..48e6b37 100644
--- a/controller/BUILD
+++ b/controller/BUILD
@@ -1,4 +1,6 @@
load("//:bazel_tools/docker.bzl", "docker_image")
+load("//:bazel_tools/helm.bzl", "helm_install")
+load("@rules_pkg//:pkg.bzl", "pkg_tar")
# TODO(lekva): figure out how to build py_binary with pip dependencies and
# migrate off docker_image rule
@@ -10,3 +12,21 @@
dockerfile = "Dockerfile",
srcs = glob(["**"], exclude=["Dockerfile"]),
)
+
+pkg_tar(
+ name = "chart",
+ srcs = glob(["chart/**"]),
+ extension = "tar.gz",
+ strip_prefix = "./chart",
+)
+
+helm_install(
+ name = "install",
+ namespace = "pcloud",
+ release_name = "init",
+ chart = ":chart",
+ args = {
+ "image.name": "localhost:30500/giolekva/pcloud-api-server",
+ "image.pullPolicy": "Always",
+ },
+)
diff --git a/dev/install_core_services.sh b/dev/install_core_services.sh
index d1515c6..28d66f8 100755
--- a/dev/install_core_services.sh
+++ b/dev/install_core_services.sh
@@ -2,28 +2,17 @@
ROOT="$(dirname -- $(pwd))"
+# Dgraph
source $ROOT/apps/dgraph/install.sh
# Knowledge Graph
-cd "$ROOT/controller"
bazel run //controller:push_to_dev
-kubectl create namespace pcloud
-helm --namespace=pcloud install init chart \
- --set image.name=localhost:30500/giolekva/pcloud-api-server \
- --set image.pullPolicy=Always
+bazel run //controller:install
# Application Manager
-cd "$ROOT/appmanager"
bazel run //appmanager:push_to_dev
-kubectl create namespace pcloud-app-manager
-helm --namespace=pcloud-app-manager install init chart \
- --set image.name=localhost:30500/giolekva/pcloud-app-manager \
- --set image.pullPolicy=Always
+bazel run //appmanager:install
# Event Processor
-cd "$ROOT/events"
bazel run //events:push_to_dev
-kubectl create namespace pcloud-event-processor
-helm --namespace=pcloud-event-processor install init chart \
- --set image.name=localhost:30500/giolekva/pcloud-event-processor \
- --set image.pullPolicy=Always
+bazel run //events:install
diff --git a/events/BUILD b/events/BUILD
index a53e460..71bacea 100644
--- a/events/BUILD
+++ b/events/BUILD
@@ -1,4 +1,6 @@
load("//:bazel_tools/docker.bzl", "docker_image")
+load("//:bazel_tools/helm.bzl", "helm_install")
+load("@rules_pkg//:pkg.bzl", "pkg_tar")
# TODO(lekva): figure out how to build py_binary with pip dependencies and
# migrate off docker_image rule
@@ -10,3 +12,21 @@
dockerfile = "Dockerfile",
srcs = glob(["**"], exclude=["Dockerfile"]),
)
+
+pkg_tar(
+ name = "chart",
+ srcs = glob(["chart/**"]),
+ extension = "tar.gz",
+ strip_prefix = "./chart",
+)
+
+helm_install(
+ name = "install",
+ namespace = "pcloud-event-processor",
+ release_name = "init",
+ chart = ":chart",
+ args = {
+ "image.name": "localhost:30500/giolekva/pcloud-event-processor",
+ "image.pullPolicy": "Always",
+ },
+)