yq 할당에 대한 도움말

yq 할당에 대한 도움말

나는 사용하려고yqnetcfg yaml 파일을 통해 우분투 시스템의 고정 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]

관련 정보