如何将 Ansible 模块 wait_for 与循环一起使用?

2024-06-01 10:16:42 发布

您现在位置:Python中文网/ 问答频道 /正文

在Ansible 2.7.11中,并希望使用模块waif_forloops来测试与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。在

可以通过

^{pr2}$

但在任务中使用这种方法时

- 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使用一个可变的服务器列表吗?在

其他组件

  • RHEL 7.6版
  • python version = 2.7.5 (default, Jun 11 2019, 12:19:05) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
  • 模块dig已安装,但未使用,因为它不会与lookup一起更改行为

Tags: 模块toin服务器host列表fortimeout
2条回答

同时,我发现有可能Looping over inventory并且如果我使用

with_items: "{{ groups['SCOM_MGMT_SRV_PROD'] }}"

与库存文件中的组一起

^{pr2}$

由于监控服务器不是由Ansible、Linux管理员等维护的基础设施的一部分,所以除了变量之外,我不想将它们包括在清单中。在

是否有其他选项可以循环访问一个可变的服务器列表。。。如果没有,可能有必要将此作为解决方案。在

在咨询了同事之后,发现清单中没有正确定义服务器列表,只是一个典型的语法错误。请参见Ansible, how to define a list in host inventory?。在

在文件中定义变量是必要的

SCOM_MGMT_SRV_PROD="['server1','server2','server3','server4']"

而不是一个逗号分隔的字符串列表并使用for循环

^{pr2}$

通过这样做,我意识到实际上调试消息也没有在列表上迭代。现在它正常工作了

^{3}$

相关问题 更多 >