2016-11-29 2 views
1

У меня есть строка с IP-адр: 192.168.10.2анзибль: Extract первые три octects из IP-адреса

Я хочу, чтобы извлечь первые три байта IP в анзибль, и я попытался использовать это регулярное выражение.

{{comp_ip | regex_replace("^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"), "//1"}} 

Это не дает никакого результата. Может кто-то исправить меня, где я ошибся?

+0

You Want '192.168.10' быть возвращены? – helloV

+0

есть, тот правильный. – spamulap12

ответ

6

Если уже есть точка, разделенные IP-адрес, то является простым способом:

{{ comp_ip.split('.')[0:3] | join('.') }} 
+0

это классный трюк и ясный. Итак, в общем, мы можем использовать любые методы python через трубу в недоступном? – spamulap12

+0

Нет, трубы для фильтров, см. Мой [другой] (http://stackoverflow.com/a/39794185/2795592) ответ для деталей. Но вы можете использовать методы python строк и dicts с точечной нотацией. –

2

Вы делаете это правильно, вам просто нужно использовать скобки в Regex для создания группы. Лучше сопоставить целое ip и закончить ваше регулярное выражение $, а также сменить //1 на \\1 в вашем коде.

Изменить регулярное выражение из:

^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3} 

Для этого регулярного выражения:

^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\.[0-9]{1,3}$ 

Это полный код:

{{comp_ip | regex_replace('^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\.[0-9]{1,3}$', '\\1')}} 
+0

спасибо, но у него есть проблема с синтаксисом I bileve. Оскорбительная строка выглядит так: set_fact: net: {{comp_ip | regex_replace ('^ ([0-9] {1,3}. [0-9] {1,3}. [0-9] {1,3})'), '\\ 1'}} ^ здесь – spamulap12

+0

@ spamulap12 Попробуйте обновленный код. – Ibrahim

+0

Нет синтаксической ошибки с этим, но o/p ничего не имеет в нем {"net": "(u '', '\\\\ 1')"} – spamulap12

0

Если вы хотите рассчитать ваш сетевой адрес можно использовать анзибль IPADDR фильтра который предусматривает именно эти функциональные возможности: http://docs.ansible.com/ansible/latest/playbooks_filters_ipaddr.html

--- 
- hosts: localhost 
    vars: 
    my_ip: "{{ ansible_default_ipv4.network }}/{{ ansible_default_ipv4.netmask }}" 
    tasks: 
    - debug: msg="network {{ my_ip | ipaddr('network') }}" 
    - debug: msg="netmask {{ my_ip | ipaddr('netmask') }}" 
Смежные вопросы