在剧本中运行ansible-m设置——树的等价物是什么?

在剧本中运行ansible-m设置——树的等价物是什么?,ansible,Ansible,我让我们的安全小组询问我们从Ansible Tower管理的主机收集的所有信息。我想运行setup命令,并将其放入可以运行ansible cmdb的文件夹中的文件中。我需要在剧本中这样做,因为我们已经在主机上禁用了root登录,并且只允许塔用户的公钥/私钥身份验证。私钥存储在数据库中,因此我无法从cli运行setup命令并模拟Tower用户 编辑我正在添加代码,以便可以在其他地方进行测试 收集事实 --- - hosts: all gather_facts: true become: t

我让我们的安全小组询问我们从Ansible Tower管理的主机收集的所有信息。我想运行setup命令,并将其放入可以运行ansible cmdb的文件夹中的文件中。我需要在剧本中这样做,因为我们已经在主机上禁用了root登录,并且只允许塔用户的公钥/私钥身份验证。私钥存储在数据库中,因此我无法从cli运行setup命令并模拟Tower用户

编辑我正在添加代码,以便可以在其他地方进行测试

收集事实

---
- hosts: all
  gather_facts: true
  become: true
  tasks:
    - name: Check for temporary dir make it if it does not exist
      file:
        path: /tmp/ansible
        state: directory
        mode: 0755
    - name: Gather Facts into a file
      copy:
        content: '{"ansible_facts": {{ ansible_facts | to_json }}}'
        dest: /tmp/ansible/{{ inventory_hostname }}
cmdb_gather.yml

---
- hosts: all
  gather_facts: no
  become: true
  tasks:
    - name: Fetch fact gather files
      fetch:
        src: /tmp/ansible/{{ inventory_hostname }}
        dest: /depot/out/
        flat: yes
CLI:


这基本上看起来像(现场编写,未测试):

-name:使之等效于“ansiblesomehosts-msetup--tree/some/dir”
主持人:我的主持人
变量:
树基:/path/to/tree/base
任务:
-名称:确保我们有一个用于树基的文件夹
文件:
路径:“{{treebase}}”
状态:目录
委托给:localhost
跑一次:对
-名称:在树状结构中逐主机转储事实
副本:
dest:“{{treebase}}/{{inventory\u hostname}”
内容:“{ansible_facts:{{{ansible_facts | to_json}}”
委托给:localhost

好的,我想出来了。虽然@Zeitounator有一个正确的答案,但我的想法是错误的。在检查ansible cmdb的文档时,我发现应用程序可以使用事实缓存。当我在项目文件夹中包含自定义ansible.cfg并添加:

[defaults]
fact_caching=jsonfile
fact_caching_connection = /depot/out
ansible cmdb能够使用以下命令正确解析输出:

ansible-cmdb -f /depot/out > ansible_hosts.html

我也想出了类似的办法。我发现uyou在脚本中建议的代表节中对/usr/bin/sudo及其所有权进行了轰炸。我对远程机器上的一个文件运行相同的命令,然后获取它。但是,ansible cmdb不会将信息解析出来。当我添加了你上面建议的内容的格式时,我更接近了。与运行ansible-m设置相比,从剧本中收集事实似乎有一些根本不同的地方。我仍在努力让它发挥作用。完全没有什么不同,它是完全相同的模块。唯一的区别是能够在ansible ad-hoc命令中使用--tree选项。如果不需要在localhost上写入结果,则可以关闭委派任务的权限提升。虽然它们可能是相同的代码,但在playbook中运行时,输出是不同的。我运行了两次cli,两个版本的playbook各运行了两次。两个cli都将json的第一位输出为:
{“ansible_facts”:{“ansible_all_ipv4_addresses”:[“172.18.0.1”、“10.6.6.41”、“172.17.0.1”],
脚本在输出的第一部分看起来有所不同。下面是一个示例:
{“ansible_facts”:{“ansible_ssh_host_key_rsa_public”:
ansible cmdb需要某种格式,我相信。
ansible-cmdb -f /depot/out > ansible_hosts.html