regex - 从 Ansible 中的变量中提取子字符串

标签 regex ansible

编辑:
我写了这个剧本,但它没有显示提取的变量:

---
- hosts: fppc
  gather_facts: false
  remote_user: xyz  
  connection: local
  tasks:
  - name: N1
    ios_command:
       commands:
         - sh run | i bann          
    register: sr

  - debug: msg="{{ sr.stdout}}"

  - set_fact: 
      rid: "{{ sr.stdout | regex_search('.*ID: (..)')  }}"

  - debug: msg="{{ rid }}"

执行:
ansible@Ansible:~$ ansible-playbook pb1.yml

PLAY [fppc] *************************************************************************

TASK [N1] ***************************************************************************
ok: [192.168.250.161]

TASK [debug] ************************************************************************
ok: [192.168.250.161] => {
    "msg": [
        "banner login ^CID: A4"
    ]
}

TASK [set_fact] *********************************************************************
fatal: [192.168.250.161]: FAILED! => {"failed": true, "msg": "Unexpected templating type error occurred on ({{ sr.stdout | regex_search('.*ID: (..)')  }}): expected string or buffer"}
        to retry, use: --limit @/home/ansible/pb1.retry

PLAY RECAP **************************************************************************
192.168.250.161            : ok=2    changed=0    unreachable=0    failed=1   

ansible@Ansible:~$

最佳答案

我找到了解决方案:

---
- hosts: fppc
  gather_facts: false
  remote_user: xyz
  connection: local

  tasks:
  - name: N1
    ios_command:
       commands:
         - sh run         
    register: sr

  - set_fact:
      temp: "{{ sr.stdout_lines | join }}"

  - set_fact:
      rid: "{{  temp | regex_replace('.*ID: (..).*', '\\1')  }}"

  - debug: msg="{{ rid }}"

执行:
ansible@Ansible:~$ ansible-playbook pb1.yml

PLAY [fppc] ********************************************************************

TASK [N1] **********************************************************************
ok: [192.168.250.161]

TASK [set_fact] ****************************************************************
ok: [192.168.250.161]

TASK [set_fact] ****************************************************************
ok: [192.168.250.161]

TASK [debug] *******************************************************************
ok: [192.168.250.161] => {
    "msg": "A4"
}

PLAY RECAP *********************************************************************
192.168.250.161            : ok=4    changed=0    unreachable=0    failed=0   

关于regex - 从 Ansible 中的变量中提取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46503238/

相关文章:

windows - 使用安装在 WSL 上的 Ansible 设置 Windows 10 工作站

ansible - 为什么 ec2_ami 提示未知参数 WaiterConfig?

Javascript .match 加上 jQuery keyup()、双重匹配和奇怪的行为

r - 如何删除缺少括号的引文部分

regex - 在 Ansible 中提取 {{ inventory_hostname }} 的一部分以在 playbook 中使用

linux - 无法通过 ssh 连接到主机 : Host key verification failed.\r\n

regex - 使用 vbscript 表示两个数字的正则表达式 : not valid :"$123456789012" and valid: "12345678912"

java - 如何指定正则表达式中字符类中的某个字符至少出现一次?

.net - 我可以创建一个反向引用匹配相反情况的正则表达式吗

Ansible 版本强制