使用Ansible删除没有在/home目录下挂载点的用户(使用register和when)

41次阅读
没有评论

**LGAUSUX10 : ok=9 changed=1 unreachable=0 failed=1


用户想知道如何在第一个任务的结果为0时,设置一个条件来仅删除用户。

## 解决方案
> 请注意以下操作可能在不同的版本中有所不同。为避免数据丢失,请务必在操作前备份。

要在Ansible中实现这个目标,你需要做一些调整:

### 步骤1:使用`loop`时展开变量
在你的第一个任务中,你使用了`loop: "{{ del_users }}"`,这是正确的。但在第二个任务中,你需要使用`loop: "{{ del_users_reg.results }}"`,以展开第一个任务中`del_users_reg`变量的结果列表。

### 步骤2:修改`when`条件
在第二个任务中,你使用了`when: item.stdout_lines == 0` 条件来判断是否删除用户。然而,在第一个任务中,你的`shell`命令返回的是一个字符串,不是一个整数。你应该使用`when: item.stdout == "0"` 条件来进行比较。

以下是修改后的Ansible任务:

```yaml
- name: Verify if exist mount point on /home
  shell: "mount -l | grep bind | grep -ci {{ item }}"
  ignore_errors: yes
  check_mode: False
  loop: "{{ del_users }}"
  register: del_users_reg

- name: Delete user if doesn't exist mount point on /home
  user:
    name: "{{ item.item }}"
    state: absent
    remove: yes
  when: item.stdout == "0"
  loop: "{{ del_users_reg.results }}"

现在,第二个任务会循环遍历del_users_reg.results,对每个结果执行删除操作,如果stdout等于0。

注意事项

  • 请确保你的变量del_users是一个包含要删除的用户列表的列表。
  • 使用此解决方案之前,建议在测试环境中进行测试,以确保它符合你的预期。

总结

通过在第一个任务的结果上应用适当的条件,你可以在Ansible中实现删除在/home目录下没有挂载点的用户的目标。记得根据需要适当地修改代码和变量。

正文完