\\(?\d{3}\\)?([\-\s\.])?\d{3}\1?\d{4}
Это подтвердит любой номер телефона с переменным форматом:
\\(?\d{3}\\)?
находит 3 цифры, заключенные в скобки или нет.
([\-\s\.])?
находит любой из этих разделителей символы или нет
\d{3}
находит 3 цифры
\1
использует первый согласованный разделитель - это гарантирует, что разделители будут одинаковыми. Таким образом, (000) 999-5555 не будет проверяться здесь, потому что есть разделитель пробела и тире, поэтому просто удалите «\ 1» и замените суб-шаблон разделителя (это также будет проверять нестандартные форматы). Тем не менее, вы должны указывать формат для ввода пользователем.
\d{4}
находит 4 цифры
Проверяет:
BTW это для JavaScript, следовательно, для двойного экранирования.
Это невозможно сделать в файле инвентаря. Я думаю, что set_fact
- ваш лучший выбор для программной сборки инвентаря. Это просто.
---
- hosts: all
tasks:
- add_host:
name: "host{{ item }}"
ansible_ssh_host: "127.0.0.1"
ansible_connection: "local"
group: "new"
id: "{{ item }}"
with_sequence: count=3
delegate_to: localhost
run_once: yes
- hosts: new
tasks:
- debug:
msg: "{{ id }}"
Если я правильно помню, возможности Jinja были удалены из любого места, которое они не должны были быть, то есть вне кавычек , фигурные скобки, специальные случаи, такие как when:
в файлах YML.
Когда я говорю программно, мы говорим о Ansible .. одном из последних кандидатов на земле для сценариев общего назначения. Динамические сценарии инвентаризации - это лучший подход к таким проблемам, если мы не говорим о трех серверах точно.
Самый простой сценарий инвентаризации для выполнения этого будет (в вашем hosts
каталоге или указанном -i
:
#!/usr/bin/env python
import json
inv = {}
for i in range(3):
inv[i] = {"hosts":["host%s" % i],"vars":{"id":i,"ansible_ssh_host":"127.0.0.1", "ansible_connection":"local"}}
print json.dumps(inv)
Опять же, я боюсь, что нет ничего «красивого», как то, что вы ищете. Если ваш прецедент становится более сложным, тогда set_fact
, set_host
и group_by
могут пригодиться, или сценарий инвентаризации, или group_vars
(в настоящее время я использую group_vars
файлы для номера сервера.)
Это лучше всего использовать с помощью функций Ansible Dynamic Inventory . См. Разработка динамических источников ресурсов .
Это означает запись сценария, который возвращает ваше имя хоста в формате JSON.