具有未定义变量的Ansible模板

时间:2017-06-15 06:58:29

标签: linux loops automation ansible

我有一个包含我在剧本中使用的变量的文件:

net_interfaces:
  ...
  - name: "eth0"
    ip: "192.168.1.100"
    mask: "255.255.255.0"
    gateway: "192.168.1.1"
  ...

我想用这些变量部署一些配置,例如 ifcfg-eth0

DEVICE={{ item.name }}
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR={{ item.ip }}
NETMASK={{ item.netmask }}
GATEWAY={{ item.gateway }}

但有时项目没有网关变量,在这种情况下我想删除字符串

GATEWAY={{ item.gateway }}

来自目标计算机上的此配置文件。如何在不为某些主机创建其他任务的情况下实现此目的?

2 个答案:

答案 0 :(得分:4)

添加条件:

{% if item.gateway is defined %}
GATEWAY={{ item.gateway }}
{% endif %}

答案 1 :(得分:0)

另一种(更好的方法)是使用“默认”过滤器,因为在这种情况下,我们可以检查是否定义了某些变量,如果没有定义,则将其设置为默认值。示例:

const ctx = document.createElement('canvas').getContext('2d');
ctx.canvas.width = ctx.canvas.height = 20;
ctx.fillStyle='red';
ctx.fillRect(0,0,20,20);
// get an ImageData of your whole canvas
const img = ctx.getImageData(0,0,ctx.canvas.width,ctx.canvas.height);
console.log(img.data instanceof Uint8ClampedArray, img.data);
// [r, g, b, a, r, g, b, a...
// [255, 0, 0, 255, 255, 0, 0, 255...