6

我可以使用 gcloud 工具通过使用以下命令从 vi/mate 交互式编辑 JSON 文件来编辑 DNS 记录:

gcloud dns records --zone=myzone edit

但是,我希望能够进行批量更新,如下所示:

gcloud dns records --zone=myzone edit < my-additional-records.txt

...其中 my-additional-records.txt 包含我要添加的 DNS 记录。

我认为这不是那么简单,因为要编辑的 JSON 文件包含 DNS 记录的添加和删除。因此,任何提示将不胜感激。

4

3 回答 3

4

我认为您可以尝试像这样使用 linux 行编辑器“ed”:

EDITOR=ed gcloud dns records --zone=myzone edit <<-EOF
12i
, {
        "kind": "dns#resourceRecordSet",
        "name": "a.mydomain.org.",
        "rrdatas": [
            "111.222.111.222"
        ],
        "ttl": 21600,
        "type": "A"
}
.
,wq
EOF

这假设编辑文件的顶部看起来像这样(因此您将添加附加到第 12 行)

{
    "additions": [
        {
            "kind": "dns#resourceRecordSet",
            "name": "mydomain.org.",
            "rrdatas": [
                "ns-cloud-c1.googledomains.com. dns-admin.google.com. 2 21600 3600 1209600 300"
            ],
            "ttl": 21600,
            "type": "SOA"
        },

有关如何在此处使用 ed 的更多详细信息:http ://www.gnu.org/software/ed/manual/ed_manual.html

于 2014-10-02T07:55:38.117 回答
2

自提出此问题以来,提供此新答案gcloud dns ...已得到显着改进。现在有两种方法可以编辑记录集。

  1. 使用导出/导入命令如下:

    gcloud dns record-sets export --zone my-zone RECORDS-FILE
    

    默认情况下,RECORDS-FILE是 yaml 格式。您还可以使用标志以区域文件格式获取它。--zone-file-format

    然后,您可以RECORDS-FILE使用您选择的任何编辑器进行编辑,并使用以下命令导入更改的记录:

    gcloud dns record-sets import --zone my-zone --delete-all-existing RECORDS-FILE
    

    导入也接受--zone-file-format. 如果您只想添加/编辑一些记录而不是全部,您可以省略该--delete-all-existing标志。

  2. 使用事务命令组如下:

    gcloud dns record-sets transaction start # Start transaction
    gcloud dns record-sets transaction add/remove # Add remove records
    gcloud dns record-sets transaction execute # Execute transaction
    
于 2016-08-02T16:02:43.493 回答
0

我自己没有尝试过,但如果 JSON 格式是这里的格式: https ://developers.google.com/cloud-dns/getting-started

如何设置deletions : [](空 JSON 数组)。那不会达到你想要的(没有删除)吗?这是以某种方式失败吗?

更新1:

如果问题是程序的实际管道输入并且您找不到基于 shell 的方法来执行此操作,我找到了此迁移脚本,它显示了如何编写此操作的脚本(使用 python)。

于 2014-06-30T21:45:03.720 回答