通过从文件读取/管道来使用gcloud编辑DNS记录

时间:2014-06-21 09:11:09

标签: dns gcloud google-cloud-dns

我可以使用gcloud工具编辑DNS记录,方法是使用以下命令从vi / mate交互式编辑JSON文件:

gcloud dns records --zone=myzone edit

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

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

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

我认为编辑的JSON文件包含DNS记录的添加和删除都不是那么简单。所以,任何提示都将受到赞赏。

3 个答案:

答案 0 :(得分:4)

我认为您可以尝试使用linux line editor&#39; ed&#39;像这样:

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

答案 1 :(得分:2)

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

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

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

    默认情况下,RECORDS-FILE采用yaml格式。您也可以使用--zone-file-format标记在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
    

答案 2 :(得分:0)

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

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

更新1:

如果问题是程序的实际管道输入并且您无法找到基于shell的方法,我找到了this migration script,它显示了如何编写此操作的脚本(使用python)