Поскольку я нахожусь в ansible 2.3, я не могу использовать модуль add_host
(см. Ответ Джека и add_host документы), и это было бы превосходным решением. Поэтому я воспользуюсь другим приемом, чтобы дополнить существующий файл инвентаризации ansible, перезагрузить и использовать его.
hosts.inv
[remotehosts]
main.yml
- hosts: localhost
pre_tasks:
- name: include environment config variables
include_vars:
file: "{{ item }}"
with_items:
- "../environments/default.yml"
- "../environments/{{ env_name }}.yml"
- name: inventory facts
run_once: true
set_fact:
my_host: "{{ env_host_name }}"
- name: update inventory for env
local_action: lineinfile
path=hosts.inv
regexp={{ my_host }}
insertafter="[remotehosts]" line={{ my_host }}
- meta: refresh_inventory
- hosts: remotehosts
...
Предварительные задачи обрабатывают среды yml со всей заменой переменной et c и используют ее для заполнения hosts.inv
до перезагрузки через refresh_inventory
. Любые задачи, определенные ниже - hosts: remotehosts
, будут выполняться на удаленный хост или хосты.