我一直在尝试使用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主机文件中。有人可以帮我吗?
答案 0 :(得分:5)
add_host
module不会将主机添加到您的库存文件中,而是创建主机并将其添加到仅存在于内存中的库存。您可以在后续播放中使用此广告资源,但不会将其保存到文件中。
如果您真的想使用Ansible将主机添加到库存文件,则需要使用常规文件编辑模块,例如lineinfile
或blockinfile
。
你也可以欺骗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 %}