如何从 Ansible 中的指定组中删除用户?

2024-04-19

我们假设user01定义了两个组:groupA and groupB(除了主要组之外)。

我可以将帐户添加到groupC(确保user01属于groupC) using:

- user: name=user01 groups=groupC append=yes

我怎样才能删除user01 from groupB(确保user01不属于groupB)而不指定帐户应属于的所有组?


据我所知,你不能只使用普通的用户模块。

然而,对于一些相当疯狂的旋转,你可以在剧本中完成。 但我不确定我是否推荐这个;这只是一个有趣的练习。 (我确实测试过这个并且它有效。)

有趣的部分是“构建新组列表”任务,该任务删除列表条目。如果在 python 列表上调用 .remove() 返回新列表,那么这都是不必要的。

---
- hosts: target
  gather_facts: no

  vars:
    group_to_remove: admins
    new_groups_list: []
    user_to_check: user1

  tasks:
    - user: name="{{ user_to_check }}" groups=testers,developers,admins

    - name: get the current groups list
      command: groups "{{ user_to_check }}"
      register: current_groups

    - debug: var=current_groups

    # parse the output of the groups command into a python list
    # of the current groups
    - set_fact:
        current_group_list: "{{ current_groups.stdout.replace( user_to_check+' : ','').split(' ') }}"

    - name: show user_group_list
      debug: var=current_group_list

    - name: build the new groups list
      set_fact:
        new_groups_list: "{{ new_groups_list + [ item  ]  }}"
      no_log: False
      when: "not '{{ group_to_remove }}' == '{{ item }}'"
      with_items: "{{ current_group_list }}"

    # turn the list, into a comma-delimited string
    - set_fact:
        new_groups: "{{ ','.join(new_groups_list) }}"

    - name: show new_groups_list
      debug: var=new_groups

    - name: set new user groups
      user: name="{{ user_to_check }}" groups="{{ new_groups }}"

    - name: get the new groups list
      command: groups "{{ user_to_check }}"
      register: new_groups

    - debug: var=new_groups
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Ansible 中的指定组中删除用户? 的相关文章

  • 使用ansible复制本地文件(如果存在)

    我正在一个项目中工作 我们使用 ansible 来创建部署服务器集群 我必须实现的任务之一是将本地文件复制到远程主机 前提是该文件本地存在 现在我正在尝试用这个来解决这个问题 hosts 127 0 0 1 connection local
  • 根据AWS标签分配ansible变量

    我正在尝试找出一种根据 AWS 中的标签在 Ansible 中分配变量的方法 我正在尝试ec2 remote tags但它返回的信息比我需要的多得多 似乎应该有一种更简单的方法来做到这一点 但我只是没有想到 例如 如果我有一个名为funct
  • 尝试使用 ansible 在 vi​​rtualenv 内安装时权限被拒绝

    我的 ansible 剧本中有这个剧本 name Setup virtualenv pip requirements vagrant webapp requirements requirements filename virtualenv
  • 循环或重复一组任务直到成功

    我目前有一个包含任务文件的剧本 在该任务文件中 我想检查一个条件 如果该条件的退出代码不等于 0 则应重复任务文件中的所有步骤 我已经尝试了块和循环的一些变体 但我还没有找到一种方法来使它执行我上面描述的操作 目前我有这样的事情 tasks
  • Ansible 要求安装 MySQL-python,尽管它已经安装

    我正在尝试使用在 Mac OSX 上运行的 Ansible 控制器创建一个新的 MySQL 数据库 当我第一次得到msg the python mysqldb module is required错误消息 我添加了一个任务来安装MySQL
  • 如何在 Ansible 中的 do-until 循环中指定多个条件

    我正在拨打 REST 电话 并想在继续之前检查我的请求是否已完成 在响应中 我收到 PENDING 或 IN PROGRESS 作为 request status 我想等到我得到 完成 或 失败 为此 我想在收到 PENDING 或 IN
  • Ansible:迭代字典列表 - 循环与 with_items

    当尝试迭代字典列表时 使用循环与 with items 时 我得到不同的结果 我尝试过使用loop dict2items 该结构不是字典 它告诉了我很多信息 呵呵 并使用展平过滤器进行循环 这是字典列表 msg id id1 ip ip1
  • 如何在 ansible git 模块中使用远程计算机的 SSH 密钥

    我一直在尝试让 Ansible 来配置远程计算机 并且我希望远程计算机能够使用自己的密钥进行设置 并且能够从 Bitbucket 克隆 git 存储库 用户已设置 拥有自己的 id rsa pub 并且密钥已注册到 bitbucket 但是
  • 如何在 Ansible playbook api 中设置“--limit”选项

    我正在编写 python 脚本来运行 ansible playbook 使用 Ansible 2 4 2 0 据我所知有一个选择 limit 这可以限制 Ansible 在特定主机上的运行 例如 这是 etc ansible hosts t
  • Ansible:SSH 错误:unix_listener:对于 Unix 域套接字来说太长

    这是一个已知问题 我找到了解决方案 但它对我不起作用 首先我有 fatal openshift node compute e50xx gt SSH Error ControlPath too long It is sometimes use
  • 从 Ansible 中的自定义模块访问 playbook 变量[重复]

    这个问题在这里已经有答案了 我正在 Ansible 中编写一个特定于 Playbook 的自定义模块 是否可以直接访问剧本变量 而不需要将其作为参数传递给任务 这是不可能的 因为模块是远程执行的 除非显式传递 否则所有变量都不可用 我有同样
  • 如何将 ansible_become_pass 存储在保管库中以及如何使用它?

    我是 ansible 的新手 我正在使用一个非常简单的剧本来发布sudo apt get update and sudo apt get upgrade在几台服务器上 这是我正在使用的剧本 name Update Servers hosts
  • 在 Ansible 中将 Python 脚本的输出转换为 dict

    我有一个名为test py这是 usr bin python a A 2 nB 5 print a 现在 在我的 Ansible 剧本中 我正在运行此脚本并使用此任务将输出注册到变量 name Create variable from th
  • jenkins 管道中的该模块需要 boto3 和 botocore

    我正在尝试通过 jenkins groovy 脚本运行 ansible playbook 但不断收到错误 boto3 is required 我已经安装了 boto3 pip list boto grep boto boto3 1 20 3
  • Ansible sudo 在执行 5 个任务后挂起

    设置要求 本地用户 goagent1 ansible从GoCD启动 远程用户 myadmin myadmin 是一个需要密码的 sudoer 我们在剧本级别启用了 sudo Problem 该剧本似乎在执行了大约 5 个任务后停止了 发生得
  • 如何在 playbook 中使用 Ansible Tower 登录凭据?

    是否可以使用我用来直接在剧本中登录 Ansible Tower 的凭据 是的 您可以通过使用 保存您的凭据 来完成此操作安西布尔塔 Ansible Tower 上的凭证类型 从 Ansible Tower UI 中 转至 Credentia
  • Ansible:全局模板文件夹?

    谷歌搜索找不到任何东西 有group vars 全部 对于变量 有类似的模板吗 我想在多个角色中使用一些模板 您可以将全局模板放入templatesAnsible 布局顶层目录 与group vars 顺便说一句 全局文件也是如此 file
  • 将事实收集到事实缓存的最快方法

    我正在尝试让 Ansible 与 limit 一起工作 为此我需要有关其他主机的事实 我正在使用fact caching进行缓存 我应该运行什么命令 以便它只收集所有主机上的所有事实并缓存它们 而不运行任何任务 像这样的东西设置模块 htt
  • 带变量的 ansible regex_search

    如何在ansible playbook中使用正则表达式查找匹配项 其中变量出现在regex search争论 以下剧本在使用以下命令运行时找不到匹配项 ansible playbook playbook yml hosts localhos
  • 在 Ansible 中检查已安装的 yum 包/rpm 版本并使用它的最佳方法

    我已经在 CentOS 7 上尝试使用 Ansible 2 0 0 2 我试图从已安装的 rpm yum 软件包中获取版本 但在运行脚本时遇到警告消息 安塞布尔脚本 name Get version of RPM shell yum lis

随机推荐