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