将文件添加到现有的 Openshift configMap

Add a file into an existing Openshift configMap

是否可以将文件添加到现有的 Openshift configMap 中?

我要构建一个 Jenkins 作业,它会自动更新 Openshift configMap 中的特定键,正如我所建议的那样,但现在我在实际操作中遇到了问题。我们总是可以有多个 configmap,但为了简洁起见,我的问题仍然存在。

oc create configmap my-config --from-file=path/to/file.properties --dry-run -o 
yaml | oc apply -f -

我只找到了这个命令来执行它,但它没有添加键 "file.properties" 及其内容作为值,它只是用键 "file.properties" 替换了我的整个 configMap,这是我不想做的事情。

这里的用例是一些团队部署了一个特定的 configMap,如果可能的话,我应该能够用额外的值更新和维护 configMap。

编辑:我找到了 2016 年的 this 线程,但 oc update 似乎已从 openshift 3.10

中删除

通过使用 json 而不是 yaml,并使用 jq 及其乘法运算符 (*),我能够得到我认为你想要的东西,当与对象一起使用时, 将递归合并它们(为了便于阅读而拆分行):

oc export configmap my-config -o json \
  | jq ". * $(oc create configmap my-config --from-file path/to/file.properties --dry-run -o json)" \
  | oc apply -f -

虽然如果您正在寻找单行代码,这很好用,但您也可以在文本编辑器中使用 oc edit configmap my-configoc replace(使用新准备的 json 或 yaml 文件),或使用 Web 控制台。 oc patch 也有可能,但我无法快速完成。

oc 补丁是你的朋友:

oc patch cm myconfig -p $(cat patch_file.yaml)

其中 patch_file.yaml 有:

data:
  file.properties: |
    content of the file here

如果 file.properties 不在 cm 中,它将被创建并与其余数据合并,如果在 cm 中,它将被替换。