0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

kustomizeのConfigMapGeneratorを使ってる時に簡単にConfigMapの名前を取る方法

Last updated at Posted at 2025-03-14

要約

kubectl get deployment 'your deployment name' -o jsonpath='{.spec.template.spec.containers[*].env[?(@.name=="YOUR_TARGET_ENV_NAME")].valueFrom.configMapKeyRef.name}'

対象読者

  • kustomizeのConfigMapGeneratorを使ってる方

はじめに

kustomize便利ですね。複数の環境のk8s manifestをまとめられますし。ただConfigMapGeneratorを使うと少し面倒になることがありますよね。

環境変数を変更してrollout restartしたいとき、 kubectl edit configmap などを使って環境変数を変更すると思います。ConfigMapGeneratorを使っているとこのConfigMapの名前を取るのが面倒になります。ConfigMapだと設定した名前をそのまま使えますが、ConfigMapGeneratorだとそうはいきません。ConfigMapGeneratorは毎回名前を生成するためです。名前の末尾に接尾辞がはいるためです。

名前をさがすとなると kubectl get pods -o yamlkubctl get deployment -o yaml などでmanifestを目視しなければいけなくなります。毎回やるにはなかなか面倒です。

そこで -o jsonpath オプションです。このオプションは取得したい要素を jsonPath で指定できます。 less などを使って調べるよりより手早く対象を見つけられます。

もうすこし細かい説明

要約のjsonPath部分を抽出すると以下になります。

.spec.template.containers[*].env[?(@.name=="YOUR_TARGET_ENV_NAME")].valueFrom.configMapKeyRef.name

大体の部分はなんとなくわかるかなおもいます。以下の部分が少し分りづらいかなと思うので追加で説明します。

  • .env[?(@.name=="YOUR_TARGET_ENV_NAME")]

こちらはfilterという機能になります ?() で囲まれた部分がフィルタです。 @ で自分の要素を指定し、その子要素の name== で指定された名前の要素のみを取り出します。

まとめ

DeploymentからConfigMapの名前を取る方法を記載しました。
基本、概要部分をコピペして適切に修正して使っていただければと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?