【问题标题】:Ansible - Multiple/ Alternative hostnames for the same hostAnsible - 同一主机的多个/备用主机名
【发布时间】:2019-06-09 11:31:39
【问题描述】:

假设我有具有多个 (DNS) 名称/IP 的主机,例如因为它们有多个 NIC,因此可以通过路由到达它们。

我想玩一本剧本,以防其中一条路线失败。因为我不知道哪一个有效,所以我希望 ansible 尝试所有这些,然后只为这个主机播放这本书一次。将所有主机名放入清单中并让它运行很容易,但是对于每个主机名,剧本都会执行一次。

问题:有没有办法指定备用主机名或告诉 ansible 只在每个组的一个主机上运行 playbook?

【问题讨论】:

    标签: ansible


    【解决方案1】:

    可以实现

    仅在每组一台主机上运行 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 ... "
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-21
      相关资源
      最近更新 更多