web-dev-qa-db-ja.com

Ansible:予期しないテンプレート型エラー:予期された文字列またはバッファ

次の内容のレジスターがあります。

ok: [hostname] => {
    "changed": false,
    "msg": {
        "changed": true,
        "cmd": "cd /tmp\n ./status.sh dev",
        "delta": "0:00:00.023660",
        "end": "2018-11-28 17:46:05.838934",
        "rc": 0,
        "start": "2018-11-28 17:46:05.815274",
        "stderr": "",
        "stderr_lines": [],
        "stdout": "application is not running. no pid file found",
        "stdout_lines": [
            "application is not running. no pid file found"
         ]
    }
}

レジスターのstdoutに「not」というサブストリングが表示されたとき、別のタスクをトリガーしたいと思います。

  - name: Starting Application As Requested
    Shell: /tmp/start.sh
    when: operation_status.stdout | search('not')

ただし、トリガーされたタスクでこのエラーが表示されます

fatal: [Host]: FAILED! => {
"failed": true,
"msg": "The conditional check 'operation_status.stdout | search('not')' failed. The error was: Unexpected templating type error occurred on ({% if operation_status.stdout | search('not') %} True {% else %} False {% endif %}): expected string or buffer\n\nThe error appears to have been in '/path/to/ansible_playbook.yml': line 46, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n  - name: Starting Application As Requested\n    ^ here\n"

When条件を追加したときにのみ、このエラーが表示されます。それがなければ、私のプレイブックは成功します。ここで何が悪いのですか?

バージョンの詳細:

ansible 2.3.0.0
python version = 2.6.6 (r266:84292, Aug  9 2016, 06:11:56) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)]
4
Jimit Raithatha

このエラーは、変数(あなたの場合はoperation_status.stdout)は未定義です。多分status.shスクリプトは、サービスの実行中にstdoutに書き込みません。

「いつ」でデバッグタスクを配置し、タスクの前にこの変数の値を出力できますか?

- name: Debug print value of operation_status.stdout
  debug:var=operation_status.stdout

When条件を次のように変更することもできます。

  - name: Starting Application As Requested
    Shell: /tmp/start.sh
    when: "'not' in operation_status.stdout"
4
Anant Naugai