1.安装和配置 Ansible
要求:
按照下方所述,在控制节点 control 上安装和配置 Ansible:
安装所需的软件包
创建名为 /home/alice/ansible/inventory 的静态清单文件,以满足以下要求:
node1 是 dev 主机组的成员
node2 是 test 主机组的成员
node3 和 node4 是 prod 主机组的成员
node5 是 balancers 主机组的成员
prod 组是 webservers 主机组的成员
创建名为 /home/alice/ansible/ansible.cfg 的配置文件,以满足以下要求:
主机清单文件为 /home/alice/ansible/inventory
playbook 中使用的角色的位置包括 /home/alice/ansible/roles
⾃义的collection⽬录在 /home/alice/ansible/mycollection
实现:
sudo yum -y install ansible-core ansible-navigator
mkdir -p /home/alice/ansible/mycollection
vim /home/alice/ansible/inventory
————————————————————————————————————————
[dev]
node1
[test]
node2
[prod]
node3
node4
[balancers]
node5
[webservers:children]
prod
————————————————————————————————————————
cp /etc/ansible/ansible.cfg /home/alice/ansible/ansible.cfg
ansible-config init --disabled > ansible.cfg
vim /home/alice/ansible/ansible.cfg
_________________________________
[defaults]
inventory = /home/alice/ansible/inventory
roles_path = /home/alice/ansible/roles:/usr/share/ansible/roles:/etc/ansbile/roles
collections_path=/home/alice/ansible/mycollection
remote_user = alice
[privilege_escalation]
become = true
———————————————————————————————————
chmod +x ansible.cfg
podman login utility.lab.example.com -u admin -p redhat
ansible-navigator images
验证:
[greg@control ansible]$ ansible all -m ping -o
2.创建和运行 Ansible 临时命令
要求:
编写脚本/home/alice/ansible/yum.yml,为所有受管机配置 yum 仓库
存储库1:
名称为 BASE,描述为 software base
URL 为 http://server1.lab0.example.com/rhel9/BaseOS
GPG 签名启用
GPG 密钥 URL 为 http://server1.lab0.example.com/rhel9/RPM-GPG-KEY-redhat-release
仓库为启用状态
存储库2:
名称为 STREAM,描述为 software stream
URL 为 http://server1.lab0.example.com/rhel9/AppStream
GPG 签名启用
GPG 密钥 URL 为 http://server1.lab0.example.com/rhel9/RPM-GPG-KEY-redhat-release
仓库为启用状态
实现:
vim yum.yml
_____________________________________________
- name: p1
hosts: all
tasks:
- yum_repository:
name: BASE
description: software base
baseurl: http://server1.lab0.example.com/rhel9/BaseOS
gpgkey: http://server1.lab0.example.com/rhel9/RPM-GPG-KEY-redhat-release
enabled: yes
gpgcheck: yes
- yum_repository:
name: STREAM
description: software stream
baseurl: http://server1.lab0.example.com/rhel9/AppStream
gpgkey: http://server1.lab0.example.com/rhel9/RPM-GPG-KEY-redhat-release
enabled: yes
gpgcheck: yes
_______________________________________________
ansible-playbook yum.yml
帮助:
[greg@control ansible]$ ansible-doc -l | grep yum
yum Manages packa...
yum_repository Add or remove...
验证:
[alice@control ansible]$ ansible all -a "yum repolist"
3.安装软件包
要求:
创建一个名为 /home/alice/ansible/packages.yml 的 playbook :
将 php 和 mariadb 软件包安装到 dev、test 和 prod 主机组中的主机上
将 RPM Development Tools 软件包组安装到 dev 主机组中的主机上
将 dev 主机组中主机上的所有软件包更新为最新版本
实现:
vim packages.yml
——————————————————————————————————————————————————————————————
---
- name: p1
hosts: dev,test,prod
tasks:
- name: a1
yum:
name: php,mariadb
state: present
- name: p2
hosts: dev
tasks:
- name: b1
yum:
name: "@RPM Development Tools"
state: present
- name: b2
yum:
name: "*"
state: latest
———————————————————————————————————————————————————————————————
ansible-navigator run packages.yml -m stdout
验证:
ansible dev,test,prod -a "yum info php"
ansible dev,test,prod -a "yum info mariadb"
ansible dev -a "yum grouplist" # 验证软件包组
ansible dev -a "yum update"
4.使用 RHEL 系统角色-1
要求:
安装 RHEL 系统角色软件包,并创建符合以下条件的 playbook /home/greg/ansible/selinux.yml :
在所有受管节点上运行
使用 selinux 角色
配置该角色,配置被管理节点的 selinux 为enforcing
实现:
帮助:
[greg@control ansible]$ sudo yum search roles
Last metadata expiration check: 0:44:14 ago on Wed 25 Oct 2023 07:35:54 AM GMT.
============================= Name Matched: roles ==============================
rhel-system-roles.noarch : Set of interfaces for unified system management
============================ Summary Matched: roles ============================
ansible-freeipa.noarch : Roles and playbooks to deploy FreeIPA servers, replicas
: and clients
sudo yum -y install rhel-system-roles.noarch //安装角色包
cp /usr/share/doc/rhel-system-roles/selinux/example-selinux-playbook.yml selinux.yml //复制角色
vim selinux.yml
只保留
——————————————————————————————————————
---
- hosts: all
become: true
become_method: sudo
become_user: root
vars:
selinux_policy: targeted
selinux_state: enforcing
tasks:
- name: reapply the role
include_role:
name: rhel-system-roles.selinux
——————————————————————————————————————
ansible-playbook selinux.yml
验证:
ansible all -m shell -a 'grep "^SELINUX=" /etc/selinux/config'
4.使用 RHEL 系统角色-2
要求:
安装RHEL角色软件包,并创建剧本/home/alice/ansible/timesync.yml,满足以下要求:
1)在dev组中的被管理主机运行
2)使用timesync角色
3)配置该角色,使用时间服务器172.25.0.254,并启用iburst参数
实现:
mkdir -p /home/alice/ansible/roles
cp -r /usr/share/ansible/roles/rhel-system-roles.timesync/ /home/alice/ansible/roles/timesync
vim timesync.yml
___________________________________________________________
- name: p1
hosts: dev
vars:
timesync_ntp_servers:
- hostname: 172.25.0.254
iburst: yes
roles:
- timesync
————————————————————————————————————————————————————————————
ansible-playbook timesync.yml
验证:
ansible all -m shell -a 'cat /etc/chrony.conf |grep server'
5.配conllection
要求:
从http://server1.lab0.example.com/materials/下载如下 collection 并安装到/home/alice/ansible/collections 目录下
ansible-posix-1.5.1.tar.gz
community-general-6.3.0.tar.gz
上面3个安装在 /home/alice/ansible/mycollection 目录中
实现:
vim requirements.yml
——————————————————————————————
---
collections:
- name: http://server1.lab0.example.com/materials/ansible-posix-1.5.1.tar.gz
- name: http://server1.lab0.example.com/materials/community-general-6.3.0.tar.gz
———————————————————————————————
ansible-galaxy collection install -r requirements.yml -p /home/alice/ansible/mycollection
验证:
ansible-navigator collections
ansible-navigator doc community.general.filesystem -m stdout
6.使用 Ansible Galaxy 安装角色
要求:
使用 Ansible Galaxy 和要求文件 /home/alice/ansible/roles/requirements.yml 。从以下 URL 下载角色并安装到 /home/alice/ansible/roles :
http://materials/haproxy.tar 此角色的名称应当为 balancer
http://materials/phpinfo.tar 此角色的名称应当为 phpinfo
实现:
mkdir roles
vim roles/requirements.yml
————————————————————————————————————————————
---
- src: http://materials/haproxy.tar
name: balancer
- src: http://materials/phpinfo.tar
name: phpinfo
————————————————————————————————————————————
ansible-galaxy install -r roles/requirements.yml -p roles/
验证:
ls /home/greg/ansible/roles/
7.创建和使用角色
要求:
根据下列要求,在 /home/alice/ansible/roles 中创建名为 apache 的角色:
httpd 软件包已安装,设为在系统启动时启用并启动
防火墙已启用并正在运行,并使用允许访问 Web 服务器的规则
模板文件 index.html.j2 已存在,用于创建具有以下输出的文件 /var/www/html/index.html :
Welcome to HOSTNAME on IPADDRESS
其中,HOSTNAME 是受管节点的完全限定域名,IPADDRESS 则是受管节点的 IP 地址。
创建一个名为 /home/alice/ansible/apache.yml 的 playbook:
该 play 在 webservers 主机组中的主机上运行并将使用 apache 角色
实现:
cd roles/
ansible-galaxy init apache
vim apache/tasks/main.yml
————————————————————————————————————————————————————————
---
- name: p1
yum:
name:
- httpd
state: latest
- name: p2
service:
name: httpd
state: started
enabled: yes
- name: p3
template:
src: index.html.j2
dest: /var/www/html/index.html
————————————————————————————————————————————————————
vim apache/templates/index.html.j2
————————————————————————————————————————————————————————————————————
Welcome to {{ ansible_fqdn }} on {{ ansible_default_ipv4.address }}
————————————————————————————————————————————————————————————————————
cd
cd ansible/
vim apache.yml
————————————————————————————————————————————
---
- name: p1
hosts: webservers
roles:
- apache
————————————————————————————————————————————
ansible-navigator run apache.yml -m stdout
验证:
[greg@control ansible]$ curl node3 node4
Welcome to node3.lab.example.com on 172.25.250.11
Welcome to node4.lab.example.com on 172.25.250.12
8.从 Ansible Galaxy 使用角色
要求:
从 Ansible Galaxy 使用角色
根据下列要求,创建一个名为 /home/alice/ansible/roles.yml 的 playbook :
playbook 中包含一个 play, 该 play 在 balancers 主机组中的主机上运行并将使用 balancer 角色
此角色配置一项服务,以在 webservers 主机组中的主机之间平衡 Web 服务器请求的负载。
浏览到 balancers 主机组中的主机(例如 http://172.25.250.13 )将生成以下输出:
Welcome to node3.lab.example.com on 172.25.250.11
重新加载浏览器将从另一 Web 服务器生成输出:
Welcome to node4.lab.example.com on 172.25.250.12
playbook 中包含一个 play, 该 play 在 webservers 主机组中的主机上运行并将使用 phpinfo 角色
请通过 URL /hello.php 浏览到 webservers 主机组中的主机将生成以下输出:
Hello PHP World from FQDN
其中,FQDN 是主机的完全限定名称。
Hello PHP World from node3.lab.example.com
另外还有 PHP 配置的各种详细信息,如安装的 PHP 版本等。
同样,浏览到 http://172.25.250.12/hello.php 会生成以下输出:
Hello PHP World from node4.lab.example.com
另外还有 PHP 配置的各种详细信息,如安装的 PHP 版本等
实现:
vim roles.yml
————————————————————————————
- name: a1
hosts: balancers
roles:
- balancer
- name: a2
hosts: webservers
roles:
- phpinfo
————————————————————————————
ansible-navigator run roles.yml -m stdout
验证:
[greg@control ansible]$ curl node5 node4
Welcome to node4.lab.example.com on 172.25.250.12
Welcome to node4.lab.example.com on 172.25.250.12
9.创建和使用逻辑卷-1
要求:
创建一个名为 /home/alice/ansible/lv.yml 的 playbook ,它将在所有受管节点上运行以执行下列任务:
创建符合以下要求的逻辑卷:
逻辑卷创建在 research 卷组中
逻辑卷名称为 data
逻辑卷大小为 1500 MiB
使用 ext4 文件系统格式化逻辑卷
如果无法创建请求的逻辑卷大小,应显示错误信息
Could not create logical volume of that size ,并且应改为使用大小 800 MiB。
如果卷组 research 不存在,应显示错误信息
Volume group done not exist
不要以任何方式挂载逻辑卷
实现:
vim lv.yml
————————————————————————————————————————————————————————————————————————————————
---
- name: p1
hosts: all
tasks:
- name: c1
debug:
msg: Volume group done not exist
when: ansible_lvm.vgs.research is undefined
- block:
- name: a1
lvol:
vg: research
lv: data
size: 1500M
rescue:
- name: c2
debug:
msg: Could not create logical volume of that size
- name: a2
lvol:
vg: research
lv: data
size: 800M
when: ansible_lvm.vgs.research is defined
always:
- name: a3
filesystem:
fstype: ext4
dev: /dev/research/data
————————————————————————————————————————————————————————————————————————————————
ansible-navigator run lv.yml -m stdout
验证:
[greg@control ansible]$ ansible all -a "vgs"
node2 | CHANGED | rc=0 >>
VG #PV #LV #SN Attr VSize VFree
research 1 1 0 wz--n- <2.00g 544.00m
node3 | CHANGED | rc=0 >>
VG #PV #LV #SN Attr VSize VFree
research 1 1 0 wz--n- 1020.00m 220.00m
node4 | CHANGED | rc=0 >>
VG #PV #LV #SN Attr VSize VFree
research 1 1 0 wz--n- <2.00g 544.00m
node5 | CHANGED | rc=0 >>
VG #PV #LV #SN Attr VSize VFree
research 1 1 0 wz--n- <2.00g 544.00m
node1 | CHANGED | rc=0 >>
9.编写剧本管理远程分区-2
要求:
创建剧本/home/alice/ansible/part.yml,用来为所有受管机完成以下部署:
1)使用vdc,创建一个分区,大小为2000MiB
2)使用ext4文件系统格式化该逻辑卷
3)如果无法创建要求的大小,应显示错误信息insufficient free space,
并改为800MiB
4)如果vdc不存在,应显示错误信息vdc not found
5)不需要挂载逻辑卷
实现:
---
- hosts: all
tasks:
- debug:
msg: "vdc not found"
when: "'vdc' not in ansible_devices"
- block:
- parted:
device: /dev/vdc
number: 1
state: present
part_end: 2GiB
rescue:
- debug:
msg: "insufficient free space"
- parted:
device: /dev/vdc
number: 1
state: present
part_end: 800MiB
when: "'vdc' in ansible_devices"
always:
- filesystem:
fstype: ext4
dev: /dev/vdc1
- mount:
path: /newpart
src: /dev/vdc1
fstype: ext4
state: mounted
验证:
10.生成主机文件
要求:
将一个初始模板文件从 http://materials/hosts.j2 下载到 /home/alice/ansible
完成该模板,以便用它生成以下文件:针对每个清单主机包含一行内容,其格式与 /etc/hosts 相同
创建名为 /home/alice/ansible/hosts.yml 的 playbook ,它将使用此模板在 dev 主机组中的主机上生成文件 /etc/myhosts
实现:
wget http://materials/hosts.j2
vim hosts.j2
——————————————————————————————————————————————————————————————————————————
{% for i in groups['all'] %}
{{hostvars[i].ansible_default_ipv4.address}} {{hostvars[i].ansible_fqdn}} {{hostvars[i].ansible_hostname}}
{% endfor %}
——————————————————————————————————————————————————————————————————————————
vim hosts.yml
————————————————————————————————————————————————————————————————————
---
- name:
hosts: all
tasks:
- name: Template a file
template:
src: /home/greg/ansible/hosts.j2
dest: /etc/myhosts
when: "'dev' in group_names"
————————————————————————————————————————————————————————————————————
ansible-navigator run hosts.yml -m stdout
验证:
[greg@control ansible]$ ansible dev -a "cat /etc/hosts"
node1 | CHANGED | rc=0 >>
127.0.0.1 localhost.localdomain localhost
172.25.254.254 classroom.example.com classroom
172.25.254.254 content.example.com content
172.25.254.254 materials.example.com materials
### rht-vm-hosts file listing the entries to be appended to /etc/hosts
172.25.250.254 bastion.lab.example.com bastion
172.25.250.9 workstation.lab.example.com workstation
172.25.250.10 servera.lab.example.com servera
172.25.250.11 serverb.lab.example.com serverb
172.25.250.12 serverc.lab.example.com serverc
11.修改文件内容
要求:
按照下方所述,创建一个名为 /home/greg/ansible/issue.yml 的 playbook :
该 playbook 将在所有清单主机上运行
该 playbook 会将 /etc/issue 的内容替换为下方所示的一行文本:
在 dev 主机组中的主机上,这行文本显示 为:Development
在 test 主机组中的主机上,这行文本显示 为:Test
在 prod 主机组中的主机上,这行文本显示 为:Production
实现:
vim issue.yml
————————————————————————————————————————————————————————————
---
- name: p1
hosts: all
tasks:
- name: Copy1
copy:
content: 'Development'
dest: /etc/issue
when: "'dev' in group_names"
- name: Copy2
copy:
content: 'Test'
dest: /etc/issue
when: "'test' in group_names"
- name: Copy3
copy:
content: 'Production'
dest: /etc/issue
when: "'prod' in group_names"
————————————————————————————————————————————————————————————
ansible-navigator run issue.yml -m stdout
验证:
[greg@control ansible]$ ansible all -a "cat /etc/issue"
node5 | CHANGED | rc=0 >>
\S
Kernel \r on an \m
node2 | CHANGED | rc=0 >>
Test
node4 | CHANGED | rc=0 >>
Production
node3 | CHANGED | rc=0 >>
Production
node1 | CHANGED | rc=0 >>
Development
12.创建 Web 内容目录
要求:
按照下方所述,创建一个名为 /home/greg/ansible/webcontent.yml 的 playbook :
该 playbook 在 dev 主机组中的受管节点上运行
创建符合下列要求的目录 /webdev :
所有者为 webdev 组
具有常规权限:owner=read+write+execute , group=read+write+execute ,other=read+execute
具有特殊权限:设置组 ID
用符号链接将 /var/www/html/webdev 链接到 /webdev
创建文件 /webdev/index.html ,其中包含如下所示的单行文件: Development
在 dev 主机组中主机上浏览此目录(例如 http://172.25.250.9/webdev/ )将生成以下输出:
Development
实现:
vim webcontent.yml
————————————————————————————————————————————————————————————————————
---
- name: webcontent
hosts: dev
roles:
- apache
tasks:
- name: p1
file:
path: /webdev
state: directory
mode: '2775'
group: webdev
- name: p2
file:
src: /webdev
dest: /var/www/html/webdev
state: link
- name: p3
copy:
content: 'Development'
dest: /webdev/index.html
setype: httpd_sys_content_t
————————————————————————————————————————————————————————————————
ansible-navigator run webcontent.yml -m stdout
验证:
[greg@control ansible]$ curl node1/webdev/index.html
Development
13.生成硬件报告
要求:
创建一个名为 /home/alice/ansible/hwreport.yml 的 playbook ,它将在所有受管节点上生成含有以下信息的输出文件 /root/hardware.txt :
清单主机名称
以 MB 表示的总内存大小
BIOS 版本
磁盘设备 vda 的大小
磁盘设备 vdb 的大小
输出文件中的每一行含有一个 key=value 对。
您的 playbook 应当:
从 http://server1.lab0.example.com/materials/hardware.empty下载文件,并将它保存为 hardware.empty
使用正确的值改为 hardware.empty
如果硬件项不存在,相关的值应设为 NONE
实现:
vim hardware.yml
————————————————————————————————————————————————————————————————————————
---
- name: get hwreport
hosts: all
tasks:
- name: Create report file
get_url:
url: http://server1.lab0.example.com/materials/hardware.empty
dest: /root/hardware.txt
- name: get inventory_hostname
replace:
path: /root/hardware.txt
regexp: 'inventoryhostname'
replace: "{{ inventory_hostname }}"
- name: get mem
replace:
path: /root/hardware.txt
regexp: 'memory_in_MB'
replace: "{{ ansible_memtotal_mb }}"
- name: get bios
replace:
path: /root/hardware.txt
regexp: 'BIOS_version'
replace: "{{ ansible_bios_version }}"
- name: get vda
replace:
path: /root/hardware.txt
regexp: 'disk_vda_size'
replace: "{{ ansible_devices.vda.size if ansible_devices.vda.size is defined else 'NONE'}}"
- name: get vdb
replace:
path: /root/hardware.txt
regexp: 'disk_vdb_size'
replace: "{{ ansible_devices.vdb.size if ansible_devices.vdb.size is defined else 'NONE'}}"
——————————————————————————————————————————————————————————————————————————————————————
ansible-navigator run hardware.yml -m stdout
验证:
[greg@control ansible]$ ansible all -a 'cat /root/hwreport.txt'
node2 | CHANGED | rc=0 >>
# Hardware report
HOST=node2
MEMORY=809
BIOS=1.11.1-3.module+el8+2529+a9686a4d
DISK_SIZE_VDA=12.00 GB
DISK_SIZE_VDB=2.00 GB
node4 | CHANGED | rc=0 >>
# Hardware report
HOST=node4
MEMORY=809
BIOS=1.11.1-3.module+el8+2529+a9686a4d
DISK_SIZE_VDA=12.00 GB
DISK_SIZE_VDB=2.00 GB
node3 | CHANGED | rc=0 >>
# Hardware report
HOST=node3
MEMORY=809
BIOS=1.11.1-3.module+el8+2529+a9686a4d
DISK_SIZE_VDA=11.00 GB
DISK_SIZE_VDB=1.00 GB
node5 | CHANGED | rc=0 >>
# Hardware report
HOST=node5
MEMORY=809
BIOS=1.11.1-3.module+el8+2529+a9686a4d
DISK_SIZE_VDA=12.00 GB
DISK_SIZE_VDB=2.00 GB
node1 | CHANGED | rc=0 >>
# Hardware report
HOST=node1
MEMORY=1817
BIOS=1.11.1-3.module+el8+2529+a9686a4d
DISK_SIZE_VDA=20.00 GB
DISK_SIZE_VDB=NONE
14.创建密码库
要求:
按照下方所述,创建一个 Ansible 库来存储用户密码:
库名称为 /home/greg/ansible/locker.yml
库中含有两个变量,名称如下:
pw_developer,值为 Imadev
pw_manager,值为 Imamgr
用于加密和解密该库的密码为 whenyouwishuponastar
密码存储在文件 /home/alice/ansible/secret.txt 中
实现:
vim locker.yml
——————————————————————————————————————————
---
pw_developer: Imadev
pw_manager: Imamgr
——————————————————————————————————————————
echo "whenyouwishuponastar" > secret.txt
ansible-vault encrypt locker.yml --vault-password-file=/home/alice/ansible/secret.txt
验证:
ansible-vault view locker.yml
15.创建用户帐户
要求:
从 http://materials/user_list.yml 下载要创建的用户的列表,并将它保存到 /home/greg/ansible
在本次练习中使用在其他位置创建的密码库 /home/alice/ansible/locker.yml 。创建名为 /home/alice/ansible/users.yml 的 playbook ,从而按以下所述创建用户帐户:
职位描述为 developer 的用户应当:
在 dev 和 test 主机组中的受管节点上创建
从 pw_developer 变量分配密码
是补充组 devops 的成员
密码最大有效期30天
职位描述为 manager 的用户应当:
在 prod 主机组中的受管节点上创建
从 pw_manager 变量分配密码
是补充组 opsmgr 的成员
uid对应
密码最大有效期30天
密码采用 SHA512 哈希格式
您的 playbook 应能够在本次练习中使用在其他位置创建的库密码文件 /home/alice/ansible/secret.txt 正常运行
实现:
wget http://materials/user_list.yml
vim users.yml
——————————————————————————————————————————————————————————————
---
- name: p1
hosts: dev,test
vars_files: //引入两个变量文件
- locker.yml
- user_list.yml
tasks:
- name: a1 //确保此组存在
group:
name: devops
state: present
- name: a2 //创建用户
user:
name: "{{ item.name }}"
groups: devops
password: "{{ pw_developer | password_hash('sha512') }}"
password_expire_max: 30
uid: "{{item.uid}}"
loop: "{{ users }}"
when: item.job == "developer"
- name: p2
hosts: prod
vars_files:
- locker.yml
- user_list.yml
tasks:
- name: b1
group:
name: opsmgr
state: present
- name: b2
user:
name: "{{ item.name }}"
groups: opsmgr
password: "{{ pw_manager | password_hash('sha512') }}"
password_expire_max: 30
uid: "{{item.uid}}"
loop: "{{ users }}"
when: item.job == "manager"
————————————————————————————————————————————————————————————————————————————
ansible-navigator run users.yml -m stdout --vault-password-file secret.txt
验证:
[greg@control ansible]$ cat user_list.yml
users:
- name: bob
job: developer
- name: sally
job: manager
- name: fred
job: developer
16.更新 Ansible 库的密钥
要求:
按照下方所述,更新现有 Ansible 库的密钥:
从 http://materials/salaries.yml 下载 Ansible 库到 /home/greg/ansible
当前的库密码为 insecure8sure
新的库密码为 bbs2you9527
库使用新密码保持加密状态
实现:
先注释上题的指定密码文件的路径
wget http://materials/salaries.yml
ansible-vault rekey salaries.yml
> 输入密码验证身份(旧密码)
> 需入要更新的密码(新密码)
> 再次确认(新密码)
验证:
[greg@control ansible]$ ansible-vault view salaries.yml
Vault password:
haha
[greg@control ansible]$ cat salaries.yml
$ANSIBLE_VAULT;1.1;AES256
61666135396432653636363962623530383432633061306630613531356465623130643863356364
6430663837333761353631646539653939373637386635340a666664653938386262656633626334
61306630666238316236303939646631376635636132316533386533316432333563333531383665
6535333635653430630a646238626431663330346235336339393361393963366462383235323333
6335
17.配置 cron 作业
要求:
编写剧本/home/alice/ansible/cron.yml
1)在test 组中的被管理主机运行
2)为用户alice创建计划任务: alice用户每隔5分钟执行echo "hello tarena"
实现:
vim cron.yml
————————————————————————————————————————————————
---
- name: p1
hosts: test
tasks:
- name: Ensure a job that runs at 2 minute
cron:
name: jh
minute: "*/2"
job: 'echo "hello tarena"'
user: alice
——————————————————————————————————————————————————
ansible-navigator run cron.yml -m stdout
验证:
ansible test -m shell -a 'crontab -l'