2016-04-28 42 views
1

我有一個文件夾放置未維護的python軟件包,所以我從zip安裝它們而不是從它們的存儲庫中安裝它們。使用Ansible 2.0從一個文件夾安裝所有軟件包

我使用Ansible 2.0,所以find命令似乎是做

到目前爲止,我在做下列方式:

- 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": "" 
    } 
} 

我想必須有一種方法來把所有東西放在一起,但這裏是我卡住的地方。

回答

1

我還是不明白你想在這裏實現什麼呢..你是否在使用find模塊,因爲pip模塊沒有從zip文件安裝軟件包?

爲了您find解決方法,您可以創建使用迭代的find任務的結果,with_items: files_found.files,並使用{{ item.path }}每當你需要的路徑的任務:

- name: Install unmaintained dependencies 
    pip: 
    name: "{{ item.path }}" 
    virtualenv: "{{ my_project_venv }}" 
    with_items: "{{files_found.files}}" 

而且,而是採用file,你可以嘗試使用循環with_fileglob進行:

- pip: 
    name: {{ item }} 
    virtualenv: "{{ my_project_venv }}" 
    with_fileglob: 
    - "{{ my_project_app }}"/requirements/*.zip 

注意,我沒有時間來測試這些解決方案,或要求更多回答你想要達成什麼目標,但我希望他們能幫助解決您的問題。

+1

第一個選項解決了我的問題,我不知道訪問字符很明顯!我無法使用'with_fileglob'(糾正答案中的小錯誤引用錯位),因爲它似乎只適用於中央機器中託管的文件,而不是節點中的文件。 – dnaranjo

+0

'with_items:files_found.files'不適用於我,必須執行'with_items:「{{files_found.files}}」'。 – Richlv

+0

謝謝@Richlv,我相信Ansible在某個時候停止了這種語法。我已經改變了答案。 – palvarez89

相關問題