在Ansible中,是否有方法阻止多值TXT记录始终标记为已更改?

在Ansible中,是否有方法阻止多值TXT记录始终标记为已更改?,ansible,amazon-route53,Ansible,Amazon Route53,所以我有一个负责任的任务: - name: google._domainkey.ludoistic.com. - TXT route53: overwrite: true command: "create" zone: "ludoistic.com" record: "google._domainkey.ludoistic.com." type: "TXT" ttl: "300" value: '"v=DKI

所以我有一个负责任的任务:

- name: google._domainkey.ludoistic.com. - TXT
  route53:
      overwrite: true
      command: "create"
      zone: "ludoistic.com"
      record: "google._domainkey.ludoistic.com."
      type: "TXT"
      ttl: "300"
      value: '"v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAup2hbfv7PQuI+z8j634065jEtT",
      "eW4km3D7Vnt+tVQt+76mBp18mAb5C+xl70KS6LUEtYmrBe3fo6QbElQ96BZ4KnNJTo62NBfEkO2i/AuIO91ksKaL01En5wrH",
      "B6oo9JYhJ231eDZ01af6eBkrI9dy5wYSlU1wYwpIvk/DDA9HvmTMMGv87VOQYiEfEDfdWJq8ZRxUj+sKCDQAono7dmC/vHFG",
      "GkQ7/pFa+EqO4e2MFn22SmnXhLW1aGShJ3PSGvplyxZ3JHQiUO6bBi4ZoUtUZc1MOLRZjKMch/cXbkB+f/XUVNH9r0uOaZHt",
      "LXH+zwikjUVFStCdgtzyqOF2tVSwIDAQAB"'
      aws_access_key: '{{istic_aws_key}}'
      aws_secret_key: '{{istic_aws_secret}}'
  tags:
      - ludoistic

但是当这个任务被执行时,它总是一个变化。有没有办法重新格式化它,使ansible在没有更改的情况下不会认为它已更改?

我假设这是因为您已将overwrite设置为true。这可能每次都会执行,因此总是会给您一个改变的结果

解决此问题的一种可能方法是仅在记录不存在时执行,或者在记录不存在时使用changed_。可用于查找记录


    - name: grab zone id
      route53_zone:
        zone: "ludoistic.com"
      register: AWSINFO

    - name: grab Route53 record information
      route53_info:
        type: TXT
        query: record_sets
        hosted_zone_id: "{{ AWSINFO.zone_id }}"
        start_record_name: "google._domainkey.ludoistic.com."
      register: RECORDS

   - name: add Route 53 record if it does not exist
     route53:
       overwrite: false
       # ...
     when: RECORDS.value != other_value_goes_here

我假设这是因为您已将覆盖设置为true。这可能每次都会执行,因此总是会给您一个改变的结果

解决此问题的一种可能方法是仅在记录不存在时执行,或者在记录不存在时使用changed_。可用于查找记录


    - name: grab zone id
      route53_zone:
        zone: "ludoistic.com"
      register: AWSINFO

    - name: grab Route53 record information
      route53_info:
        type: TXT
        query: record_sets
        hosted_zone_id: "{{ AWSINFO.zone_id }}"
        start_record_name: "google._domainkey.ludoistic.com."
      register: RECORDS

   - name: add Route 53 record if it does not exist
     route53:
       overwrite: false
       # ...
     when: RECORDS.value != other_value_goes_here

在您的情况下,请注意您的DKIM记录是完全错误的

查看DNS记录的结果,同时使用实际剧本进行设置:

dig  google._domainkey.ludoistic.com TXT  
这将为您创建一个唯一的DKIM TXT记录,并最终解决您的更改状态问题,因为现在,您将拥有一个唯一的TXT,并且route53模块将正常工作

一般来说,从我所理解的读和模块两个方面来看,这似乎是发生的,因为您在多个分离的任务中设置TXT记录,当模块将考虑和比较时。 所以我知道你现在正在做的是:

-名称:foo.example.org文本 路线53: 覆盖:真 命令:创建 专区:example.org 记录:foo.example.org。 类型:TXT ttl:300 值:“bar” aws_访问密钥:{{istic_aws_密钥}} aws_secret_密钥:{{istic_aws_secret}} -名称:foo.example.org文本 路线53: 覆盖:真 命令:创建 专区:example.org 记录:foo.example.org。 类型:TXT ttl:300 值:“bar” aws_访问密钥:{{istic_aws_密钥}} aws_secret_密钥:{{istic_aws_secret}} 这将永远是一个变化,因为foo.ludoistic.com的整个TXT记录。永远不会只匹配其中的一部分

