Ansible: Firewalld에서 여러 서비스를 설정하는 방법(다른 플레이북에서 반복됨)

Ansible: Firewalld에서 여러 서비스를 설정하는 방법(다른 플레이북에서 반복됨)

영역에 여러 서비스를 설정하려고 할 때 이 문제를 발견했습니다.
첫 번째 항목만 설정되고 다른 항목은 항상 다음과 같은 오류가 발생합니다.

TASK [Set services] *******************************************************************************************************************************************************************************************************************************
changed: [localhost] => (item=ssh)
failed: [localhost] (item= samba) => {"ansible_loop_var": "item", "changed": false, "item": " samba", "msg": "ERROR: Exception caught: org.fedoraproject.FirewallD1.Exception: INVALID_SERVICE: Zone 'work': ' samba' not among existing services Permanent operation, Services are defined by port/tcp relationship and named as they are in /etc/services (on most systems)"}


서비스를 전환하고 삼바를 첫 번째 서비스로 설정하면 ssh에서 동일한 오류가 발생합니다.

주요 스크립트:

- name: Configure Firewalld
  hosts: localhost
  gather_facts: no

  vars:
    firewall:
    - zone: work
      service: ssh, samba
    - zone: public
      service: samba

  tasks:
  - name: Set services
    include_tasks: ./service.yml
    loop: "{{firewall | selectattr('service', 'defined') | list}}"
    loop_control:
      loop_var: service

서비스 매뉴얼:


- set_fact:
    zone: "{{service.zone}}"


- name: "Servcie name"
  debug:
    var: item 
  with_items: "{{service.service | split(',')}}"


- name: Set services 
  ansible.posix.firewalld:
    zone: "{{zone}}"
    service: "{{item}}"
    state: enabled
    permanent: yes
  with_items: "{{service.service | split(',')}}"
  register: result

이 문제를 해결하는 방법에 대한 제안이 있으십니까?

답변1

문제가 어디에 있는지 알아낼 수 있었습니다.
서비스 플레이북에서 다음을 교체해야 합니다.
오래된:

- name: Set services 
  ansible.posix.firewalld:
    zone: "{{zone}}"
    service: "{{item}}"
    state: enabled
    permanent: yes
  with_items: "{{service.service | split(',')}}"
  register: result

새로운:

- name: Set services 
  ansible.posix.firewalld:
    zone: "{{zone}}"
    service: "{{item}}"
    state: enabled
    permanent: yes
  with_items: "{{service.service | split(',') | map('trim')}}"
  register: result

빈 공간이 문제다

관련 정보