gpt4 book ai didi

ansible - 差异过滤器在 Ansible 中不起作用

转载 作者:行者123 更新时间:2023-12-01 13:18:49 25 4
gpt4 key购买 nike

我正在尝试查找可供我使用的端口。逻辑是这样的,我首先找到使用的端口并提供我可以使用的端口列表,差异过滤器应该过滤掉可用的端口,但不知何故它不起作用。

这是代码块:

- name: Gather occupied tcp v4 ports
shell: netstat -nlt| awk '{print $4}'|awk -F':' '{print $2}'
register: used_ports
- debug:
var: used_ports
- name: Difference
vars:
allowed_ports:
- 107
- 823
- 4750
set_fact:
bind_port: "{{ allowed_ports | difference(used_ports) | first }}"
- name: Show bind port
debug:
var: bind_port

输出:

ok: [] => { "used_ports": { "changed": true, "cmd": "netstat -nlt| awk '{print $4}'|awk -F':' '{print $2}'", "delta": "0:00:00.077467", "end": "2018-08-12 15:25:04.477710", "failed": false, "rc": 0, "start": "2018-08-12 15:25:04.400243", "stderr": "", "stderr_lines": [], "stdout": ", "stdout_lines": [ "", "", "107", "202", "106" ] } }

TASK [serverbuild : Difference] ********************************************************************* ok: []

TASK [serverbuild : Show bind port] ***************************************************************** ok: [] => { "bind_port": "107" }

理想情况下,它不应显示 107,因为它已被使用。我在这里做错了什么?

最佳答案

有两个问题:

  1. 您应该使用 used_ports.stdout_lines 作为 difference 过滤器的参数,

  2. 您应该定义 allowed_ports 以包含字符串,或将 used_ports.stdout_lines 映射到整数。

所以:

- name: Difference
vars:
allowed_ports:
- "107"
- "823"
- "4750"
set_fact:
bind_port: "{{ allowed_ports | difference(used_ports.stdout_lines) | first }}"

或:

- name: Difference
vars:
allowed_ports:
- 107
- 823
- 4750
set_fact:
bind_port: "{{ allowed_ports | difference(used_ports.stdout_lines|map('int')) | first }}"

关于ansible - 差异过滤器在 Ansible 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51812169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com