yq 割り当てに関するヘルプ

yq 割り当てに関するヘルプ

使ってみよう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]

おすすめ記事