Ansible变量插值在括号内无法使用

问题描述 投票:0回答:1

我正在使用 Ansible 从 InfoBlox 抓取一个 VIP,但在尝试构建排除列表时遇到了一个问题。我需要排除前 3 个 IP,因为它们是保留的,但是 CIDR 范围是一个动态变量,所以我需要在飞行中建立这个排除列表。 下面是我目前的表示。

---
- name: Assign VIP to FQDN in Grid Manager
  hosts: all
  connection: local
  gather_facts: false

  vars:
    CIDR: 10.0.0.

  tasks:

  - set_fact:
      EXCLUDES: "{{ EXCLUDES | default([]) + [item] }}"
    with_sequence: start=1 end=3 format=''{{ CIDR }}%d''

  - set_fact:
      formated_excludes: "{{ EXCLUDES |join(', ') }}"

  - debug:
      msg: "{{ formated_excludes }}"

  - set_fact:
      VIP:  "{{ lookup('nios_next_ip', '10.0.0.0/25', exclude=[formated_excludes]) | first }}"

  - name: Print next IP address
    debug:
      msg: "The next available IP is {{ VIP }}"

这是播放的结果

PLAY [Assign VIP to FQDN in Grid Manager] *****************************************************************************************************************

TASK [set_fact] *******************************************************************************************************************************************
ok: [localhost] => (item='10.0.0.1')
ok: [localhost] => (item='10.0.0.2')
ok: [localhost] => (item='10.0.0.3')

TASK [set_fact] *******************************************************************************************************************************************
ok: [localhost]

TASK [debug] **********************************************************************************************************************************************
ok: [localhost] => {
    "msg": "'10.0.0.1', '10.0.0.2', '10.0.0.3'"
}

TASK [set_fact] *******************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "An unhandled exception occurred while running the lookup plugin 'nios_next_ip'. Error was a <class 'ansible.errors.AnsibleError'>, original message: Invalid value for exclude: \"'10.0.0.1', '10.0.0.2', '10.0.0.3'\": Invalid IPv4 address"}

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

格式化看起来很好,但是查询不接受它。 作为比较,使用下面的方法可以正常工作。

  - set_fact:
      VIP:  "{{ lookup('nios_next_ip', '10.0.0.0/25', exclude=['10.0.0.1', '10.0.0.2', '10.0.0.3']) | first }}"

下面是结果

PLAY [Assign VIP to FQDN in Grid Manager] *****************************************************************************************************************

TASK [set_fact] *******************************************************************************************************************************************
ok: [localhost]

TASK [Print next IP address] ******************************************************************************************************************************
ok: [localhost] => {
    "msg": "The next available IP is 10.0.0.4"
}

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

如果有任何关于为什么这个变量不工作的想法,我将非常感激!

variables ansible
1个回答
0
投票

参数 排除"List of IP's ..."但过滤器 join 从列表中生成一个字符串

- set_fact:
    formated_excludes: "{{ EXCLUDES |join(', ') }}"

使用列表 EXCLUDES 参数中的

- set_fact:
    VIP:  "{{ lookup('nios_next_ip', '10.0.0.0/25', exclude=EXCLUDES) | first }}"
© www.soinside.com 2019 - 2024. All rights reserved.