问题的根本在于Ansible中的条件语句“when”不支持在使用“register”模块中的变量时执行shell模块。因此,需要使用另一种方法来实现此目标。
一种解决方法是使用“command”模块而不是“shell”模块来运行shell命令。这样可以消除使用“register”模块的需要,并正确执行条件语句。下面是一个示例playbook,演示如何使用“command”模块来解决此问题:
- name: Example playbook
hosts: all
vars:
my_var: "{{ inventory_hostname }}"
tasks:
- name: Check hostname
command: "hostname | grep {{ my_var }}"
register: result
ignore_errors: true
changed_when: false
failed_when: "'No such file or directory' not in result.stderr"
- name: Print result
debug:
var: result
when: result.rc == 0
在这个playbook中,通过使用“command”模块来运行shell命令,并使用“register”模块将结果保存到变量“result”中。然后使用条件语句“when”检查变量“result”的值,并只在条件为真时打印结果。
通过这种方式,我们不需要使用“shell”模块和“register”模块,并且可以正确执行条件语句。