2017-08-31 8 views
0

インストールされているWindows機能を確認するためのプレイブックを作成しようとしています。それらがインストールされている場合、それらをスキップする必要があります。そうでなければ、私のvarsのリストからインストールしてください。jsonとの互換性のあるwith_items条件付きチェック

- name: win command 
    win_command: 'powershell.exe "Get-WindowsFeature | Where Installed | Select -exp Name | ConvertTo-Json"' 
    register: result 

- name: Register vars 
    set_fact: 
    featureinstalled: '{{ result.stdout | from_json }}' 

- name: Installing features 
    win_feature: 
    name: '{{ item }}' 
    state: Present 
    with_items: 
    '{{features_to_install}}' 
    when: '{{ item }} != {{ featureinstalled }}' 

マイfeatures_to_installのVARS別々の/ VARS /ファイルに:

--- 
features_to_install: [FileAndStorage-Services,File-Services,.....] 

私は機能がJSONに存在する場合脚本は機能のインストールをスキップしたいです。 。Imは取得エラー:

は{ "失敗":真、 "MSGを":「'!{{}} = {{featureinstalled}}アイテムの失敗エラーが条件付きのチェックだった:しばらくテンプレートエラーテンプレートテンプレート: トークン '、'、 'got' string:{%ならFileAndStorage-Services!= [u'FileAndStorage-Services '、 u'Storage-Services'、u'FS-SMB1 '、u 'WoW64-Support']%} True {%else%} False {%endif%} \ n \ nエラーは '/tmp/worldengine/src/roles/webserver/tasks/windows_features.yml' : 行31、列3、ただし、正確な構文の問題 に応じて、ファイル内の他の場所に\ nがある可能性があります。\ n \ nTセットを操作するために利用できる handy filtersがあり

+0

コードを書く前に[docs on 'when](http://docs.ansible.com/ansible/latest/playbooks_conditionals.html#the-when-statement)を読むのはどうですか?また、 '!='演算子はまったく間違っています - "等しくない"とはあなたがチェックしようとしているものではありません - 人間の言葉で表現を声に出して、それを理解します。 – techraf

+0

うまくいってくれました – firebolt

答えて

0

をインストールする機能\ nは^:

- name: Installing features 
    win_feature: 
    name: '{{ item }}' 
    state: Present 
    with_items: '{{ features_to_install | difference(featureinstalled) }}' 

これはfeatures_to_installから機能を反復処理します\ N \ N \ 名N-:彼はように見えるラインを怒らリストは、featureinstalledリストにはありません。

+0

これは大変感謝しています。私の条件付きチェックが間違っていた。私は "in"と "not in"を使用して終了しましたが、あなたのアプローチもテストします。ありがとう! – firebolt

関連する問題