Изменить ansible инвентарь на основе переменных - PullRequest
1 голос
/ 05 марта 2020

Может ли playbook загружать список инвентаря из переменных? Так что я могу легко настроить запуск в зависимости от выбранной среды?

  tasks:
  - name: include environment config variables
    include_vars:
      file: "{{ item }}"
    with_items:
      - "../../environments/default.yml"
      - "../../environments/{{ env_name }}.yml"

- name: set inventory
  set_fact:
     inventory.docker_host = " {{ env_docker_host }}"

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Поскольку я нахожусь в 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, будут выполняться на удаленный хост или хосты.

1 голос
/ 05 марта 2020

Да. Используйте модуль add_host: https://docs.ansible.com/ansible/latest/modules/add_host_module.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...