Ansible: Unexpected templating type error: expected string or buffer
Ansible: Unexpected templating type error: expected string or buffer
我有一个包含以下内容的寄存器:
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"
]
}
}
当我在寄存器的标准输出中看到子字符串 "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)]
当变量(在您的例子中 operation_status.stdout
)未定义时会发生此错误。当服务为 运行.
时,可能 status.sh
脚本不会写入标准输出
你能在 "when" 任务之前放置一个调试任务并打印这个变量的值吗?
- 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"
我有一个包含以下内容的寄存器:
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"
]
}
}
当我在寄存器的标准输出中看到子字符串 "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)]
当变量(在您的例子中 operation_status.stdout
)未定义时会发生此错误。当服务为 运行.
status.sh
脚本不会写入标准输出
你能在 "when" 任务之前放置一个调试任务并打印这个变量的值吗?
- 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"