2017-12-03 16 views
0

特定のグループ(pi)にあるボックスでのみ実行されるタスクを作成しようとしています。特定のグループ内のボックスでのみ実行可能なタスク

私はAnsibleのバージョンを使用しています:

ansible 2.3.2.0 
    config file = /Users/user/Development/raspbian-homeassistant/ansible.cfg 
    configured module search path = Default w/o overrides 
    python version = 3.6.3 (default, Dec 3 2017, 10:37:53) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.38)] 

これは私の現在のコードです:ホスト名がグループであるが、エラーが発生していないときにスローした場合

- name: Set up zwave USB dongle 
    when: inventory_hostname in groups['pi'] 
    blockinfile: 
    path: /var/local/homeassistant/.homeassistant/configuration.yaml 
    marker: "# {mark} ANSIBLE MANAGED BLOCK #" 
    insertafter: "# zwave dongle" 
    content: |2 
     zwave: 
     usb_path: /dev/ttyACM0 
    tags: 
    - config 
    - hass 

正しく動作するようです。

これは私が(グループvagrantで)私の放浪のボックス上でそれを実行したときに私が取得エラーです:

fatal: [192.168.33.123]: FAILED! => {"failed": true, "msg": "The conditional check 'inventory_hostname in groups['pi']' failed. The error was: error while evaluating conditional (inventory_hostname in groups['pi']): Unable to look up a name or access an attribute in template string ({% if inventory_hostname in groups['pi'] %} True {% else %} False {% endif %}).\nMake sure your variable name does not contain invalid characters like '-': argument of type 'StrictUndefined' is not iterable\n\nThe error appears to have been in '/Users/andy/Development/raspbian-homeassistant/ansible/roles/configure-hass/tasks/main.yml': line 21, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Set up zwave USB dongle\n^here\n"} 

Check if a list contains an item in Ansibleは、私は、構文の権利を持っていますが、私はそれがAnsibleの古いバージョンのためだと思い示唆?

これを修正するにはどうすればよいですか?あなたは、タスクは、特定のグループ内のホストに適用する場合

答えて

1

は一般的に、あなたがそれを行う方法は、そのグループを対象と遊びを作成することである:

- hosts: pi 
    tasks: 
    - name: Set up zwave USB dongle 
     blockinfile: 
     path: /var/local/homeassistant/.homeassistant/configuration.yaml 
     marker: "# {mark} ANSIBLE MANAGED BLOCK #" 
     insertafter: "# zwave dongle" 
     content: |2 
      zwave: 
      usb_path: /dev/ttyACM0 
     tags: 
     - config 
     - hass 

あなたが取得しているエラーがあるためですグループ[「PI」] is undefined. There are a couple of ways of preventing the error. For example, you can explicitly check thatグループ[「PIは」] `それを使用しようとする前に定義されています

- name: set up zwave USB dongle 
    when: groups['pi'] is defined and inventory_hostname in groups['pi'] 

またはデフォルト値を提供するために、defaultフィルタを使用することができます。

- name: set up zwave USB dongle 
    when: inventory_hostname in groups['pi']|default([]) 
関連する問題