나는 사용하려고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]