将字符串添加到行尾ansible

时间:2018-11-23 12:20:07

标签: ansible nagios

我想创建一个角色,以在创建新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
}

有人可以解决吗?

Thx:)

2 个答案:

答案 0 :(得分: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将新主机添加到任何主机组并重新启动/重新加载Nagios服务时,您将监视/data分区,而无需进行其他工作。

答案 1 :(得分:0)

您可以尝试以下操作:

- 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.*)' }

丑陋,但幂等。