首页 > 解决方案 > 动态创建 configmap yaml 文件

问题描述

背景:我在不同位置有近 15 个 *.properties 文件。我需要为每个属性文件创建 configmap。

目前我正在使用手动创建 configmap yaml 文件

 kubectl create configmap app-properties --from-file= /path/app.properties.

安装,一切正常。

要求:一旦我们将任何新的键/值添加到属性文件中,它应该会反映在 configmap yaml 文件中。我可以使用一些“包含文件”动态创建 configmap yaml。

标签: kuberneteskubernetes-helmhelmfile

解决方案


您可以查看属性文件的修改,并在它们更改时重新创建 ConfigMap。

为此,macOS 和 Linux 有不同的工具。

Linux

在 Linux 上,您可以使用inotifywait. 您可以按照以下方式进行操作:

创建文件monitor.sh

#!/bin/bash

FILE=$1
inotifywait -m -e modify "$FILE" |
  while read; do
    kubectl create configmap "$(basename $FILE)" --from-file="$FILE" --dry-run -o yaml | kubectl apply -f -
  done

然后为每个属性文件执行它:

./monitor.sh /path/app.properties

这将生成一个更新的 ConfigMap YAML 清单,并在每次修改文件时kubectl create应用它。kubectl apply/path/app.properties

您可以安装inotifywait

sudo apt-get install inotify-tools

苹果系统

在 macOS 上,您可以使用fswatch来监视文件修改。

创建文件monitor.sh

#!/bin/bash

FILE=$1
fswatch "$FILE" |
  while read; do
    kubectl create configmap "$(basename $FILE)" --from-file="$FILE" --dry-run -o yaml | kubectl apply -f -
  done

然后为每个属性文件执行它:

./monitor.sh /path/app.properties

这将生成一个更新的 ConfigMap YAML 清单,并在每次修改文件时kubectl create应用它。kubectl apply/path/app.properties

您可以安装fswatch

brew install fswatch

笔记

fswatch也可能在 Linux ( sudo apt-get install fswatch) 上可用,在这种情况下,您也可以monitor.sh在 Linux 上使用 macOS 的脚本。但是,您可能需要使用fswatch -o(带有-o选项)来确保只有一个输出行。


推荐阅读