Ansible: читать удаленный файл
Я генерирую файлы с возможностью доступа к удаленному хосту, и после этого поколения я хотел бы прочитать файлы тезисов в другой задаче.
Я не могу найти какой-либо модуль для чтения удаленного файла с невозможным (поиск выглядит только на локальном хосте).
Знаете ли вы модуль вроде этого?
Спасибо
EDIT:
Вот мой прецедент:
Я генерирую ключи ssh и добавляю их в github. Эти ключи устанавливаются объектом в файлах var, поэтому я выполняю цикл следующим образом:
tasks:
- name: Create ssh key
user:
name: "{{sshConfigFile.user}}"
generate_ssh_key: yes
ssh_key_file: ".ssh/{{item.value.file}}"
state: present
with_dict: "{{sshConfiguration}}"
Он работает очень хорошо, но как читать эти ключи, чтобы отправить его в github через API?
Ответы
Ответ 1
Как вы сказали, все поисковые запросы находятся на локальном хосте. Но все они могут выполняться на удаленном компьютере с помощью shell
и register
. Можете ли вы сказать, что именно вы пытаетесь сделать? просто пример.
- shell: cat "{{remote_file}}"
register: data
- shell: ......
with_xxxx:
Ответ 2
Либо запустить с флагом --diff (выводит diff при изменении файла назначения).
ansible-playbook --diff server.yaml
или хлебать это..
- name: Slurp hosts file
slurp:
src: /etc/hosts
register: slurpfile
- debug: msg="{{ slurpfile['content'] | b64decode }}"
Ответ 3
Вы можете попробовать модуль 'fetch', который извлечет файл ключа по пути назначения на localhost
:
fetch:
src: ".ssh/{{item.value.file}}"
dest:"/tmp/ssh_keys/{{item.value.file}}"
flat: yes
with_dict: "{{sshConfiguration}}"
Ответ 4
Вы можете зарегистрировать содержимое файла в переменной, используя команду register. Вот что я хотел бы предложить,
- name: get contents of file
command: cat /path/to/file
register: filename
become: true # use case specific option
- name: viewing the contents
debug:
msg: "{{filename.stdout}}"
Это отобразит содержимое файла.
Ответ 5
Используя командный модуль, вы можете прочитать или использовать этот файл в другой задаче в удаленном node.
как
-command: cp /tmp/xxx/example.sh /usr/local/yyy