在多个目录下恢复Selinux文件上下文

cru*_*der 3 yaml ansible

我目前正在使用sefcontext模块来管理服务器SeLinux文件上下文

以下是用于管理某些目录的任务示例。

name: Set selinux policy for directories
sefcontext:
 target: '{{ item.target }}(/.*)?'
 setype: "{{ item.setype }}"
 reload: True
 register: "{{item.register}}"
 state: present
with_items:
- { target: '/var/lib/dir1', setype: 'public_content_rw_t', register: 'dir1' }
- { target: '/var/lib/dir2', setype: 'public_content_rw_t', register: 'dir2' }
Run Code Online (Sandbox Code Playgroud)

我现在遇到的问题是,执行此类操作无法恢复文件标签,也无法实现幂等

name: Run restore context to reload selinux
shell: restorecon -Rv /var/lib/{{ item.shell }}
when: "{{ item.when }}"
with_items:
- { shell: 'dir1', when: 'dir1|changed' }
- { shell: 'dir2', when: 'dir2|changed' }
Run Code Online (Sandbox Code Playgroud)

知道如何在保持幂等的同时还原多个目录上的文件标签吗?

cru*_*der 5

好的,最后提出了一个可行的逻辑。希望这对遇到类似问题的人有所帮助。

- name: Set selinux policy for directories
  sefcontext:
   target: '{{ item.target }}(/.*)?'
   setype: "{{ item.setype }}"
   reload: True
   state: present
  register: filecontext
  with_items:
  - { target: '/var/lib/dir1', setype: 'public_content_rw_t' }
  - { target: '/var/lib/dir2', setype: 'public_content_rw_t' }

- name: Run restore context to reload selinux
  shell: restorecon -R -v /var/lib/{{ item.target }}
  when: filecontext.results[item.index]|changed
  with_items:
  - { index: 0, target: 'dir1' }
  - { index: 1, target: 'dir2' }
Run Code Online (Sandbox Code Playgroud)