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

时间:2017-07-16 19:38:15

标签: ansible yaml

我目前正在使用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' }

我现在遇到的问题是,做这样的事情并不是为了恢复文件标签以及幂等性

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' }

知道如何在保留幂等性的同时恢复多个目录上的文件标签吗?

2 个答案:

答案 0 :(得分: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' }

答案 1 :(得分:0)

解决此问题的最简单方法可能是使用处理程序:

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

然后在您的handlers / main.yaml中执行以下任务:

name: Run restore context to reload selinux
shell: restorecon -Rv /var/lib/{{ item }}
with_items:
- 'dir1'
- 'dir2'

既使用处理程序,又使用早期解决方案中的filecontext,它们的缺点是它们不会真正等幂,因为如果先前已设置sefcontext,它们将不会被调用。