Ansible: переменная, зарегистрированная на одном сервере, забывается при запуске на другом удаленном сервере - PullRequest
0 голосов
/ 04 октября 2019

Мои задачи:

  - name: Init a new swarm with default parameters
    docker_swarm:
      state: present
      advertise_addr: "{{ manager_ip }}:2377"
    register: rezult
    when: "ansible_default_ipv4.address == '{{ manager_ip }}'"

  - debug:
      msg: '{{ rezult.swarm_facts.JoinTokens.Worker }}'
    when: "ansible_default_ipv4.address == '{{ manager_ip }}'"

Теперь это работает нормально, но если я хочу запустить его на другом сервере (! =) С:

  - debug:
      msg: '{{ rezult.swarm_facts.JoinTokens.Worker }}'
    when: "ansible_default_ipv4.address != '{{ manager_ip }}'"

, я получаю:

FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'swarm_facts'\n\nThe error appears to be in '/home/ansible/docker-ansible/docker.yml': line 42, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n  - debug:\n    ^ here\n"}

Я не понимаю. Это как ANSIBLE забывает значение зарегистрированной переменной под названием «rezult» при запуске на другом сервере, даже если я зарегистрировал его, и оно должно иметь фиксированное значение.

1 Ответ

0 голосов
/ 05 октября 2019

Да, переменные всегда специфичны для хоста, включая объявленные set_fact:;если вы хотите, чтобы эта переменная отображалась на всех ваших хостах, вам нужно будет выполнить специальное действие «распространение», которое «переходит» на один хост, который имеет значение, и назначить его всем хостам:

- set_fact:
    hello: I am a manager
  when: ansible_default_ipv4.address == '{{ manager_ip }}'
- set_fact:
    hello: '{{ hostvars[manager_host].hello }}'
  when: hello is not defined
  vars:
     # you may have access to some less convoluted logic than this
     # to know which inventory_hostname ran that "set_fact:"
     manager_host: '{{ hostvars | dict2items
        | selectattr("value.ansible_default_ipv4.address", "eq", manager_ip)
        | map(attribute="key") | first }}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...