如何将"parse_cli_textfsm"更改为 Ansible 中角色文件夹中的引用模板文件夹?



目标

  • 我想创建一个可移植的角色文件夹,该文件夹利用角色目录中的textfsm模板
  • 目录结构
$ tree
.
├── ansible.cfg
├── hosts.ini
├── out_pb1
├── pb1.yml
├── roles
│   ├── command_facts
│   │   ├── tasks
│   │   │   └── main.yml
│   │   ├── templates
│   │   │   └── textfsm   // I want this
│   │   └── vars
└── templates
    └── textfsm   // created for testing

问题

  • parse_cli_textfsm引用的是templates/textfsm而不是roles/command_facts/templates/textfsm
  • 目标是可移植性,因此不考虑指定完整路径

尝试修复(失败(

  • 执行pb1.yml
  • 如果我删除了pb1.yml目录中的templates/textfsm,错误如下所示
$ ansible-playbook pb1.yml -u username -k
(omitted)
TASK [command_facts : set_fact]
fatal: [target]: FAILED! => {"msg": "unable to locate parse_cli_textfsm template: /templates/textfsm"}
  • 我尝试使用系统变量role_path,即{{ raw_output.stdout | parse_cli_textfsm('{{ role_path }}/templates/textfsm') }},但它不起作用。CCD_ 9变为正常字符串
$ ansible-playbook pb1.yml -u username -k
(omitted)
TASK [ixrs_facts : set_fact] 
fatal: [target]: FAILED! => {"msg": "unable to locate parse_cli_textfsm template: {{ role_path }}/templates/textfsm"}

文件

  • roles/command_facts/task/main.yml
---
- name: show protocols all
raw: "show protocols all"
register: raw_output
- set_fact:
output: {{ raw_output.stdout | parse_cli_textfsm("/templates/textfsm") }}
- debug: var=output[::]
  • pb1.yml
---
- name: testing
hosts: target
gather_facts: false
roles:
- { role: command_facts }

参考

  • https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#network-cli筛选器
  • {{ output.stdout[0] | parse_cli_textfsm('path/to/fsm') }}

使用此选项:parse_cli_textfsm('{{ role_path +“/templates/textfsm“) }}

相关内容

  • 没有找到相关文章

最新更新