一、工作模式
1. adhoc臨時命令
語法: ansible 主機或者組列表 -m 模塊 -a “參數”
2. playbook
語法:
ansible-playbook xxx.yml
二、模塊
1. ping
2.command:默認模塊(不支持重定向,管道)
3.shell:類似command,但是支持shell特性,如管道,重定向
4.script:用于在遠程主機上執行腳本
5.file:可以創建文件,目錄,鏈接等,還可以修改權限,屬性等
6.copy:用于將文件從控制端拷貝到被控制端
7.fetch:與copy模塊相反,copy是上傳,fetch是下載
8.lineinfile:用于確保目標文件中有一行內容
9.replace:inlinefile會替換一行,replace可以替換關鍵詞
10.user:實現linux用戶管理
11.group:創建、刪除組
12.yum_repository:用于配置yum
13.yum:用于rpm軟件包管理,如安裝、升級、卸載
14.service:用于控制服務
15.lvg:創建,刪除卷組,修改卷大小
16.lvol:創建,刪除邏輯卷,修改邏輯卷大小
17.filesystem:格式化,也就是創建文件系統
18.mount:掛載文件系統
19.parted:硬盤分區管理
20.setup:facts變量
21.debug:打印指定內容
22.firewalld:防火墻配置
23.template:可以上傳具有特定格式的文件(如文件中包含變更)
三、變量
1.預定義變量(facts)
1.1 通過setup模塊獲取
1.2 常用變量
ansible_hostname:主機名
ansible_all_ipv4_addresses:所有的ipv4地址
ansible_bios_version:BIOS版本信息
ansible_memtotal_mb:總內存大小
ansible_eth0.ipv4.address:eth0的ip地址
2.自定義變量
2.1 用戶自己定義的變量
2.2定義位置
2.2.1 主機清單文件中定義
2.2.2 playbook中定義
2.2.3 專門的變量文件中定義
2.2.4 在角色的defaults目錄和vars目錄中定義
四、錯誤處理
1.使用ignore_errors忽略錯誤
2.在task級別忽略,只針對某一任務
3.在play級別定義,針對play中所有任務
五、觸發執行的任務
1.通過handlers定義觸發執行的任務
2.handlers中定義的任務,不是一定會執行的
3.在tasks中定義的任務,通過notify關鍵通知handlers中哪個任務要執行
4.只有tasks中的任務狀態是changed才會進行通知
六、條件執行
1.使用when關鍵字進行條件判斷
2.常用操作符:
==,!=,>, <, >= ,<=
3.多條件:and, or
4.取反:not關鍵字
七、注冊變量
1.使用register關鍵字
2.用于捕獲和保存任務執行結果
八、任務塊
1.通過block關鍵字,將多個任務組合到一起
2.將整個block任務組,一起控制是否要執行
3.與rescue,always連用
3.1 block中的任務都成功,rescue的任務不執行
3.2 block中的任務出現失敗(failed),rescue的任務執行
3.1 block中的任務不論如何,always的任務總是執行
九、循環
1.使用loop關鍵字
2.相當于shell中的for循環
3.循環用到的變量名是固定的,叫item
十、角色role
1.主要目的:代碼重用
2.創建命令: ansible-galaxy init
3.角色目錄說明:
3.1 README.md
3.2 tasks
3.3 handlers
3.4 files
3.5 templates
3.6 vars
3.7 defaults
3.8 meta:包含一個main.yml文件,用于描述角色元信息,例如作者、依賴等
3.9 tests:存放一些測試代碼和測試用例文件
隨著ansible模塊越來越多,每次把ansible程序和模塊打包在一起,軟件的更新就特別麻煩,
軟件更新了,模塊可能跟不上,或者模塊更新了,而軟件更新又跟不上模塊的更新,所以
目前發展的方向是“軟件和模塊分離”
ansible軟件包為ansible-core(該軟件包中包含ansible核心命令和核心模塊),其他更多模塊單獨發布。
而模塊和插件等都單獨發布,也比較亂,所以設計了新的collection概念,一個collection目錄中可以把某一類的模塊,角色,插件都封裝在一起,下載collection就可以一次性下載所有相關的模塊,角色,插件。
紅帽會不定期發布一個容器,將ansible核心軟件和更多collection封裝的模塊都一起放到一個容器中,簡直是新手的福音,用戶不用關心軟件的安裝,也不用關心模塊從哪兒下載。
用戶只要啟動一個容器就可以搞定一切,然后通過ansible-navigator管理這個容器。
可以參考以下網站:
github地址:
GitHub - ansible/ansible-navigator: A text-based user interface (TUI) for Ansible.
配置文檔網址:Configuration - Ansible Navigator Documentation
在nginx中使用:
#適用于RHEL9
1)sudo yum -y install ansible-core ansible-navigator
2) mkdir ~/ansible && cd ~/ansible #目錄名稱并不限制必須為ansible,要視情況而定,但是目錄下的ansible.cfg和inventory文件是不可或缺的
3) vim ansible.cfg
[defaults]
inventory=inventory #清單文件
role_path=roles #角色目錄
remote_user=xxx #遠程用戶
[privilege_escalation] #sudo提權
become=True #是否提權
become_method=sudo #提權方式
become_user=root #提權用戶
become_ask_pass=False #是否需要密碼4)vim inventory
略。。。
5) mkdir roles # 創建角色目錄
6)ansible all -m ping #測試是否能夠ping通所有inventory記錄的主機
7)vim ~/.ansible-navigator.yml
---
ansible-navigator: execution-environment: image: registry.lab.example.com:5000/ee-supported-rhel8:latest pull: policy: missing 8) sudo vim /etc/containers/registries.conf #修改容器配置。。。略
[registries.search]
registries = ['registry.lab.example.com:5000']
[registries.insecure]
registries = ['registry.lab.example.com:5000']
9)podman login registry.lab.example.com
按照題目提示輸入用戶名,密碼
10)ansible-navigator images #下載鏡像
11)podman images #查看鏡像
# 注意:image的值看考題給的是什么,不要照抄
例題1-自定義角色:
根據下列要求,在/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角色。
ansible目錄下的ansible.cfg文件(注意要定義roles_path)和inventory文件,略。。。
1) cd ~/ansible
2) mkdir roles
3) cd roles
4) ansible-galaxy init httpd
5) ls httpd
6) vim httpd/templates/index.html.j2
Welcome to {{ansible_fqdn}} on {{ansible_enp1s0.ipv4.address}}
7) vim httod/tasks/main.yml #編輯任務文件
---
- yum:name: httpd
- service:name: httpdstate: startedenabled: yes
- template:src: index.html.j2dest: /var/www/html/index.html
8) cd ~/ansible
9) vim myrole.yml
---
- hosts: webtestroles:- httpd
10) ansible-playbook myrole.yml #執行劇本
如果是從網絡資源下載角色:
網址:Ansible Galaxy
#1.通過galaxy 安裝角色與collection
創建劇本~/ansible/roles/down.yml,用來從以下 URL 下載角色,
并安裝到~/ansible/roles 目錄下:
http://server1.lab0.example.com/roles/haproxy.tar 此角色名為 haproxy
http://server1.lab0.example.com/roles/myphp.tar 此角色名為 myphp 從http://server1.lab0.example.com/materials/下載如下 collection 并安裝到
~/ansible/collections 目錄下(僅適用于 RHEL9):
ansible-posix-1.5.1.tar.gz
community-general-6.3.0.tar.gz 解題參考:
# ~/ansible目錄下
1) vim roles/down.yml
- src: http://server1.lab0.example.com/roles/haproxy.tar name: haproxy
- src: http://server1.lab0.example.com/roles/myphp.tar name: myphp 2) ansible-galaxy install -r roles/down.yml #從上圖可知,ansible-galaxy collection install 網絡角色,且有下載路徑要求的使用下方命令,注意使用"-p"參數
3) ansible-galaxy collection install \
http://server1.lab0.example.com/materials/ansible-posix-1.5.1.tar.gz \
-p ~/ansible/collections 4)ansible-galaxy collection install \
http://server1.lab0.example.com/materials/community-general-6.3.0.tar.gz \
-p ~/ansible/collections 注意:http://server1.lab0.example.com為假設場景中的linux真機#使用上述通過galaxy下載的角色
1)vim web.yml
---
- hosts: test05 roles: - haproxy
- hosts: webtest roles: - myphp
2) ansible-playbook web.yml
3)使用curl命令查看效果
4.在playbook,通過role引入要使用的模塊
十一、加解密
1.加密:
ansible-vault encrypt 文件
2.解密:
ansible-vault decrypt 文件
3.改密碼:
ansible-vault rekey 文件
4.執行加密的playbook:
ansible-playbook --ask-vault-password 文件
十二、特殊主機清單變量
1.ansible_ssh_user:指定登錄遠程主機的用戶名
2.ansible_ssh_pass:指定登錄遠程主機的密碼
3.ansible_ssh_port:指定登錄遠程主機的端口號