rh358 002 fact變數獲取 ansible配置網路 service_facts
- 2022 年 8 月 28 日
- 筆記
- rh358 服務管理自動化
通過ansible 獲取網路資訊
1.如何獲取fact事實變數
方式1:
ansible servera -m servera
方式2:
劇本
[root@workstation ansible]# cat ake.yaml
---
- name: get all facts
hosts: servera
tasks:
- name: get all facts
debug:
msg: "{{ ansible_facts }}"
[root@workstation ansible]# ansible-playbook ake.yaml
2.如何獲取某個具體的事實變數
比如:獲取fqdn或者Hostname。得分析變數類型
變數類型
1>list
list=[1,2,3,4,5]
2>dict
dict={'a':1,'b':2}
3>set 集合
4>tuple 元組
5>string 字元串
有嵌套類型
ansible_facts={"ansible_all_ipv4_addresses": ['xxx','xxxx'],"a":3}
字典的值是列表。各種嵌套可以通過格式觀察
ansible_facts的一級別的key:對應的value如果是列表[1,2,3,4,5],這樣的值可以用來循環
ansible_facts的第一級key:對應的value如果是個字典,獲取的方式就是ansible_facts['key1_name']獲取
如果一級key以ansible開頭,需要把ansible去掉
如圖我去掉了一級key ansible_all_ipv4_addresses的ansible
一級key都是以ansible打頭
取value為列表的值
索引取值
循環取值
取value為字典的值
取一個深層級深的
只要不是ansible開頭的一級key,那麼就一級一級網上找。才可以
3.網路資訊有關的事實變數
很簡單
4.如何通過MAC地址來獲取對應的網卡名稱
例子:[我是mac地址 52:54:00:00:fa:09:已知條件 –> 屬於這個mac的網卡名稱
ansible_facts[‘nic_name’][‘macaddress’]
通過mac得到name
ansible_facts[‘interfaces’] –> 能獲取到所有的網卡名稱,如果把所有的MAC取出,和已知Mac做對比就行
實踐
報錯因為網卡lo沒有mac,無lo,為空值
得學會對value列表做循環並判斷
5.在一個task內定義的變數,是否可以在下一個task調用
可以看到變數的作用域被限制
可以看到fact定義的變數未被限制
練習題
1:確認networkmanger服務是否開啟
2:獲取特定MAC的網卡介面
3:設置這個MAC的網路
4:通過Ansible_facts獲取ip和Mac地址
前兩步
引用角色
[root@workstation ansible]# yum -y install rhel-system-roles.network
[root@workstation roles]# cd rhel-system-roles.network/
[root@workstation rhel-system-roles.network]# ls
defaults library LICENSE meta module_utils pylintrc README.html README.md tasks tests tox.ini
[root@workstation rhel-system-roles.network]# pwd
/usr/share/ansible/roles/rhel-system-roles.network
[root@workstation rhel-system-roles.network]#
become可以提權,普通用戶無法改網卡
使用紅帽的role角色,可以查看readme
[root@workstation ansible]# ansible-playbook playbook.yaml
PLAY [network] **************************************************************************************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************************************************************************
ok: [servera]
TASK [rhel-system-roles.network : Check which services are running] *********************************************************************************************************************************************
ok: [servera]
TASK [rhel-system-roles.network : Check which packages are installed] *******************************************************************************************************************************************
ok: [servera]
TASK [rhel-system-roles.network : Print network provider] *******************************************************************************************************************************************************
ok: [servera] => {
"msg": "Using network provider: nm"
}
TASK [rhel-system-roles.network : Install packages] *************************************************************************************************************************************************************
skipping: [servera]
TASK [rhel-system-roles.network : Enable and start NetworkManager] **********************************************************************************************************************************************
ok: [servera]
TASK [rhel-system-roles.network : Enable network service] *******************************************************************************************************************************************************
skipping: [servera]
TASK [rhel-system-roles.network : Ensure initscripts network file dependency is present] ************************************************************************************************************************
skipping: [servera]
TASK [rhel-system-roles.network : Configure networking connection profiles] *************************************************************************************************************************************
[WARNING]: [003] <info> #0, state:up persistent_state:present, 'eth1': add connection eth1, 1e60e42a-10e8-4a27-ba92-c5698ae322c1
[WARNING]: [004] <info> #0, state:up persistent_state:present, 'eth1': up connection eth1, 1e60e42a-10e8-4a27-ba92-c5698ae322c1 (not-active)
changed: [servera]
TASK [rhel-system-roles.network : Re-test connectivity] *********************************************************************************************************************************************************
ok: [servera]
TASK [confirm Networkmanager service] ***************************************************************************************************************************************************************************
ok: [servera]
TASK [get interface name] ***************************************************************************************************************************************************************************************
skipping: [servera] => (item=lo)
ok: [servera] => (item=eth1)
skipping: [servera] => (item=eth0)
skipping: [servera] => (item=eth2)
TASK [debug net_name] *******************************************************************************************************************************************************************************************
ok: [servera] => {
"msg": "eth1"
}
PLAY RECAP ******************************************************************************************************************************************************************************************************
servera : ok=10 changed=1 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
很明顯角色先開始跑,後面才跑了任務,但是我任務里有一個檢查服務。這個得先執行
pre_tasks改變優先順序
也可以在tasks內導入角色
導入角色的方式有兩種
import_role 運行前 運行role
include_role 運行後 運行role
上面兩次方式改變了順序
默認先執行role
自動化服務管理
service模組
無法執行daemon-reload: yes
[root@workstation ansible]# cat fox.yaml
---
- name: network
hosts: servera
tasks:
- name: abc
service_facts:
- name: print
debug:
msg: "{{ ansible_facts }}"
會使fact多出服務的資訊
增加了事實變數,關於服務的
手機服務狀態,保存為ansible事實變數
service_facts
查看sshd服務狀態
舉個牽強的例子使用serice_facts的變數
service_facts: 用來收集系統當前所有的服務狀態
並設置為ansible_facts[‘service’]