1)安装所需软件包 2)在/home/alice/ansible/inventory 文件中设置主机清单,要求: node1 属于 test01 主机组 node2 属于 test02 主机组 node3 和 node4 属于 web 主机组 node5 属于 test05 主机组 web 组属于 webtest 主机组 3)在/home/alice/ansible 目录中创建 ansible.cfg,满足以下需求: 主机清单文件为/home/alice/ansible/inventory playbook 中角色位置为/home/alice/ansible/roles
yum install -y ansible
mkdir ansible
cd ansible
vim inventory
[test01]
node1
[test02]
node2
[web]
node3
node4
[test05]
node5
[webtest:children]
web
vim ansible.cfg
[defaults]
inventory = ./inventory
remote_user = alice
roles_path = ./roles
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
#测试ansible all -m ping
编写脚本/home/alice/ansible/adhoc.sh,用来为所有受管机配置 2 个 yum 仓库。 仓库 1: 名称为 BASE,描述为 software base URL 为 http://study.lab0.example.com/rhel8/BaseOS GPG 签名启用 GPG 密钥 URL 为 http://study.lab0.example.com/rhel8/RPM-GPG-KEY-redhat-release 仓库为启用状态 仓库 2: 名称为 STREAM,描述为 software stream URL 为 http://study.lab0.example.com/rhel8/AppStream GPG 签名启用 GPG 密钥 URL 为 http://study.lab0.example.com/rhel8/RPM-GPG-KEY-redhat-release 仓库为启用状态
vim adhoc.sh
ansible all -m yum_repository -a "name=BASE description='software base' baseurl=http://study.lab0.example.com/rhel8/BaseOS gpgcheck=1 gpgkey=http://study.lab0.example.com/rhel8/RPM-GPG-KEY-redhat-release enabled=1"
ansible all -m yum_repository -a "name=STREAM description='software stream' baseurl=http://study.lab0.example.com/rhel8/AppStream gpgcheck=1 gpgkey=http://study.lab0.example.com/rhel8/RPM-GPG-KEY-redhat-release enabled=1"
创建名为/home/alice/ansible/tools.yml 的 playbook,能够实现以下目的: 1)将 php 和 tftp 软件包安装到 test01、test02 和 web 主机组中的主机上 2)将 RPM Development Tools 软件包组安装到 test01 主机组中的主机上 3)将 test01 主机组中的主机上所有软件包升级到最新版本
---
- hosts: test01,test02,web
tasks:
- yum:
name: php,tftp
- hosts: test01
tasks:
- yum:
name: "@RPM Development Tools"
- yum:
name: "*"
state: latest
编写剧本/home/alice/ansible/jihua.yml 1)在 test02 组中的被管理主机运行 2)为用户 alice 创建计划任务: alice 用户每隔 5 分钟执行 echo "hello tarena"
---
- hosts: test02
tasks:
- cron:
minute: "*/5"
user: alice
job: echo "hello tarena"
安装系统角色,创建 playbook /home/alice/ansible/selinux.yml 要求满足如下条件: 1) 在所有被管理主机运行 2) 使用 selinux 角色 3) 使用角色配置强制状态运行 SElinux
---
- hosts: all
vars:
selinux_policy: targeted
selinux_state: enforcing
roles:
- role: selinux
become: true
安装 RHEL 角色软件包,并创建剧本/home/alice/ansible/timesync.yml,满足以下要求: 1)在 test01 组中的被管理主机运行 2)使用 timesync 角色 3)配置该角色,使用时间服务器 172.25.254.250,并启用 iburst 参数
---
- hosts: test01
vars:
timesync_ntp_servers:
- hostname: 172.25.254.250
iburst: yes
roles:
- timesync
创建剧本/home/alice/ansible/roles/down.yml,用来从以下 URL 下载角色, 并安装到/home/alice/ansible/roles 目录下: http://study.lab0.example.com/roles/haproxy.tar 此角色名为 haproxy http://study.lab0.example.com/roles/myphp.tar 此角色名为 myphp
---
- src: http://study.lab0.example.com/roles/haproxy.tar
name: haproxy
- src: http://study.lab0.example.com/roles/myphp.tar
name: myphp
根据下列要求,在/home/alice/ansible/roles 中创建名为 httpd 的角色: 1)安装 httpd 软件,并能够开机自动运行 2)开启防火墙,并允许 httpd 通过 3)使用模板 index.html.j2,用来创建/var/www/html/index.html 网页, 内容如下(HOSTNAME 是受管理节点的完全域名,IPADDRESS 是 IP 地址): Welcome to HOSTNAME on IPADDRESS 然后创建剧本 /home/alice/ansible/myrole.yml,为 webtest 主机组启用 httpd 角色。
#1.先生成httpd角色 ansible-galaxy init roles/httpd
---
- hosts: webtest
roles:
- httpd
#在httpd角色中template下创建相应的文件这里是index.html.j2
Welcome to {{ansible_fqdn}} on {{ansible_eth0.ipv4.address}}
#在httpd角色中tasks main.yml中写
---
- yum:
name: httpd
- service:
name: httpd
state: started
enabled: 1
- firewalld:
service: http
permanent: yes
immediate: yes
state: enabled
- template:
src: index.html.j2
dest: /var/www/html/index.html
09. 使用之前通过 galaxy 下载的角色
创建剧本/home/alice/ansible/web.yml,满足下列需求: 1)该剧本中包含一个 play,可以在 test05 主机组运行 haproxy 角色 (此角色已经配置好网站的负载均衡服务) 2)多次访问 http://node5.lab0.example.com 可以输出不同主机的欢迎页面 3)该剧本中包含另一个 play,可以在 webtest 主机组运行 myphp 角色 (此角色已经配置好网站的 php 页面) 4)多次访问 http://node5.lab0.example.com/index.php 也输出不同主机的欢迎页面
---
- hosts: test05
roles:
- haproxy
tasks:
- firewalld:
service: http
permanent: yes
immediate: yes
state: enabled
- hosts: webtest
roles:
- myphp
创建剧本 /home/alice/ansible/part.yml,用来为所有受管机完成以下部署: 1)使用 vdc,创建一个分区,大小为 2000MiB 2)使用 ext4 文件系统格式化该逻辑卷 3)如果无法创建要求的大小,应显示错误信息 insufficient free space, 并改为 800MiB 4)如果 vdc 不存在,应显示错误信息 vdc not found 5)不需要挂载逻辑卷
---
- hosts: all
tasks:
- fail:
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
always:
- filesystem:
fstype: ext4
dev: /dev/vdc1
11. 编写剧本远程管理逻辑卷
创建剧本 /home/alice/ansible/lvm.yml,用来为所有受管机完成以下部署: 1)在卷组 search 中创建名为 mylv 的逻辑卷,大小为 1000MiB 2)使用 ext4 文件系统格式化该逻辑卷 3)如果无法创建要求的大小,应显示错误信息 insufficient free space, 并改为 500MiB 4)如果卷组 search 不存在,应显示错误信息 VG not found 5)不需要挂载逻辑卷
---
- hosts: all
tasks:
- fail:
msg: "VG not found"
when: "'search' not in ansible_lvm.vgs"
- block:
- lvol:
vg: search
lv: mylv
size: 1000m
rescue:
- debug:
msg: "insufficient free space"
- lvol:
vg: search
lv: mylv
size: 500m
always:
- filesystem:
fstype: ext4
dev: /dev/search/mylv
从 http://study.lab0.example.com/materials/newhosts.j2 下载模板文件 完成该模板文件,用来生成新主机清单(主机的显示顺序没有要求),结构如下: 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.25.254.101 node1.lab0.example.com node1 172.25.254.102 node2.lab0.example.com node2 172.25.254.103 node3.lab0.example.com node3 172.25.254.104 node4.lab0.example.com node4 172.25.254.105 node5.lab0.example.com node5 创建剧本/home/alice/ansible/newhosts.yml,它将使用上述模板在 test01 主机组的主机上 生成文件/etc/newhosts。
---
- hosts: all
- hosts: test01
tasks:
- template:
src: newhosts.j2
dest: /etc/newhosts
#需要wget 把上面给的网址给下载下来去修改
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
{% for i in groups.all %}
{{hostvars[i].ansible_eth0.ipv4.address}} {{hostvars[i].ansible_fqdn}} {{hostvars[i].ansible_hostname}}
{% endfor %}
创建剧本 /home/alice/ansible/newissue.yml,满足下列要求: 1)在所有清单主机上运行,替换/etc/issue 的内容 2)对于 test01 主机组中的主机,/etc/issue 文件内容为 test01 3)对于 test02 主机组中的主机,/etc/issue 文件内容为 test02 4)对于 web 主机组中的主机,/etc/issue 文件内容为 Webserver
1.在主机清单里面添加
[test01:vars]
yhl=test01
[test02:vars]
yhl=test02
[web:vars]
yhl=Webserver
---
- hosts: all
tasks:
- copy:
content: "{{yhl}}"
dest: /etc/issue
创建剧本/home/alice/ansible/webdev.yml,满足下列要求: 1)在 test01 主机组运行 2)创建目录/webdev,属于 webdev 组,权限为 rwxrwxr-x,具有 SetGID 特殊权限 3)使用符号链接/var/www/html/webdev 链接到/webdev 目录 4)创建文件/webdev/index.html,内容是 It's works! 5)查看 test01 主机组的 web 页面 http://node1/webdev/将显示 It's works !
---
- hosts: test01
tasks:
- group:
name: webdev
- file:
path: /webdev
state: directory
mode: '2755'
group: webdev
- yum:
name: httpd
- service:
name: httpd
state: started
enabled: 1
- firewalld:
service: http
permanent: yes
immediate: yes
state: enabled
- file:
src: /webdev
dest: /var/www/html/webdev
state: link
- copy:
content: "It's works!"
dest: /webdev/index.html
- shell: chcon -R -t httpd_sys_content_t /webdev
创建名为/home/alice/ansible/hardware.yml 的 playbook,满足下列要求: 1)使所有受管理节点从以下 URL 下载文件: http://study.lab0.example.com/materials/hardware.empty 2)并用来生成以下硬件报告信息,存储在各自的/root/hardware.txt 文件中
---
- hosts: all
tasks:
- get_url:
url: http://study.lab0.example.com/materials/hardware.empty
dest: /root/hardware.txt
- replace:
path: /root/hardware.txt
regexp: "inventoryhostname"
replace: "{{ansible_hostname}}"
- replace:
path: /root/hardware.txt
regexp: "memory_in_MB"
replace: "{{ansible_memtotal_mb}}"
- replace:
path: /root/hardware.txt
regexp: "BIOS_version"
replace: "{{ansible_bios_version}}"
- replace:
path: /root/hardware.txt
regexp: "disk_vda_size"
replace: "{{ansible_devices.vda.size}}"
- replace:
path: /root/hardware.txt
regexp: "disk_vdb_size"
replace: "{{ansible_devices.vdb.size if ansible_devices.vdb.size is defined else 'NONE'}}"
创建 ansible 保险库 /home/alice/ansible/passdb.yml,其中有 2 个变量: 1)pw_dev,值为 ab1234 2)pw_man,值为 cd5678 加密和解密该库的密码是 pwd@1234,密码存在/home/alice/ansible/secret.txt 中
#passdb.yml第一个文件
pw_dev: ab1234
pw_man: cd5678
#secret.txt第二个文件
pwd@1234
#生成密钥文件
ansible-vault encrypt passdb.yml --vault-id secret.txt
从以下 URL 下载用户列表,保存到/home/alice/ansible 目录下: http://study.lab0.example.com/materials/name_list.yml 创建剧本/home/alice/ansible/users.yml 的 playbook,满足下列要求: 1)使用之前题目中的 passdb.yml 保险库文件提供的密码做用户密码 2)职位描述为 dev 的用户应在 test01、test02 主机组的受管机上创建, 使用 pw_dev 变量分配密码,是补充组 devops 的成员 3)职位描述为 man 的用户应在 web 主机组的受管机上创建, 使用 pw_man 变量分配密码,是补充组 opsmgr 的成员 4)该 playbook 可以使用之前题目创建的 secret.txt 密码文件运行
---
- hosts: test01,test02
vars_files:
- passdb.yml
- name_list.yml
tasks:
- group:
name: devops
- user:
name: "{{item.name}}"
group: devops
password: "{{pw_dev| password_hash('sha512')}}"
loop: "{{users}}"
when: item.job=='dev'
- hosts: web
vars_files:
- passdb.yml
- name_list.yml
tasks:
- group:
name: opsmgr
- user:
name: "{{item.name}}"
group: opsmgr
password: "{{pw_man| password_hash('sha512')}}"
loop: "{{users}}"
when: item.job=='man'
从以下 URL 下载保险库文件到/home/alice/ansible 目录: http://study.lab0.example.com/materials/topsec.yml 当前的库密码是 banana,新密码是 big_banana,请更新该库密码
ansible-vault rekey topsec.yml