Ansible 剧本 - 正则表达式 |无法更改括号和引号中的数据

Posted

技术标签:

【中文标题】Ansible 剧本 - 正则表达式 |无法更改括号和引号中的数据【英文标题】:Ansible playbook - regexp | unable to change data in brackets and quotes 【发布时间】:2022-01-01 15:08:07 【问题描述】:

我一直在尝试完成部署新服务器的剧本。我正在努力通过lineinfile 和正则表达式更改包含引号的括号内的数据:

- name: "Configuring: filebeat agent - configuring output to logstash"
  lineinfile:
    dest: "/etc/filebeat/filebeat.yml"
    regexp: '#hosts: ["localhost:5044"]'
    line: 'hosts: ["elk.home:5044"]'
  tags: application

playbook 执行后,需要的行:

#hosts: ["localhost:5044"]

没有更新以反映:

hosts: ["elk.home:5044"]

我想要实现的是:

#hosts: ["localhost:5044"] 替换为hosts: ["elk.home:5044"]

没有产生错误。我试过改变"' 以及转义\,但我无法正确表达。任何建议将不胜感激!

【问题讨论】:

我猜到(可能是错的)您正在使用lineinfile 模块?但答案不能基于猜测。您需要使用剧本的相关部分、正在发生的事情以及您的期望来更新问题。 filebeat.yml 配置文件可以在很多地方包含#hosts: ["localhost:5044"]。您可以尝试使用不同的 regexpinsertbeforeinsertafter 选项来定位确切的设置。你也可以考虑replace module。 另外,[] 在正则表达式中确实有意义,它们分隔了一个字符类,如果你想将它们匹配为文字,你需要转义这两个字符:@987654339 @ 【参考方案1】:

感谢 seshadri_c 和 β.εηοιτ.βε!

我能够通过以下几行达成解决方案:

- name: "Configuring: filebeat agent - enabling logstash output hosts"
  lineinfile:
    dest: "/etc/filebeat/filebeat.yml"
    regexp: '#hosts: \["localhost:5044"\]'
    line: 'hosts: ["elk.home:5044"]'
  tags: 
    - configuration
    - application
    - filebeat

完成剧本后,我遇到了空格问题。我添加了两个正确修改行的空格

- name: "Configuring: filebeat agent - enabling logstash output hosts"
  lineinfile:
    dest: "/etc/filebeat/filebeat.yml"
    regexp: '#hosts: \["localhost:5044"\]'
    line: '  hosts: ["elk.home:5044"]'
  tags: 
    - configuration
    - application
    - filebeat

【讨论】:

以上是关于Ansible 剧本 - 正则表达式 |无法更改括号和引号中的数据的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维工具之Ansible——剧本

在詹金斯调用Ansible剧本

ansible 基本使用之3 palybook

[ansible]-ansible-剧本

06 ansible剧本功能实践介绍

ansible剧本编写