Vam*_*shi 1 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
Run Code Online (Sandbox Code Playgroud)
Playbook成功执行,但新主机名未添加到Ansible主机文件中.有人可以帮我这个吗?
add_host模块不会将主机添加到您的库存文件,而是创建主机并将其添加到仅存在于内存中的库存.您可以在后续播放中使用此清单,但不会将其保存到文件中.
如果您真的想使用Ansible将主机添加到库存文件,则需要使用常规文件编辑模块,例如lineinfile或blockinfile.
您还可以欺骗inifile模块来处理Ansible库存,但它实际上是一个黑客,因为库存文件实际上没有正确的INI文件结构:
- ini_file:
dest: /etc/ansible/hosts
section: mymasters
option: myvm ansible_host
value: myvm.cloud.azure.com
no_extra_spaces: yes
Run Code Online (Sandbox Code Playgroud)
您可以使用模板来创建主机文件。
任务文件
---
- 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
Run Code Online (Sandbox Code Playgroud)
模板文件:- 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 %}
Run Code Online (Sandbox Code Playgroud)