尚未配置端口时,只有 运行 Ansible seport。最好不要通过 shell 或使用 semanage 的命令模块
Only run Ansible seport when ports are not yet configured. Preferably not through shell or command module using semanage
我有一个角色设置,可以在 LAMP/Rhel 8 上使用 Ansible 2.9 安装 iTOP 应用程序
我正在尝试找到一种方法,使 seport
模块仅在 运行 所需的端口尚未配置时才可用。 (使其幂等)
我可能可以将 command
或 shell
模块用于 运行 semanage
并注册一个我将在 when
条件下使用的事实。
我想知道是否有适当的 Ansible 方法来执行此操作,而无需通过 command
或 shell
模块使用 semanage
。
我查看了下面的 link,但这不是我要找的。
我在 Google 上找不到任何示例或替代方案。
如果有人有任何提示或提示,我将不胜感激。
不幸的是,在 ansible 中没有“正确”的方法来做到这一点。如果你要检查 seport 模块的代码(截至今天),你可以在这里看到:
if state == 'present':
result['changed'] = semanage_port_add(module, ports, proto, setype, do_reload)
elif state == 'absent':
result['changed'] = semanage_port_del(module, ports, proto, setype, do_reload)
else:
module.fail_json(msg='Invalid value of argument "state": {0}'.format(state))
所以这个模块肯定不是幂等的,因为它每次都会return changed
。您可以尝试创建一个问题,有人可能会修复它
好像semanage
cli 也不是幂等的,semanage port --add
会抛出ValueError: Port PROTO/PORT already defined
,而且会耗费很多时间。您有多种选择:
- 用 shell 重新实现部分 seport 模块,但定义更改的标准:
- name: semanage add port
shell: LANG=C semanage port --add -t zookeeper_election_port_t -p tcp 38888
register: result
failed_when: result.rc != 0 and "already defined" not in result.stderr
changed_when:
- result.rc == 0
- 解析
semanage port -l | tr -s ' ' | grep 'port_type'
的输出并匹配你的条件,然后调用seport模块
起初我想指出第一个变体由于 semanage 的实现有点慢,但由于连接开销,在你的情况下可能可以忽略不计
我有一个角色设置,可以在 LAMP/Rhel 8 上使用 Ansible 2.9 安装 iTOP 应用程序
我正在尝试找到一种方法,使 seport
模块仅在 运行 所需的端口尚未配置时才可用。 (使其幂等)
我可能可以将 command
或 shell
模块用于 运行 semanage
并注册一个我将在 when
条件下使用的事实。
我想知道是否有适当的 Ansible 方法来执行此操作,而无需通过 command
或 shell
模块使用 semanage
。
我查看了下面的 link,但这不是我要找的。
我在 Google 上找不到任何示例或替代方案。
如果有人有任何提示或提示,我将不胜感激。
不幸的是,在 ansible 中没有“正确”的方法来做到这一点。如果你要检查 seport 模块的代码(截至今天),你可以在这里看到:
if state == 'present':
result['changed'] = semanage_port_add(module, ports, proto, setype, do_reload)
elif state == 'absent':
result['changed'] = semanage_port_del(module, ports, proto, setype, do_reload)
else:
module.fail_json(msg='Invalid value of argument "state": {0}'.format(state))
所以这个模块肯定不是幂等的,因为它每次都会return changed
。您可以尝试创建一个问题,有人可能会修复它
好像semanage
cli 也不是幂等的,semanage port --add
会抛出ValueError: Port PROTO/PORT already defined
,而且会耗费很多时间。您有多种选择:
- 用 shell 重新实现部分 seport 模块,但定义更改的标准:
- name: semanage add port
shell: LANG=C semanage port --add -t zookeeper_election_port_t -p tcp 38888
register: result
failed_when: result.rc != 0 and "already defined" not in result.stderr
changed_when:
- result.rc == 0
- 解析
semanage port -l | tr -s ' ' | grep 'port_type'
的输出并匹配你的条件,然后调用seport模块
起初我想指出第一个变体由于 semanage 的实现有点慢,但由于连接开销,在你的情况下可能可以忽略不计