使ってみようyqnetcfg yamlファイルを介してUbuntuシステムの静的IPを更新します。
私のファイル:
network:
version: 2
renderer: networkd
ethernets:
enp0s1:
dhcp4: no
addresses:
- 10.10.100.1/24
gateway4: 10.10.100.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
私が試しているコマンドは次のとおりです。
$ yq --version
yq (https://github.com/mikefarah/yq/) version 4.16.2
$ yq '(.. | select(has("addresses")).addresses) = ["10.10.200.1/24"]' 01-netcfg.yaml
Error: unknown command "(.. | select(has(\"addresses\")).addresses) = [\"10.10.200.1/24\"]" for "yq"
Run 'yq --help' for usage.
コマンドで適用しました。ガイド同様の例が示されています。
yq '(.. | select(has("tags")).tags) = ["coreos","arm64"]' company-servers.yaml
簡単な例を試しても機能しません。作成者の文書失敗する:
$ yq '.network.version = "3"' 01-netcfg.yaml
Error: unknown command ".network.version = \"3\"" for "yq"
Run 'yq --help' for usage.
私が間違っていることを知っている人はいますか?
ベストアンサー1
明らかに、これは文書を読むことができないという事実と、aptリポジトリによってインストールされたわずかな古いバージョンのyqのために起こりました。
yq にはコマンドが必要です。この場合は、以下を使用する必要があります。eval
注文する、これはv4.18.1のデフォルトですが、4.16〜を使用しているため、明示的に指定する必要があります。
また、キーのチェックを追加する必要がありますdhcp4
。それ以外の場合、nameservers.addresses配列も上書きされます。
$ yq eval '(.. | select(has("addresses") and has("dhcp4")).addresses) = ["10.10.200.1/24"]' 01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
enp0s1:
dhcp4: no
addresses:
- 10.10.200.1/24
gateway4: 10.10.100.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]