Ansible:将文件中与正则表达式匹配的所有字符串转换为小写

Ansible: Convert all strings that match a regexp in a file to lowercase

如何使用ansible将文件中的所有字符串转换为小写?整个字符串还是一部分?

如果我有一个 .ini 文件,其中的选项是驼峰式大小写,我想将它们切换为小写而不更改它们的值,我该如何在 ansible 中做到这一点?

假设您有一个结构如下的 INI 文件:

[Customers]

customerName = James Robinson
customerAge = 17
customerID = 1234
IsAdmin = True

并且您想将文件转换为以下内容:


[Customers]

customername = James Robinson
customerage = 17
customerid = 1234
isadmin = True

替换模块本身不会让您这样做。例如,您不能执行以下任务:


- name: Convert all options to lowercase
  replace:
    regexp: "(.* =)(.*)"
    replace: '{{  | lower }}'

或其任何变体。

您可以做的是,将文件内容读入变量,将所有匹配正则表达式的字符串小写,然后然后使用替换模块。

例如:


 - set_fact:
   file_content: "{{ lookup('file', '/path/to/file') | regex_findall('.* =') }}"

这会将文件中与您的正则表达式匹配的所有字符串读取到列表中

然后就可以使用替换模块了:


 - name: Convert all options to lowercase
   replace:
     regexp: "{{ item }}(.*)"
     replace: '{{ item | lower }}'
   with_items: "{{ file_content }}"

这将导致与您的正则表达式匹配的字符串被转换为小写,但该行的其余部分保持不变。

此解决方案假定所有字符串都采用相同的格式,并且字符串以您要转换为小写的部分开头。

如果字符串没有以您要转换为小写的部分开头,您只需更改替换模块中的正则表达式和替换参数即可匹配。