Find 使用Ansible 2.0从文件夹安装所有软件包

Find 使用Ansible 2.0从文件夹安装所有软件包,find,ansible-2.x,Find,Ansible 2.x,我在一个文件夹中放置了未维护的python包,因此我从zip安装了它们,而不是从它们的存储库安装 我使用的是Ansible 2.0,因此命令似乎是实现这一点的方法 到目前为止,我正在做以下工作: - name: Install unmaintained dependencies pip: name: "{{ my_project_app }}/requirements/{{ item }}" virtualenv: "{{ my_project_venv }}" with

我在一个文件夹中放置了未维护的python包,因此我从zip安装了它们,而不是从它们的存储库安装

我使用的是Ansible 2.0,因此命令似乎是实现这一点的方法

到目前为止,我正在做以下工作:

- name: Install unmaintained dependencies
  pip:
    name: "{{ my_project_app }}/requirements/{{ item }}"
    virtualenv: "{{ my_project_venv }}"
  with_items:
  - django-hijack-2.0.0.zip
  - django-image-cropping-django-19.zip
  - pisa-3.0.33.zip
现在我正在使用
find
命令

- name: Loading unmaintained dependencies
  find:
   paths: "{{ my_project_app }}/requirements"
   patterns: "*.zip"
  register: unmaintained_dependencies

- debug:
   var: unmaintained_dependencies
如果我运行上面的剧本,我会得到以下输出

ok: [192.168.1.212] => {
    "files_found": {
        "changed": false,
        "examined": 3,
        "files": [
            {
                ...
                "path": "/data/my_project/requirements/pisa-3.0.33.zip",
                ...
            },
            ...
        ],
        "matched": 3,
        "msg": ""
    }
}

我想一定有办法把所有的东西都放在一起,但这就是我被卡住的地方。

我仍然不明白你在这里想要实现什么。。您使用
find
模块仅仅是因为
pip
模块没有从zip文件安装软件包吗


对于您的
find
解决方案,您可以创建一个任务,该任务将迭代
find
任务的结果,使用
和\u items:files\u found.files
,并在需要路径时使用
{item.path}

- name: Install unmaintained dependencies
  pip:
    name: "{{ item.path }}"
    virtualenv: "{{ my_project_venv }}"
  with_items: "{{files_found.files}}"
此外,您可以尝试使用以下方法进行循环,而不是使用
文件


请注意,我没有时间测试这些解决方案中的任何一个,也没有时间询问更多关于您试图实现的目标的信息,但我希望它们能帮助解决您的问题。

第一个选项解决了我的问题,我不知道访问dicts有那么明显!我无法使用
和{u fileglob
(纠正答案中的小引号错误),因为它似乎只适用于托管在中央计算机中的文件,而不适用于节点。
与{u items:files\u found.files}一起使用
文件对我不起作用,必须与{files\u found.files}}一起使用
。谢谢@Richlv,我相信Ansible在某个时候不再允许这种语法。我改变了答案。
- pip:
    name: {{ item }}
    virtualenv: "{{ my_project_venv }}"
  with_fileglob:
    - "{{ my_project_app }}"/requirements/*.zip