【问题标题】:add string to end of line ansible将字符串添加到行尾
【发布时间】:2018-11-23 12:20:06
【问题描述】:

我想创建一个角色,以便在创建新 VM 时动态更新我的 Nagios 配置。

为此,我已经创建了一个角色,它在我的 servers.cfg Nagios 文件的末尾添加了一个主机定义,它看起来像:

- name: Add {{ Host_Name }} in /etc/naemon/conf.d/hosts/servers.cfg
  blockinfile:
    dest: /etc/naemon/conf.d/hosts/servers.cfg
    block: |
      define host {
        host_name                      {{ Host_Name }}
        alias                          {{ Host_Name }}.uem.lan
        address                        {{ Host_IP }}
        use                            modele_host,host-pnp
      }
    marker:   ""
    backup: yes

效果很好。

所以现在我希望能够将我的“{{ Host_Name }}”服务器直接添加到检查文件行的末尾。

示例:这是一个监控/data分区的检查:

define service {
  service_description            /data partition
  host_name                      myserv1,myserv2,myserv3,myserv4,myserv5
  use                            srv-pnp,modele_service_disk_linux_snmp
  check_command                  check_snmp_storage!uem_snmp!/data$!90!95
}

我会像这样添加我的“{{ Host_Name }}”:

define service {
  service_description            /data partition
  host_name                      myserv1,myserv2,myserv3,myserv4,myserv5,{{ Host_Name }}
  use                            srv-pnp,modele_service_disk_linux_snmp
  check_command                  check_snmp_storage!uem_snmp!/data$!90!95
}

有人有解决办法吗?

谢谢:)

【问题讨论】:

    标签: ansible nagios


    【解决方案1】:

    我的方法会有所不同,但它应该适用于 Nagios 3 和 4。

    只需稍微编辑您的第一个 Ansible 任务:

    - name: Add {{ Host_Name }} in /etc/naemon/conf.d/hosts/servers.cfg
      blockinfile:
        dest: /etc/naemon/conf.d/hosts/servers.cfg
        block: |
          define host {
            host_name                      {{ Host_Name }}
            alias                          {{ Host_Name }}.uem.lan
            address                        {{ Host_IP }}
            hostgroup_name                 anything
            use                            modele_host,host-pnp
          }
        marker:   ""
        backup: yes
    

    然后将您的服务定义替换为:

    define service {
      service_description            /data partition
      hostgroup_name                 anything
      use                            srv-pnp,modele_service_disk_linux_snmp
      check_command                  check_snmp_storage!uem_snmp!/data$!90!95
    }
    

    每当您通过 Ansible 添加新主机到 anything 主机组并重新启动/重新加载 Nagios 服务时,您将监控您的 /data 分区而无需额外工作。

    【讨论】:

      【解决方案2】:

      您可以尝试以下方法:

      - name: 'LINEINFILE'
        lineinfile:
          path: 'service.cfg'
          line: '{{item.line}}'
          regexp: '{{item.regexp}}'
          backrefs: True
        loop:
          - { line: '\1\2', regexp: '(\s*host_name.*),{{inventory_hostname}}(.*)' }
          - { line: '\1,{{inventory_hostname}}', regexp: '(\s*host_name.*)' }
      

      很丑,但是幂等的。

      【讨论】:

        猜你喜欢
        • 2012-08-03
        • 2013-02-02
        • 2012-02-03
        • 2020-09-30
        • 1970-01-01
        • 2021-01-04
        • 1970-01-01
        • 1970-01-01
        • 2017-10-08
        相关资源
        最近更新 更多