ansible чтение IP-адреса с хостов - PullRequest
0 голосов
/ 10 января 2020

Мне нужно установить дату для удаленного хоста, поэтому я читаю дату локального хоста, затем мне нужно получить другой хост "ipv4_address", который определен в файле хостов ansible.

- hosts: localhost
  become_user : root
  tasks:

    - name: align datetime
      shell: |
                 data="$(date +'%Y/%m/%d +%H:%m:00')"
                 ssh  user@{{ otherhost.ipv4_address }} "sudo date -s $data"

- hosts: otherhost
  become: true
his tasks....

, но кажется, что неправильный способ получить ipv4:

, фатальный: [127.0.0.1]: FAILED! => {"msg": "Задача включает параметр с неопределенной переменной. Ошибка была следующей: 'otherhost.ipv4_address' не определен \ n \ nОшибка, по-видимому, в

ansible --version
ansible 2.9.2
  config file = None
  configured module search path = ['/home/tec1/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/tec1/.local/share/virtualenvs/sniperx-EdPGXWMw/lib/python3.7/site-packages/ansible
  executable location = /home/tec1/.local/share/virtualenvs/sniperx-EdPGXWMw/bin/ansible
  python version = 3.7.3 (default, Apr  3 2019, 05:39:12) [GCC 8.3.0]

1 Ответ

0 голосов
/ 10 января 2020

Проблема в том, что {{ otherhost.ipv4_address }} недоступен в то время, когда вы его используете, поскольку ansible не собрал факты о otherhost.

Вам доступно несколько вариантов:

  1. Соберите факты, прежде чем начать использовать данные, например
---
- hosts: all
  gather_facts: true
  # here you gather facts about otherhost

- hosts: localhost
  tasks:
    - debug: var=hostvars["otherhost"].ansible_all_ipv4_addresses
      # and here you can access those facts about 
Запустите playbook на удаленном хосте и передайте время локального хоста перед раздачей, например,
- hosts: otherhost
  tasks:
  - name: get localhost time
    shell: date +'%Y/%m/%d +%H:%m:00'
    become: false
    register: local_date
  - name: set the date on the server
    shell: sudo date -s '{{ local_date.stdout_lines[0] }}'

Это позволяет использовать способ автоматического ответа s-101 * * на цель. коробка, и вам не нужно руководство ssh.

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