基本上,我的目标是从我以前存储在变量intf中的字符串中捕获cisco接口(即Gi1 / 0)。我不知道如何使用set_fact构造正则表达式,它将捕获来自intf变量的接口。
基于regex101.com,此正则表达式将匹配Gi1 / 0接口:
^\w+(-\w+)?\d+(([\/:]\d+)+(\.\d+)?)?$
我尝试使用以下代码捕获例如接口Gi1 / 0,并将其存储在变量storehere中,但仅遇到错误。
- name: Catch interface only ie. Gi1/0 and store in storehere variable
set_fact:
storehere: "{{ intf | regex_findall(^\w+(-\w+)?\d+(([\/:]\d+)+(\.\d+)?)?$) }}"
这是我的完整代码:
答案 0 :(得分:0)
您的完整代码似乎暗示输出中可能有多行。大概它们都遵循相同的模式,并且您需要从每个数据中获得的数据只是第一列-接口名称?如果是这样,这是否满足您的需求:
- set_fact:
interfaces: "{{ interfaces | default([]) }} + {{ [ item | regex_search('^([^ ])+') ] }}"
loop: "{{ rl00.stdout_lines | first }}"
- debug:
var: interfaces
(注意:在您的示例中,rl00.stdout_lines包含一个列表,其中输出行列表是其唯一元素。这看起来有些奇怪,我不确定是否存在其他元素。答案应该适用于您提供的示例数据,但是如果返回其他元素,则可能会遇到问题。)
此:
这应该为您提供一个包含接口名称的列表。然后,您可以按照自己的喜好对待它们,因此,例如,如果需要它们在一条空格分隔的行上,则可以:
- debug:
var: interfaces | join(' ')