繁体   English   中英

如何使用 Ansible 使用 firewalld 模块设置默认服务端口/协议?

[英]How to set default service port/protocol with firewalld module using Ansible?

我正在寻找一种在我的 Ansible 任务中设置默认端口/协议的方法。

# Add port in firewalld
- name: Open port in firewalld
  firewalld:
    port: "{{ foo_setted_port_var | default (8080/tcp) }}"
    state: enabled
    permanent: yes
    immediate: yes
    zone: "{{ setted_firewalldzone_var | default (public) }}"
  • 当我打开线路port: [...] default (8080/tcp) [...]
    output 是: The error was: 'tcp' is undefined

  • 当我把线路port: [...] default (8080) [...]
    output 是: improper port format (missing protocol?)

当我在我的foo_setted_port_var 8080/tcp中精确时,它可以工作。 但是,我真的想在我的 var 文件之前在我的任务代码中默认设置我的端口。

如何解决?

根据提供默认值firewalld模块 – 使用 firewalld 管理任意端口/服务,语法应该是

# Add port in firewalld
- name: Open port in firewalld
  firewalld:
    port: "{{ foo_setted_port_var | default('8080/tcp') }}"
    state: enabled
    permanent: yes
    immediate: yes
    zone: "{{ setted_firewalldzone_var | default('public') }}"

如果没有引号 ( ' ),术语tcppublic将被解释为变量名并尝试查找内容。

您可以从错误消息中看到这一点

'tcp' is undefined

并通过以下测试观察行为。

---
- hosts: localhost
  become: false
  gather_facts: false

  vars:

    PUBLIC: "public"

  tasks:

  - name: Show values
    debug:
      msg:
        - "{{ TXT | default(PUBLIC) }}"
        - "{{ TXT | default('PUBLIC') }}"

导致 output 的

TASK [Show values] ******
ok: [localhost] =>
  msg:
  - public
  - PUBLIC

另一个错误信息

improper port format

Parameter: port相关,它需要是string而不是int

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM