ansible 用户模块总是显示已更改

2024-05-08

我正在努力正确使用 ansible 的用户模块。问题是每次我运行我的剧本时,我创建的用户always显示为已更改,即使我已经创建了它们。

我在这里发现其他人也有同样的问题 https://github.com/ansible/ansible/issues/6854,尽管我正在努力根据 github 线程实际修复它。可能是我不明白的最有帮助的评论????

我可以确认它看起来只是一个错误 - 添加附加 两个任务的选项使得它们不会总是撤消 另一个的工作,并修复了永久改变的触发器。我做到了 不需要添加“组:”

这就是我的剧本的样子:

- name: Generate all users for the environment
  user:
    createhome: yes
    state: present # to delete
    name: "{{ item.user }}"
    groups: "{{ 'developers' if item.role == 'developer' else 'customers' }}"
    password: "{{ generic_password | password_hash('sha512') }}"
    append: yes
  with_items:
    - "{{ users }}"

我的意图是让每个用户都属于自己的私有组(用户私有组),但也让开发人员属于开发人员组。在当前配置下,它可以工作,问题是 ansible 总是将用户报告为“已更改”。然后我将添加developers分组到 sudoers 文件;因此我想将用户添加到developers group.

e.g.

vagrant@ubuntu-bionic:/home$ sudo su - nick
$ pwd
/home/nick
$ touch file.txt
$ ls -al
-rw-rw-r--  1 nick nick    0 Jul  3 12:06 file.txt

vagrant@ubuntu-bionic:/home$ cat /etc/group | grep 'developers'
developers:x:1002:nick,ldnelson,greg,alex,scott,jupyter

以下是其中一位用户在本地针对 vagrant 运行的详细输出:

changed: [192.168.33.10] => (item={'user': 'nick', 'role': 'developer', 'with_ga': False}) => {
    "append": true,
    "changed": true,
    "comment": "",
    "group": 1004,
    "groups": "developers",
    "home": "/home/nick",
    "invocation": {
        "module_args": {
            "append": true,
            "comment": null,
            "create_home": true,
            "createhome": true,
            "expires": null,
            "force": false,
            "generate_ssh_key": null,
            "group": null,
            "groups": [
                "developers"
            ],
            "hidden": null,
            "home": null,
            "local": null,
            "login_class": null,
            "move_home": false,
            "name": "nick",
            "non_unique": false,
            "password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "password_lock": null,
            "remove": false,
            "seuser": null,
            "shell": null,
            "skeleton": null,
            "ssh_key_bits": 0,
            "ssh_key_comment": "ansible-generated on ubuntu-bionic",
            "ssh_key_file": null,
            "ssh_key_passphrase": null,
            "ssh_key_type": "rsa",
            "state": "present",
            "system": false,
            "uid": null,
            "update_password": "always"
        }
    },
    "item": {
        "role": "developer",
        "user": "nick",
        "with_ga": false
    },
    "move_home": false,
    "name": "nick",
    "password": "NOT_LOGGING_PASSWORD",
    "shell": "/bin/sh",
    "state": "present",
    "uid": 1002
}

应该是不相关的,但我将一些添加到开发人员组中,因为我打算授予某些命令的 sudo 访问权限。


generic_password | password_hash('sha512')不是幂等的。每次过滤器时哈希值的盐都会改变密码哈希值 https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_filters.html#hashing-and-encrypting-strings-and-passwords runs.

要使其幂等,请使用特定的盐运行它

- ansible.builtin.user:
    name: nick
    password: "{{ generic_password | password_hash('sha512', 'mysalt') }}"

,或更新密码创建时 https://docs.ansible.com/ansible/latest/collections/ansible/builtin/user_module.html#parameter-update_password

- ansible.builtin.user:
    name: nick
    password: "{{ generic_password | password_hash('sha512') }}"
    update_password: on_create

