ansible - 迭代所有主机并从结果中检索数据

时间:2016-01-08 14:36:43

标签: git ansible ansible-playbook

我想使用ansible来获取服务器上git-repositories的所有遥控器。在服务器上,可能在特殊文件夹/ home / vhosts / cms /中有很多git-repos,并且在每个repo中可能有多个git-repo的遥控器。所以我想循环遍历所有主机,然后循环遍历所有git存储库,并获得所有当前远程控制器的列表。

我的问题是使用ansible中的变量和循环。我可以访问repos并从' git remote -v'中检索所有信息。输出看起来像

TASK: [debug var=gitremotes] **************************************************
ok: [<host>] => {
    "var": {
        "gitremotes": {
            "changed": true,
            "msg": "All items completed",
            "results": [
                {
                    "changed": true,
                    "cmd": "cd /home/vhosts/cms/customer/html && nice -n 25 git remote -v",
                    "delta": "0:00:00.005960",
                    "end": "2016-01-08 15:10:34.044679",
                    "invocation": {
                        "module_args": "cd /home/vhosts/cms/customer/htm && nice -n 25 git remote -v",
                        "module_complex_args": {},
                        "module_name": "shell"
                    },
                    "item": "customer",
                    "rc": 0,
                    "start": "2016-01-08 15:10:34.038719",
                    "stderr": "",
                    "stdout": "origin\tssh://git.gitserver/customer.git(fetch)\norigin\tssh://git.gitserver/customer.git (push)",
                    "stdout_lines": [
                        "origin\tssh://git.gitserver/customer.git (fetch)",
                        "origin\tssh://git.gitserver/customer.git (push)"
                    ],
                    "warnings": []
                }
            ]
        }
    }
}

我可以访问这一个stdout_lines,但我需要从所有服务器上的所有git-repos中检索所有gitremotes。如何做到这一点?

目前有效的方法是检索所有虚拟主机并迭代它们。

---
- name: get a list of all remotes
  hosts: webservers
  tasks:
  - include: ../roles/webservers/tasks/get_cms_instances.yml
  - name: loop over instances and get git remotes
    shell: cd /home/vhosts/cms/{{ item }}/html && nice -n 25 git remote -v
    with_items: vhosts.stdout_lines
    when: vhosts.rc == 0
    register: gitremotes
  - debug: var=gitremotes
  - debug: var="{{ gitremotes.results[0].stdout_lines[0] }}"

您将以何种方式检索信息?

提前致谢,

蒂莫

0 个答案:

没有答案