首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串添加到行尾

将字符串添加到行尾
EN

Stack Overflow用户
提问于 2018-11-23 12:20:06
回答 2查看 1.3K关注 0票数 1

当我创建一个新的VM时,我希望创建一个角色来动态更新Nagios配置。

为此,我已经创建了一个角色,该角色在我的servers.cfg Nagios文件的末尾添加了一个主机定义,如下所示:

代码语言:javascript
复制
- 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分区的检查:

代码语言:javascript
复制
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 }}“像这样加起来:

代码语言:javascript
复制
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 :)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-24 12:28:46

我的方法将是不同的,但是它应该与Nagios 3和4一起工作。

只需编辑一下您的第一个不可接受的任务:

代码语言:javascript
复制
- 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

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-11-23 17:07:46

您可以尝试使用以下方法:

代码语言:javascript
复制
- 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.*)' }

很丑,但是是幂等的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53446620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档