kubevirtci make manifests

  1. make manifests with-bazel or make manifests no-bazel
  2. 下面进入 //:build-manifest-templator – ${templator}

make manifests with-bazel or make manifests no-bazel

前者用bazel生成manifest,后者不用bazel。

主要区别就下面的生成${templator}的不同,后者进入仓库的tools/manifest-templator/目录后执行go build生成可执行文件然后复制到${templator}路径。

(cd ${KUBEVIRT_DIR}/tools/manifest-templator/ && go_build && cp manifest-templator ${templator})

前者是通过bazel生成${templator}

bazel run \
        --config=${HOST_ARCHITECTURE} \
        //:build-manifest-templator -- ${templator}

下面进入 //:build-manifest-templator – ${templator}

用了内置的genrule,input是tools/manifest-templator/目录下的templator标签,该标签对应于tools/manifest-templator/ package中的BUILD.bazel文件中的name:templator(用于go build “tools/manifest-templator/”工具),output是”manifest-templator-copier”,命令是"echo '#!/bin/sh\n\ncp -f $(SRCS) $$1' > \"$@\""

这段genrule做的事情是往output文件中打印一段shell脚本,该脚本就执行了个复制操作。将input源(就是go编译的tools/manifest-templator/工具)复制到$1(即${templator})。

genrule(
    name = "build-manifest-templator",
    srcs = [
        "//tools/manifest-templator:templator",
    ],
    outs = ["manifest-templator-copier"],
    cmd = "echo '#!/bin/sh\n\ncp -f $(SRCS) $$1' > \"$@\"",
    executable = 1,
)

接下来都是用编译后的工具${templator}对manifests模板里的变量进行替换,得到manifests。


转载请注明来源,欢迎指出任何有错误或不够清晰的表达。可以邮件至 backendcloud@gmail.com