Как правильно позаботиться о файле конфигурации сетевых интерфейсов с помощью Ansible?

Я думаю, что когда вы определяете String, вы определяете объект. Поэтому вам нужно использовать .equals(). Когда вы используете примитивные типы данных, вы используете ==, но с String (и любым объектом) вы должны использовать .equals().

2
задан malmiteria 17 January 2019 в 10:33
поделиться

2 ответа

Чтобы проверить, существует ли ваш файл conf, вы можете использовать stat ( https://docs.ansible.com/ansible/latest/modules/stat_module.html )

- stat:
path: "/path/to/conf/file"
register: conf_file

- name: DO it if conf file exists
  action: {...}
  when: "conf_file.stat.exists == True"
0
ответ дан Dazounet 17 January 2019 в 10:33
поделиться

Ну, я нашел хороший способ сделать то, что хотел:

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

Но я знаю, какой IP-адрес используется или будет использоваться. Ansible имеет факт для каждого интерфейса, в котором я могу найти, какой адрес соответствует. Поэтому мне не нужно сравнивать файлы, мне нужно только сравнивать адреса.

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

- name: find interface to use
  set_fact:
    interface: "
    {%- set ifacePrefix = vars.ansible_default_ipv4.alias -%}
    {%- set ifaceNum = { 'cnt': 1 } -%}
    {%- macro increment(dct, key, inc=1)-%}
        {%- if dct.update({key: dct[key] + inc}) -%}
        {%- endif -%}
    {%- endmacro -%}
    {%- for iface in ansible_interfaces|sort -%}
        {%- if ifacePrefix + '_' + ifaceNum.cnt|string in ansible_interfaces -%}
            {{ increment(ifaceNum, 'cnt') }}
        {%- endif -%}
    {%- endfor -%}
    {%- for iface in ansible_interfaces|sort -%}
        {%- if iface.startswith(ifacePrefix) and ansible_facts[iface]['ipv4']['address'] == ip_failover -%}
            {{ ifaceNum.update({'cnt': iface.split('_')[-1]}) }}
        {%- endif -%}
    {%- endfor -%}
    {{ifacePrefix}}:{{ifaceNum.cnt}}"
  tags: network

Для информации, первый цикл for получает первый свободный интерфейс, даже если в номерах интерфейсов есть пробелы, которые могут случиться, когда кто-то отключает некоторые интерфейсы.

0
ответ дан malmiteria 17 January 2019 в 10:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: