Есть ли Ansible (regex_replace) способ обрезки номера версии?
Я работаю над установкой сжатого архива. Он находится в каталоге {{HomeDir}} / ms2install .
Имя файла: ms2install_1.16.1.8.tgz
У меня есть оболочка задача, которая извлекает номер версии
# Get the version number from the archive
- name: Get MS2 verion number from the the file list
shell: "ls -1 {{ HomeDir }}/ms2install | grep \"ms2iinstall_.*tgz\" | cut -d_ -f2 | rev | cut -c5- | rev"
delegate_to: 127.0.0.1
register: ms2Num
ms2Num is 1.16.1.8
Я в порядке с использованием команды оболочки здесь, поскольку это не меняет систему и манипуляции со строками в одной команде. Нет, мне нужно только найти 1.16 , чтобы найти каталог в удаленной системе после того, как я распакую архив. Каталог, который я хочу, находится на нескольких уровнях подкаталогов. Я также хочу установить пакеты из правильного каталога.
Я могу извлечь 1.16 с помощью команды simular shell.
# Get the version number from the archive
- name: Get truncated MS2 verion number from the the file list
shell: "ls -1 {{ HomeDir }}/ms2install | grep \"ms2i_.*tgz\" | cut -d_ -f2 | rev | cut -c5- | rev | | cut -d. -f1-2"
delegate_to: 127.0.0.1
register: ms2KurtzNum
Это работает, и я зарегистрировать короткую строку 1.16 .
Я хочу знать, есть ли решение regex_replace для любого из определений. Поэтому создайте новую переменную только с первой частью строки 1.16 . Для регулярного выражения: /(^(\d{1,3}\.\d{1,3}))/g
работает, но в Ansible выражение дает подстроку "1.16".
- name: Find version directory
find:
paths: "{{ DestDir | join }}/ms2install/patches"
patterns: "{{ ms2Num.stdout | regex_replace( '([1-9]{1,3}\\.[1-9]{1,3}))' '\\1' ) }}" # <== pattern 1.16
recurse: yes
file_type: directory
register: PatchVersionDir
Существует достаточно различий между bash regex и Ansible regex (Python?), Чтобы расстроить.
Есть ли лучшее решение в Ansible, чем оболочка задача