
ゾーンに複数のサービスを設定しようとしたときにこの問題が検出されました。
最初の項目のみが設定され、他の項目は常に次のエラーが発生します。
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)"}
サービスを切り替えてSambaを最初のサービスに設定すると、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
空きスペースが問題です