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

使用gcloud通过从文件中读取/管道化来编辑DNS记录,dns,gcloud,google-cloud-dns,Dns,Gcloud,Google Cloud Dns,我可以使用gcloud工具通过使用以下命令从vi/mate交互编辑JSON文件来编辑DNS记录: gcloud dns records --zone=myzone edit 但是,我希望能够进行批量更新,例如: gcloud dns records --zone=myzone edit < my-additional-records.txt EDITOR=ed gcloud dns records --zone=myzone edit <<-EOF 12i , {

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

gcloud dns records --zone=myzone edit
但是,我希望能够进行批量更新,例如:

gcloud dns records --zone=myzone edit < my-additional-records.txt
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
gcloud dns记录--zone=myzone编辑
…其中my-additional-records.txt包含我要添加的DNS记录


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

我自己没有尝试过,但是如果JSON格式是这里的格式:

只设置
删除:[]
(空JSON数组)怎么样。 这难道不能实现您想要的(不删除)吗?这是失败的原因吗

更新1:


我发现,如果问题是程序的实际管道输入,而您找不到基于shell的方法来执行此操作,这说明了如何编写此操作的脚本(使用python)。

我认为您可以尝试使用linux行编辑器“ed”,如下所示:

gcloud dns records --zone=myzone edit < my-additional-records.txt
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

有关如何使用ed的更多详细信息,请参见此处:

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

  • 按如下方式使用导出/导入命令:

    gcloud dns record-sets export --zone my-zone RECORDS-FILE
    
    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
    
    默认情况下,
    RECORDS-FILE
    为yaml格式。您还可以使用
    --zone file format
    标志将其输入

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

    gcloud dns record-sets import --zone my-zone --delete-all-existing RECORDS-FILE
    
    导入还接受
    --区域文件格式
    。如果只想添加/编辑某些记录,而不是全部记录,可以省略
    --删除所有现有的
    标志

  • 按如下方式使用事务命令组:

    gcloud dns record-sets export --zone my-zone RECORDS-FILE
    
    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