添加字符串到行尾ansible
add string to end of line ansible
我想创建一个角色,以便在创建新 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
}
有人有解决办法吗?
谢谢:)
您可以尝试以下方法:
- name: 'LINEINFILE'
lineinfile:
path: 'service.cfg'
line: '{{item.line}}'
regexp: '{{item.regexp}}'
backrefs: True
loop:
- { line: '', regexp: '(\s*host_name.*),{{inventory_hostname}}(.*)' }
- { line: ',{{inventory_hostname}}', regexp: '(\s*host_name.*)' }
很丑,但是幂等。
我的方法会有所不同,但它应该适用于 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 主机组和 restart/reload Nagios 服务时,您将监控您的 /data
分区而无需额外的工作。
我想创建一个角色,以便在创建新 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
}
有人有解决办法吗?
谢谢:)
您可以尝试以下方法:
- name: 'LINEINFILE'
lineinfile:
path: 'service.cfg'
line: '{{item.line}}'
regexp: '{{item.regexp}}'
backrefs: True
loop:
- { line: '', regexp: '(\s*host_name.*),{{inventory_hostname}}(.*)' }
- { line: ',{{inventory_hostname}}', regexp: '(\s*host_name.*)' }
很丑,但是幂等。
我的方法会有所不同,但它应该适用于 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 主机组和 restart/reload Nagios 服务时,您将监控您的 /data
分区而无需额外的工作。