下面的代码用于附加到配置文件。我想要做的是引入一个循环loop: "{{ INTERFACE }}",但是这不起作用(因为临时文件将被覆盖),template没有附加选项。
对如何修复有什么建议吗?
- 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}}.confINTERFACES看起来是这样的:
INTERFACES:
- INTERFACE: Gi0/3/0
EQUIPMENT_DESCRIPTION: ETHXXXXSR01
- INTERFACE: Gi0/3/1
EQUIPMENT_DESCRIPTION: ETHXXXXSR01_STANDBY发布于 2020-09-03 16:10:49
如果模板是多行的
shell> cat nokia_t1_port.j2
Equipment {{ item.EQUIPMENT_DESCRIPTION }}
interface {{ item.INTERFACE }}使用块文件。例如
- blockinfile:
insertafter: EOF
path: ce_hostname.conf
block: "{{ lookup('template', 'nokia_t1_port.j2') }}"
marker: ""
loop: "{{ INTERFACES }}"给出
shell> cat ce_hostname.conf
Equipment ETHXXXXSR01_STANDBY
interface Gi0/3/1
Equipment ETHXXXXSR01
interface Gi0/3/0由于“标记”,在附加的块中将有一行空行。
如果模板为单行
shell> cat nokia_t1_port.j2
{{ item.EQUIPMENT_DESCRIPTION }} interface {{ item.INTERFACE }}使用线状。例如
- lineinfile:
insertafter: EOF
path: ce_hostname.conf
line: "{{ lookup('template', 'nokia_t1_port.j2') }}"
loop: "{{ INTERFACES }}"给出
shell> cat ce_hostname.conf
ETHXXXXSR01 interface Gi0/3/0
ETHXXXXSR01_STANDBY interface Gi0/3/1发布于 2020-09-03 15:17:05
从描述中看,您似乎希望使用NOKIA_T1_PORT.js文件的现有内容,但是在目的地添加一些使用INTERFACES的内容。
但是,您不能用一个template任务来完成这个任务。你可以这样做:
- 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 %}https://stackoverflow.com/questions/63725020
复制相似问题