Ansible Module Wait_for


原文链接: Ansible Module Wait_for
- name: Check if systemd exists
  stat: path=/etc/systemd/system
  register: systemd_check

- name: Install nsqlookupd systemd service
  template:
    src: nsqlookupd.service.j2
    dest: /etc/systemd/system/nsqlookupd.service
  when: systemd_check.stat.exists == true
  notify:
    - reload daemon
    - restart nsqlookupd

wait_for
用于等待指定的时间(默认是 300 秒)。在不指定任何选项的时候,这个模块什么都不做。

该模块可以用于等待端口可用。比如,调用 java 应用服务器的启动脚本的时候,脚本返回 true,但是服务并不是立刻可用的。
该模块可以用于等待一个文件中出现匹配某个正则表达式的字符串。
该模块可以用于等待文件系统上的某个文件可用 或 被删除。
该模块可以用于等待活跃的链接被关闭。当从负载均衡池中摘除节点的时候,尤为有用。

选项

connect_timeout 连接的超时时间,默认是 5 秒。
delay 开始轮询之前等待的秒数,默认是 0。
exclude_hosts 与 state=drained 一起使用。用于指定,在寻找活跃的 TCP 链接的时候,要忽略的主机或 IP 列表。
host 要等待的 可解析的主机名 或 IP 地址。
path 在继续之前,文件系统上必须存在的文件的路径。
port 要轮询的端口。
search_regex 用于匹配文件或 socket 链接中的一个字符串。
state 可以是 present、started、stopped、absent、drained。

    当检查端口的时候,started 会确保端口打开;stopped 会确保端口关闭;drained 会检查活跃的链接。
    当检查文件或搜索字符串的时候,present 和 started 会确保文件或字符串存在。absent 会确保文件不存在或被移除。
    (Choices: present, started, stopped, absent, drained)[Default: started]

timeout 等待的超时时间。默认是 300 秒。

例子

    # 10 秒后在当前主机开始检查 8000 端口,直到端口启动后返回
    - wait_for: port=8000 delay=10
    # 检查 path=/tmp/foo 直到文件存在后继续
    - wait_for: path=/tmp/foo
    # 直到 / var/lock/file.lock 移除后继续
    - wait_for: path=/var/lock/file.lock state=absent
    # 直到 / proc/3466/status 移除后继续
    - wait_for: path=/proc/3466/status state=absent

    # 等待 8000 端口打开,每 10 秒检查一次。超时时间是 300 秒。
    wait_for: port:8000 delay=10
    # 等待所有本地 IP 上的 8000 端口,关闭活跃连接。每 10 秒检查一次,超时时间是 300 秒。
    wait_for: host=0.0.0.0 port=8000 delay=10 state=drained
    # 等待所有本地 IP 上的 8000 端口,关闭活跃的连接。忽略来自 10.2.1.2 和 10.2.1.3 上的连接。超时时间是 300 秒。
    wait_for: host=0.0.0.0 port=8000 state=drained exclude_hosts=10.2.1.2,10.2.1.3
    # 等待 22 端口被打开,并且包含字符串 OpenSSH。并且不确保 inventory_hostname 是可解析的。每 10 秒检查一次,超 ` 时时间是 300 秒。
    local_action: wait_for port=22 host="{{ ansible_ssh_host | default(inventory_hostname) }}" search_regex=OpenSSH delay=10

#    一直等到 / tmp/foo 这个文件存在。
    wait_for: path=/tmp/foo
    # 一直等到字符串 completed 出现在文件 / tmp/foo 中。
    wait_for: path=/tmp/foo search_regex=completed
    # 一直等到 lock 文件被删除。
    wait_for: path=/var/lock/file.lock state=absent
    # 一直等到进程结束,并且 pid 被销毁。
    wait_for: path=/proc/3466/status state=absent
`