Я загружаю файл с текстом и хочу прикрепить этот текст к другому файлу.
После загрузки файла 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, как и при попытке из оболочки. Это неправда (вы всегда можете проверить, запустив, например, 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
поэтому вам нужно пойти другим путем, поскольку обычное перенаправление просто не будет работать в текущем подходе. Я бы использовал модуль оболочки для запуска команд в гостевой системе, так как этот кажется менее строгим (и более необработанным).
из представления Ansible?
Да, я проверил это, как вы и предложили, и получил тот же каталог.
Смотрите мой отредактированный ответ - перенаправление просто не будет работать.
Модуль оболочки решил проблему: shell: cat ./inet_licence_5 >> ./stage
Я был в том же каталоге.