(,或注册返回值 https://docs.ansible.com/ansible/latest/modules/user_module.html#return-values并声明更改时间 https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html#overriding-the-changed-result).


考虑密码的外部管理,例如Ansible Vault https://docs.ansible.com/ansible/latest/user_guide/vault.html#encrypting-content-with-ansible-vault or 密码库 https://www.passwordstore.org/。有一个查找插件密码库. See ansible-doc -t lookup passwordstore。另请参阅我的实现密码库 https://ansible-linux-postinstall.readthedocs.io/en/latest/guide-task-passwords-passwordstore.html.

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

ansible 用户模块总是显示已更改 的相关文章

  • 具有多个 SSH 密钥对的 Ansible

    我是 Ansible 的新手 我能够对其进行测试并且其工作正常 符合我的测试要求 为了在管理节点和客户端节点之间建立连接 我使用已经创建的 ssh 密钥对 如何使用具有不同 SSH 密钥对的另一个节点 作为参考 我正在考虑 3 个具有不同密
  • Ansible 中的角色和任务(和标签)有什么区别?

    我发现自己很困惑roles and tasks每时每刻 我知道标签是标记单个项目的一种方式 但我很困惑如何使用它们 假设我必须执行以下操作 Users Create a user named deploy Add ssh key for d
  • 使用 jinja 的 Ansible set_fact 列表

    我正在尝试学习 jinja 和 Ansible 这是在 RHEL 7 9 上 ansible 2 9 27 ansible python module location usr lib python2 7 site packages ans
  • Ansible:迭代字典列表 - 循环与 with_items

    当尝试迭代字典列表时 使用循环与 with items 时 我得到不同的结果 我尝试过使用loop dict2items 该结构不是字典 它告诉了我很多信息 呵呵 并使用展平过滤器进行循环 这是字典列表 msg id id1 ip ip1
  • 使用 Ansible 从服务列表中仅启动特定的 systemd 服务

    我有清单systemd服务定义为 vars systemd scripts a service b service c service 现在我只想停下来a service从上面的列表中 如何使用来实现这一点systemd https doc
  • 如何防止 Ansible 对 JSON 重新排序?

    给定以下剧本 从随机数据中获取一些数据网络服务 http jsonplaceholder typicode com users name sorting json hosts localhost tasks name uri url htt
  • 将变量内容复制到事实中后,Ansible 会抛出错误

    我有变量 其中包含带有其他模板引擎标记的字符串 不幸的是它们是三个花括号 如果我直接使用这些变量 一切都很好 如果我将它们复制到事实中以便随后修改它们 Ansible 会抛出错误 示例剧本 hosts localhost connectio
  • 即使在开始时已经输入,Ansible 同步也会提示密码

    Ansible v1 6 5 的同步模块提示输入密码 Enter passphrase for key 尽管我一开始就已经输入了运行剧本 知道为什么吗 我使用以下选项运行我的剧本 u myuser ask sudo pass private
  • Ansible:全局模板文件夹?

    谷歌搜索找不到任何东西 有group vars 全部 对于变量 有类似的模板吗 我想在多个角色中使用一些模板 您可以将全局模板放入templatesAnsible 布局顶层目录 与group vars 顺便说一句 全局文件也是如此 file
  • 根据磁盘可用空间获取节点IP

    我正在尝试编写一个 Ansible 剧本来检查多个服务器上的磁盘空间 到目前为止 这是我的 Ansible 剧本 hosts all become yes tasks name Check freespace shell df h awk
  • 奇怪的 bash 脚本行为 - 生成的命令在复制粘贴时有效,但在脚本中无效

    出于安全原因 我编写了一个简短的 bash 脚本来包装 ansible playbook 命令 这并不复杂 而且大部分脚本在这里都是无关紧要的 最后 我将脚本参数生成的变量中的 ansible 命令放在一起 如下所示 ansible pla
  • 使用 ansible SSH 到远程服务器

    我正在使用 ansible 来自动化一些任务 其中之一要求我ssh到服务器A 然后从A到B 然后从B到C 我似乎找不到任何方法来做到这一点 有什么建议么 鉴于您不使用 Paramiko 进行 ssh transport ssh https
  • 无法将属性与数字进行比较。错误:“‘AnsibleUnsafeText’和‘int’实例之间不支持”

    getent database passwd debug var getent passwd dict2items selectattr value 1 gt 1000 map attribute key list 输出是 TASK deb
  • Ansible 权限问题

    我正在尝试将当前用户添加到系统中的某个组 然后执行需要该组权限的命令 我的剧本是这样的 name Add this user to RVM group sudo true user state present name vagrant ap
  • 使用 with_items 连接字符串并分配给 Ansible 中的变量

    启动 ec2 实例时 我需要将两个 2 IP 保存到 vars 文件中的变量中 以便稍后在部署期间使用 这就是我保存单个服务器 IP 的方式 name Save server public IP to vars file lineinfil
  • Ansible 和硬件检查

    我必须使用 ansible 检查 Linux 机器上的不同硬件和配置元素 我完全不确定如何做到这一点 RAM 磁盘空间 DNS CPU 我知道我几乎可以找到我想要的所有事实都在 ansible 中 但我不明白如何使用它 例如 我必须检查 R
  • 在ansible中合并字典

    我目前正在构建一个使用 ansible 安装 PHP 的角色 并且在合并字典时遇到一些困难 我尝试了多种方法来做到这一点 但我无法让它像我想要的那样工作 A vars file my default values key value my
  • Ansible 测试变量以什么开头

    我需要能够安装 MySQL 库 Python 有 1 个用于 v2 的包和另一个用于 v3 的包 我需要能够告诉 Ansible 要安装哪个包 name Ensure MySQL python is installed pip name M
  • Ansible local_action 指令

    我对 Ansible 很陌生 有一个简单的问题来了解我的理解local action指示 这是否意味着该命令完全在本地执行 假设你有这样的东西 local action command which nginx register check
  • local_action:shell 连接文件时出错

    我的剧本中有这样的错误 为什么以及如何解决它 获取远程主机的更新列表 将列表连接到一个文件中 name Save update deb packs in file on ansible host copy content update de

随机推荐

  • 如何在 EF Core 3 中启用日志记录?

    我正在使用 Entity Framework Core 3 Preview 5 和 ASP NET Core 3 Preview 5 在 Visual Studio 2019 的调试输出窗口中 我没有从 EF Core 获取任何日志 我阅读
  • Azure DevOps/VSTS Build - 在 BUILD BUILDNUMBER 中找不到版本号数据

    设置一个简单的类库来构建并发布到 VSTS 自己的源时 我在 NuGet 包运行时看到此错误 在 BUILD BUILDNUMBER 中找不到版本号数据 我勾选了 使用版本号来版本包 选项 预计 VSTS 能够正常工作 使用内部版本号来版本
  • PHP 准备语句转义的清晰性

    我知道这是一个非常受欢迎的问题 并且已经研究了很多小时 我仍然对明确的答案有点不确定 我不是 PHP 专业人士 并且已经自学了一段时间 我最近刚刚了解 MYSQLi 准备好的语句 已经习惯了旧的做法 我的主要问题是试图找到关于在使用准备好的
  • 连接两列之间的排列

    我需要有关 Excel 作业的帮助 Name City John London Maxx NY Ashley DC Paris 解决这个问题的方法必须是 John london John NY John DC John Paris Maxx
  • 内置魔术变量名称/属性

    背景 对于不熟悉的人来说 崇高的文字 http sublimetext com 和 TextMate 通过以下定义的范围提供语法突出显示和其他功能 tmLanguage语言定义文件 基本上是一堆正则表达式 用于识别给定语言中的各种构造 例如
  • 带有 Firebird 的 .NET 实体框架:UTF-8 数据库出现错误“超出实现限制。块大小超出实现限制”

    我将 Firebird ADO NET 提供程序版本 5 5 与实体框架 5 结合使用 对于 Firebird UTF 8 数据库 带有投影的 LINQ to SQL 查询 包括有条件地将字符串属性设置为常量 会导致错误 超出实现限制 块
  • HWND 子级的 WPF 渲染问题

    我想可以肯定地说 WPF 将其内容呈现为窗口背景 不存在传统 HWND 意义上的子窗口 因此 当人们在 WPF 应用程序中引入基于 HWND 的东西 例如 Web 浏览器 时 视觉外观方面的事情就开始出错 考虑一个窗口有一个带有两个子项的网
  • 使用 Visual Studio 构建 R 包 (C API)

    我正在尝试使用 Visual Studio 构建一个简单的 R 包 这是我的代码 include
  • 快递+护照+会话。为每个页面加载执行查询

    我正在使用 Express 4 2 0 和 Passport 0 2 0 我使用的express session中间件是1 2 1 我对节点身份验证比较陌生 所以请耐心等待 我注意到 对于每个页面加载 护照正在执行数据库请求 Executi
  • 尽管手册页有免责声明,为什么“strchr”似乎可以使用多字节字符?

    From man strchr char strchr const char s int c strchr 函数返回一个指向字符 c 在字符串 s 中第一次出现的位置的指针 这里 字符 的意思是 字节 这些函数不适用于宽字符或多字节字符 不
  • 如何快速将 Int16 转换为两个 UInt8 字节

    我有一些二进制数据 将两个字节值编码为有符号整数 bytes 1 255 0xFF bytes 2 251 0xF1 Decoding 这相当简单 我可以提取一个Int16这些字节的值 Int16 bytes 1 lt lt 8 Int16
  • 服务层或存储库中的密码哈希等?

    作为 MVC 的最佳实践 在发送到数据库之前处理密码散列 加盐或数据格式化等事务的逻辑应该放在哪里 我读到存储库应该仅用于处理数据访问的逻辑 这是属于服务层的东西吗 控制器 这还重要吗 我倾向于将散列放在存储库层中 如果只是出于实际原因 即
  • Visual Studio 2010 基类扩展编译器错误

    我有一个 C 类 提供一些简单的类和一些基类扩展 例如这个 public static Boolean ToBooleanOrDefault this String s Boolean Default return ToBooleanOrD
  • Bundler 似乎无法通过 Rbenv 找到正确的 Ruby

    多年来我一直使用 RVM 作为 Ruby 版本管理器 但由于其简单性 我想改用 rbenv 但是我在部署时发现了一些奇怪的问题 这似乎是错误的地方 env RBENV ROOT home deploy rbenv PATH home dep
  • 外部硬件指纹扫描仪和 Android 设备集成

    我想建立一个android像员工考勤这样的应用程序使用fingerprint scanner 我想知道 是否可以使用外部硬件设备进行指纹识别 扫描 如何将Android应用程序与外部硬件finger集成 打印扫描设备 如何从外部硬件设备获取
  • 如何使用 Apple Map Kit 实现地址自动完成

    我想自动填写用户的地址 与 google api 在此链接中提供的地址相同 https developers google com maps documentation javascript places autocomplete hl e
  • 以不同顺序对多列上的结构化 Numpy 数组进行排序

    我有一个结构化的 numpy 数组 dtype price float counter int values 35 1 36 2 36 3 a np array values dtype dtype 我想按价格排序 如果价格相等则按计数器排
  • 如何删除导航视图不必要的顶部填充?

    标题和图中显示的第一个项目之间有不必要的顶部填充 如何将其去除 你可以在这里找到源代码 https github com chrisbanes cheesesquare https github com chrisbanes cheeses
  • $mysqli->fetch_object($result) 不起作用

    我正在学习mysqli 我正在尝试从表 tbllogin 中获取数据 DATABASE CONNECTION hostname p localhost database dbLogin username user1 password pwd
  • ansible 用户模块总是显示已更改

    我正在努力正确使用 ansible 的用户模块 问题是每次我运行我的剧本时 我创建的用户always显示为已更改 即使我已经创建了它们 我在这里发现其他人也有同样的问题 https github com ansible ansible is