【发布时间】:2021-04-19 21:39:31
【问题描述】:
当用户已经在组 google-sudo 中时,我正在寻找从组 x 中删除用户的最简单方法。我将用户存储在这种列表和字典组合中的组变量中:
user_account:
- name: jenny
authorized_keys:
- jenny_01
groups:
- "{% if not googlesudo.stat.exists %}sudo{% else %}google-sudo{% endif %}"
- name: jerry
authorized_keys:
- jerry_01
groups:
- "{% if not googlesudo.stat.exists %}sudo{% else %}google-sudo{% endif %}"
...
这些是我已经创建的任务:
- name: Check if google-sudo file exists
stat:
path: /etc/sudoers.d/google_sudo
register: googlesudo
tags:
- add_user_group
- remove_from_x
- debug: var=googlesudo verbosity=2
tags:
- add_user_group
- remove_from_x
- debug:
msg: "User account to create: {{ item.name }}"
with_items: "{{ user_account }}"
- name: "Creating user"
user:
name: "{{ item.name }}"
group: users
shell: /bin/bash
with_items: "{{ user_account }}"
- name: Add user to additional groups
user:
name: "{{ item.0.name }}"
groups: "{{ item.1 }}"
append: yes
with_subelements:
- "{{ user_account }}"
- groups
tags:
- remove_from_x
- name: Check if user already in google-sudo
command: "groups {{ item.name }}"
with_items:
- "{{ user_account }}"
register: root_users
tags:
- remove_from_x
- name: View root users
debug:
msg: "{{ item }}"
verbosity: 2
with_items:
- "{{ root_users }}"
tags:
- remove_from_x
- name: Save state
set_fact:
is_in_googlesudo: "{{ root_users.results.0.stdout_lines }}"
tags:
- remove_from_x
- name: List
debug: msg='{{ user_account |json_query("[?groups==`google-sudo`]")}}'
tags:
- remove_from_x
- name: Remove from x group
shell: "deluser {{ item.name }} x"
with_items:
- "{{ user_account }}"
when: "'x in is_in_googlesudo' and 'google-sudo in is_in_googlesudo'"
tags:
- remove_from_x
如果他在google-sudo 和x 组中,我正在测试json_query 以提取用户名,但没有成功。尝试在定义组时列出用户,但是我得到空输出,使用这个:
msg='{{ user_account |json_query("[?groups==`google-sudo`]")}}'
我想知道在检查服务器后(使用例如groups 命令)或user_account -> group 如果他已经在 google-sudo 中,是否有任何更短的方法可以从组 x 中删除用户。
可能有一些漂亮而优雅的方式来编写这段代码,我会很感激任何关于如何处理它的想法。
【问题讨论】:
标签: list dictionary ansible sudoers json-query