Ansible jinja2 フィルタを拒否

Ansible jinja2 フィルタを拒否

標準出力ラインで「*」を拒否する必要があります。

"stdout_lines": [
    "rchinnn01",
    "rchinnn02",
    "*"
]

- set_fact:
  nfs_clients:  "{{ nfs_clients_out.stdout_lines | reject('search','*') | list }}"

スクリプト出力:

TASK [set_fact] *****************************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: error: nothing to repeat
fatal: [rchinnn03]: FAILED! => {"msg": "Unexpected failure during module execution.", "stdout": ""}

答え1

正規表現「[*]」が有効です。次のドラマ

vars:
  my_lines:
    - "rchinnn01"
    - "rchinnn02"
    - "*"
tasks:
  - debug:
      msg: "{{ my_lines|reject('match', '[*]')|list }}"

(要約):

ok: [localhost] => {
    "msg": [
        "rchinnn01", 
        "rchinnn02"
    ]
}

答え2

検索する代わりにequaltoを使用することをお勧めします。

- set_fact:
  nfs_clients:  "{{ nfs_clients_out.stdout_lines | reject('equalto','*') | list }}"

https://stackoverflow.com/questions/24041885/conditionally-join-a-list-of-strings-in-jinja

答え3

次のように使用してください。

- set_fact:
     nfs_clients: "{{ nfs_clients_out.stdout_lines | reject('match','rchinnn*') | list }}"

jinja2バージョンの詳細を確認してください。

関連情報