注册事实并不在Ansible“当”条件下工作(Registered fact does not wo

2019-09-27 11:06发布

我有我的剧本如下:

---
- hosts: myser
  tasks:
  - name: Checking.
    win_command: mycommand
    register: win_command_result

  - set_fact:
      myvar={{win_command_result.stdout | regex_search('\\d+')}}
    register: myvar_result

  - debug:
      var: myvar_result.ansible_facts.ple

  - name: Checking Condition
    win_command: ipconfig
    register: ipconfig
    when: myvar_result.ansible_facts.ple < 5000

  - debug:
      var: ipconfig

以下是输出。

我得到每个服务器有两个不同的值,但任务Checking Condition被跳过。 基于价值,一台服务器应该跳过和另一个应该执行。

PLAY [myser] 
*******************************************************

TASK [Gathering Facts] 
**************************************************
ok: [ser1]
ok: [ser2]

TASK [Checking] 
****************************
changed: [ser1]
changed: [ser2]

TASK [set_fact] 
*********************************************************
ok: [ser1]
ok: [ser2]

TASK [debug] 
************************************************************
ok: [ser1] => {
    "myvar_result.ansible_facts.ple": "232"
}
ok: [ser2] => {
    "myvar_result.ansible_facts.ple": "378416"
}

TASK [Checking Condition] 
**********************************************
skipping: [ser1]
skipping: [ser2]

TASK [debug] 
************************************************************
ok: [ser1] => {
    "ipconfig": {
        "changed": false, 
        "skip_reason": "Conditional result was False", 
        "skipped": true
    }
}
ok: [ser2] => {
    "ipconfig": {
        "changed": false, 
        "skip_reason": "Conditional result was False", 
        "skipped": true
    }
}

PLAY RECAP 
**************************************************************
ser2 : ok=5    changed=1    unreachable=0    failed=0   
ser1 : ok=5    changed=1    unreachable=0    failed=0   

我想用myvar_result.ansible_facts.plewhen的状态。 因此,这里的想法是,如果myvar_result.ansible_facts.ple跨越5000值然后执行“检查名称”

我失去了一些东西在这里? 如何得到它的工作?

Answer 1:

它工作正常,但你比较整数的字符串。

正如你可以在你的输出中看到:

"myvar_result.ansible_facts.ple": "232"
"myvar_result.ansible_facts.ple": "378416"

您的值是字符串(如在标准输出传递的命令结果,以及所述的输出regex_search滤波器)。


这样做的条件比较之前将它们转换成整数:

- name: Checking Condition
  win_command: ipconfig
  register: ipconfig
  when: myvar_result.ansible_facts.ple|int < 5000


文章来源: Registered fact does not work in “when” condition in Ansible
标签: ansible