YQ :より良いあなたのYAML資源を扱うのを助けるコマンドラインツール
10025 ワード
あなたのYAMLファイルのフィールドを更新するときは、標準的な練習は、動的に値を置き換えることができるテンプレートツールを使用することです.しかしながら、展開されたマニフェストが静的なYAMLファイルであると思われるので、Kubernetesはそれ自身のどんなテンプレートメカニズムも提供しません.
エンター
何
何ができるか ファイルから値を読み込みます. 新しい値を追加します. 既存の値を更新します. 新しいYAMLファイルを生成します. YAMLをJSONに変換します. 2つ以上のYAMLファイルをマージします.
インストール
インストールできます
Windows上で実行可能ファイルをダウンロードすることができますGithub .
ユースケースシナリオ
YAML値の読み込み
次のPODで作業しているとします.
YAML値の変更
前の例を見てみましょう.あなたが生産環境でアプリケーションを展開し、生産データベースにURLを変更したいと言う.
ここでは、1つだけのコマンドを使用して同じように行う方法を示します.
使用の利点
3 . YAMLファイルのマージ
クラスタに送信されたすべてのPODに余分なコンテナを注入したいと仮定しましょう.
しかし、使用する代わりにAdmission Webhook , あなたは展開スクリプトで余分なコマンドを加えることに決めます.
YAMLファイルとして追加コンテナのYAML設定を保存できます.
出力には追加のコンテナとして使節というプロキシがあります.
言い換えると、2つのYAMLファイルは1つにマージされます.
使用制限
中 2つのYAMLファイルはトップレベルでマージされます.例えば、YAMLファイルのチャンクを ファイルの順序が問題です.を返します. 言わないと 制限があっても
代替案
あなたがより複雑な変換を適用したいならば
Kustomizeと他の興味深い選択肢についてはこちらをご覧ください.Templating YAML with real code
エンター
yq
.yq
YAMLファイルをテンプレート化するための偉大なコマンドラインツールであり、それはヘルムやKustomize .何
yq
?yq
はYAMLを変換するために設計されたコマンドラインツールです.似ているjq
それはYAMLの代わりにJSONを変えることに集中します.何ができるか
yq
YAMLファイルを入力として受け取り、インストール
インストールできます
yq
Mac OSでは$ brew install yq
Linuxでは$ sudo add-apt-repository ppa:rmescandon/yq
sudo apt-get install yq
In case you don't have the
add-apt-repository
command
installed, you can install it withapt-get install software-
.
properties-common
Windows上で実行可能ファイルをダウンロードすることができますGithub .
ユースケースシナリオ
YAML値の読み込み
次のPODで作業しているとします.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
env:
- name: DB_URL
value: postgres://db_url:5432
環境変数の値を読むことができましたENV
次のコマンドを実行します.$ yq r pod.yaml "spec.containers[0].env[0].value"
postgres://db_url:5432
$
このコマンドは次のように動作します.yq r
はYAMLファイルから値を読み込むコマンドです.pod.yaml
読みたいYAMLのファイルパスです.spec.containers[0].env[0].value
はクエリパスです.YAML値の変更
前の例を見てみましょう.あなたが生産環境でアプリケーションを展開し、生産データベースにURLを変更したいと言う.
ここでは、1つだけのコマンドを使用して同じように行う方法を示します.
$ yq w pod.yaml "spec.containers[0].env[0].value" "postgres://prod:5432"
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
env:
- name: DB_URL
value: postgres://prod:5432
$
ここで気づくなら.yq
結果を標準出力に出力します.YAMLを適当に編集したいなら、-i
フラグ.使用の利点
yq
言う以上sed
( bashで)sed
, yq
YAML形式を理解し、構造化されたマークアップをナビゲートし、展開できます.Note:
sed
treats files as strings and it doesn't mind if the
file isn't a valid YAML.
3 . YAMLファイルのマージ
クラスタに送信されたすべてのPODに余分なコンテナを注入したいと仮定しましょう.
しかし、使用する代わりにAdmission Webhook , あなたは展開スクリプトで余分なコマンドを加えることに決めます.
YAMLファイルとして追加コンテナのYAML設定を保存できます.
apiVersion: v1
kind: Pod
metadata:
name: envoy-pod
spec:
containers:
- name: proxy-container
image: envoyproxy/envoy:v1.12.2
ports:
- containerPort: 80
このようにpodを持っていると仮定します.$ apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
env:
- name: DB_URL
value: postgres://db_url:5432
$
次のコマンドを実行し、2つのYAMLをマージできます.$ yq m --append pod.yaml envoy-pod.yaml
Please notice the --append flag that is necessary to append
values to an array. You can find more details in the official
documentation.
出力には追加のコンテナとして使節というプロキシがあります.
$ apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
env:
- name: DB_URL
value: postgres://db_url:5432
- name: proxy-container
image: envoyproxy/envoy:v1.12.2
ports:
- containerPort: 80
Please note that
yq
sorts the YAML fields in the output alphabetically, so the order of fields in your output could be different from the > above listing.
言い換えると、2つのYAMLファイルは1つにマージされます.
使用制限
yq
?中
yq
偉大なYAMLを変換すると、それは独自のいくつかの問題があります..spec.containers[]
. yq
年にポッドの名前のために使節ポッドを保ってくださいmetadata.name
. yq
明示的にappend and overwrite values . それらは文書全体に適用されるフラグであるので、粒度を正しく得ることは難しい.yq
小さなプロジェクトに取り組んでいる場合は特に、使用する可能性がたくさんあります.代替案
あなたがより複雑な変換を適用したいならば
yq
. KustomizeはYAMLファイルを使用しますkustomization.yaml
YAMLをテンプレート化する方法を決めます.Kustomizeと他の興味深い選択肢についてはこちらをご覧ください.Templating YAML with real code
Reference
この問題について(YQ :より良いあなたのYAML資源を扱うのを助けるコマンドラインツール), 我々は、より多くの情報をここで見つけました https://dev.to/vikcodes/yq-a-command-line-tool-that-will-help-you-handle-your-yaml-resources-better-8j9テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol