Ansible-无法打印空vaiable

Ansible-无法打印空vaiable,ansible,Ansible,将变量复制到文件时遇到问题 我运行多个命令,并设置_事实。然后我尝试将信息复制到csv文件中 例如: --- - name: Get Tunnel1 ip ios_command: commands: - show run int tunnel 1 | in ip add register: results_tunnel1 - set_fact: tunnel1: "{{ results_tunnel1.stdout[0].split(' ')

将变量复制到文件时遇到问题

我运行多个命令,并设置_事实。然后我尝试将信息复制到csv文件中

例如:

---
- name: Get Tunnel1 ip
  ios_command:
    commands: 
      - show run int tunnel 1 | in ip add
  register: results_tunnel1

- set_fact:
    tunnel1: "{{ results_tunnel1.stdout[0].split(' ') }}"

- name: Get Tunnel2 ip
  ios_command:
    commands: 
      - show run int tunnel 2 | in ip add
  register: results_tunnel2

- set_fact:
    tunnel2: "{{ results_tunnel2.stdout[0].split(' ') }}"

- name: Get Tunnel3 ip
  ios_command:
    commands: 
      - show run int tunnel 3 | in ip add
  register: results_tunnel3

- set_fact:
    tunnel3: "{{ results_tunnel3.stdout[0].split(' ') }}"

- name: save output to file per host
  copy: content="{{ inventory_hostname }};{{ tunnel1[2] }};{{ tunnel2[2] }};{{ tunnel3[2] }}" dest="//home/output/ip_info.csv"
在测试机上,我使用的其中一个变量没有输出要保存的IP地址,因此变量出现“”

当它试图输出信息时,我得到一个错误:

 "msg": "The task includes an option with an undefined variable. The error was: list object has no element
我猜我需要告诉它什么也不打印,或者说如果为空,另存为“空”

只是不确定我将如何实现这一点。

您可以使用Jinja的过滤器来处理未定义的变量

根据剧本:

-主机:所有
收集事实:不
任务:
-调试:
msg:{{inventory_hostname};{tunnel1[2]| default('''')};{{tunnel2[2]| default(''')};{{{tunnel3[2]| default(''')}
这将产生以下结果:

PLAY [all] ********************************************************************************************************

TASK [debug] ******************************************************************************************************
ok: [localhost] => {
    "msg": "localhost;;;"
}

PLAY RECAP ********************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
如果我们设置一些值:

-主机:所有
收集事实:不
任务:
-调试:
msg:{{inventory_hostname};{tunnel1[2]| default('''')};{{tunnel2[2]| default(''')};{{{tunnel3[2]| default(''')}
变量:
隧道1:
-福
-酒吧
-巴兹
隧道二:
-棕色的
-狐狸
-跳跃
隧道3:
-结束
-懒惰的
-狗
它产生了一个概述:


PLAY [all] ********************************************************************************************************

TASK [debug] ******************************************************************************************************
ok: [localhost] => {
    "msg": "localhost;baz;jumps;dog"
}

PLAY RECAP ********************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
您可以使用Jinja的过滤器来处理未定义的变量

根据剧本:

-主机:所有
收集事实:不
任务:
-调试:
msg:{{inventory_hostname};{tunnel1[2]| default('''')};{{tunnel2[2]| default(''')};{{{tunnel3[2]| default(''')}
这将产生以下结果:

PLAY [all] ********************************************************************************************************

TASK [debug] ******************************************************************************************************
ok: [localhost] => {
    "msg": "localhost;;;"
}

PLAY RECAP ********************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
如果我们设置一些值:

-主机:所有
收集事实:不
任务:
-调试:
msg:{{inventory_hostname};{tunnel1[2]| default('''')};{{tunnel2[2]| default(''')};{{{tunnel3[2]| default(''')}
变量:
隧道1:
-福
-酒吧
-巴兹
隧道二:
-棕色的
-狐狸
-跳跃
隧道3:
-结束
-懒惰的
-狗
它产生了一个概述:


PLAY [all] ********************************************************************************************************

TASK [debug] ******************************************************************************************************
ok: [localhost] => {
    "msg": "localhost;baz;jumps;dog"
}

PLAY RECAP ********************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0