Ansible 如果vars_提示符下的变量为空,则仅断言一次

Ansible 如果vars_提示符下的变量为空,则仅断言一次,ansible,Ansible,我要求用户输入,基本上我想检查变量的值(由vars_提示符向用户询问)是否为空 当变量为“”时中止playbook不是问题,而且很容易完成。 然而,我很恼火,这一步是在一吨机器上运行的,而我只想检查一次(我不认为有必要去远程机器),当它没有设置时,我只想让剧本停止,因为我们知道当它第一次空时,它仍然是100次之后 有没有一个干净的方法可以做到这一点?我一直在尝试assert模块,但运气不好 提前谢谢 跑一次是你的朋友: --- - hosts: mygroup gather_facts: n

我要求用户输入,基本上我想检查变量的值(由vars_提示符向用户询问)是否为空

当变量为“”时中止playbook不是问题,而且很容易完成。 然而,我很恼火,这一步是在一吨机器上运行的,而我只想检查一次(我不认为有必要去远程机器),当它没有设置时,我只想让剧本停止,因为我们知道当它第一次空时,它仍然是100次之后

有没有一个干净的方法可以做到这一点?我一直在尝试assert模块,但运气不好


提前谢谢

跑一次
是你的朋友:

---
- hosts: mygroup
  gather_facts: no
  vars_prompt:
    - name: myvar
      prompt: enter myvar
      default: bad_value
  tasks:
    # assert before gathering facts
    - assert:
        that: myvar != 'bad_value'
      run_once: yes
    # gather facts manually with setup
    - setup:
    - debug:
        msg: do the job

此外,您还可以禁用自动事实收集功能,以避免在断言完成之前连接到所有主机,并使用
安装程序
手动收集它们
运行一次
是您的朋友:

---
- hosts: mygroup
  gather_facts: no
  vars_prompt:
    - name: myvar
      prompt: enter myvar
      default: bad_value
  tasks:
    # assert before gathering facts
    - assert:
        that: myvar != 'bad_value'
      run_once: yes
    # gather facts manually with setup
    - setup:
    - debug:
        msg: do the job

此外,您还可以禁用自动事实收集,以避免在断言完成之前连接到所有主机,并使用
设置

手动收集这些事实,谢谢您的回复。这也适用于预任务吗?我正在使用预任务,这会阻止先对所有机器进行设置,然后才注意到VAR设置不正确。但run_once看起来确实很有希望。我会测试并给出反馈。是的,这项工作是为了准备任务。预任务的工作方式与任务相同,但在角色之前执行。如果不关闭事实收集,则在预任务之前执行
setup
任务。因此,如果您有100台主机,Ansible将在测试断言之前花费大量时间收集所有事实。如果您禁用事实收集,将立即做出断言,如果一切正常,Ansible将使用
设置
模块收集事实。感谢您的回复。这也适用于预任务吗?我正在使用预任务,这会阻止先对所有机器进行设置,然后才注意到VAR设置不正确。但run_once看起来确实很有希望。我会测试并给出反馈。是的,这项工作是为了准备任务。预任务的工作方式与任务相同,但在角色之前执行。如果不关闭事实收集,则在预任务之前执行
setup
任务。因此,如果您有100台主机,Ansible将在测试断言之前花费大量时间收集所有事实。如果禁用事实收集,断言将立即做出,如果一切正常,Ansible将使用
setup
模块收集事实。