#ansible
#ansible
Вопрос:
Я знаю, что вы можете скопировать файл с удаленного сервера на локальный, используя ansible с модулем выборки.. Вы даже можете присвоить файлу имя с некоторыми переменными, относящимися к узлу, с которого вы извлекаете. Что я хочу сделать, это заменить определенную строку в этом файле после его копирования, в идеале с использованием переменных инвентаризации. Возможно ли это вообще? Есть ли какой-либо обходной путь, который не включает в себя сценарии последующей обработки bash?
Комментарии:
1. Я сделал что-то подобное… но это было довольно давно… Я не помню точно, что я сделал, но я использовал, если мне не изменяет память,
command: sed ......
во временном файле на ram-диске перед записью файла2. может быть
lineinfile
module? вы смотрели на это?line
это то, что вы назначаете. Такжеregex
поддерживается.
Ответ №1:
После того, как вы извлекли файл, просто используйте делегирование localhost через delegate_to
replace
задачу.
Дано /tmp/somefile
foo bar baz
This is an example string
Lorem Ipsum
The quick brown fox jumps over the lazy dog
И сборник пьес:
- hosts: all
gather_facts: no
tasks:
- fetch:
src: /tmp/somefile
dest: /tmp/fetched
- replace:
path: /tmp/fetched/{{ inventory_hostname }}/tmp/somefile
regexp: "^This is an example string$"
replace: "{{ inventory_hostname }}"
delegate_to: localhost
Это приводит к повторению:
PLAY [all] *********************************************************************************************************
TASK [fetch] *******************************************************************************************************
changed: [host1]
TASK [replace] *****************************************************************************************************
changed: [host1 -> localhost]
PLAY RECAP *********************************************************************************************************
host1 : ok=2 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
И выдает файл /tmp/fetched/host1/tmp/somefile, содержащий:
foo bar baz
host1
Lorem Ipsum
The quick brown fox jumps over the lazy dog
Комментарии:
1. Это выглядит именно так, как я хочу. Но почему путь замены отличается от пути dest в задаче выборки?
2. Поскольку я не использую
flat
параметр, so Ansible создает папку в качестве той, которую я передаю какdest
, создает подпапку с именем хост, а затем использует, чтобы воспроизвестиsrc
путь к файлу.