Ansible从变量中替换多行

时间:2018-05-16 08:59:51

标签: ansible

我有以下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 doc。 for" 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

1 个答案:

答案 0 :(得分:0)

尝试

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。主要的区别在于它可以让你控制订单(这里似乎并不重要)并跳过key& value个关键字。