将主机添加到Ansible主机文件

时间:2016-12-26 10:42:40

标签: ansible ansible-playbook ansible-inventory

我一直在尝试使用Ansible playbook为我的hosts文件添加主机名。我的Ansible游戏看起来如下,我的主机文件位于/etc/ansible/hosts

- 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

Playbook成功执行,但新主机名未添加到Ansible主机文件中。有人可以帮我吗?

2 个答案:

答案 0 :(得分: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 :(得分:2)

您可以使用模板创建主机文件。

任务文件

---
- 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 %}