1.安裝并配置ansible
第一步先安裝ansible所需軟件
#安裝ansible所需軟件 [devops@workstation ~]$ sudo dnf install ansible ansible-navigator rhel-system-roles -y
第二步登錄鏡像倉庫,在鏡像倉庫下載鏡像容器來運行ansible
由于ansible-navigator 知ansible是在容器運行的,在配置之前先登錄上鏡像倉庫
[devops@workstation ansible]$ podman login utility.lab.example.com #鏡像倉庫
[devops@workstation ansible]$ vim ansible-navigator.yml? ? ? ? #設置ansible需要的鏡像
---
ansible-navigator: ansible: config: path: ./ansible.cfg color: osc4: false execution-environment: image: utility.lab.example.com/ee-supported-rhel8:latest #這是一個鏡像里的容器
#查看ansible是否可以運行正常 [devops@workstation ansible]$ ansible-navigator images #檢查并從鏡像庫下載所需的鏡像
第三步配置ansible配置文件
優先讀取當前目錄>家目錄>系統
/home/devops/ansible/ > .ansible > /etc/ansible/ansible.cfg
###
[devops@workstation ansible]$ ansible-config init --disabled | less #查看ansible配置模板
[devops]workstation ansible]$ vim ansible.cfg
[defaults] #ansible基本信息
remote_user=devops #發起ssh的用戶
inventory=/home/devops/ansible/inventory #指定工作清單
host_key_checking=False #不詢問是否保存私鑰,直接選擇yes
#ask_pass=False #進行一次密碼輸入后后續就不用加-k參數
由于實驗環境有問題,實驗用戶沒有私鑰
scp root@172.25.250.250:/root/.ssh/id_rsa ~/.ssh/id_rsa #把主機用戶私鑰拷貝給虛擬機
collections_path=/home/devops/ansible/mycollections #roles_path=roles:/home/devops/ansible/roles
[privilege_escalation] #ansible提權信息?
become=True? ? ? ??
become_ask_pass=False
become_method=sudo
become_user=root
編輯好配置ansible配置文件后還要生成清單才能運行
#生成工作清單
[devops@workstation ansible]$ vim inventory
[dev]
servera
[test]
serverb
[balancers]
serverb
[prod]? ? ? ? #p意思為prod組有兩個成員serverc與serverd
serverc
serverd
[webservers:children]? ? ? ? ?#指定子組
prod
[devops@workstation ansible]$ ansible all --list-hosts #列出所有主機
#查看清單信息
[devops@workstation ansible]$ ansible-navigator inventory -m stdout --graph
。。。 省略 。。。
@all: |--@balancers:
| |--serverb
|--@dev:
| |--servera
|--@test:
| |--serverb
|--@ungrouped:
|--@webservers:
[devops@workstation ansible]$ ansible all -m shell -a "whoami" #自動化所有節點主機在shell運行命令,-k詢問主機密碼
2.創建yum倉庫
在此之前建議編輯vim工作模式,便于去編寫yml文件
ansible中有兩種輸出形式
ansible中ad-hoc形式
$ansible all -m shell -a "whoami"
ansible中playbook形式,也就是yml結尾的文件,等同于ansible中的腳本
$ansible-navigator run xxx.yml -m stdout #運行playbook并把顯示到輸出上
yml文件使用列表與字典表示,前面有-的表示是列表列表里包含字典,然后是子列表
一個playbook要包含描述,執行清單,動作
例子
---
- name:test play
host : all
tasks:
- name: rm file #動作名稱
? ansible.builtin.shell: #模塊
? rm -rf /mnt/file #模塊參數
ansible-doc -l | grep shell
ansible-doc shell | less #查詢用法
實驗
#使用ansible-doc來搜索模板
$ ansible-doc -l | grep repo
$ ansible-doc ansible.builtin.yum_repository | less
測試
運行完成后可以使用ad-hoc形式來測試
[devops@workstation ansible]$ ansible all -m shell -a "dnf clean all"
[devops@workstation ansible]$ ansible all -m shell -a "dnf makecache"
[devops@workstation ansible]$ ansible all -m shell -a "dnf repolist"
3.安裝collections
前提要在ansible配置文件指定collection路徑
先從資源連接獲取資源
wget http://materials.example.com/tools/community-general-4.3.0.tar.gz
然后使用galaxy命令安裝colllection
[devops@workstation ansible]$ ansible-galaxy collection install ansible-posix1.4.0.tar.gz --force
最后查看collections
[devops@workstation ansible]$ ansible-galaxy collection list
4.安裝軟件包
實驗
測試
5.使用系統自帶角色
什么是角色?
劇本是把所有東西放在一個文件里,角色是把各自的元素拆分開放在各自的目錄里
$ansible-galaxy init apache #創建角色
$ansible-galaxy list #列出角色
以下是創建角色后的子目錄,可將劇本所以東西都放在角色的子目錄中,最后在劇本playbook直接使用roles引用即可
上圖為如何使用創建的角色,下面將介紹如何使用系統角色
如何使用系統角色?實驗要求使用selinux角色
$ rpm -qa | grep role #由于selinux是系統自帶的角色,所以查看系統自帶的角色模板 rhel-system-roles-1.23.0-2.21.el9.noarch
$ rpm -qd rhel-system-roles-1.23.0-2.21.el9.noarch | grep selinux-playbook #查看角色模板的說明信息查找例子模板
$ less /usr/share/doc/rhel-system-roles/selinux/exampleselinux-playbook.yml #查看模板來使用角色
~]$ ansible-galaxy list | grep selinux #在家目錄下列出系統的角色,按照要求放入playbook中的roles引入
-
rhel-system-roles.selinux, (unknown version) #前面加redhat.并要把杠換成下 劃線
-
linux-system-roles.selinux, (unknown version)
最后按照模板來編寫playbook
運行后測試
$ ansible-navigator run -m stdout selinux.yml
]$ ansible servera -m shell -a 'cat /etc/sysconfig/selinux'
6.使用 Ansible Galaxy 安裝角色
第一步先在ansible的roles目錄創建yml文件來編寫要下載的角色資源地址并且要在ansible配置文件中指定roles的路徑目錄
第二步在指定yaml文件并下載到roles目錄中
$ ansible-galaxy role install -r roles/requirements.yaml -p ./roles/
-r 參數,用戶能夠通過一個 YAML 格式的文件(通常命名為 requirements.yaml
),一次性批量安裝多個角色。
-p 參數,指定角色的安裝目錄,要把角色安裝在設置的配置文件指定的目錄才能使用ansible-galaxy命令識別,注意ansible-galaxy要在ansible配置文件的目錄使用才能識別的到,在家目錄使用就是識別系統的ansible配置文件識別的就是系統的角色
運行安裝后測試
7.創建和使用創建的角色
什么是事實變量?
ansible all -m setup | less #查看所有的事實變量,事實變量是主機中所有資源信息使用鍵值對的形式來表示的變量,引用事實變量子目錄要用.隔開
ansible-playbook test.yml #運行playbook
什么是j2模板?
創建xxx.j2結尾的文件,能識別變量,里面使用{{}}引用鍵事實變量,然后再paybook中使用template參數,src表示j2文件的路徑,dest表示生成的事實變量,輸出的是事實變量的值
ansible-galaxy init apache #在roles目錄下創建角色
ansible-galaxy --list-all #在ansible配置文件目錄下列出創建的角色
[devops@workstation ansible]$ cd roles/apache/ [devops@workstation apache]$ ls defaults files handlers meta README.md tasks templates tests vars [devops@workstation apache]$ vim templates/index.html.j2 #編寫j2文件
[devops@workstation ansible]$ cd roles/apache/tasks/ [devops@workstation tasks]$ vim main.yml #編寫tasks執行的任務
實驗要求:使用apache發布網頁
tasks的任務:
要安裝httpd,安裝火墻
httpd服務要開機啟動并立即運行,火墻要放行httpd
還要使用模板創建index.html文件
最后創建playbook文件并運行,使用curl來測試