2016-12-26 127 views
1

我一直在嘗試使用Ansible手冊將主機名添加到我的主機文件。我Ansible戲看下面和我的主機文件駐留在/etc/ansible/hosts將主機添加到Ansible主機文件

- name: adding host playbook 
    hosts: localhost 
    connection: local 
    tasks: 
    - name: add host to ansible host file 
    add_host: 
     name: myvm.cloud.azure.com 
     groups: mymasters 

劇本成功執行,但新的主機名不添加到Ansible hosts文件。有人可以幫助我嗎?

回答

5

add_host module不會將主機添加到您的庫存文件,而是創建主機並將其添加到僅存在於內存中的庫存。您可以在後續播放中使用此廣告資源,但不會將其保存到文件中。

如果您真的想用Ansible將主機添加到庫存文件中,您需要使用常規文件編輯模塊,如lineinfileblockinfile


你也可以欺騙inifile module處理Ansible庫存,但它是一個真正的黑客,隨着庫存的文件並沒有真正有一個適當的INI文件結構:

- ini_file: 
    dest: /etc/ansible/hosts 
    section: mymasters 
    option: myvm ansible_host 
    value: myvm.cloud.azure.com 
    no_extra_spaces: yes 
+1

你也許可以有樂趣讓您的庫存目錄too-這樣的自動化項目可以留在自己的文件。 – tedder42

0

您可以使用模板創建主機文件。

任務文件

--- 
- name: Create HostsFile 
    hosts: development 
    user: vagrant 
    become: yes 
    become_method: sudo 

    tasks: 
    - name: Run the Template 
     template: src=hostsFile.j2 dest=/tmp/file.conf owner=root group=root 

模板文件: - HostsFile.j2

{{ ansible_managed }} 

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 
::1   localhost localhost.localdomain localhost6 localhost6.localdomain6 


{% for group in groups %} 
{% if groups[group] and group != 'all' %} 
{% for host in groups[group] %} 
{{hostvars[host].ansible_default_ipv4.address}} {{ ansible_hostname }} 
{% endfor %} 

{% endif %} 
{% endfor %}