考试有六个虚拟机,其中一个需要操作ansible,考试需要greg user下的操作。其他五台机器是受控机器。机器密码都是123(根据考试操作)。
安装和配置 Ansible
在控制节点http://control.example.com上安装和配置Ansible,如下所示:
安装所需的软件包创建名为 /home/greg/ansible/inventory 的静态清单文件,以满足以下要求:node1 是 dev 主机组的成员node2 是 test 主机组的成员node3 和 node4 是 prod 主机组的成员node5 是 balancers 主机组的成员prod 组是 webservers 主机组的成员创建名为 /home/greg/ansible/ansible.cfg 的配置文件,以满足以下要求:主机清单文件为 /home/greg/ansible/inventoryplaybook 中使用的角色的位置包括 /home/greg/ansible/roles
$ sudo yum install-y ansi ble $ mkdir-p/home/Greg/ansi ble/roles $ CD/home/Greg/ansi ble $ CP/etc/ansi ble/ansi ble . CFG。$ vim/home/Greg/ansible/Inventory[all:vars]ansi ble _ password = 123[dev]node 1[test]node 2[prod]node 3 node 4[balancers]node 5[web servers:children]prod # se,Exit $ vim ansi ble . CFG[defaults]Inventory =/home/Greg/ansi ble/Inventory roles _ path =/home/Greg/ansi ble/role host _ key _ checking = false remote _ user = root #保存并退出创建和运行ansi ble临时命令。作为系统管理员,您需要在受管节点上安装软件。
根据正文,创建一个名为/home/greg/Ansible/adhoc.sh的shell脚本,该脚本将用Ansible临时命令在每个托管节点上安装yum存储库:
Repository 1:
存储库的名称为 EX294_BASE描述为 EX294 base software基础 URL 为 http://xxx.example.com.com/BaseOSGPG 签名检查为启用状态GPG 密钥 URL 为 http://xxx.example.com/RHEL/RPM-GPG-KEY-redhat-release存储库为启用状态
储存库2:
存储库的名称为 EX294_STREAM描述为 EX294 stream software基础 URL 为 http://xxx.example.com.com/AppStreamGPG 签名检查为启用状态GPG 密钥 URL 为 http://xxx.example.com/RHEL/RPM-GPG-KEY-redhat-release存储库为启用状态
vim/home/Greg/ansi ble/ad hoc . sh #!/bin/Bashan sible all-m yum _ repository-a \\ & # 39;name = & # 34EX294 _ BASE & # 34\\ description = & # 34EX294基础软件& # 34;\\ baseurl = & # 34http://xxx.example.com.com/BaseOS" \\ gpg check = yes \\ gpg key = & # 34;http://xxx.example.com/RHEL/RPM-GPG-KEY-redhat-release" \\使能=是& # 39;ansi ble all-m yum _ repository-a \\ & # 39;name = & # 34EX294 _ STREAM & # 34\\ description = & # 34EX294流软件& # 34;\\ baseurl = & # 34xxx.example.com/AppStream" \\ gpg check = yes \\ gpg key = & # 34;http://xxx.example.com/RHEL/RPM-GPG-KEY-redhat-release" \\使能=是& # 39;安装软件包以创建名为/home/Greg/ansi ble/packages . yml的剧本:
将 php 和 mariadb 软件包安装到 dev、test 和 prod 主机组中的主机上将 RPM Development Tools 软件包组安装到 dev 主机组中的主机上将 dev 主机组中主机上的所有软件包更新为最新版本
vim/home/Greg/ansi ble/packages . yml-name:安装软件包hosts: dev,test,prodtasks:-name:安装最新版本yum:name:& # 34;{ { item } } & # 34state:最新循环:- php – mariadb – block: – name:安装& # 39;@RPM开发工具& # 39;包组yum:name:& # 34;@RPM开发工具& # 34;状态:出席时间:& # 34;'dev & # 39在group _ names & # 34- name:升级所有包yum:name:& # 39;*'状态:最晚时间:& # 34;'dev & # 39在group _ names & # 34ansi ble-playbook/home/Greg/ansi ble/packages . yml使用RHEL系统角色安装RHEL系统角色包,并创建满足以下条件的playbook/home/Greg/ansi ble/time sync . yml:
在所有受管节点上运行使用 timesync 角色配置该角色,以使用当前有效的 NTP 提供商配置该角色,以使用时间服务器 172.20.20.254配置该角色,以启用 iburst 参数
$ sudo yum-y install rhel-system-Roles $ vim ansi ble . CFG # Roles _ path =/Home/Greg/ansi ble/Roles:/usr/share/ansi ble/Roles $ ansi ble-galaxy list $ CP/usr/share/doc/rhel-system-Roles/time sync/example-time sync-playbook . yml/Home/Greg/ansi ble/time sync . yml-hosts:all vars:time sync _
httpd 软件包已安装,设为在系统启动时启用并启动防火墙已启用并正在运行,并使用允许访问 Web 服务器的规则模板文件 index.html.j2 已存在,用于创建具有以下输出的文件 /var/www/html/index.html :
Welcome to HOSTNAME on IPADDRESS
其中,HOSTNAME 是受管节点的完全限定域名,IPADDRESS 则是受管节点的 IP 地址。创建 playbook /home/greg/ansible/apache.yml ,使用apache 的角色,在 webservers 主机组。
$ CD roles/$ ansi ble-galaxy init Apache $ CD..$ ansi ble-Galaxy list $ vim Roles/Apache/tasks/main . yml-name:安装最新版本的Apache yum:name:httpd state:latest-name:启动服务httpd,如果未启动服务:name:httpd state:started enabled:yes-firewalld:service:http permanent:yes state:enabled immediate:yes-name:Template a file Template:src:index . html . J2 dest://var/www/html/index . html $ vim Roles/Apache/templates/index . html
playbook 中包含一个 play, 该 play 在 balancers 主机组中的主机上运行并将使用 balancer 角色。此角色配置一项服务,以在 webservers 主机组中的主机之间平衡 Web 服务器请求的负载。浏览到 balancers 主机组中的主机(例如 http://node5.example.com/)将生成以下输出:
Welcom to http://node3.example.com on 172.24.22.8重新加载浏览器将从另一 Web 服务器生成输出:
Welcom to http://node4.example.com on 172.24.22.9playbook 中包含一个 play, 该 play 在 webservers 主机组中的主机上运行并将使用 phpinfo 角色。请通过 URL /hello.php 浏览到 webservers 主机组中的主机将生成以下输出:
Hello PHP World from FQDN
其中,FQDN 是主机的完全限定名称。例如,浏览到 http://node3.example.com/hello.php 会生成以下输出:
Hello PHP World from http://node3.example.com
另外还有 PHP 配置的各种详细信息,如安装的 PHP 版本等。同样,浏览到 http://node4.example.com/hello.php 会生成以下输出:
Hello PHP World from
http://node4.example.com
另外还有 PHP 配置的各种详细信息,如安装的 PHP 版本等
$ vim/home/Greg/ansi ble/roles . yml-name:one hosts:web servers roles:-Apache-name:two hosts:balancers roles:-balancer-name:San hosts:web servers roles:-phpinfo $ ansi ble-playbook roles . yml创建并使用逻辑卷创建名为/home/greg/ansible/lv.yml的剧本,该剧本将在所有受管节点上运行,以执行以下任务:
创建符合以下要求的逻辑卷:逻辑卷创建在 research 卷组中逻辑卷名称为 data逻辑卷大小为 1500 MiB使用 ext4 文件系统格式化逻辑卷如果无法创建请求的逻辑卷大小,应显示错误信息
Could not create logical volume of that size,并且应改为使用大小 800 MiB。如果卷组 research 不存在,应显示错误信息
Volume group done not exist。不要以任何方式挂载逻辑卷
$ vim/home/Greg/ansi Ble/LV . yml- name:创建并使用逻辑卷主机:所有任务:-block:-name:创建1500m的逻辑卷lvol: VG: research LV:数据大小:1500-name:创建e. xt4文件系统:fs type:ext 4 dev:/dev/research/data rescue:-debug:msg:无法创建该大小的逻辑卷-name:创建800m的逻辑卷lvol: vg: research lv:数据大小:800 w when:ansi Ble _ 1
将一个初始模板文件从 http://rhgls.realm8.example.com/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.242.6 http://node1.realm8.example.com node1
172.242.7 http://node2.realm8.example.com node2
172.242.8 http://node3.realm8.example.com node3
172.242.9 http://node4.realm8.example.com node4
172.242.10 http://node5.realm8.example.com node5
注:清单主机名称的显示顺序不重要。
$ wget http://materials/hosts . J2 $ vim hosts . j 2127 . 0 . 0 . 1 localhost localhost . local domain localhost 4 localhost 4 . local domain 4::1 localhost localhost localhost . local domain localhost 6 . local domain { % for host in groups[& # 39;所有& # 39;]% } { { host vars[host][& # 39;ansible _ facts & # 39]['默认_ ipv4 & # 39]['地址& # 39;]} } { { host vars[host][& # 39;ansible _ facts & # 39]['fqdn & # 39]} } { { host vars[host][& # 39;ansible _ facts & # 39]['主机名& # 39;]} } { % end for % } $ vim hosts . yml-name:生成主机文件hosts:所有任务:-name:将文件模板化到/etc/myhosts模板:src:/home/Greg/ansi ble/hosts . J2 dest:/etc/myhosts when:& #。"dev & # 34在group _ names & # 39$ ansible-playbook hosts.yml修改文件内容
创建一个名为/home/greg/ansible/issue.yml的剧本,如下所示:
该 playbook 将在所有清单主机上运行该 playbook 会将 /etc/issue 的内容替换为下方所示的一行文本:在 dev 主机组中的主机上,这行文本显示 为:Development在 test 主机组中的主机上,这行文本显示 为:Test在 prod 主机组中的主机上,这行文本显示 为:Production
vim/home/Greg/ansi ble/issue . yml-name:修改文件内容主机:所有任务:-name:使用内联内容复制1 copy:content:& # 39;发展& # 39;dest:/etc/issue when:& # 34;inventory _ hostname in groups . dev & # 34;- name:使用内嵌内容复制2 Copy:content:& # 39;测试& # 39;dest:/etc/issue when:& # 34;groups.test中的inventory _ hostname & # 34;- name:使用内嵌内容复制3 Copy:content:& # 39;生产& # 39;dest:/etc/issue when:& # 34;groups.prod & # 34ansi ble-playbook/home/Greg/ansi ble/issue . yml创建Web内容目录
创建名为/home/Greg/ansi ble/Web content . yml的剧本,如下所示:
该 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://node1.realm8.example.com/webdev)将生成以下输出:Development
vim/home/Greg/ansi ble/web content . yml-name:创建web内容目录hosts: devtasks:-name:如果目录不存在,则创建一个目录file:path:/webdevstate:directory group:webdevmode:& # 39;2775'- name:创建符号链接文件:src:/web dev dest:/var/www/html/web dev state:link-name:使用内联内容复制Copy:content:& # 39;发展& # 39;dest:/web dev/index . html setype:httpd _ sys _ content _ tans ible-Playbook/home/Greg/ansi ble/web content . yml生成硬件报告
创建一个名为/home/Greg/ansi ble/Playbook of HW Report . yml的硬件报告,该报告将生成一个输出文件/root/hwreport.txt,其中包含所有受管节点的以下信息:
清单主机名称以 MB 表示的总内存大小BIOS 版本磁盘设备 vda 的大小磁盘设备 vdb 的大小输出文件中的每一行含有一个 key=value 对。
您的 playbook 应当:从 http://rhgl.realm8.example.com/materials/hwreport.empty 下载文件,并将它保存为 /root/hwreport.txt使用正确的值改为 /root/hwreport.txt如果硬件项不存在,相关的值应设为 NONE
$ vim/home/Greg/ansi ble/HW report . yml-name:生成硬件报告hosts:all vars:HW _ all:-HW _ name:hosthw _ cont:& # 34;{{清单主机名|默认(& # 39;无& # 39;,真)} } & # 34;-硬件名称:内存硬件名称:& # 34;{ { ansi ble _ mem total _ MB | default(& # 39;无& # 39;,真)} } & # 34;-HW _ name:BIOS HW _ cont:& # 34;{ { ansi ble _ BIOS _ version | default(& # 39;无& # 39;,真)} } & # 34;-硬件名称:磁盘大小VDA硬件控制:& # 34;{ { ansi ble _ devices . vda . size | default(& # 39;无& # 39;,真)} } & # 34;-硬件名称:磁盘大小VDB硬件控制:& # 34;{ { ansi ble _ devices . vdb . size | default(& # 39;无& # 39;,真)} } & # 34;任务:-name:1 get _ URL:URL:http://materials/HW report . empty dest:/root/HW report . txt-name:2 line infile:path:/root/HW report . txt regexp:& # 39;^{{ item . HW _ name } } = & # 39;行:& # 34;{ { item . HW _ name } } = { { item . HW _ cont } } & # 34;循环:& # 34;{{硬件所有} } & # 34;$ Ansible-playbook/home/Greg/ansi ble/HW report . yml创建一个密码库按照如下,创建一个ansi ble库来存储用户密码:
库名称为 /home/greg/ansible/locker.yml库中含有两个变量,名称如下:pw_developer,值为 Imadevpw_manager,值为 Imamgr用于加密和解密该库的密码为 qqqqqqqqqq密码存储在文件 /home/greg/ansible/secret.txt 中
$ vim ansible。CFG vault _ password _ file =/home/Greg/ansible/secret . txt # Modify $ vim/home/Greg/ansi ble/locker . yml-pw _ developer:imadevpw _ manager:IMA mgr $ echo qqqqqqqq >/home/Greg/ansi ble/secret . txt $ ansi ble-vault ncrypt/home/Greg/ansi ble/locker . yml从http://xxx.example.com.com/materials/. User _ list . yml下载要创建的用户列表并保存到/home/Greg/ansi ble。使用本次考试中其他地方创建的密码库/home/Greg/home/Greg/ansi ble/locker . yml创建一个名为/home/greg/ansible/users.yml的剧本,从而创建一个用户账号如下:职务描述为developer的用户应该:
– []创建
– []从pw_developer变量
– []分配一个密码作为补充组devops成员且职务描述为manager的用户应该:
– []创建[/br您的剧本应该可以运行$ wget http://XXX . example . com . com/materials/user _ list . yml-p/home/Greg/ansi ble $ vim/home/Greg/ansi ble/users . yml-name:创建用户帐户Hosts:all vars _ files:-/home/Greg/ansi ble/locker . yml-/home/Greg/ansi ble/user _ list . yml任务:-name:确保组group: name: devops循环:& # 34;{{用户} } & # 34;when:item . job = = & # 39;开发商& # 39;和(groups.dev中的清单主机名或groups.test中的清单主机名)-名称:添加user1用户:名称:& # 34;{ { item.name } } & # 34密码:& # 34;{ { pw _ developer | password _ hash(& # 39;sha512 & # 39, 'mysecretsalt & # 39) }}"组:devops循环:& # 34;{{用户} } & # 34;when:item . job = = & # 39;开发商& # 39;and(groups . dev中的inventory_hostname或groups.test中的inventory _ hostname)-name:确保组group:name:ops mgr loop:& # 34;{{用户} } & # 34;when:item . job = = & # 39;经理& # 39;和库存主机名。产品名:添加用户1用户名:& # 34;{ { item.name } } & # 34密码:& # 34;{ { pw _ manager | password _ hash(& # 39;sha512 & # 39, 'mysecretsalt & # 39) }}"组:opgr循环:& # 34;{{用户} } & # 34;when:item . job = = & # 39;经理& # 39;和inventory _ hostname in groups . prod $ Ansible-playbook/home/Greg/ansi ble/users . yml更新ansi ble库的密钥。按如下方式更新现有ansible库的键:
从 http://xxx.example.com.com/materls/salaries.yml 下载 Ansible 库到 /root/greg/ansible当前的库密码为 111新的库密码为 123库使用新密码保持加密状态
$ wget http://materls/salaries.yml$ ansible-vault rekey –ask-vault-pass salaries.ymlVault password: `111`New Vault password: `123`Confirm New Vault password: `123`$ ansible-vault view salaries.yml