Я хотел поставить playbook для ansible-playbook 2.4.2.0 из stdin на RHEL 7.5, я нашел этот пост, который показался мне очень многообещающим, но он не работает для меня:
$ cat ~/simple-ansible-playbook.yaml | ansible-playbook -i ~/inventory.yaml /dev/stdin
ERROR! Unable to retrieve file contents
Could not find or access '/dev/stdin'
$
Я отследил сообщение до /usr/lib/python2.7/site-packages/ansible/parsing/dataloader.py
:
if not self.path_exists(b_file_name) or not self.is_file(b_file_name):
raise AnsibleFileNotFound("Unable to retrieve file contents", file_name=file_name)
os.path.isfile()
возвращает False
для /dev/stdin
который является символической ссылкой на специальный символьный файл:
$ ls -l /dev/stdin
lrwxrwxrwx. 1 root root 15 Nov 11 13:11 /dev/stdin -> /proc/self/fd/0
$ ls -Ll /dev/stdin
crw--w----. 1 stack tty 136, 3 Feb 15 07:45 /dev/stdin
У кого-нибудь есть идеи, как заставить это работать? Я не понимаю, почему это работает для цитируемого поста, но это не работает для меня.
Обновить
Я думаю, что понимаю это лучше. Оригинальный пост использовал здесь документ, который оболочка, очевидно, возвращает в обычный файл. В моем методе данные находятся в трубе. Я не осознавал, что оболочка ведет себя по-другому в этом отношении: я полагал, что приведенный здесь документ также приведет к созданию канала. Так что, по крайней мере, я узнал что-то новое об этой разнице, но, видимо, я не смогу делать то, что хочу, если не будет ansible-playbook
.