2016-06-27 130 views
0

我使用hosts_vars文件中包含的變量列表(在to_install下)來提供我的deploy.yml操作手冊。 我hosts_varsAnsible:操縱變量名稱

--- 
clients: 
    cl1: 
    to_install: 
    - banana 8.1 
    - Firefox 46.0.1 
    to_uninstall: 
    - null 

我的劇本:

- name: Deploy 
    hosts: win_clones 
    vars_files: 
    - ./hosts_vars 
    tasks: 
    - name: Fetching and copying the file on the client ... 
     win_get_url: 
     url: 'ftp://172.20.0.5/choco-repo/{{ item }}' 
     dest: 'C:\Test\{{ item }}' 
     with_items: "{{ clients[machine].to_install }}" 
    - name: Installing the package ... 
     win_chocolatey: 
     name: "{{ item }}" 
     state: present 
     with_items: "{{ clients[machine].to_install }}" 

我跑這個戲用下面的命令:

ansible-playbook deploy.yml -e machine=cl1 

對於我的劇本的第一個任務我用win_get_url,我會喜歡將我的變量名稱轉換爲:

banana8.1.nupkg 
Firefox46.0.1.nupkg 

對於第二個任務我用win_chocolatey,這是足以只傳遞變量的名稱(不帶版本號):

banana 
Firefox 

我想魔術應該在 with_items: "{{clients[machine].to_install }}"發生。我如何才能做到這一點?

回答

2

您可以使用regex_replace來做到這一點。

此:

tasks: 
    - debug: msg="{{ item | regex_replace(' ', '') }}.nupkg" 
    with_items: "{{ clients[machine].to_install }}" 

會打印:

TASK [debug] ******************************************************************* 
ok: [win_clones] => (item=banana 8.1) => { 
    "item": "banana 8.1", 
    "msg": "banana8.1.nupkg" 
} 
ok: [win_clones] => (item=Firefox 46.0.1) => { 
    "item": "Firefox 46.0.1", 
    "msg": "Firefox46.0.1.nupkg" 
} 
+0

謝謝,這個工程的首要任務。我該如何做第二個,即刪除版本號纔能有名字? – diegus

+0

完全像我爲第一個做的那樣,通過玩regex_replace。如果你沒有什麼可以做對的話,這將是沒有趣味的嗎?如果你找不到解決方案,我會幫你的,但我認爲你可以弄清楚。 –

+0

那麼,它只是通過使用'debug:msg =「{{item | regex_replace('','')}}」'來工作,但它似乎有點奇怪。這不是隻是刪除空間?所以我應該得到banana8.1和Firefox46.0.1 – diegus