Ansible 如何使用';列表';此任务中的变量
我是Ansible的新手,目前正在编写一个剧本,使用以下模块部署一些Palo Alto配置: 我做这件事已经一个星期了,现在我想弄清楚为什么这个“清单”不起作用。总之,此代码连接到防火墙,创建新的地址对象,如果存在表示http或https的“服务”变量,则会将此对象添加到现有的防火墙地址组 问题在于添加了防火墙组。完成此任务的任务似乎覆盖了组中的现有对象,而不是附加到组中 为了尝试和解决这个问题,我有一项任务是“发现”现有对象(结果在一个字典中,然后我将其转换为一个列表变量。这个变量+新的服务器变量然后在“static_value”作业中用于更新地址组。这似乎不起作用,看起来好像它超过了字符限制,就像它是一个字符串一样 我还尝试自行重新添加现有对象,但这也失败,原因如下:Ansible 如何使用';列表';此任务中的变量,ansible,Ansible,我是Ansible的新手,目前正在编写一个剧本,使用以下模块部署一些Palo Alto配置: 我做这件事已经一个星期了,现在我想弄清楚为什么这个“清单”不起作用。总之,此代码连接到防火墙,创建新的地址对象,如果存在表示http或https的“服务”变量,则会将此对象添加到现有的防火墙地址组 问题在于添加了防火墙组。完成此任务的任务似乎覆盖了组中的现有对象,而不是附加到组中 为了尝试和解决这个问题,我有一项任务是“发现”现有对象(结果在一个字典中,然后我将其转换为一个列表变量。这个变量+新的服务
"msg": "Failed apply: DevUKST-Web-Servers -> static '['UKST1MXWEB002D-NAT-EFW-01', 'UKST1MXWEB003D-NAT-EFW-01']' is not a valid reference\n DevUKST-Web-Servers -> static is invalid"
}
我能让它以某种方式工作的一次是,在“将EFW对象添加到地址组if 80/443”任务中使用“with_items”循环来填充静态_值。它循环查找对象任务中的“result”并在末尾添加新的地址对象“efwone”。问题是每次都会用每个结果覆盖它它循环
这是我正在运行的剧本
---
- hosts: localhost
connection: local
gather_facts: false
roles:
- role: PaloAltoNetworks.paloaltonetworks
vars_prompt:
- name: "username"
prompt: "Enter Username"
- name: "password"
prompt: "Enter Password"
vars:
cli:
ip_address: x.x.x.x
username: "{{ username }}"
password: "{{ password }}"
port: 443
objects: []
efwone: "{{ hostname }}-NAT-EFW-01"
tasks:
- name: include variables (free-form)
tags: [dev, prod]
include_vars: vars.yml
no_log: 'false'
# Configure Address Objects
- name: Create object "NAT-EFW-01"
tags: [dev, prod]
panos_address_object:
provider: "{{ cli }}"
name: "{{ hostname }}-NAT-EFW-01"
value: "{{ efw01_serviceip }}"
description: "{{ service_name }} - Public LB Backend pool IP"
commit: false
- name: Create object "Server Object"
tags: [dev, prod]
panos_address_object:
provider: "{{ cli }}"
name: "{{ hostname }}"
value: "{{ serverip }}"
description: "{{ service_name }} - {{ service_type }}"
commit: false
# Find existing objects in webserver address group
- name: Find objects in address group
tags: dev
when: service == "http" or service == "https"
panos_object_facts:
provider: "{{ cli }}"
name: "{{ dgshort }}-Web-Servers"
object_type: "address-group"
register: output
- name: Display Output
tags: [dev, prod]
debug: msg="{{ output.results.static_value }}"
- name: Display efwone
tags: [dev, prod]
debug: var=efwone
- name: Populate list with address objects
tags: [dev, prod]
set_fact:
objects: "{{ output.results.static_value + [ efwone ] }}"
- name: Display new object list
tags: [dev, prod]
debug: var=objects
# Add EFW objects to address group if 80/443
- name: Update Web-Servers group dev
tags: dev
when: service == "http" or service == "https"
panos_address_group:
provider: "{{ cli }}"
name: "{{ dgshort }}-Web-Servers"
static_value: [ "{{ objects }}" ]
commit: false
这些是结果
ok: [localhost] => {
"changed": false,
"invocation": {
"module_args": {
"api_key": null,
"device_group": "shared",
"ip_address": null,
"name": "DevUKST-Web-Servers",
"name_regex": null,
"object_type": "address-group",
"password": null,
"port": 443,
"provider": {
"api_key": null,
"ip_address": "x.x.x.x",
"password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
"port": 443,
"serial_number": null,
"username": "xxxx"
},
"username": "admin",
"vsys": "vsys1"
}
},
"objects": [
{
"description": null,
"dynamic_value": null,
"name": "DevUKST-Web-Servers",
"static_value": [
"UKST1MXWEB002D-NAT-EFW-01",
"UKST1MXWEB003D-NAT-EFW-01"
],
"tag": null
}
],
"results": {
"description": null,
"dynamic_value": null,
"name": "DevUKST-Web-Servers",
"static_value": [
"UKST1MXWEB002D-NAT-EFW-01",
"UKST1MXWEB003D-NAT-EFW-01"
],
"tag": null
}
}
TASK [Display Output] **********************************************************************************************************************************************************
task path: /etc/ansible/playbooks/NETOPS/AZURE/PALO/deployserviceparams.yml:91
ok: [localhost] => {
"msg": [
"UKST1MXWEB002D-NAT-EFW-01",
"UKST1MXWEB003D-NAT-EFW-01"
]
}
TASK [Display efwone] **********************************************************************************************************************************************************
task path: /etc/ansible/playbooks/NETOPS/AZURE/PALO/deployserviceparams.yml:95
ok: [localhost] => {
"efwone": "Test-NAT-EFW-01"
}
TASK [Populate list with address objects] **************************************************************************************************************************************
task path: /etc/ansible/playbooks/NETOPS/AZURE/PALO/deployserviceparams.yml:100
ok: [localhost] => {
"ansible_facts": {
"objects": [
"UKST1MXWEB002D-NAT-EFW-01",
"UKST1MXWEB003D-NAT-EFW-01",
"Test-NAT-EFW-01"
]
},
"changed": false
}
TASK [Display new object list] *************************************************************************************************************************************************
task path: /etc/ansible/playbooks/NETOPS/AZURE/PALO/deployserviceparams.yml:105
ok: [localhost] => {
"objects": [
"UKST1MXWEB002D-NAT-EFW-01",
"UKST1MXWEB003D-NAT-EFW-01",
"Test-NAT-EFW-01"
]
}
fatal: [localhost]: FAILED! => {
"changed": false,
"invocation": {
"module_args": {
"api_key": null,
"commit": false,
"description": null,
"device_group": "shared",
"dynamic_value": null,
"ip_address": null,
"name": "DevUKST-Web-Servers",
"password": null,
"port": 443,
"provider": {
"api_key": null,
"ip_address": "x.x.x.x",
"password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
"port": 443,
"serial_number": null,
"username": "xxxxx"
},
"state": "present",
"static_value": [
[
"UKST1MXWEB002D-NAT-EFW-01",
"UKST1MXWEB003D-NAT-EFW-01",
"Test-NAT-EFW-01"
]
],
"tag": null,
"username": "admin",
"vsys": "vsys1"
}
},
"msg": "Failed apply: DevUKST-Web-Servers -> static Node can be at most 63 characters, but current length: 77 value: ['UKST1MXWEB002D-NAT-EFW-01', 'UKST1MXWEB003D-NAT-EFW-01', 'Test-NAT-EFW-01']...\n DevUKST-Web-Servers -> static is invalid"
<强>免责声明< /强>这是一个完全盲目的调试,因为我不能从原始帖子中复制任何东西。总是考虑是否有可能。
文件中明确说明它正在等待“地址对象”列表:
static_value:
description:
- List of address objects to be included in the group.
type: list
注意:我在你文章的其余部分盲目地假设字符串是一个有效的地址对象
在您的跑步输出中,我们可以看到您发送的不是地址对象的列表,而是地址对象的列表
"static_value": [
[
"UKST1MXWEB002D-NAT-EFW-01",
"UKST1MXWEB003D-NAT-EFW-01",
"Test-NAT-EFW-01"
]
]
导致这种情况的剧本中有问题的一行出现在您的最后一项任务中:
static_value: [ "{{ objects }}" ]
你的最后一个任务应该是(注意括号)
<强>免责声明< /强>这是一个完全盲目的调试,因为我不能从原始帖子中复制任何东西。总是考虑是否有可能。
文件中明确说明它正在等待“地址对象”列表:
static_value:
description:
- List of address objects to be included in the group.
type: list
注意:我在你文章的其余部分盲目地假设字符串是一个有效的地址对象
在您的跑步输出中,我们可以看到您发送的不是地址对象的列表,而是地址对象的列表
"static_value": [
[
"UKST1MXWEB002D-NAT-EFW-01",
"UKST1MXWEB003D-NAT-EFW-01",
"Test-NAT-EFW-01"
]
]
导致这种情况的剧本中有问题的一行出现在您的最后一项任务中:
static_value: [ "{{ objects }}" ]
你的最后一个任务应该是(注意括号)
我真不敢相信这有多简单!非常感谢。我从来没有注意到这是一个列表中的一个列表,直到你指出它。现在看看结果,这两组[]。如果这解决了你的问题,你应该接受答案,让其他人知道有一个实际的解决方案。我不敢相信这有多简单!非常感谢。我甚至从未注意到这是一个列表中的一个列表,直到你指出它。现在看这两组[]的结果其实很明显。如果这解决了您的问题,您应该接受答案,让其他人知道有实际的解决方案。