2016-06-27 9 views
0

私はdeploy.ymlプレイブックにhosts_varsファイルに含まれている変数のリスト(to_install)を使用しています。 マイhosts_vars可能:変数名を操作する

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

私は、次のコマンドを使用して、このプレーを実行します。私はwin_get_urlを使用私の脚本の最初の仕事のために

ansible-playbook deploy.yml -e machine=cl1 

とIだろう私の変数名を次のように変換したいのです。

banana8.1.nupkg 
Firefox46.0.1.nupkg 
私は win_chocolateyを使用して、(バージョン番号なし)の変数の名前だけを通過するのに十分である第二のタスクについては

:私は魔法が with_items: "{{clients[machine].to_install }}"に起こる必要がありますね

banana 
Firefox 

。それをどうすればできますか?

答えて

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

おかげで、これは最初のタスクのために動作します。 2番目の方法は、バージョン番号を削除して名前のみを使用する方法です。 – diegus

+0

最初のものとまったく同じように、regex_replaceで再生します。あなたに何か正しいことが残っていれば、それは楽しいことではありませんか?あなたが解決策を見つけることができなければ、私はあなたを助けますが、私はあなたがこれを理解することができると思います。 –

+0

さて、 'debug:msg =" {{item | regex_replace( ''、 ''}}} ""を使うだけで動作しますが、それはちょっと変わったようです。これは単にスペースを削除しないのですか?だから私はbanana8.1とFirefox46.0.1を取得する必要があります – diegus

関連する問題