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.mzph.cn/web/80540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go 模块版本管理

Go 模块版本管理指南 1、创建带注释的 Git 标签 基本命令 # 创建带注释的标签 git tag -a v1.0.0 -m "Release version 1.0.0 - initial stable release" -a:创建带注释的标签 -m:添加标签注释信息 # 推送标签到远程仓库 git push origin v…

Java—— IO流 第一期

什么是IO流 存储和读取数据的解决方案 I:input O:output 流:像水流一样传输数据 IO流的作用 用于读写数据(本地文件,网络) IO流的分类 按照流向分类 输出流:程序 --> 文件 输入流:文件 --> 程序 按照…

物联网安全技术的最新进展与挑战

随着物联网(IoT)技术的飞速发展,越来越多的设备被连接到互联网,从智能家居设备到工业控制系统,物联网正在深刻改变我们的生活和生产方式。然而,物联网的安全问题也日益凸显,成为制约其发展的关键…

【深度学习基础】损失函数与优化算法详解:从理论到实践

【深度学习基础】损失函数与优化算法详解:从理论到实践 一、引言 1. 损失函数与优化算法在深度学习中的核心作用 在深度学习中,模型训练的本质是通过不断调整参数,使模型输出尽可能接近真实值。这一过程的核心驱动力是损失函数(…

mvc-review

review: 1.Servlet生命周期中初始化方法:init(),init(config) public void init(ServletConfig config) throws ServletException { this.config config; this.init(); } 因此,如果我们需要…

YouTube视频字幕转成文章算重复内容吗?

很多创作者误以为「自己说的话不算抄袭」,却不知道YouTube自动生成的字幕早已被搜索引擎存档。 去年就有案例:某美食博主将教程视频字幕转为图文,结果原创度检测仅42%,导致页面权重暴跌。 本文揭秘5个实操技巧:从删除…

R语言数据可视化

R note book 文档–输出html格式文档,plotly不能生成PDF文件 --- title: "R语言数据可视化" output: html_notebook ---在R语言中进行数据可视化是数据分析和呈现的重要环节,R提供了多种强大的绘图系统和工具。以下是常见的数据可视化方法和示…

Axure难点解决分享:垂直菜单展开与收回(4大核心问题与专家级解决方案)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:垂直菜单展开与收回 主要内容:超长菜单实现、展开与收回bug解释、Axure9版本限制等问题解…

云原生攻防2(Docker基础补充)

Docker基础入门 容器介绍 Docker是什么 Docker是基于Linux内核实现,最早是采用了 LXC技术,后来Docker自己研发了runc技术运行容器。 它基于Google Go语言实现,采用客户端/服务端架构,使用API来管理和创建容器。 虚拟机 VS Docker Namespace 内核命名空间属于容器非常核…

Spring Boot 拦截器:解锁5大实用场景

一、Spring Boot中拦截器是什么 在Spring Boot中,拦截器(Interceptor)是一种基于AOP(面向切面编程)思想的组件,用于在请求处理前后插入自定义逻辑,实现权限校验、日志记录、性能监控等非业务功能…

Vue百日学习计划Day24-28天详细计划-Gemini版

总目标: 在 Day 24-27 熟练掌握 Vue.js 的各种模板语法,包括文本插值、属性绑定、条件渲染、列表渲染、事件处理和表单绑定,并能结合使用修饰符。 所需资源: Vue 3 官方文档 (模板语法): https://cn.vuejs.org/guide/essentials/template-syntax.htmlVu…

分布式微服务系统架构第125集:AI大模型

加群联系作者vx:xiaoda0423 仓库地址:https://webvueblog.github.io/JavaPlusDoc/ https://1024bat.cn/ 一、user 表(用户表) sql 复制编辑 create table if not exists user (id bigint auto_increment comment id pri…

机器学习 Day16 聚类算法 ,数据降维

聚类算法 1.简介 1.1 聚类概念 无监督学习:聚类是一种无监督学习算法,不需要预先标记的训练数据 相似性分组:根据样本之间的相似性自动将样本归到不同类别 相似度度量:常用欧式距离作为相似度计算方法 1.2 聚类vs分类 聚类&…

【Linux】第十八章 调优系统性能

1. 系统管理员可以使用哪个命令来更改tuned守护进程的设置? tuned 的调优配置集存储在 /usr/lib/tuned(默认) 和 /etc/tuned(自定义 或当前有效)目录下。每个配置集都有一个单独的目录,目录中包含 tuned.c…

【JVS更新日志】企业文档AI助手上线、低代码、智能BI、智能APS、AI助手5.14更新说明!

项目介绍 JVS是企业级数字化服务构建的基础脚手架,主要解决企业信息化项目交付难、实施效率低、开发成本高的问题,采用微服务配置化的方式,提供了低代码数据分析物联网的核心能力产品,并构建了协同办公、企业常用的管理工具等&…

ollama调用千问2.5-vl视频图片UI界面小程序分享

1、问题描述: ollama调用千问2.5-vl视频图片内容,通常用命令行工具不方便,于是做了一个python UI界面与大家分享。需要提前安装ollama,并下载千问qwen2.5vl:7b 模型,在ollama官网即可下载。 (8G-6G 显卡可…

Web 架构之会话保持深度解析

文章目录 一、引言二、会话保持的基本概念2.1 什么是会话2.2 为什么需要会话保持 三、会话保持的常见实现方式3.1 基于客户端的会话保持3.1.1 Cookie 方式3.1.2 URL 重写方式 3.2 基于服务器端的会话保持3.2.1 负载均衡器会话保持3.2.2 会话共享 四、会话保持可能遇到的问题及解…

Maven 项目中将本地依赖库打包到最终的 JAR 中

文章目录 前言详细步骤 前言 在现代后端开发中,构建高效且可扩展的 Web 应用程序通常依赖于多种第三方库和内部依赖。这些依赖可以来自公共仓库,也可能是公司内部自研的库或尚未发布到公共仓库的 JAR 包。本文将详细介绍如何在 Maven 项目中处理本地依赖…

快速定位到源码位置的插件 - vite/webpack

1. vite-plugin-vue-devtools npm i vite-plugin-vue-devtools -D vite.config.js中配置 import vueDevTools from vite-plugin-vue-devtoolsexport default defineConfig({server: {port: 5173,host: 0.0.0.0},plugins: [vue(),vueJsx(),vueDevTools({componentInspector: t…

基于AH1101芯片的5V升18.6V LED恒流背光供电方案设计

基于AH1101芯片的5V升18.6V LED恒流背光供电方案设计 在现代电子设备中,LED背光技术因其高效、节能、寿命长等优点被广泛应用于各类显示设备。本文将详细介绍如何利用AH1101高效升压恒流驱动芯片,实现从5V输入电压升压至18.6V,为LED背光板提供…