如何将新字符串插入telegraf.conf';使用ansible regexp进行s inputs.ping

如何将新字符串插入telegraf.conf';使用ansible regexp进行s inputs.ping,regex,ansible,telegraf-inputs-plugin,Regex,Ansible,Telegraf Inputs Plugin,我正在尝试使用ansible更新telegraf.conf的[[inputs.ping]] telegraf.conf如下所示: [[inputs.ping]] urls = ["tac-temp1","tac-temp2", "tac-temp3","tac-temp4"] #tac count = 30 timeout = 15.0 [inputs.ping.tags] name = "tac" [[inputs.ping]] urls = ["prod-temp1

我正在尝试使用ansible更新telegraf.conf的[[inputs.ping]]

telegraf.conf如下所示:

[[inputs.ping]]
  urls = ["tac-temp1","tac-temp2", "tac-temp3","tac-temp4"] #tac
  count = 30
  timeout = 15.0
  [inputs.ping.tags]
  name = "tac"

[[inputs.ping]]
  urls = ["prod-temp1","prod-temp2", "prod-temp3","prod-temp4"] #prod
  count = 30
  timeout = 15.0
  [inputs.ping.tags]
  name = "prod"

[[inputs.ping]]
  urls = ["test-temp1","test-temp2", "test-temp3","test-temp4"] #test
  count = 30
  timeout = 15.0
  [inputs.ping.tags]
  name = "test"
我试图在上面显示的第2行中添加
,“tac-temp10”
,“tac-temp4”

- hosts: Servers
  become: yes
  become_method: sudo
  tasks:
    - name: Loading telegraf.conf content for search
      shell: cat /tmp/telegraf.conf
      register: tele_lookup

    - name: Adding Server to  /tmp/telegraf.conf if does not exists
      lineinfile:
             path: /tmp/telegraf.conf
             state: present
             regexp: '^((.*)"] #tac$)'       
             line: ',"tac-temp10"'      
             backup: yes
      when: tele_lookup.stdout.find('tac-temp10') != '0'
regexp:“^((.*)]”#tac$)”
正在将整行替换为
,“tac-temp10”
。预期输出:

[[inputs.ping]]
  urls = ["tac-temp1","tac-temp2", "tac-temp3","tac-temp4","tac-temp10"] #tac
  count = 30
  timeout = 15.0
  [inputs.ping.tags]
  name = "tac"

警告:前方是丑陋的regexp。请注意对下一个进行维护的人(包括时间流逝后的你)的不可预知的理解

如果您的服务器(在列表中的任何位置)还没有包含一个幂等任务,那么下面将把它添加到列表的末尾

    - name: add our server if needed
      lineinfile:
        path: /tmp/test.conf
        backup: yes
        state: present
        regexp: '^( *urls *= *\[)(("(?!tac-temp10)([a-zA-Z0-9_-]*)",? *)*)(\] #tac)$'
        backrefs: yes
        line: '\1\2, "tac-temp10"\5'
您需要使用backreferences将表达式中已经匹配的部分放回行中。我使用了
backup:yes
,这样我就可以轻松地回到原始部分进行测试。请随意删除它


正如你所看到的(以及我在警告中所建议的)对于任何必须快速阅读代码的人来说,这几乎是不可能理解的。如果你必须做任何更复杂的事情,请考虑使用模板并将服务器列表存储在某个变量中。<> P> <强>警告< /强>:丑陋的ReExp前面。谨防下一个家伙的不可预知的理解。(包括时间流逝后的你…)做维护

如果您的服务器(在列表中的任何位置)还没有包含一个幂等任务,那么下面将把它添加到列表的末尾

    - name: add our server if needed
      lineinfile:
        path: /tmp/test.conf
        backup: yes
        state: present
        regexp: '^( *urls *= *\[)(("(?!tac-temp10)([a-zA-Z0-9_-]*)",? *)*)(\] #tac)$'
        backrefs: yes
        line: '\1\2, "tac-temp10"\5'
您需要使用backreferences将表达式中已经匹配的部分放回行中。我使用了
backup:yes
,这样我就可以轻松地回到原始部分进行测试。请随意删除它


正如你所看到的(以及我在警告中所建议的)对于任何必须快速阅读代码的人来说,这几乎是不可能理解的。如果您必须做任何更复杂的事情,考虑使用模板并将服务器列表存储在某个变量中。

系统将是增强插件并在不符合目的的情况下采用这种高级配置格式。在不符合目的的情况下,LD将增强插件并采用这种高级配置格式。这有帮助!谢谢,ZeTunouter!我想知道它是如何工作的!<代码> TAC-TIM10实际上是在ReGEXP中提到的!同意!我需要考虑使用模板和变量。仅当tac-temp10不在列表中时才有匹配项。由于我们使用了反向引用,因此只有当存在匹配项时才会修改该行,否则不会发生任何事情。明白了,谢谢!还有一个问题:在
行:'\1\2,“tac-temp10”“\5'
您能告诉我
\1\2
\5
有什么帮助吗?这些是对regexp中捕获组的反向引用。有关更多信息,请参阅啊,组!明白了!这使regex现在有点可读。再次感谢!:)这很有帮助!谢谢你,Zeitounator!我想知道这是怎么回事<代码>tac-temp10实际上是在regexp中提到的!同意!我需要考虑使用模板和变量。在ReGEXP中提到的是一个否定的前瞻性:只有TAC-TEMP10不在列表中才会有匹配。因为我们使用了backrefs,所以只有在有匹配的情况下才会修改该行,否则不会发生任何事情。明白了,谢谢!还有一个问题:在
行:'\1\2,“tac-temp10”\5'
中,您能告诉我
\1\2
\5
有什么帮助吗?这些是对regexp中捕获组的反向引用。有关更多信息,请参见啊,群组!明白了!这使得正则表达式现在有点可读性。再次感谢!:)