生成主机文件
将一个初始模板文件从 http://materials/hosts.j2 下载到 /home/greg/ansible
完成该模板,以便用它生成以下文件:针对每个清单主机包含一行内容,其格式与 /etc/hosts 相同
创建名为 /home/greg/ansible/hosts.yml 的 playbook ,它将使用此模板在 dev 主机组中的主机上生成文件 /etc/myhosts 。
该 playbook 运行后, dev 主机组中主机上的文件 /etc/myhosts 应针对每个受管主机包含一行内容:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.250.9 node1.lab.example.com node1
172.25.250.10 node2.lab.example.com node2
172.25.250.11 node3.lab.example.com node3
172.25.250.12 node4.lab.example.com node4
172.25.250.13 node5.lab.example.com node5
[greg@control ansible]$ wget http://materials/hosts.j2
[greg@control ansible]$ vim hosts.j2
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.250.9 node1.lab.example.com node1
172.25.250.10 node2.lab.example.com node2
172.25.250.11 node3.lab.example.com node3
172.25.250.12 node4.lab.example.com node4
172.25.250.13 node5.lab.example.com node5
[greg@control ansible]$ vim hosts.yml
---
- hosts: dev
tasks:
- name: /etc/myhosts
template:
src: hosts.j2
dest: /etc/myhosts
[greg@control ansible]$ ansible-playbook hosts.yml
PLAY [dev] ****************************************************************************
TASK [Gathering Facts] ****************************************************************
ok: [node1]
TASK [/etc/myhosts] *******************************************************************
changed: [node1]
PLAY RECAP ****************************************************************************
node1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[greg@control ansible]$ ansible dev -a 'cat /etc/myhosts'
node1 | CHANGED | rc=0 >>
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.250.9 node1.lab.example.com node1
172.25.250.10 node2.lab.example.com node2
172.25.250.11 node3.lab.example.com node3
172.25.250.12 node4.lab.example.com node4
172.25.250.13 node5.lab.example.com node5
创建密码库
按照下方所述,创建一个 Ansible 库来存储用户密码:
库名称为 /home/greg/ansible/locker.yml
库中含有两个变量,名称如下:
pw_developer,值为 Imadev
pw_manager,值为 Imamgr
用于加密和解密该库的密码为 whenyouwishuponastar
密码存储在文件 /home/greg/ansible/secret.txt 中
[greg@control ansible]$ echo whenyouwishuponastar > /home/greg/ansible/secret.txt
[greg@control ansible]$ chmod 600 /home/greg/ansible/secret.txt
[greg@control ansible]$ vim ansible.cfg
vault_password_file = /home/greg/ansible/secret.txt
[greg@control ansible]$ ansible-vault create locker.yml
pw_developer: Imadev
pw_manager: Imamgr
[greg@control ansible]$ ansible-vault view locker.yml
pw_developer: Imadev
pw_manager: Imamgr
创建用户帐户
从 http://materials/user_list.yml 下载要创建的用户的列表,并将它保存到 /home/greg/ansible
在本次考试中使用在其他位置创建的密码库 /home/greg/ansible/locker.yml 。创建名为 /home/greg/ansible/users.yml 的 playbook ,从而按以下所述创建用户帐户:
职位描述为 developer 的用户应当:
在 dev 和 test 主机组中的受管节点上创建
从 pw_developer 变量分配密码
是补充组 devops 的成员
职位描述为 manager 的用户应当:
在 prod 主机组中的受管节点上创建
从 pw_manager 变量分配密码
是补充组 opsmgr 的成员
密码采用 SHA512 哈希格式。
您的 playbook 应能够在本次考试中使用在其他位置创建的库密码文件 /home/greg/ansible/secret.txt 正常运行。
[greg@control ansible]$ wget http://materials/user_list.yml
[greg@control ansible]$ vim users.yml
---
- name: dev and test create user
hosts: dev,test
vars_files:
- user_list.yml
- locker.yml
tasks:
- name: create group devops
group:
name: devops
state: present
- name: create user1
user:
name: "{{ item.name }}"
groups: devops
password: "{{ pw_developer | password_hash('sha512') }}"
loop: "{{ users }}"
when: item.job == "developer"
- name: prod create user
hosts: prod
vars_files:
- user_list.yml
- locker.yml
tasks:
- name: create group opsmgr
group:
name: opsmgr
state: present
- name: create user2
user:
name: "{{ item.name }}"
groups: opsmgr
password: "{{ pw_manager | password_hash('sha512') }}"
loop: "{{ users }}"
when: item.job == "manager"
[greg@control ansible]$ ansible-playbook users.yml
PLAY [dev and test create user] ***********************************************************************************************************************************************************************************
TASK [Gathering Facts] ********************************************************************************************************************************************************************************************
ok: [node2]
ok: [node1]
TASK [create group devops] ****************************************************************************************************************************************************************************************
ok: [node2]
ok: [node1]
TASK [create user1] ***********************************************************************************************************************************************************************************************
changed: [node2] => (item={'name': 'bob', 'job': 'developer'})
skipping: [node2] => (item={'name': 'sally', 'job': 'manager'})
changed: [node1] => (item={'name': 'bob', 'job': 'developer'})
skipping: [node1] => (item={'name': 'sally', 'job': 'manager'})
changed: [node2] => (item={'name': 'fred', 'job': 'developer'})
changed: [node1] => (item={'name': 'fred', 'job': 'developer'})
PLAY [prod create user] *******************************************************************************************************************************************************************************************
TASK [Gathering Facts] ********************************************************************************************************************************************************************************************
ok: [node3]
ok: [node4]
TASK [create group opsmgr] ****************************************************************************************************************************************************************************************
ok: [node3]
ok: [node4]
TASK [create user2] ***********************************************************************************************************************************************************************************************
skipping: [node3] => (item={'name': 'bob', 'job': 'developer'})
skipping: [node4] => (item={'name': 'bob', 'job': 'developer'})
changed: [node3] => (item={'name': 'sally', 'job': 'manager'})
skipping: [node3] => (item={'name': 'fred', 'job': 'developer'})
changed: [node4] => (item={'name': 'sally', 'job': 'manager'})
skipping: [node4] => (item={'name': 'fred', 'job': 'developer'})
PLAY RECAP ********************************************************************************************************************************************************************************************************
node1 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node2 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node3 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node4 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
标签:name,练习,item,ansible,node1,greg,yml
From: https://www.cnblogs.com/Archer-x/p/16849579.html