奇怪的问题。由于某种原因,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 }}"
......它有效。我在这里想念的是什么?
再次感谢您的帮助!!
亚历
答案 0 :(得分:1)
强制将stdout
字符串强制转换为数字:(kafka_prom_port == prom_status.stdout|int)