首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >附加到文件中的不可用模板

附加到文件中的不可用模板
EN

Stack Overflow用户
提问于 2020-09-03 13:47:38
回答 2查看 1.8K关注 0票数 0

下面的代码用于附加到配置文件。我想要做的是引入一个循环loop: "{{ INTERFACE }}",但是这不起作用(因为临时文件将被覆盖),template没有附加选项。

对如何修复有什么建议吗?

代码语言:javascript
复制
- name: Build CE config Cisco
  template:
    src=/opt/netsec/ansible/orchestration/cisco_templates/NOKIA_T1_PORT.js
    dest=/opt/netsec/ansible/orchestration/config_outputs/tmp/{{CE_HOSTNAME}}
   loop: "{{ INTERFACE }}"

- name: Build PE config Cisco output
  shell: cat /opt/netsec/ansible/orchestration/config_outputs/tmp/{{CE_HOSTNAME}} >> /opt/netsec/ansible/orchestration/config_outputs/new/{{CE_HOSTNAME}}.conf

INTERFACES看起来是这样的:

代码语言:javascript
复制
INTERFACES:
  - INTERFACE: Gi0/3/0
    EQUIPMENT_DESCRIPTION: ETHXXXXSR01
  - INTERFACE: Gi0/3/1
    EQUIPMENT_DESCRIPTION: ETHXXXXSR01_STANDBY
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-03 16:10:49

如果模板是多行的

代码语言:javascript
复制
shell> cat nokia_t1_port.j2
Equipment {{ item.EQUIPMENT_DESCRIPTION }}
  interface {{ item.INTERFACE }}

使用块文件。例如

代码语言:javascript
复制
    - blockinfile:
        insertafter: EOF
        path: ce_hostname.conf
        block: "{{ lookup('template', 'nokia_t1_port.j2') }}"
        marker: ""
      loop: "{{ INTERFACES }}"

给出

代码语言:javascript
复制
shell> cat ce_hostname.conf

Equipment ETHXXXXSR01_STANDBY
  interface Gi0/3/1

Equipment ETHXXXXSR01
  interface Gi0/3/0

由于“标记”,在附加的块中将有一行空行。

如果模板为单行

代码语言:javascript
复制
shell> cat nokia_t1_port.j2
{{ item.EQUIPMENT_DESCRIPTION }} interface {{ item.INTERFACE }}

使用线状。例如

代码语言:javascript
复制
    - lineinfile:
        insertafter: EOF
        path: ce_hostname.conf
        line: "{{ lookup('template', 'nokia_t1_port.j2') }}"
      loop: "{{ INTERFACES }}"

给出

代码语言:javascript
复制
shell> cat ce_hostname.conf
ETHXXXXSR01 interface Gi0/3/0
ETHXXXXSR01_STANDBY interface Gi0/3/1
票数 2
EN

Stack Overflow用户

发布于 2020-09-03 15:17:05

从描述中看,您似乎希望使用NOKIA_T1_PORT.js文件的现有内容,但是在目的地添加一些使用INTERFACES的内容。

但是,您不能用一个template任务来完成这个任务。你可以这样做:

代码语言:javascript
复制
- name: Build CE config Cisco
  copy:
    src: /opt/netsec/ansible/orchestration/cisco_templates/NOKIA_T1_PORT.js
    dest: "/opt/netsec/ansible/orchestration/config_outputs/tmp/{{ CE_HOSTNAME }}"

- name: Update interface info
  blockinfile:
    path: "/opt/netsec/ansible/orchestration/config_outputs/tmp/{{ CE_HOSTNAME }}"
    block: |
      {% for item in INTERFACES %}
      INTERFACE: {{ item.INTERFACE }}
      EQUIPMENT_DESCRIPTION: {{ item.EQUIPMENT_DESCRIPTION }}
      {% endfor %}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63725020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档