Подход с использованием fetch и include_vars не будет работать одновременно для более чем одной машины, так как вы не сможете разделять факты на машину.
Вместо этого вы можете рассмотреть возможность использования фактов для достижения своей цели. Ниже я создал скрипт в /etc/ansible/facts.d на удаленном компьютере (например, hostA) и сделал его исполняемым для всех:
$ cd /etc/ansible/facts.d
$ chmod 0755 example.fact
$ cat example.fact
#!/usr/bin/env python
import json
kv = {'mykey': 'myvalue'}
print json.dumps(kv)
когда я запускаю его, он выдает json
$ ./example.fact
{"mykey": "myvalue"}
Добавьте это к своей роли или книге игр - все сценарии будут запущены в /etc/ansible/facts.d
.
- name: read local facts
setup:
filter: ansible_local
И убедитесь, что вы получили то, что хотели
- name: debug
debug:
var: ansible_local.example
Ansible output:
ok: [hostA] => {
"ansible_local.example": {
"mykey": "myvalue"
}
}
Если вы хотите прочитать пользовательские значения с вашего удаленного компьютера в исполнении playbook, все, что вам сейчас нужно, это изменить скрипт example.fact, чтобы он использовал информацию и выдавал ее в виде json, например:
with open('/tmp/info.json') as json_file:
myinfo = json.load(json_file)
print json.dumps(myinfo)