#regex #ansible #lowercase
Вопрос:
Как преобразовать все строки в файле в нижний регистр с помощью ansible? Либо вся строка целиком, либо только часть?
Если у меня есть файл .ini, в котором указаны параметры camelcase, и я хочу переключить их в нижний регистр без изменения их значений, как я могу это сделать в ansible?
Ответ №1:
Допустим, у вас есть 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: '{{ 1 | lower }}2'
или любой его вариант.
Что вы можете сделать, так это прочитать содержимое файла в переменную, записать в нижний регистр все строки, соответствующие регулярному выражению, а затем использовать модуль замены.
Например:
- set_fact:
file_content: "{{ lookup('file', '/path/to/file') | regex_findall('.* =') }}"
Это приведет к чтению всех строк в файле, которые соответствуют вашему регулярному выражению, в список
Затем вы можете использовать модуль замены:
- name: Convert all options to lowercase
replace:
regexp: "{{ item }}(.*)"
replace: '{{ item | lower }}1'
with_items: "{{ file_content }}"
И это приведет к тому, что строки, соответствующие вашему регулярному выражению, будут преобразованы в нижний регистр, но остальная часть строки останется прежней.
Это решение предполагает, что все строки имеют один и тот же формат и что строка начинается с части, которую вы хотите преобразовать в нижний регистр.
Если строка не начинается с части, которую вы хотите преобразовать в нижний регистр, вы можете просто изменить параметры регулярного выражения и замены в модуле замены, чтобы они соответствовали.