【问题标题】:Ansible replace multiple lines from variableAnsible 从变量中替换多行
【发布时间】:2018-05-16 08:59:51
【问题描述】:

我有以下 Ansible 变量:

test_entries:
    "
    test-auth-ip=192.168.1.22
    test-auth-serv=example1.com
    test-auth-net=192.168.1.254
    test-auth-blabla=test123 
    "

我还有一个文本文件,其中包含以下几行:

   test-auth-str1=null
   test-auth-str2=null
   test-auth-serv=null
   test-auth-net=0.0.0.0
   test-auth-str3=null
   test-auth-str4=null

我希望能够替换文件中与变量中的行匹配的任何行,直到“=”符号。 (正则表达式:^test-auth(.*?=))

我阅读了 Ansible 文档。用于“lineinfile”和“替换”功能。然而, 我找不到如何用正则表达式逐行匹配。

预期结果

 test-auth-str1=null
 test-auth-str2=null
 test-auth-serv=example1.com
 test-auth-net=192.168.1.254
 test-auth-str3=null
 test-auth-str4=null

【问题讨论】:

  • 我不确定我是否理解您要替换的内容。您可以添加具有预期输出的部分吗?
  • 将原始字符串分割成行(标记),循环调用replace模块。

标签: ansible


【解决方案1】:

试试

test_entries:
 test-auth-ip     : 192.168.1.22
 test-auth-serv   : example1.com
 test-auth-net    : 192.168.1.254
 test-auth-blabla : test123

然后在你的任务中 -

- replace:
    path: /your/file
    regexp: '^{{ item.key }}=.*$'
    replace: '{{ item.key }}={{ item.value }}'
  with_dict: "{{ test_entries }}"

我还经常使用一组匿名字典,以及我命名属性的任何名称,而不是 keyvalue。主要区别在于它可以让您控制顺序(这在这里似乎无关紧要)并跳过 keyvalue 关键字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 2020-02-29
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 2023-02-25
    相关资源
    最近更新 更多