通過ansible 獲取網路資訊
方式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
比如:獲取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,那麼就一級一級網上找。才可以
很簡單
例子:[我是mac地址 52:54:00:00:fa:09:已知條件 --> 屬於這個mac的網路卡名稱
ansible_facts['nic_name']['macaddress']
通過mac得到name
ansible_facts['interfaces'] --> 能獲取到所有的網路卡名稱,如果把所有的MAC取出,和已知Mac做對比就行
實踐
報錯因為網路卡lo沒有mac,無lo,為空值
得學會對value列表做迴圈並判斷
可以看到變數的作用域被限制
可以看到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']