1

我有一个来自外部源和远程机器的用户列表。我想从外部源获取列表并将其与我当前机器的用户列表进行比较,并为机器上不存在的每个用户创建用户。

我已经使用ansible runner(下面的伪代码)尝试了这个:

for user in users: 
  updateUsers(user)

这将调用 Ansible.runner 对象并进行以下调用:

ansible.runner.Runner(
  pattern='tools',
  forks=10,
  module_name='user',
  module_args="",
  complex_args=OrderedDict(sorted(dict(name=name, group=group, state=state).items())),
  sudo=True,
).run()

现在组和状态是全局定义的。我的问题是,当它遍历 for 循环时,它确实创建了我指定的用户;主要问题是它创建了用户,然后每个用户的主目录的权限不允许用户访问它。所以说“joeshmo”是一个用户:他将无法写入自己的 ~/ 目录。

我正在寻找一些关于我如何做到这一点的指导。剧本有没有办法动态迭代文件并获取不同的用户名以将它们作为用户添加到系统而不会出现权限错误?有没有办法修复我当前的脚本没有这些错误?

谢谢

4

2 回答 2

0

如果你真的需要使用代码来获取你的用户列表,你可以在 python 中编写你自己的迭代器并将它们放在lookup_plugins你的剧本旁边的一个目录中。然后你可以这样做:

    # Use my custom users.py lookup plugin 
    - user: name={{item.name}} group={{item.group}} state=present
      with_users:
于 2014-06-12T07:51:32.290 回答
0

这就是我的做法。

  1. 创建自定义事实脚本以在事实收集期间从机器获取所有用户/组信息。该文件可以是任何输出有效 JSON 的 shell 可执行文件

  2. 将事实收集的用户/组列表与您的外部来源(不确定您存储它的格式)进行比较,并适当地添加/删除用户。

我知道为自定义事实创建、部署和管理附加脚本会产生一些开销,但我认为这是值得的。我试图只使用剧本来收集各种信息,它会变得非常丑陋,你最终会编写各种过滤器插件,诅咒 set_fact 模块并最终得到一个 200 行的剧本。

于 2016-02-23T19:44:44.533 回答