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

最新文章

  1. ABP理论学习之发布说明
  2. CentOS6.7安装RabbitMQ3.6.5
  3. webuploader上传插件
  4. log4j记录运行日志
  5. 腾讯课堂-草图大师 Sketchup 初级到精通视频讲座
  6. XmlDocument,XDocument相互转换
  7. 杭电1010(dfs + 奇偶剪枝)
  8. Fibonacci Tree(最小生成树,最大生成树)
  9. 用Stax方式处理xml
  10. Kafka如何保证消息的可靠性传输
  11. Python档案袋( Socket 与 ScoketServer 通信 )
  12. Scrapy实战篇(八)之爬取教育部高校名单抓取和分析
  13. ubuntu如何为获得root权限
  14. 关于eclipse 在创建一个新项目时自动出现的appcompat v7如何解决
  15. Python 判断文件是否存在的三种方法
  16. Hibernate 集成 Ehcache 开启二级缓存
  17. Linux系统重装与还原
  18. 洛谷八连测R5题解
  19. python—datetime time 模板学习
  20. C#自己写的第一个小程序,庆祝一下

热门文章

  1. docker 操作 记录
  2. 3.C++逐行读取txt文件数据,利用getline -windows编程
  3. go统计字符串及数组中出现次数
  4. 数组基础篇(对应C++ Primer plus 4.10)
  5. 抓到 Netty 一个 Bug,顺带来透彻地聊一下 Netty 是如何高效接收网络连接的
  6. Overfitting &amp; Train Set &amp; Test Set
  7. 自己写雪花算法IdWorker
  8. 编程技巧│超实用 nginx 中常见的配置合集
  9. 网格动物UVA1602
  10. 基于cornerstone.js的dicom医学影像查看浏览功能