当前位置: 首页 > backend >正文

ansible进阶06

复杂的循环结构

  • 循环基础
[student@worktest myansible]$ cat users.yml
---
- name: create usershosts: serveratasks:- name: create some usersuser:name: "{{item}}"password: "{{'123456'|password_hash('sha512')}}"state: presentloop:- zhangsan- lisi
  • loop是ansible 2.5以后引入的,之前使用with_xxx结构
[student@worktest myansible]$ cat users.yml
---
- name: create usershosts: serveratasks:- name: create some usersuser:name: "{{item}}"password: "{{'123456'|password_hash('sha512')}}"state: presentwith_list:- zhangsan- lisi

列表嵌套

  • 嵌套的列表,可以使用flatten过滤器处理成扁平结构
[student@worktest myansible]$ cat file_list.yml
---
- name: create fileshosts: serveravars:file_lists:- [a1, a2, a3]- [b1, b2]- [c1, c2, c3, c4]tasks:- name: display flatten listdebug:msg: "{{file_lists|flatten}}"- name: create some filesfile:path: /tmp/{{item}}state: touchloop: "{{file_lists|flatten}}"
复杂的嵌套结构
  • 复杂嵌结构,python示例:
[student@worktest myansible]$ python3
>>> users = [
...     {
...         'name': 'zzz',
...         'email': 'zzz@stud.cn',
...         'days': ['Sat', 'Sun']
...     },
...     {
...         'name': 'dmy',
...         'email': 'dmy@stud.cn',
...         'days': ['Mon', 'Tue', 'Wed']
...     }
... ]
# 在取数据的时候,列表项是通过下标取出的,字典项通过key取出。
>>> users[0]
{'name': 'zzz', 'email': 'zzz@stud.cn', 'days': ['Sat', 'Sun']}
>>> users[1]
{'name': 'dmy', 'email': 'dmy@stud.cn', 'days': ['Mon', 'Tue', 'Wed']}
>>> users[0]['email']
'zzz@stud.cn'
>>> users[1]['days']
['Mon', 'Tue', 'Wed']
>>> users[1]['days'][1]
'Tue'
  • 取出复杂结构中的子列表,使用subelement过滤器
[student@worktest myansible]$ cat lists2.yml
---
- name: nested listshosts: serveravars:users:- name: zzzemail: zzz@stud.cndays:- Sat- Sun- name: dmyemail: dmy@stud.cndays:- Mon- Tue- Wedtasks:- name: display emaildebug:msg: "{{item}}"loop: "{{users|subelements('days')}}"
遍历字典
  • 输出嵌套的字典结构
[student@worktest myansible]$ cat dicts.yml
---
- name: display dicthosts: serveravars:users:user1:name: zzzemail: zzz@stud.cnuser2:name: dmyemail: dmy@stud.cntasks:- name: display some infodebug:msg: "{{users|dict2items}}"  #将上面的结构转换为key,value的结构- name: loop usersdebug:msg: "{{item.key}}:{{item['value']}}"loop: "{{users|dict2items}}"

使用过滤器处理网络地址

收集和处理地址信息

  • 与网络有关的facts变量
    • ansible_facts['dns']['nameservers']:DNS服务器
    • ansible_facts['domain']:域名
    • ansible_facts['all_ipv4_addresses']:所有的IPV4地址
    • ansible_facts['all_ipv6_addresses']:所有的IPV6地址
    • ansible_facts['fqdn']:完全合格域名
    • ansible_facts['hostname']:主机名
[student@worktest myansible]$ ansible all -m setup -a "filter=ansible_all_ipv4"
[student@worktest myansible]$ ansible all -m setup -a "filter=ansible_fqdn"
[student@worktest myansible]$ ansible all -m setup -a "filter=ansible_hostname"

网络信息过滤器

  • ipaddr:
# 如果是一个地址,则返回地址;不是IP地址,则返回False
[student@worktest myansible]$ lab data-netfilters start
[student@worktest myansible]$ cat ipaddr.yml
---
- name: test ip addresshosts: serveravars:myips:- "192.168.1.10"- "300.1.1.1"tasks:- name: test ipdebug:msg: "{{item|ipaddr}}"loop: "{{myips}}"# netmask参数,可以返回前缀表示法地址中的网络掩码
[student@worktest myansible]$ cat ipaddr.yml
---
- name: test ip addresshosts: serveratasks:- name: test ipdebug:msg: "{{'10.1.1.10/23'|ipaddr('netmask')}}"

ipaddr可以使用的选项有:

  • address:判断某一地址是否是有效地址
  • net:验证输出的值是是网络范围
  • host:确保地址有一个等效的CIDR格式
  • prefix:验证输入的是CIDR/prefix格式,返回前缀
# 返回网络地址10.1.0.0/24
[student@worktest myansible]$ cat ipaddr.yml
---
- name: test ip addresshosts: serveratasks:- name: test ipdebug:msg: "{{'10.1.0.0/255.255.255.0'|ipaddr('net')}}"# 判断地址是不是公有的public。私有的private
[student@worktest myansible]$ cat ipaddr.yml
---
- name: test ip addresshosts: serveratasks:- name: test ipdebug:msg: "{{'100.1.10.0'|ipaddr('public')}}"

使用插件收集网络信息

DNS记录

  • A:把FQDN解析为IP地址
  • PTR:与A记录相反
  • SOA:起始授权。指定域中的权威服务器
  • NS:名称服务器。
  • MX:邮件交换器
  • CNAME:别名记录
C:\Users\BJTT>nslookup   # 进入时,将显示当前主机使用的DNS服务器
默认服务器:  xd-cache-1.bjtelecom.net
Address:  219.141.136.10
# 查看163.com中谁是权威服务器
> set type=soa
> 163.com
服务器:  xd-cache-1.bjtelecom.net
Address:  219.141.136.10非权威应答:
163.comprimary name server = ns4.nease.netresponsible mail addr = admin.nease.netserial  = 20201030refresh = 7200 (2 hours)retry   = 1800 (30 mins)expire  = 1209600 (14 days)default TTL = 60 (1 min)163.com nameserver = ns5.nease.net
163.com nameserver = ns2.166.com
163.com nameserver = ns1.nease.net
163.com nameserver = ns6.nease.net
163.com nameserver = ns8.166.com
163.com nameserver = ns3.nease.net
163.com nameserver = ns4.nease.net# 查看ns4.nease.net的IP地址
> set q=a         # 等价于set type=a
> ns4.nease.net
服务器:  xd-cache-1.bjtelecom.net
Address:  219.141.136.10非权威应答:
名称:    ns4.nease.net
Address:  103.72.16.81# 查询163.com中,有哪些邮件服务器
> set q=mx
> 163.com
服务器:  xd-cache-1.bjtelecom.net
Address:  219.141.136.10非权威应答:
163.com MX preference = 10, mail exchanger = 163mx01.mxmail.netease.com
163.com MX preference = 10, mail exchanger = 163mx02.mxmail.netease.com
163.com MX preference = 10, mail exchanger = 163mx03.mxmail.netease.com
163.com MX preference = 50, mail exchanger = 163mx00.mxmail.netease.com163.com nameserver = ns3.nease.net
163.com nameserver = ns5.nease.net
163.com nameserver = ns2.166.com
163.com nameserver = ns1.nease.net
163.com nameserver = ns6.nease.net
163.com nameserver = ns8.166.com
163.com nameserver = ns4.nease.net
  • 通过dig插件查询域信息
# 默认查询A记录。查询example.com的IP地址
[student@worktest myansible]$ cat ipaddr.yml
---
- name: test ip addresshosts: serveratasks:- name: dns infodebug:msg: "{{lookup('dig', 'example.com')}}"# 查询example.com中邮件服务器是谁
[student@worktest myansible]$ cat ipaddr.yml
---
- name: test ip addresshosts: serveratasks:- name: dns infodebug:msg: "{{lookup('dig', 'example.com', 'qtype=MX')}}"
http://www.xdnf.cn/news/6714.html

相关文章:

  • NX二次开发C#---遍历当前工作部件实体并设置颜色
  • SQL练习(6/81)
  • 【Linux】Linux安装并配置MongoDB
  • 游戏引擎学习第285天:“Traversables 的事务性占用”
  • 基于51单片机和8X8点阵屏、矩阵按键的匹对消除类小游戏
  • 服务器性能参数分析基础:磁盘-CPU-内存
  • 关于如何本地启动xxl-job,并且整合SpringBoot
  • 最新模型集合(仅用于个人收集)
  • 前端批量下载文件打包为zip
  • 【Unity】用事件广播的方式实现游戏暂停,简单且实用!
  • 5月16日day27打卡
  • LED接口设计
  • R语言学习--Day03--数据清洗技巧
  • day32-多线程juc
  • QML元素 - OpacityMask
  • [BJDCTF2020]The mystery of ip
  • Python 在自动驾驶数据标签中的应用:如何让 AI 读懂道路?
  • 2025年山东省省赛数模竞赛C题完整论文+代码分享
  • 【动态导通电阻】GaN HEMT动态导通电阻的精确测量
  • 罗杰斯高频板技术解析:低损耗基材如何定义 5G 通信未来
  • tauri2项目使用tauri-plugin-updater配置更新程序流程
  • 如何阅读、学习 Tcc (Tiny C Compiler) 源代码?如何解析 Tcc 源代码?
  • VsCode和AI的前端使用体验:分别使用了Copilot、通义灵码、iflyCode和Trae
  • iOS音视频解封装分析
  • Spring Batch学习,和Spring Cloud Stream区别
  • MySQL面试知识点详解
  • 计算机图形学基础--Games101笔记(一)数学基础与光栅化
  • 生产级编排AI工作流套件:Flyte全面使用指南 — Core concepts Launch plans
  • 非受控组件在 React 中如何进行状态更新?
  • 好用的拓客APP有哪些?