已注册的事实在Ansible中的“何时”条件下不起作用

时间:2018-09-17 06:19:37

标签: ansible

我的剧本如下:

---
- 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.ple条件下使用when。所以这里的想法是,如果myvar_result.ansible_facts.ple的值超过5000,然后执行“检查名称”

我在这里错过了什么吗?如何使它工作?

1 个答案:

答案 0 :(得分:0)

它工作正常,但是您正在将字符串与整数进行比较。

如您在输出中所见:

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

您的值是字符串(以及在stdout中传递的任何命令结果以及regex_search过滤器的输出)。


在条件中进行比较之前将它们转换为整数:

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