Ansible — добавление содержимого файла командой cat

Я загружаю файл с текстом и хочу прикрепить этот текст к другому файлу.

После загрузки файла inet_licence_5 на локальный хост. сценический файл тоже находится на локальном хосте.

Это работает нормально:

cat ./inet_licence_5 >> ./stage

К сожалению, в ansible это не работает.

- name: Append to ./stage
  command: cat ./inet_licence_5 >> ./stage
  delegate_to: 127.0.0.1

Ошибка:

TASK [Append to ./stage] *******************************
fatal: [my -> 127.0.0.1]: FAILED! => {"changed": true, "cmd": 
["cat", "./inet_licence_5", ">>", "./stage"], "delta": 
"0:00:00.001814", "end": "2019-05-28 11:55:22.766532", "failed": 
true, "rc": 1, "start": "2019-05-28 11:55:22.764718", "stderr": 
"cat: '>>': No such file or directory", "stderr_lines": ["cat: '>>': 
No such file or directory"], "stdout": "asdasd", "stdout_lines": 
["asdasd"]}

Странно, потому что я выполняю эту работу в основной локации.

$ ls
base  inet_licence_5 playbook1.yml
$ ansible-playbook playbook1.yml
Введение в Ansible Roles
Введение в Ansible Roles
Ansible - это отличный инструмент управления конфигурацией, который можно использовать для автоматизации настройки или развертывания на большом...
2
0
2 926
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По странной причине вы предполагаете, что ваш рабочий каталог такой же при запуске Ansible, как и при попытке из оболочки. Это неправда (вы всегда можете проверить, запустив, например, pwd как command и проверив вывод). Поэтому вам нужно либо указать полные пути в аргументах команды, либо использовать chdir, чтобы убедиться, что вы действительно находитесь в правильном каталоге (документы: https://docs.ansible.com/ansible/2.5/modules/command_module.html)

РЕДАКТИРОВАТЬ

Кажется, я пропустил эту часть из связанных документов:

The given command will be executed on all selected nodes. It will not be processed through the shell, so variables like $HOME and operations like "<", ">", "|", ";" and "&" will not work

поэтому вам нужно пойти другим путем, поскольку обычное перенаправление просто не будет работать в текущем подходе. Я бы использовал модуль оболочки для запуска команд в гостевой системе, так как этот кажется менее строгим (и более необработанным).

Я был в том же каталоге.

LubieCiastka 28.05.2019 14:07

из представления Ansible?

Marcin Orlowski 28.05.2019 14:09

Да, я проверил это, как вы и предложили, и получил тот же каталог.

LubieCiastka 28.05.2019 14:15

Смотрите мой отредактированный ответ - перенаправление просто не будет работать.

Marcin Orlowski 28.05.2019 14:24

Модуль оболочки решил проблему: shell: cat ./inet_licence_5 >> ./stage

LubieCiastka 28.05.2019 14:27

Другие вопросы по теме