ansible 任务流程控制

一、任务委托

  默认情况下,ansible的所有任务都是在指定的机器上运行的,当在一个独立的群集环境中配置时,但是只想操作其中的某一台主机,或者在特定的主机上运行,此时就需要用到ansible的任务委托功能。

  使用delegate_to关键字可以配置任务在指定的机器上执行,二其他的任务还是在hosts关键字配置的机器上运行,到了这个关键字所在的任务时,就使用委托的机器运行。例如:

---
  - hosts: zookeeper
    remote_user: root
    gather_facts: no

    tasks:
      - name: test
        shell: "echo 123 > /tmp/bb"
      - name: test delegate
        shell: "echo 1 > /tmp/aa"
        register: aa
        delegate_to: 192.168.4.50
      - name: hhh
        debug:
          var: "{{ aa }}"

说明:zookeeper组里面是两天主机:
192.168.4.50
192.168.4.46

如果想要在ansible服务器本地运行,除了将任务委托给127.0.0.1或者localhost,还可以使用local_action关键字完成,如下:    tasks:

- name: test
        shell: "echo 123 > /tmp/bb"
      - name: test delegate
        shell: "echo 1 > /tmp/aa"
        register: aa
        delegate_to: 127.0.0.1   
或者
    tasks:
      - name: test
        shell: "echo 123 > /tmp/bb"
      - name: test delegate
        local_action: shell "echo 1 > /tmp/aa"
        register: aa
        

二、任务暂停

  当一些任务的运行需要等到一些状态的恢复,比如某一台主机或者应用刚刚重启,需要等待其某个端口开启,这个时候就需要任务暂停。如下:

---
  - hosts: hadoop
    remote_user: root
    gather_facts: no

    tasks:
    - name: test1
      local_action:
        module: wait_for           #模块名字
        port: 80
        host: 192.168.4.50
        delay: 10
        timeout: 300
        state: started

使用local_action配合wait_for模块来完成任务的暂停操作。该任务每隔10s检查主机上的80端口是否开启,如果操作300s,80端口任未开启,将返回失败信息。

猜你喜欢

转载自www.cnblogs.com/yjt1993/p/10971801.html