Ну, я нашел хороший способ сделать то, что хотел:
Я не мог понять, какой интерфейс использовался, если так. Вот почему я хотел проверить для всех интерфейсов, были ли они хорошими. И я пытался выяснить это путем сравнения файла, который я получу для каждого интерфейса, и существующего файла.
Но я знаю, какой 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 получает первый свободный интерфейс, даже если в номерах интерфейсов есть пробелы, которые могут случиться, когда кто-то отключает некоторые интерфейсы.
Сегодня Google полезен:
Похож это поможет
Этот код решает эту проблему:
SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
MutexAccessRule rule = new MutexAccessRule(sid, MutexRights.FullControl, AccessControlType.Allow);
VB:
Dim sid As System.Security.Principal.SecurityIdentifier = New System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.WorldSid, Nothing)
Dim rule As System.Security.AccessControl.MutexAccessRule = New System.Security.AccessControl.MutexAccessRule(sid, System.Security.AccessControl.MutexRights.FullControl, System.Security.AccessControl.AccessControlType.Allow)