相反,您应该做的是,让模块的匹配机制工作的是在单个任务中以数组的形式传递您的值

因此,上述两项任务将成为:

-名称:foo.example.org文本 路线53: 覆盖:真 命令:创建 专区:example.org 记录:foo.example.org。 类型:TXT ttl:300 价值: -“酒吧” -“酒吧” aws_访问密钥:{{istic_aws_密钥}} aws_secret_密钥:{{istic_aws_secret}}
在您的情况下,请注意您的DKIM记录是完全错误的

查看DNS记录的结果,同时使用实际剧本进行设置:

dig  google._domainkey.ludoistic.com TXT  
这将为您创建一个唯一的DKIM TXT记录,并最终解决您的更改状态问题,因为现在,您将拥有一个唯一的TXT,并且route53模块将正常工作

一般来说,从我所理解的读和模块两个方面来看,这似乎是发生的,因为您在多个分离的任务中设置TXT记录,当模块将考虑和比较时。 所以我知道你现在正在做的是:

-名称:foo.example.org文本 路线53: 覆盖:真 命令:创建 专区:example.org 记录:foo.example.org。 类型:TXT ttl:300 值:“bar” aws_访问密钥:{{istic_aws_密钥}} aws_secret_密钥:{{istic_aws_secret}} -名称:foo.example.org文本 路线53: 覆盖:真 命令:创建 专区:example.org 记录:foo.example.org。 类型:TXT ttl:300 值:“bar” aws_访问密钥:{{istic_aws_密钥}} aws_secret_密钥:{{istic_aws_secret}} 这将永远是一个变化,因为foo.ludoistic.com的整个TXT记录。永远不会只匹配其中的一部分

相反,您应该做的是,让模块的匹配机制工作的是在单个任务中以数组的形式传递您的值

因此,上述两项任务将成为:

-名称:foo.example.org文本 路线53: 覆盖:真 命令:创建 专区:example.org 记录:foo.example.org。 类型:TXT ttl:300 价值: -“酒吧” -“酒吧” aws_访问密钥:{{istic_aws_密钥}} aws_secret_密钥:{{istic_aws_secret}}
好的,我解决了这个问题,下面的β。εηοιτ。βε给了我正确的答案

文本记录被创建为一个数组,因此当它进入DNS时,会返回四个独立的非顺序答案。它必须是四个独立的部分,因为DNS只能处理每个记录255个字符-

解决方案是在一个大的单引号ansible值内使用空格分隔的双引号DNS记录,因此:

-名称:谷歌 y、 ludoistic.com文本 路线53: 覆盖:真 命令:创建 专区:ludoistic.com 记录:谷歌。 类型:TXT ttl:300 值:'v=DKIM1;k=rsa;p=miibijanbgkqhkig9w0baqefaocaq8amiibcgkcaqeaup2hbfv7pqui+z8j634065jEtT eW4km3D7Vnt+tVQt+76mBp18mAb5C+xl70ks6luetymrb3fo6qbelq96bz4knjto62nbfeko2i/AuIO91ksKaL01En5wrH b6oo9jyhyhjhj231edz1edz1af6ebkri9dy5wyslul1wyivyivyivyivjk/dda9hvmtmtmtmtgv87voqqyyqyjjj+skd7vqfg7vjj/vhdcGkQ7/pFa+EQO4E2MFN22MnxHLW1AGSHJ3PSGVPLYXZ3JHQIUO6BBI4ZUUZC1MOLRZJKMCH/cXbkB+f/XUVNH9r0uOaZHt LXH+ZWIKJUVFSTCdZYQOF2TVSWIDAQAB' aws_访问密钥:{{istic_aws_密钥}} aws_secret_密钥:{{istic_aws_secret}} 标签: -放荡的
好的,我解决了这个问题,下面的β。εηοιτ。βε给了我正确的答案

文本记录被创建为一个数组,因此当它进入DNS时,会返回四个独立的非顺序答案。它必须是四个独立的部分,因为DNS只能处理每个记录255个字符-

解决方案是在一个大的单引号ansible值内使用空格分隔的双引号DNS记录,因此:

-名称:google._domainkey.ludoistic.com。-文本 路线53: 覆盖:真 命令:创建 专区:ludoistic.com 记录:谷歌。 类型:TXT ttl:300 值:'v=DKIM1;k=rsa;p=miibijanbgkqhkig9w0baqefaocaq8amiibcgkcaqeaup2hbfv7pqui+z8j634065jEtT eW4km3D7Vnt+tVQt+76mBp18mAb5C+xl70ks6luetymrb3fo6qbelq96bz4knjto62nbfeko2i/AuIO91ksKaL01En5wrH b6oo9jyhyhjhj231edz1edz1af6ebkri9dy5wyslul1wyivyivyivyivjk/dda9hvmtmtmtmtgv87voqqyyqyjjj+skd7vqfg7vjj/vhdcGkQ7/pFa+EQO4E2MFN22MnxHLW1AGSHJ3PSGVPLYXZ3JHQIUO6BBI4ZUUZC1MOLRZJKMCH/cXbkB+f/XUVNH9r0uOaZHt LXH+ZWIKJUVFSTCdZYQOF2TVSWIDAQAB' aws_访问密钥:{{istic_aws_密钥}} aws_secret_密钥:{{istic_aws_secret}} 标签: -放荡的

覆盖之所以存在,是因为有时值会更改,并且添加一个额外的步骤来删除记录以记住该特定值何时更改,这对于以后的其他人来说是一条通向神秘bug的途径。但是,非多行记录不会发生这种情况。之所以会发生覆盖,是因为有时值会更改,并且添加一个额外的步骤来删除记录,以记住此特定值何时更改,这对于以后的其他人来说是导致神秘错误的途径。但非多行记录不会出现这种情况。您可以在ansible社区/ansible开发IRC频道发布查询,我相信ansible社区的人应该能够解决您的查询。所以您的问题是您有多个TXT记录,对吗?我最初认为标识符可能是您的,但似乎它只能设置为。而且,我是否正确地理解您在多个任务中设置了多个记录?您可以在ansible社区/ansible-devel IRC频道发布查询,我相信Ansible社区的人应该能够解决您的查询。所以您的问题是您有多个TXT记录,对吗?我最初认为标识符可能是适合您的,但似乎它只能设置为。而且,您在多个任务中设置这些多个记录,我是否正确地理解了?我不确定您从何处获得了多个任务位?问题中的代码是影响记录的唯一因素-完整的源代码是,我认为这与您的组合任务相同。因为根据模块所做的检查,这可能是失败的原因:也就是说,查看您现有的DNS,您的语法和生成的DKIM就是全部wrong@Aquarion更多关于编辑答案中更正确的DKIM的信息拆分记录是因为DNS记录不允许超过255个字符-运行上述操作将导致*致命:[archipelago.water.gkhs.net]:失败!=>{更改:false,msg:[无效的资源记录:致命问题:characterStringToolLong值太长,与'v=DKIM1;k=rsa;p=[cut]]}-我不确定多任务位是从哪里获得的?问题中的代码是影响记录的唯一因素-完整的源代码是,我认为这与您的组合任务相同。因为根据模块所做的检查,这可能是失败的原因:也就是说,查看您现有的DNS,您的语法和生成的DKIM就是全部wrong@Aquarion更多关于编辑答案中更正确的DKIM的信息拆分记录是因为DNS记录不允许超过255个字符-运行上述操作将导致*致命:[archipelago.water.gkhs.net]:失败!=>{更改:false,msg:[无效的资源记录:致命问题:characterStringToolLong值太长,与'v=DKIM1;k=rsa;p=[cut]]一起遇到]-
; <<>> DiG 9.10.6 <<>> google._domainkey.stackoverflow.com TXT
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33678
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google._domainkey.stackoverflow.com. IN  TXT

;; ANSWER SECTION:
google._domainkey.stackoverflow.com. 300 IN TXT   "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCbf2b+8IwDGfgu5u/9kY4d3Corv9C2UtQyLWqHer1vNmWprWnjHDNWwE7nL943WOdDSGGhwKrprrFbCJrHsZ8Yz+UR52zeySiwJi7eIoVl6SDa6DXSlh2bYKwgJUuCF5blhY8weRwpf0wAKK8i9TmZbx+5vBZ2tAGAa1MW6VkFDwIDAQAB"

;; AUTHORITY SECTION:
stackoverflow.com.    99395   IN  NS  ns-1033.awsdns-01.org.
stackoverflow.com.    99395   IN  NS  ns-358.awsdns-44.com.
stackoverflow.com.    99395   IN  NS  ns-cloud-e1.googledomains.com.
stackoverflow.com.    99395   IN  NS  ns-cloud-e2.googledomains.com.

;; Query time: 105 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sat Jun 20 10:05:47 CEST 2020
;; MSG SIZE  rcvd: 443