Переформатировать ip из ansible_facts без фильтра - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь динамически обновлять и переформатировать IP-адрес хоста для используемого шаблона. Мне нужно получить IP-адрес хоста и переформатировать его из обычного формата в формат без вспомогательного фильтра.

Я очень плохо знаком с ansible. Очень новый.

Однако из того, что я собрал ...

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

  2. Как только у меня будет ip, мне нужно переформатировать его с 11.22.33.44 в 11 \ 22. 33. 44.

Пока что я не могу даже получить правильный синтаксис для захвата факта ip, не говоря уже о его переформатировании. Что касается форматирования, я просмотрел фильтры, но не нашел (явных) описаний, которые указывали бы на метод фильтра, который будет форматироваться так, как мне нужно (хотя ... я подозреваю, что он существует).

name: "test gathering a fact"
   debug: var= "{{ hostvars[groups['webservers'][0]]['ansible_eth0']['ipv4']['address'] }}"

Я ожидал что-то вроде ...

11.22.33.44

Но я получаю:

ОШИБКА! Синтаксическая ошибка при загрузке YAML. не нашел ожидаемый ключ

Ошибка, по-видимому, была в /home/my_playbook.yml: строка 14, столбец 13, но может быть в другом месте файла, в зависимости от точной синтаксической проблемы.

Оскорбительная строка выглядит так:

  -  name: "test gathering a fact"
        debug: var= "{{ hostvars[groups['webservers'][0]]['ansible_eth0']['ipv4']['address'] }}"
        ^ here

Мы можем ошибаться, но похоже, что это может быть проблема с пропущенные кавычки. Всегда заключайте в скобки выражения шаблона, когда они начать значение. Например:

with_items:
  - {{ foo }}

Должно быть записано как:

with_items:
  - "{{ foo }}""

Ответы [ 3 ]

0 голосов
/ 12 января 2019

Как только у меня есть ip, мне нужно переформатировать его с 11.22.33.44 в 11 \ 22. 33. 44.

- debug:
    msg: >-
      {{ the_host.ansible_default_ipv4.address | regex_replace('\.', '\\\\.') }}
    # watch out if you choose not to use the `>-` syntax
    # as then yaml quoting will become a real PITA
    vars:
      the_host: '{{ hostvars[groups.webservers[0]] }}'

Вам также может быть лучше использовать ansible_default_ipv4.address вместо ansible_eth0.ipv4.address для машин, которые не всегда используют eth0 (что является некоторыми современными разновидностями Ubuntu, freebsd и т. Д.). То есть, вы, вероятно, заботитесь о сетевой идентичности машины, а не - конкретно - о том, какой адрес связан с сетевой картой с именем eth0

0 голосов
/ 12 января 2019

Я предпочитаю использовать точечную запись:

  - name: first debug
    debug:
      msg: "{{ hostvars[groups['webservers'][0]].ansible_enp0s25.ipv4.address }}"

И этот код возвращает это в выводе:

TASK [first debug] **********************************************************************
ok: [localhost] => {
    "msg": "192.168.65.105"
}

Итак, объединяя их вместе в эту пьесу:

---
- hosts: all
  gather_facts: true

  tasks:
  - name: first debug
    debug:
      msg: "{{ hostvars[groups['webservers'][0]].ansible_enp0s25.ipv4.address }}"

  - name: second debug
    debug:
      msg: >-
        {{ hostvars[groups['webservers'][0]].ansible_enp0s25.ipv4.address | regex_replace('\.', '\\\\.') }}

Дает этот вывод:

PLAY [all] ******************************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [localhost]

TASK [first debug] **********************************************************************
ok: [localhost] => {
    "msg": "192.168.65.105"
}

TASK [second debug] *********************************************************************
ok: [localhost] => {
    "msg": "192\\\\.168\\\\.65\\\\.105"
}

PLAY RECAP ******************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0   
0 голосов
/ 12 января 2019
Отступ

неверен. Вместо

- name: "test gathering a fact"
     debug: var= ...

Правильный синтаксис:

- name: "test gathering a fact"
  debug: var= ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...