Ansible - 满足服务器类别标准时创建用户

Ansible - 满足服务器类别标准时创建用户

我是一个新的 ansible 用户,从一组 shell 脚本切换到 ansible playbook。我当前的用户管理系统仅允许将用户添加到系统,前提是该用户已被授予对该服务器类、位置和环境的访问权限(或者其中任何一个设置为通配符/任意)。

服务器类、位置和环境本地存储在客户端服务器本身上,以(仅 root 可读/可写)文件的形式存储,如下所示:

LD_CLASS="app"
LD_LOC="dfw"
LD_ENV="prod"

我找到了一些我认为与我想要的类似的例子,但我仍然不确定如何从 ansible 客户端获取变量,以及如何确保在添加用户之前满足所有 3 个类、位置和环境要求。我设想了一个这样的变量文件:

users:
 -name: user1
  uid: 60001
  gid: 60001
  class: app
  location: any
  env: dev
 -name: user2
  uid: 60002
  gid: 60002
  class: app
  location: dfw
  env: prod 

根据我正在配置的 ansible 客户端收集的变量,用户模块条目看起来像这样(请注意伪代码,因为我不确定我实际上是如何实现这一点的):

- user:
    name: '{{ item.name }}'
    state: '{ (If $LD_LOC matches location variable, or is set to any) & ($LD_ENV matches env variable, or is set to any) & ($LD_CLASS matches class variable, or is set to any) } present{% else %}absent{% endif %}'
    uid: '{{ item.uid }}'
   with_items: users

我更愿意不依赖 ansible 角色,而是从 ansible 客户端本身获取类、位置和环境数据,至少部分原因是因为这是我们目前拥有的系统,它可以帮助我们轻松过渡到 ansible,同时保留一些现有和熟悉的工具。我所寻找的可能吗?

答案1

有一个功能叫做当地事实在 Ansible 中:

  • 修改您的“属性”文件,使其如下所示,将其存储在中/etc/ansible/facts.d/server_meta.fact,并根据需要应用权限:

    [settings]
    ld_class=app
    ld_loc=dfw
    ld_env=prod
    
  • 然后运行你的剧本并在参数中引用这些事实state

    state: "{{ (ansible_local.server_meta.settings.ld_loc == 'dfw' and ansible_local.server_meta.settings.ld_class == 'app' and ansible_local.server_meta.settings.ld_env == 'prod' ) | ternary('present', 'absent') }}"
    

相关内容