mirror of
https://github.com/rocky-linux/peridot.git
synced 2024-12-25 20:00:27 +00:00
68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
|
load("@bazel_skylib//lib:shell.bzl", "shell")
|
||
|
|
||
|
def _k8s_apply_impl(ctx):
|
||
|
runfiles = ctx.runfiles().merge(ctx.attr._bash_runfiles[DefaultInfo].default_runfiles)
|
||
|
runfiles = runfiles.merge(ctx.runfiles(
|
||
|
files = ctx.files.srcs,
|
||
|
))
|
||
|
files = [y for y in [x[DefaultInfo].files.to_list() for x in ctx.attr.srcs]]
|
||
|
all_files = [x for y in files for x in y]
|
||
|
sts = ";".join([y.short_path for y in all_files])
|
||
|
|
||
|
wait_sts = ";".join([y.short_path for y in ctx.files.wait])
|
||
|
replace_sts = ";".join([y.short_path for y in ctx.files.replace])
|
||
|
|
||
|
out_file = ctx.actions.declare_file(ctx.label.name + ".bash")
|
||
|
ctx.actions.expand_template(
|
||
|
template = ctx.file._k8s_bash,
|
||
|
output = out_file,
|
||
|
substitutions = {
|
||
|
"TMPL_files": sts,
|
||
|
"TMPL_wait": wait_sts,
|
||
|
"TMPL_replace": replace_sts,
|
||
|
},
|
||
|
is_executable = True,
|
||
|
)
|
||
|
return [DefaultInfo(
|
||
|
files = depset([out_file]),
|
||
|
runfiles = runfiles,
|
||
|
executable = out_file,
|
||
|
)]
|
||
|
|
||
|
k8s_apply = rule(
|
||
|
implementation = _k8s_apply_impl,
|
||
|
attrs = {
|
||
|
# Kubernetes json or yaml files
|
||
|
# Can be a target that generates them
|
||
|
# such as jsonnet_to_json
|
||
|
"srcs": attr.label_list(
|
||
|
allow_files = True,
|
||
|
mandatory = True,
|
||
|
),
|
||
|
# Files to wait for
|
||
|
# Ex. jobs such as migrations
|
||
|
"wait": attr.label_list(
|
||
|
allow_files = True,
|
||
|
),
|
||
|
# Resources to completely replace
|
||
|
# Ex. to clean up hanging jobs
|
||
|
"replace": attr.label_list(
|
||
|
allow_files = True,
|
||
|
),
|
||
|
# Namespace to be used in delete
|
||
|
"namespace": attr.string(),
|
||
|
# Used if resource should be deleted
|
||
|
"delete": attr.bool(
|
||
|
default = False,
|
||
|
),
|
||
|
"_bash_runfiles": attr.label(
|
||
|
default = Label("@bazel_tools//tools/bash/runfiles"),
|
||
|
),
|
||
|
"_k8s_bash": attr.label(
|
||
|
default = Label("//rules_byc/internal/k8s:k8s.bash"),
|
||
|
allow_single_file = True,
|
||
|
),
|
||
|
},
|
||
|
executable = True,
|
||
|
)
|