이것은 내 yaml 파일입니다.
network:
ethernets:
ens160:
addresses:
- 10.200.2.148/22
gateway4: 10.200.0.1
nameservers:
addresses:
- 1.1.1.1
- 2.2.2.2
- 3.3.3.3
- 4.4.4.4
search:
- our.domain
ens160 아래의 모든 DNS 주소를 두 개의 특정 주소로 바꿔야 합니다. 이것을 사용해 보세요:
yq write -i /etc/netplan/00-installer-config.yaml '.network.ethernets.ens160.nameservers.addresses' ['10.10.10.53','10.10.10.54']
그러나 이것이 하는 일은 모든 목록 항목을 다음과 같은 목록으로 전송하는 것뿐입니다.
network:
ethernets:
ens160:
addresses:
- 10.200.2.148/22
gateway4: 10.200.0.1
nameservers:
addresses:
- 1.1.1.1
- 2.2.2.2
- 3.3.3.3
- 4.4.4.4
search:
- our.domain
나는 그것을 원하지 않습니다. 다음과 같이 출력이 필요합니다.
network:
ethernets:
ens160:
addresses:
- 10.200.2.148/22
gateway4: 10.200.0.1
nameservers:
addresses:
- 10.10.10.53
- 10.10.10.54
search:
- our.domain
어떻게 해야 할지 확실하지 않습니다 yq
. 어떻게 해야 합니까?
답변1
어떤 이유로든 apt 저장소에서 해당 버전을 가져올 수 없습니다.
결국 최신 버전을 설치했고 이 명령을 사용하면 작동합니다.
yq -i '.network.ethernets.ens160.nameservers.addresses = ["10.10.10.53","10.10.10.54"]' /etc/netplan/00-installer-config.yaml
답변2
익숙하지 않음마이크 파라yq
, 환경 변수를 통해 새 네임서버 주소의 JSON 배열을 전달한 다음 다음을 사용하여 문서의 올바른 경로에 삽입할 것입니다 env()
.
$ addrs='["10.10.10.53","10.10.10.54"]' yq '.network.ethernets.ens160.nameservers.addresses = env(addrs)' file
network:
ethernets:
ens160:
addresses:
- 10.200.2.148/22
gateway4: 10.200.0.1
nameservers:
addresses: ["10.10.10.53", "10.10.10.54"]
search:
- our.domain
-i
"in-place" 변환을 수행하고 출력을 예쁘게 인쇄하는 옵션을 추가합니다 -P
(질문의 예상 출력에 표시된 것처럼 배열이 여러 줄로 확장됩니다).
내가 아는 한, Mike Farah는 yq
위 명령에 표시된 대로 JSON 배열로 인코딩하지 않고는 별도의 매개변수를 배열로 사용할 수 없습니다. 그리고안드레이 키슬류크yq
, 잘 알려진 JSON 프로세서를 jq
둘러싼 래퍼 인 경우 다음을 수행할 수 있습니다.
$ yq -y '.network.ethernets.ens160.nameservers.addresses = $ARGS.positional' file --args 10.10.10.53 10.10.10.54
network:
ethernets:
ens160:
addresses:
- 10.200.2.148/22
gateway4: 10.200.0.1
nameservers:
addresses:
- 10.10.10.53
- 10.10.10.54
search:
- our.domain
...이것은 Mike를 사용한 것과 거의 동일 yq
하지만 명령줄 끝에 추가하여 더 많은 네임서버 주소를 추가할 수 있습니다. 항상 배열이 있으므로 $ARGS.positional
명령줄에 문자열만 제공하면 결과 문서에는 올바른 형식의 개별 요소 목록이 포함됩니다.
또는 옵션과 함께 사용하면 yq
"내부" 편집이 가능합니다.-i
--in-place