如何使用 Ansible 添加用户和创建组
使用Ansible进行用户和组的配置
创建事件文件
创建一个名为dev-server的父组,其中包含一个名为common-base的子组,并将dev-server包含在内。
通过创建多个父组并将其属于子组,可以将执行任务分发并提高PlayBook的可重用性,因此建立这个结构。
[dev-server]
dev002
[common-base:children]
dev-server
制作主教程
为了在执行主机和执行任务增加时更容易进行修正,主控剧本应该保持简单。本次只需包含一个yml文件。
---
- include: common-base.yml
创建小组规则手册
请指定一个在事件中设置了执行主机的群组,并且包含定义变量的yml文件和定义任务的yml文件并执行。
---
- hosts: common-base
vars_files:
- ./vars/usergroup.yml
tasks:
- include: ./tasks/user-group-setting.yml
创建变量定义文件
我看了很多网站后发现,有些网站将键名命名为用户名,但这样会降低可扩展性,所以我将定义如下。
usergroup:
user:
name: hoge
group: hoge
uid: 4519
gid: 4519
password: $6$hoge$zOyVU7p6q2aLNjyi7.WZy8sgiSqUPRnQBYruV9iAIdBr5p3tqipt9ZscPHlwe8wBEW91jb4mB2fLGPY7dsRBA/
group:
name: hogegroup
gid: 1919
创建密码
在Ansible的USER模块中,需要填写经过哈希处理的密码。
可以通过以下步骤将其哈希处理并设置到变量文件的”password”中。
python -c 'import crypt; print crypt.crypt("123456789", "$6$hogehoge$")'
在Python中,可以使用crypt.crypt函数将密码进行HASH加密并通过print语句获取。加密的方式是使用指定的HASH密钥(将密码和密钥作为参数传入函数)。
创建任务文件
以任务方式定义要构建的服务器配置。如果要进行用户创建和群组创建,则使用user模块和group模块来从变量定义文件中获取配置值,并设置用户和群组。
- name: create group
group: name={{usergroup.group.name}} gid={{usergroup.group.gid}}
- name: add users that join to group (wheel and usergroup)
user: name={{usergroup.user.name}} uid={{usergroup.user.uid}} state=present password={{usergroup.user.password}} groups={{usergroup.user.group}},wheel
- name: user join to other group
user: name={{usergroup.user.name}} append=yes groups={{usergroup.group.name}}
- name: ~/.ssh for users exist
file: path="/home/{{usergroup.user.name}}/.ssh" state=directory owner={{usergroup.user.name}} group={{usergroup.user.group}} mode=0700
执行
确认没有问题后进行测试。
语法测试
$ ansible-playbook -i ~/ansible/playbook/common-playbook/staging ~/ansible/playbook/common-playbook/site.yml --syntax-check
查看执行任务列表
$ ansible-playbook -i ~/ansible/playbook/common-playbook/staging ~/ansible/playbook/common-playbook/site.yml --list-task
干磨
$ ansible-playbook -i ~/ansible/playbook/common-playbook/staging ~/ansible/playbook/common-playbook/site.yml --check
实际上,只需要一个选项
$ ansible-playbook -i ~/ansible/playbook/common-playbook/staging ~/ansible/playbook/common-playbook/site.yml
请你提供下列内容的中国化表达:
参考:
Ansible playbook 最佳实践中指出,使用角色进行分隔的顶级playbook应用于一整个主机。这样做可以提高可读性和可维护性。了解更多详情,请访问原文链接:http://docs.ansible.com/ansible/playbooks_best_practices.html#top-level-playbooks-are-separated-by-role
在樱云的技术知识库中,有一篇文章解释了Ansible的相关信息。请查看原文链接:http://knowledge.sakura.ad.jp/tech/3084/