考前說明
請勿更改 IP 地址。DNS 解析完整主機名,同時也解析短名稱。? 所有系統的 root 密碼都是 redhat? Ansible 控制節點上已創建用戶賬戶 devops。可以使用 ssh 訪問? 所需的所有鏡像保存在鏡像倉庫 utility.lab.example.compodman 可使用下述賬號登錄使用 用戶:admin密碼:redhat? 所有工作文件應保存在控制節點上的 /home/devops/ansible 目錄中,且歸devops 所有? devops 的默認 ansible-navigator 配置: ~devops/.ansible-navigator.yml 參考講師提供的文件? 練習中的防火墻默認關閉,SELinux 處于強制模式 file 目錄提供一些額外文件,考試會正常提供? 產品文檔位置 http://materials.example.com/docs/? 模擬環境中提供的工具文件已經提供,、連接地址:http://materials.example.com/tools通過 wget 下載即可
配置位置
所有配置均在workstation主機中完成!!!
start→ALL
??
??
或者通過ssh直接遠程登陸:
1.安裝并配置 Ansible
在控制節點 workstation.lab.example.com 上安裝和配置 Ansible:– 安裝所需的軟件包– 創建靜態清單文件 /home/devops/ansible/ 要求如下:– servera 是 dev 主機組的成員– serverb 是 test 和 balancers – serverc 和 serverd 是 prod 主機組的成員– prod 組是 webservers 主機組的成員創建名為 /home/devops/ansible/ansible.cfg 的配置文件,要求如下:– 主機清單文件為 /home/devops/ansible/inventory – 默認內容集合目錄為 /home/devops/ansible/mycollection– 默認角色目錄為 /home/devops/ansible/roles
配置:
=========================↓為練習環境配置,真實考試不用做======================
真實考試環境配置已經寫好了,但模擬練習要去超級用戶那復制模板:
👇不想下面這么麻煩可以直接:sudo cp /root/ansible-navigator.yml /home/devops/ansible/
?練習環境有問題(沒有私鑰),需要執行下面這一條解決,真實考試不需要執行下面這一條👇
=========================↑為練習環境配置,真實考試不用做======================
ansible配置文件讀取優先級:當前目錄>家目錄>系統目錄
當前目錄:
家目錄:
系統目錄:
復制內容:
?
?
?
👾如果不提權的話被控主機就會以devops身份執行命令
?
檢驗測試:
測試提權控制主機:
列出清單列表:
。。。省略上半段
2.創建 yum 倉庫
作為系統管理員,需在受管節點上安裝軟件。? 創建 playbook /home/devops/ansible/yum_repo.yml,該 playbook 將在各個受管節點上? 創建以下 yum 倉庫:– 倉庫 1:? 倉庫的名稱為 RH294_BASE? 描述為 RH294 base software? BaseURL 為:http://content.example.com/rhel9.0/x86_64/dvd/BaseOS? GPG 簽名檢查為啟用狀態? GPG 密鑰 URL 為:http://content.example.com/rhel9.0/x86_64/dvd/RPM-GPG-KEY-redhat-release? 倉庫為啟用狀態– 倉庫 2:? 倉庫的名稱為 RH294_STREAM? 描述為 RH294 stream software? BaseURL 為:http://content.example.com/rhel9.0/x86_64/dvd/AppStream? GPG 簽名檢查為啟用狀態? GPG 密鑰 URL 為:http://content.example.com/rhel9.0/x86_64/dvd/RPM-GPG-KEY-redhat-release? 倉庫為啟用狀態
配置:
設置vim工作模式,方便playbook的書寫:
編輯playbook:
然后復制出倉庫2:
運行playbook:
檢驗測試:
3.安裝 Collections
以 devops 身份,將以下 collections 從資源連接目錄中安裝到workstation.lab.example.com ? redhat-rhel_system_roles-1.16.2.tar.gz ? ansible-posix-1.4.0.tar.gz ? community-general-4.3.0.tar.gz ? 資源連接:http://materials.example.com/tools集合應安裝到默認集合目錄 /home/devops/ansible/mycollection
=================================↓簡便法==================================
編寫下載playbook:
安裝:
檢驗測試:
=================================↑簡便法==================================
方法二:
檢驗測試:
4.安裝軟件包
創建名為 packages.yml 的 playbook:– 將 php 和 mariadb 軟件包安裝到 dev、test 和 prod 組中的主機上– 將 RPM Development Tools 包組安裝到 dev 組中的主機上– 將 dev 組中主機上的所有軟件包更新為最新版本
配置:
?編輯playbook:
查看EXAMPLES幫助:
運行安裝:
👆php 和 mariadb 軟件包安裝成功
👆動作用latest和present都可以
👾latest和present都可以表示安裝,但只有latest能執行更新
運行playbook:
👆這個執行過程會比較漫長
檢查測試:
👆換serverb/c都可以看看
5.使用角色
根據以下要求創建名為 selinux.yml 的 playbook:– 在所有受管節點上運行– 使用 selinux 角色– 將 SELinux 策略為 targeted – 將 SELinux 狀態為 enforcing
配置:
編輯ansible配置文件去指定角色:
查詢幫助:
編輯playbook:
=========================================================================
練習環境有問題,需做以下操作
報錯處理--僅練習環境,然后再次執行劇本:
[devops@workstation ansible]$ ssh devops@servera
[devops@servera ~]$ sudo mv /usr/lib/python3.9/site-packages/OpenSSL/crypto.py{,.bak}
[devops@workstation ansible]$ ansible-navigator run -m stdout selinux.yml
=========================================================================
運行playbook:
檢查測試:
題二(二題出一題來考)
**使用** **Timesync RHEL系統角色**安裝 RHEL 系統角色軟件包,并創建符合以下條件的playbook/home/devops/ansible/timesync.yml1. 在所有受管節點上運行
2. 使用 timesync 角色
3. 配置該角色,以使用當前有效的 NTP 提供
4. 配置該角色,以使用時間服務器 classroom.example.com
配置:
查看幫助:
編輯playbook:
運行playbook:
測試:
6.使用 Ansible Galaxy 安裝角色
創建 /home/devops/ansible/roles/requirements.yaml 文件用以下載并安裝角色到 /home/devops/ansible/roles/ 目錄中– 角色名:balancer,來自于 http://materials.example.com/tools/haproxy.tar – 角色名:phpinfo,來自于 http://materials.example.com/tools/phpinfo.tar
配置:
安裝:
檢查測試:
7.創建和使用角色
根據下列要求,在 /home/devops/ansible/roles 中創建名為 apache 的角色:– 安裝 httpd 軟件包,開機啟動并立即運行? 開啟防火墻并允許 web 服務通信? 模板文件 index.html.j2 用于創建/var/www/html/index.html,含有以下內容:Welcome to HOSTNAME on IPADDRESS,其中 HOSTNAME 和 IPADDRESS 來自于事實變量? 創建名為 newrole.yml 的 playbook,并使用此角色? 這個 playbook 運行于 webservers 主機組
配置:
捕捉事實變量:
編寫j2模板:
編寫動作:
檢查角色:
編寫playbook:
運行playbook:
檢查測試:
8.從 Ansible Galaxy 使用角色
創建名為 roles.yml 的 playbook,滿足以下要求:– Playbook 運行在 balancers 主機組上,并使用 balancer 角色。– 這個角色為 webservers 主機組配置負載均衡 web 服務器配置完成后,當訪問 http://serverb.lab.example.com 將顯示以下輸出信息:? Welcome to serverc.lab.example.com on 172.25.250.12 ? Welcome to serverd.lab.example.com on 172.25.250.13? 這個 playbook 中另一個 play 使用 phpinfo 角色在 webservers 主機組上執行完畢后,訪問主機組內每臺主機的/hello.php 顯示以下信息:– Hello World from FQDN ? FQDN 來自于事實變量? 頁面同時顯示每臺受控主機的 PHP 配置
配置:
↑webservers不要寫火墻,因為上一題已經做過
運行playbook:
檢查測試:
9.創建和使用分區
根據下列要求,創建名為 partition.yml 的 playbook:– playbook 中包含一個 play,該 play 在 balancers 主機組中的主機上運行? 在設備 vdb 上創建單個主分區,編號為 1,大小為 1500 MiB ? 使用 ext4 文件系統格式化分區? 將文件系統永久掛載到 /newpart ? 如果無法創建請求的分區大小,應顯示錯誤消息– Could not create partition of that size - 并且應改為使用大小 800 MiB ? 如果設備 vdd 不存在,應顯示錯誤消息– Disk does not exist
配置:
創建playbook:
運行playbook:
檢查測試:
題二(考試時二出一)創建和使用邏輯卷
創建一個名為/home/devops/ansible/lv.yml 的playbook,它將在dev和prod上運行以執行下列任務1. 創建符合以下要求的邏輯卷:邏輯卷創建在 research 卷組中邏輯卷名稱為 data邏輯卷大小為 600MiB2. 使用 ext4 文件系統格式化邏輯卷
3. 如果無法創建請求的邏輯卷大小,應顯示錯誤消息Could not create logical volume of that size,并且應改為使用大小 400MiB。4. 如果卷組research 不存在 ,應顯示錯誤消息Volume group does not exist5. 不要以任何方式掛載邏輯卷
====↓準備工作,5臺虛擬機均沒有對應的卷組和邏輯卷, 因此先準備分區和卷組(考試不需要)====
#server[a:b]卷組為800M,server[c:d]卷組為500M.[devops@workstation ansible]$ vim lvm_pre.yml
- hosts: devtasks:- name: Create partition for LVMcommunity.general.parted:device: /dev/vdbnumber: 1flags: [ lvm ]state: presentpart_start: 1MiBpart_end: 800MiB- name: create research vgcommunity.general.lvg:vg: researchpvs: /dev/vdb1- hosts: prodtasks:- name: Create partition for LVMcommunity.general.parted:device: /dev/vdbnumber: 1flags: [ lvm ]state: presentpart_start: 1MiBpart_end: 600MiB- name: create research vgcommunity.general.lvg:vg: researchpvs: /dev/vdb1[devops@workstation ansible]$ ansible-navigator run -m stdout lvm_pre.yml
====↑準備工作,5臺虛擬機均沒有對應的卷組和邏輯卷, 因此先準備分區和卷組(考試不需要)====
配置:
---
- hosts: dev,prodtasks:- name: check vgansible.builtin.debug:msg: Volume group does not existwhen: "'research' not in ansible_lvm.vgs"- name: Create lvmblock:- name: creat 600MiBcommunity.general.lvol:vg: researchlv: datasize: 600when: "'research' in ansible_lvm.vgs"rescue:- name: creat 400MiBcommunity.general.lvol:vg: researchlv: datasize: 400when: "'research' in ansible_lvm.vgs"- name: show erroransible.builtin.debug:msg: Could not create logical volume of that sizewhen: "'research' in ansible_lvm.vgs"always:- name: ext4community.general.filesystem:fstype: ext4dev: /dev/research/datawhen: "'research' in ansible_lvm.vgs"
運行:
測試:
10.生成主機文件
將 http://materials.example.com/tools/hosts.j2 模板文件
拷貝到/home/devops/ansible 目錄中完善此模板文件,用以生成
受控節點的 /etc/myhosts 文件創建名為 hosts.yml 的playbook
對 dev 主機組使用此模板文件/etc/myhosts 文件內容最終如下:127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 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 172.25.250.13 servera.lab.example.com serverd
開桂簡便法:
復制展示內容:
編寫yml:
運行:
測試:
法二正常配置:
下載模板文件(在ansible目錄下載):
提取事實變量:
用魔法變量.事實變量來獲取IP、主機全名、主機簡稱:
根據題意創建playbook:
查看模板幫助:
運行playbook:
檢查測試:
11.修改文件內容
創建名為 issue.yml 的 playbook,要求如下: – 此 playbook 運行到所有受控節點? 此 playbook 覆蓋/etc/issue 文件中的內容:? 在 dev 主機組的主機中,內容是:Development 在 test 主機組的主機中,內容是:Test ? 在 prod 主機組的主機中,內容是:Production
法一不寫when的易寫法:
運行:
法二正常配置:
查看copy模塊幫助:
運行playbook:
檢查測試:
12.創建 Web 內容目錄
按照下方所述,創建名為 webcontent.yml 的 playbook:– 該 playbook 在 dev 主機組中的受管節點上運行– 創建目錄 /webdev 所有者為 webdev 組– 具有常規權限:owner=read+write+execute,group=read+write+execute,other=read+execute – 具有特殊權限:set group ID – 用軟鏈接將 /var/www/html/webdev 鏈接到 /webdev – 創建文件 /var/www/html/webdev/index.html,內容為:Red Hat Ansible – 在 dev 主機組中主機上瀏覽此目錄(例如http://servera.lab.example.com/webdev/index.html )將生成以下輸出:Red Hat Ansible
使用角色的簡單配置法:
因為之前創建的apache角色已經有了安裝httpd,開啟服務,火墻放行的動作,我們可以直接使用
---
- name: create web serverhosts: devroles:- apachetasks:- name: Add webdevansible.builtin.user:name: webdev- name: create /webdevansible.builtin.file:path: /webdevowner: webdevgroup: rootmode: '2775'state: directorysetype: httpd_sys_content_t- name: Create linkansible.builtin.file:src: /webdevdest: /var/www/html/webdevstate: link- name: write indexansible.builtin.copy:content: Red Hat Ansibledest: /var/www/html/webdev/index.htmlsetype: httpd_sys_content_t
運行yml:
測試:
麻煩配置法:
查看user模塊幫助:
創建playbook:
查看創建目錄模塊幫助:
查看下載模塊幫助:
查看server模塊幫助來啟動服務:
查看copy模塊幫助來導入文件內容:
查看火墻模塊幫助:
playbook總覽:
---
- name: create webdevhosts: devtasks:- name: create useransible.builtin.user:name: webdev- name: create webdev fileansible.builtin.file:path: /webdevowner: webdevgroup: rootmode: '2775'state: directorysetype: httpd_sys_content_t- name: Create link for webdevansible.builtin.file:src: /webdevdest: /var/www/html/webdevstate: link- name: install web serveransible.builtin.dnf:name: httpdstate: latest- name: start web serveransible.builtin.service:name: httpdenabled: yesstate: started- name: write for index.htmlansible.builtin.copy:content: "Red Hat Ansible"dest: /var/www/html/webdev/index.htmlsetype: httpd_sys_content_t- name: set firewalld for webansible.posix.firewalld:service: httppermanent: yesstate: enabledimmediate: yes
運行playbook:
測試:
13.生成硬件報告
創建名為 hwreport.yml 的 playbook,在所有受控主機上生成/root/hwreport.txt 文件,內容包含: · 清單主機名稱
· MB 表示的總內存大小
· BIOS 版本? 磁盤設備 vda 的大小? 磁盤設備 vdb 的大小輸出文件中的每一行含有一個 key=value 對 playbook 應當
來自http://materials.example.com/tools/hwreport.empty 模板文件,
并將它保存為 /root/hwreport.txt 使用正確的值修改 /root/hwreport.txt 如果硬件項不存在,相關的值應設為 NONE
方法一:
?結合考前說明里的工具文件連接地址下載模板示例:
查看模板示例:
查看的幫助文檔:
👆或者過濾devices
編輯yml:
👆hw_name根據下載的模板示例的鍵的開頭填寫
查看動作的模板:
運行:
測試:
方法二:
結合考前說明里的工具文件連接地址下載:
創建playbook:
查看copy模塊幫助來復制下載的模板:
查看lineinfile模塊幫助來替換文件內容:
👆這里inventoryhostname是指短名稱,用inventory_hostname提取。如果是hostname是指全稱,就要用_fqdn
👆注意變雙引了
運行playbook:
檢查測試:
14.創建 password vault
創建一個名為 locker.yml 的 ansible vault 文件存儲用戶密碼:? Vault 文件中含有兩個變量,名稱如下:– pw_developer: Imadev ? pw_manager: Imamgr 加解密密碼為 redhat ? 密碼存儲在 /home/devops/ansible/secret.txt 中。
配置:
編輯密碼本:
給密碼本權限:
在ansible配置文件中指定密碼本路徑:
創建加密yml:
查看測試:
15.創建用戶帳戶
需要創建的用戶賬戶清單來自于 http://materials.example.com/tools/user_list.yml,請拷貝到/home/devops/ansible/中? 配合上一題的 locker.yml,創建名為 users.yml 的 playbook,要求如下:– 用戶的 job description 為 developer 的用戶,創建到 dev 和 test 主機組? 中,用戶密碼來自于 pw_developer 變量,用戶的附屬組是 devops ? 用戶的 job description 為 manager 的用戶,創建到 prod 主機組中,用戶密? 碼來自于 pw_manager 變量,用戶的附屬組是 opsmgr ? 用戶密碼使用 SHA512 hash
配置:
下載用戶清單:
編輯yml:
查看組文檔幫助:
查看用戶幫助文檔:
---
- name: create users1hosts: dev,testvars_files:- user_list.yml- locker.ymltasks:- name: create devops groupansible.builtin.group:name: devopsstate: present- name: create user from job_developeransible.builtin.user:name: "{{ item.name }}" #使用變量里name的變量值uid: "{{ item.uid }}" #使用變量里uid的變量值groups: devopsappend: yes #因為是添加用戶附屬組,yes表示追加password: "{{ pw_developer | password_hash('sha512') }}" #變量里取密碼然后哈希運算loop: "{{ users }}" #遍歷users里所有變量when: item.job == "developer" #當條件滿足時以上才執行#以下復制上面做修改即可
- name: create users2hosts: prodvars_files:- user_list.yml- locker.ymltasks:- name: create opsmgr groupansible.builtin.group:name: opsmgrstate: present- name: create user from job_manageransible.builtin.user:name: "{{ item.name }}"uid: "{{ item.uid }}"groups: opsmgrappend: yespassword: "{{ pw_manager | password_hash('sha512') }}"loop: "{{ users }}"when: item.job == "manager"
16.更新 Ansible 庫的密鑰
? 請為 expense.yml 文件修改 vault 密碼,要求如下:– 請將 http://materials.example.com/tools/expense.yml 文件保存到/home/devops/ansible/expense.yml ? 當前密碼為 ibmibm ? 新密碼為 redhatredhat
配置:
下載文件:
修改密碼:
測試:
17.配置 cron 作業
在所有受管節點上創建名為 /home/devops/ansible/cron.yml 的 Playbook,為natasha 用戶創建 cron 作業:? 用戶 natasha 每隔 2 分鐘執行 logger “RH294 in progress”
配置:
編輯yml:
查看用戶幫助文檔:
查看cron幫助文檔:
查看命令絕對路徑:
運行:
測試: