使用Ansible将多个用户添加到linux系统
我已经构建了一套可爱的Ansible剧本,packer使用它们为AWS中的软件构建构建Linux映像。他们很好,现在很多其他球队也想要使用他们 当前的设置是一个调用许多角色的剧本。其中一些角色执行系统级配置,其他角色创建由var jenkins_用户定义的用户,并为其设置各种程序(conan、npm、jfrog) 由于我的角色已经设置为作用于单个变量,因此修改它们以作用于用户名数组应该不会太困难。我正在尝试确定定义多个用户的最佳方法 我需要为每个用户提供少量VAR:使用Ansible将多个用户添加到linux系统,ansible,Ansible,我已经构建了一套可爱的Ansible剧本,packer使用它们为AWS中的软件构建构建Linux映像。他们很好,现在很多其他球队也想要使用他们 当前的设置是一个调用许多角色的剧本。其中一些角色执行系统级配置,其他角色创建由var jenkins_用户定义的用户,并为其设置各种程序(conan、npm、jfrog) 由于我的角色已经设置为作用于单个变量,因此修改它们以作用于用户名数组应该不会太困难。我正在尝试确定定义多个用户的最佳方法 我需要为每个用户提供少量VAR: 用户名 密码 私钥 授权密
- 用户名
- 密码
- 私钥
- 授权密钥文件
build_users:
user1:
password: "{{vault_user1_pass}}"
private_key_file: "{{vault_user1_key}}"
auth_keys_file: "{{auth_keys_file}}"
user2:
password: "{{vault_user2_pass}}"
private_key_file: "{{vault_user2_key}}"
auth_keys_file: "{{user2_auth_keys_file}}"
这会让我把关用户数据,这不一定是件坏事
我想到的第二件事就是在每个用户自己的文件中都有一个目录:
user1.yml包含
user1:
password: "{{vault_user1_pass}}"
private_key_file: "{{vault_user1_key}}"
auth_keys_file: "{{auth_keys_file}}"
user2:
password: "{{vault_user2_pass}}"
private_key_file: "{{vault_user2_key}}"
auth_keys_file: "{{user2_auth_keys_file}}"
然后user2.yml包含
user1:
password: "{{vault_user1_pass}}"
private_key_file: "{{vault_user1_key}}"
auth_keys_file: "{{auth_keys_file}}"
user2:
password: "{{vault_user2_pass}}"
private_key_file: "{{vault_user2_key}}"
auth_keys_file: "{{user2_auth_keys_file}}"
但是,如果我尝试向buildusers变量添加其他文件,include_vars会覆盖它,而不是添加:
- name: load buildusers files
include_vars:
dir: buildusers
name: buildusers
这将导致buildusers变量中只包含最后的文件数据。
include\u vars
将使用位于buildusers
文件夹的所有文件中的变量值覆盖buildusers
变量的内容
如果要将中心文件(playbook或变量文件)中定义的变量与文件夹中文件列表中定义的值合并,则必须手动组合这两个变量
- name: Combine variables
hosts: localhost
connection: local
gather_facts: no
vars:
buildusers_default:
user3:
password: "pass"
private_key_file: "priv"
auth_keys_file: "auth"
tasks:
- name: load buildusers files
include_vars:
dir: buildusers
name: buildusers_files
- name: combine variables
set_fact:
buildusers: "{{ buildusers_default | combine(buildusers_files) }}"
- name: debug
debug:
var: buildusers
# ok: [127.0.0.1] =>
# buildusers:
# user1:
# auth_keys_file: auth
# password: pass
# private_key_file: priv
# user2:
# auth_keys_file: auth
# password: pass
# private_key_file: priv
# user3:
# auth_keys_file: auth
# password: pass
# private_key_file: priv
正在创建文件夹buildusers
的内容
$tree buildusers
建筑用户
├── user1.yml
└── user2.yml
希望能有帮助
笔记
您还可以通过在加载过程中注册变量并通过变量ansible\u included\u var\u files
检查其值来检查从文件加载变量的过程
tasks:
- name: load buildusers files
include_vars:
dir: buildusers
name: buildusers_files
register: check_load
- name: debug
debug:
var: check_load.ansible_included_var_files
# check_load.ansible_included_var_files:
# - /home/romain/ansible/user1.yml
# - /home/romain/ansible/user2.yml
您能否确认“如果我尝试向buildusers变量添加其他文件”的意思?您在这里得到的应该是将这两个文件的内容加载到
buildusers
中,从而产生user1
和users2
的buildusers
散列成员,以及类似地包含的任何其他用户。但是,如果在每个文件的顶层没有唯一的值,它们将发生冲突。当include_vars运行时,它读取第一个文件,创建一个哈希buildusers,其中user1是唯一的元素,然后读取第二个文件,该文件重新创建哈希buildusers,其中user2是唯一的元素,依此类推。最终的结果是,如果我有多个文件,那么数组中只有最后一个文件。