rh358 002 fact变量获取 ansible配置网络 service_facts

通过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’]

商匡云商
Logo
注册新帐户
对比商品
  • 合计 (0)
对比
0
购物车