自动更新具有多个值的文件

自动更新具有多个值的文件

我有一个托管区域和记录集,可以路由到多个地址。我想通过在列表中添加或删除一个 IP 地址来更新记录集。不幸的是,AWS CLI不提供删除/添加route53中资源记录值的选项

{
      "Comment": "Update the A record set",
      "Changes": [
        {
          "Action": "UPSERT",
          "ResourceRecordSet": {
            "Name": "mydomain.com",
            "Type": "A",
            "TTL": 300,
            "ResourceRecords": [
              {
                "Value": "XX.XX.XX.XX"
              }
            ]
          }
        }
      ]
    }

我可以像这样手动将多个 IP 地址添加到您的 json 中。但我想使用 bash 自动将多个 IP 添加到 json 文件中。

{
    "Comment": "Update the A record set",
    "Changes": [{
        "Action": "UPSERT",
        "ResourceRecordSet": {
            "Name": "mydomain.com",
            "Type": "A",
            "TTL": 300,
            "ResourceRecords": [{
                    "Value": "XX.XX.XX.XX"
                },
                {
                    "Value": "XX.XX.XX.XX"
                }
            ]
        }
    }]
}

答案1

添加、使用

$ jq '.Changes[0].ResourceRecordSet.ResourceRecords += [{"Value": "foobar"}]' file.json
{
  "Comment": "Update the A record set",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "mydomain.com",
        "Type": "A",
        "TTL": 300,
        "ResourceRecords": [
          {
            "Value": "XX.XX.XX.XX"
          },
          {
            "Value": "foobar"
          }
        ]
      }
    }
  ]
}

答案2

你可能想尝试一下另一个 UNIX 实用程序:jtc,它能够应用文件内的修改(带-f选项):

bash $ jtc -w'<ResourceRecords>l' -i'{ "Value": "YY.YY.YY.YY" }' -f file.json
bash $ jtc file.json 
{
   "Changes": [
      {
         "Action": "UPSERT",
         "ResourceRecordSet": {
            "Name": "mydomain.com",
            "ResourceRecords": [
               {
                  "Value": "XX.XX.XX.XX"
               },
               {
                  "Value": "YY.YY.YY.YY"
               }
            ],
            "TTL": 300,
            "Type": "A"
         }
      }
   ],
   "Comment": "Update the A record set"
}
bash $ 

并删除条目:

bash $ jtc -w'<ResourceRecords>l [0]' -p -f file.json
bash $ cat  file.json 
{
   "Changes": [
      {
         "Action": "UPSERT",
         "ResourceRecordSet": {
            "Name": "mydomain.com",
            "ResourceRecords": [
               {
                  "Value": "YY.YY.YY.YY"
               }
            ],
            "TTL": 300,
            "Type": "A"
         }
      }
   ],
   "Comment": "Update the A record set"
}
bash $ 

相关内容