Ansible Azure Dynami c Инвентаризация и обмен переменными между хостами в одной пьесе - PullRequest
0 голосов
/ 06 февраля 2020

Проблема: ссылка на факт о хосте (в данном случае на частный ip) с другого хоста в книге воспроизведения с использованием подстановочного знака, кажется, работает только в части «Хост» книги воспроизведения, а не внутри задачи. vm_ubuntu * нельзя использовать в задаче.

В одной книге воспроизведения у меня есть несколько хостов, и, поскольку инвентарь является динамическим c, у меня нет имени хоста заранее, как Azure добавляет идентификатор после того, как он был создан. Я использую TF для создания. И используя Azure Dynami c метод инвентаризации. Я называю свою пьесу следующим образом, где myazure_rm.yml является стандартным методом инвентаризации azure dynamici c на момент написания этой статьи.

ansible -playbook -i ./myazure_rm .yml ./bwaf-playbook.yaml --key-file ~ / .ssh / id_rsa --u azureuser

Моя книга воспроизведения выглядит следующим образом (сокращенно).

- hosts: vm_ubuntu*

  tasks:
    - name: housekeeping
      set_fact:
        vm_ubuntu_private_ip="{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}"
#"
    - debug: var=vm_ubuntu_private_ip

- hosts: vm_bwaf*
  connection: local

  vars:
    vm_bwaf_private_ip: "{{private_ipv4_addresses | join }}"
    vm_bwaf_public_ip: "{{ public_ipv4_addresses | join }}"
    vm_ubuntu_private_ip: "{{ hostvars['vm_ubuntu*']['ip'] }}"
    api_url: "http://{{ vm_bwaf_public_ip }}:8000/restapi/{{ api_version }}"
#"

1 Ответ

0 голосов
/ 06 февраля 2020

Я отвечаю на свой вопрос, чтобы получить репутацию и, конечно же, помогать другим. Я также хочу поблагодарить человека ({ ссылка }), который придумал это первым, который появляется здесь: Как настроить регистрацию переменной для сохранения между играми в ansible?

- name: "Save private ip to dummy host" 
  add_host: 
     name:   "dummy_host" 
     ip:     "{{ vm_ubuntu_private_ip }}"

И тогда это может быть указано на другом хосте в playbook следующим образом:

- hosts: vm_bwaf*
  connection: local

  vars:
    vm_bwaf_private_ip: "{{private_ipv4_addresses | join }}"
    vm_bwaf_public_ip: "{{ public_ipv4_addresses | join }}"
    vm_ubuntu_private_ip: "{{ hostvars['dummy_host']['ip'] }}"
...