**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目录下没有挂载点的用户的目标。记得根据需要适当地修改代码和变量。
正文完