Ansible -сопоставление строки с элементом в списке

Расширяя ответ @ridiculous _fish, со следующей функцией для bash она также работает для массивов, содержащих пробелы, например $PATH, если в ваших путях есть пробелы. Однако в настоящее время setenvуже определена как функция в стандартной библиотеке рыбы, поэтому я изменил имя здесь наshenv

function shenv { 
        var="$1"
        shift
        export "$var=$(printf "%s\n" "$@" | paste -s -d: -)"
}
. ~/.env

Теперь в файле .envможно указывать компоненты массива как отдельные аргументы команды setenv:

shenv PATH /my/path /my/path\ with\ spaces "/my/quoted path" $PATH

Для рыбы @ridiculous _подойдет простая реализация рыбы:

function shenv; set -gx $argv; end
source ~/.env
0
06.05.2021, 13:41
1 ответ

Q:" Поиск конкретного префикса производителя в каждом интерфейсе. "

A :Префикс производителя представляет собой первые три октета. Например

    vendor_mac_prefix:
      HP: '00:22:64'
      Intel: '00:23:B2'
      Qualcom: '00:A0:C6'
    mac_prefix: "{{ vendor_mac_prefix.values()|list }}"

Учитывая список MAC-адресов, например.

    mac_addresses:
      - 00:22:64:12:34:5A
      - 00:22:64:12:34:5B
      - 00:23:B2:12:34:5A
      - 00:23:B2:12:34:5B
      - 00:A0:C6:12:34:5A
      - 00:A0:C6:12:34:5B
      - FF:FF:FF:FF:FF:FA
      - FF:FF:FF:FF:FF:FB

задача

    - debug:
        msg: "{{ item }} is the correct NIC"
      loop: "{{ mac_addresses }}"
      when: item[0:8] in mac_prefix

дает

ok: [localhost] => (item=00:22:64:12:34:5A) => 
  msg: 00:22:64:12:34:5A is the correct NIC
ok: [localhost] => (item=00:22:64:12:34:5B) => 
  msg: 00:22:64:12:34:5B is the correct NIC
ok: [localhost] => (item=00:23:B2:12:34:5A) => 
  msg: 00:23:B2:12:34:5A is the correct NIC
ok: [localhost] => (item=00:23:B2:12:34:5B) => 
  msg: 00:23:B2:12:34:5B is the correct NIC
ok: [localhost] => (item=00:A0:C6:12:34:5A) => 
  msg: 00:A0:C6:12:34:5A is the correct NIC
ok: [localhost] => (item=00:A0:C6:12:34:5B) => 
  msg: 00:A0:C6:12:34:5B is the correct NIC
skipping: [localhost] => (item=FF:FF:FF:FF:FF:FA) 
skipping: [localhost] => (item=FF:FF:FF:FF:FF:FB)

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

    - debug:
        msg: "{{ item }} is the correct NIC"
      loop: "{{ mac_addresses }}"
      when: item is search(mac_prefix|join('|'))
2
28.07.2021, 11:34

Теги

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