代码之家  ›  专栏  ›  技术社区  ›  kiigass

Ansible-同一主机的多个/备选主机名

  •  1
  • kiigass  · 技术社区  · 6 年前

    我想玩一个剧本,以防其中一条路线失败。由于我不知道哪本书有效,我想尝试一下所有的书,然后只玩这本书 一旦 为这位主人。将所有主机名放入清单并让其运行是很容易的,但随后将为每个主机名执行一次playbook。

    有没有办法指定其他主机名,或者告诉ansible在每个组中只在一台主机上运行playbook?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Vladimir Botka    6 年前

    它是可以实现的

    每个组仅在一台主机上运行playbook

    见下面的例子。

    - hosts: jails-01                                                                            
      strategy: linear                                                                           
      vars:                                                                                      
        lock_file: /var/lock/my_ansible_hostname.lock                                                 
      tasks:                                                                                     
        - name: delete lock_file                                                                 
          file:                                                                                  
            path: "{{ lock_file }}"                                                              
            state: absent                                                                        
          run_once: true                                                                         
          delegate_to: localhost                                                                 
        - name: select host                                                                      
          shell: "echo {{ ansible_hostname }}  > {{ lock_file }}"                                
          args:                                                                                  
            creates: "{{ lock_file }}"                                                           
          delegate_to: localhost                                                                 
        - name: winner takes it all                                                              
          fail:                                                                                  
            msg: "Too late. Other thread is running. End of play."                               
          when: lookup('file', lock_file) != ansible_hostname                                    
        - name: go ahead                                                                         
          debug:                                                                                 
            msg: "{{ ansible_hostname }} goes ahead ... "
    
    
    # ansible-playbook playbook.yml | grep msg
    fatal: [test_01]: FAILED! => {"changed": false, "msg": "Too late. Other thread is running. End of play."}
    fatal: [test_03]: FAILED! => {"changed": false, "msg": "Too late. Other thread is running. End of play."}
        "msg": "test_02 goes ahead ... "