2016-03-14 74 views
0

我想創建一個主機文件,其中包含以下任務。我在機器上完成這個任務,完全脫離羣組['hadoop']。在這裏,我不想運行我的這種打法在小組[「Hadoop的」]如何創建主機文件,並與主持人IP

- name: Update /etc/hosts 
    lineinfile: dest=/etc/hosts 
      regexp='.*{{ item }}$' 
      line="{{ hostvars[item].ansible_default_ipv4.address }} {{item}}" 
      state=present 
    when: hostvars[item].ansible_default_ipv4.address is defined 
    with_items: groups['hadoop'] 
    tags: 
    - etc-hosts 

我想這對創建組的節點hosts文件[「Hadoop的」],但它沒有工作,但只有當我的工作在我的主持人中有團體['hadoop']。

任何人都知道我在做什麼錯在這裏?

回答

1

Ansible將通過設置模塊檢測IP等事實。這是默認執行的,作爲將在遊戲中處理的那些主機上的遊戲的第一個任務。因此Ansible只知道關於當前戲劇主持人的事實。不是該劇的一部分 - >沒有詳細信息。

要解決這個問題,你有兩個選擇。

1)添加一個沒有任務的遊戲,只是爲了在hadoop主機上運行setup模塊。

--- 

- hosts: hadoop 
    gather_facts: yes 

- hosts: other hosts 
    tasks: your actual tasks here 

... 

2)啓用fact caching。顧名思義,事實緩存爲Ansible提供了一種方式,可以記住當前劇本中未處理的主機事實。爲此,您需要在本地或網絡上的某處設置redis實例。