【发布时间】:2019-07-23 10:23:44
【问题描述】:
在 Ansible 2.7.11 中,想要使用模块 waif_for 和 loops 进行与我的 System Center Operations Manager (SCOM) 服务器的连接测试。
目前我正在使用一个任务
- name: "Test connection to SCOM_MGMT_SRV_PROD: {{ SCOM_MGMT_SRV_PROD }}"
wait_for:
host: "{{ item }}"
port: "{{ SCOM_PORT }}"
state: drained # Port should be open
delay: 0 # No wait before first check (sec)
timeout: 3 # Stop checking after timeout (sec)
active_connection_states: SYN_RECV
with_items:
- server1
- server2
- server3
- server4
ignore_errors: yes
tags: connectionTest,testSCOM
其中变量SCOM_PORT 设置为1270,SCOM_MGMT_SRV_PROD 设置为服务器列表"server1,server2,server3,server4"。
这种方法很有效,但我想在一个中心位置维护一个变量列表,就像库存文件中的全局变量SCOM_MGMT_SRV_PROD。
可以通过
遍历这样的列表- debug:
msg="{{ item }}"
loop: "{{ [SCOM_MGMT_SRV_PROD] }}"
但是当在任务中使用这种方法时
- name: "Test connection to SCOM_MGMT_SRV_PROD: {{ SCOM_MGMT_SRV_PROD }}"
wait_for:
host: "{{ item }}"
port: "{{ SCOM_PORT }}"
state: drained # Port should be open
delay: 0 # No wait before first check (sec)
timeout: 3 # Stop checking after timeout (sec)
active_connection_states: SYN_RECV
loop: "{{ [SCOM_MGMT_SRV_PROD] }}"
ignore_errors: yes
tags: connectionTest,testSCOM
我遇到了一个错误
failed: [host] (item=server1,server2,server3,server4) => ... /tmp/ansible_wait_for_payload_zNj2ac/__main__.py\", line 380, in _convert_host_to_hex\r\n File \"/tmp/ansible_wait_for_payload_zNj2ac/__main__.py\", line 354, in _convert_host_to_ip\r\nsocket.gaierror: [Errno -2] Name or service not known\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
这对我来说表明模块wait_for 将完整列表作为项目而不是列表中的一个服务器。所描述行为的原因似乎得到了回答@Checking wait_for in Ansible in a particular host group does not work。
知道如何让模块wait_for 与可变的服务器列表一起工作吗?
其他组件
【问题讨论】: