我正在尝试使用yq通过 netcfg 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]