stdout没有正确传递?

时间:2017-11-02 15:47:20

标签: ansible

奇怪的问题。由于某种原因,stdout中的值无法正确识别。我想要做的是grep正在收听的端口的值并尝试匹配。如果存在定义的端口(即,正在监听产生一条消息,如果没有,则产生另一条消息)。

---
  - name: check_prometheus_status_kafka
    shell: /usr/sbin/ss -lnt|awk '{ print $4}'|grep 9071 |sed 's/\*//'| sed 's/\://'
    register: prom_status
  - debug: var=prom_status.stdout
    tags:
      - check_prometheus_status_kafka

  - name: post_message_prom_kafka
    debug: msg="Prometheus for Kafka {{  (kafka_prom_port == prom_status.stdout) | ternary ('', 'NOT') }} listening on {{ kafka_prom_port }} - Current Listen value is {{ prom_status.stdout }}"
    tags:
      - post_message_prom_kafka

这是输出:

TASK [kafkanodes : check_prometheus_status_kafka] **********************************************************************************************************
changed: [mifid-cnj-prod-k1.bnymellon.net]

TASK [kafkanodes : debug] **********************************************************************************************************************************
ok: [mifid-cnj-prod-k1.bnymellon.net] => {
    "prom_status.stdout": "9071"
}

TASK [kafkanodes : post_message_prom_kafka] ****************************************************************************************************************
ok: [mifid-cnj-prod-k1.bnymellon.net] => {
    "msg": "Prometheus for Kafka NOT listening on 9071 - Current Listen value is 9071"
}

正如您所看到的,Ansible报告说端口没有被监听,而前一个任务明确告诉我正在收听端口IS' 9071' (以及从prom_status.stdout获取值的当前任务显示了端口值。)

现在,如果我替换这一行:

debug: msg="Prometheus for Kafka {{  (kafka_prom_port == prom_status.stdout) | ternary ('', 'NOT') }} listening on {{ kafka_prom_port }} - Current Listen value is {{ prom_status.stdout }}"

......用这个:

debug: msg="Prometheus for Kafka {{  (kafka_prom_port == 9071) | ternary ('', 'NOT') }} listening on {{ kafka_prom_port }} - Current Listen value is {{ prom_status.stdout }}"

......它有效。我在这里想念的是什么?

再次感谢您的帮助!!

亚历

1 个答案:

答案 0 :(得分:1)

强制将stdout字符串强制转换为数字:(kafka_prom_port == prom_status.stdout|int)