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

自动化运维-ansible中的循环应用

自动化运维-ansible中的循环与过滤器的应用

一、循环的使用示例

  1. with_items 迭代列表

    [student@master ansible] vim a.yml
    # playbook内容如下
    ---
    - name: test1hosts: node1tasks:- name: test11shell:cmd: echo "{{ item }}"with_items:- user1- user2- user3register: xx- name: test12debug:var: xx.results[0].stdout- name: test13debug:var: xx.results[1].stdout- name: test14debug:var: xx.results[2].stdout
    

    在这里插入图片描述

  2. with_dict 迭代字典

    [student@master ansible] vim b.yml
    # playbook内容如下
    ---
    - name: test2hosts: node1tasks:- name: test21debug:msg: "{{item.key}}&{{item.value}}"with_dict:address: 1netmask: 2gateway: 3
    

    在这里插入图片描述

  3. with_fileglob 迭代文件

    [student@master ansible] vim c.yml
    # playbook内容如下
    ---
    - name: test3hosts: node1tasks:- name: test31debug:msg: "{{item}}"with_fileglob:- /home/student/ansible/*.yml
    

    在这里插入图片描述

  4. with_lines 迭代行

    [student@master ansible] vim d.yml
    # playbook内容如下
    ---
    - name: test4hosts: node1tasks:- name: test41debug:msg: "{{item}}"with_lines:- find /home/student/ansible -name "*.yml"
    

    在这里插入图片描述

  5. with_nested 嵌套迭代

    [student@master ansible] vim e.yml
    # playbook内容如下
    ---
    - name: test5hosts: node1tasks:- name: test51debug:msg:"{{item[0]}}&{{item[1]}}"with_nested:- [a,b]- [1,2,3]
    

    在这里插入图片描述

  6. with_sequence 排序列

    start 是从什么开始 end 是结束 stride 是每隔多少

    [student@master ansible] vim f.yml
    # playbook内容如下
    ---
    - name: testhosts: node1tasks:- name: test61debug:msg: "{{item}}"with_sequence:start=5end=15stride=3
    

    在这里插入图片描述

  7. with_random_choice 随机获得列表中的一个值

    [student@master ansible] vim g.yml
    # playbook内容如下
    ---
    - name: test7hosts: node1tasks:- name: test71debug:msg: "{{item}}"with_random_choice:- 1- 2- 3- a- b- c
    

    在这里插入图片描述

二、过滤器

现在loop已经替代了with,更多的是loop配合过滤器进行使用


因为格式原因,在这里使用 I 代替 | 符号,使用时请更改为 |

  1. 常用字符串有关的过滤器

    过滤器名功能描述示例用法示例结果/说明
    upper将字符串转换成纯大写{{ 'abc123ABC' I upper }}‘ABC123ABC’
    lower将字符串转换成纯小写{{ 'abc123ABC' I lower }}‘abc123abc’
    capitalize将字符串首字母大写,之后的所有字母纯小写{{ 'hello WORLD' I capitalize }}‘Hello world’
    trim将字符串开头和结尾的空格去除{{ ' abc ' I trim }}‘abc’
    length/count返回字符串长度{{ 'hello' I length }}5
    first返回字符串的第一个字符{{ 'hello' I first }}‘h’
    last返回字符串的最后一个字符{{ 'hello' I last }}‘o’
    center将字符串放在中间,并且设置指定宽度,字符串两边用空格补齐{{ 'hi' I center(width=10) }}’ hi ’
    list将字符串转换成列表,每个字符作为一个元素{{ 'hello' I list }}[‘h’,‘e’,‘l’,‘l’,‘o’]
    shuffle将字符串转换成列表,每个字符作为一个元素,并且随机打乱顺序{{ 'hello' I shuffle }}随机顺序,如 [‘o’,‘l’,‘e’,‘h’,‘l’]
  2. 和数字操作有关的过滤器

    过滤器名功能描述示例用法示例结果/说明
    int将对应的值转换成int类型{{ '8' I int }}8
    int将对应的值转换成int类型,如果无法转换,默认返回指定值{{ 'a' I int(default=6) }}6
    float将对应的值转换成浮点型{{ '8.5' I float }}8.5
    float当对应的值无法被转换成浮点型时,则返回指定值{{ 'a' I float(8.88) }}8.88
    abs获取对应数值的绝对值{{ -5 I abs }}5
    round四舍五入{{ 12.5 I round }}13
    round取指定小数位数{{ 3.1415926 I round(5) }}3.14159
    random从0到指定值中随机返回一个随机数{{ 100 I random }}0-100间的随机整数
    random从指定起始值到指定值中随机返回一个随机数{{ 10 I random(start=5) }}5-10间的随机整数
    random从指定起始值到指定值中随机返回一个随机数,按指定步长{{ 15 I random(start=5,step=3) }}5,8,11,14中的一个
    random从0到指定值中随机返回一个随机数,按指定步长{{ 15 I random(step=5) }}0,5,10,15中的一个
  3. 文件或目录类过滤器

    过滤器名功能描述示例用法示例结果/说明
    hash使用指定算法对字符串进行哈希{{ '123456' I hash('sha1') }}SHA1哈希字符串
    hash使用md5算法对字符串进行哈希{{ '123456' I hash('md5') }}MD5哈希字符串
    checksum获取字符串的校验和(与md5哈希值一致){{ '123456' I checksum }}MD5哈希字符串
    password_hash使用加密算法对字符串进行哈希,生成随机"盐"{{ '123456' I password_hash('sha256') }}带随机盐的SHA256哈希
    password_hash使用加密算法对字符串进行哈希,使用指定的"盐"{{ '123456' I password_hash('sha256','mysalt') }}带指定盐的SHA256哈希
    password_hash使用sha512算法对字符串进行哈希,生成随机"盐"{{ '123123' I password_hash('sha512') }}带随机盐的SHA512哈希
    password_hash使用sha512算法对字符串进行哈希,使用指定的"盐"{{ '123123' I password_hash('sha512','ebzL.U5cjaHe55KK') }}带指定盐的SHA512哈希

三、for 循环示例

  1. 要求

    从 http://ansible.example.com/materials/newhosts.j2 下载模板文件
    完成该模板文件,用来生成新主机清单(主机的显示顺序没有要求),结构如下:
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.122.10 node1.example.com node1
    192.168.122.20 node2.example.com node2
    192.168.122.30 node3.example.com node3
    192.168.122.40 node4.example.com node4
    192.168.122.50 node5.example.com node5
    创建剧本/home/student/ansible/newhosts.yml,它将使用上述模板在 node1 主机上
    生成文件/etc/newhosts。

  2. 步骤

    下载模板

    [student@master ansible] ansible-playbook newhosts.yml
    

    在这里插入图片描述

    编辑 newhosts.j2 文件,写入 for 循环

    [student@master ansible] vim newhosts.j2
    # 编辑内容如下
    {% for yy in groups.all %}
    {{ hostvars[yy].ansible_default_ipv4.address }} {{ hostvars[yy].ansible_fqdn }} [{ hostvars[yy].ansible_hostname }]
    {% endfor %}
    

    在这里插入图片描述

    编辑 playbook,newhosts.yml

    [student@master ansible] vim newhosts.yml
    # playbook内容如下
    ---
    - name: get facthosts: all
    - name: cp filehosts: node1tasks:- name: cp file1template:src: /home/student/ansible/newhosts.j2dest: /etc/newhosts
    

    在这里插入图片描述

    查看 node1 的 /etc/newhosts 文件

    [student@master ansible] ansible node1 -m shell -a 'cat /etc/newhosts'
    

    在这里插入图片描述

http://www.dtcms.com/a/363948.html

相关文章:

  • 机器学习入门,支持向量机
  • etf期权亏几个点就爆仓了?
  • 37.Ansible循环+常用过滤器
  • docker-compose的使用
  • 让AI成为您的眼睛:星眸(StarGaze),为盲人朋友点亮前行之路
  • MySQL8.0 新特性随笔
  • 基于B_S结构的校园报修管理系统设计与实现(代码+数据库+LW)
  • 设置STS(Spring Tool Suite),在格式化代码时for循环中的冒号左右都加上一个空格
  • 移动端网页调试实战,Safari Web Inspector 深度使用与对比分析
  • 关于?问号占位符的分析(主要以PHP为例)
  • C# 中这几个主流的 ORM(对象关系映射器):Dapper、Entity Framework (EF) Core 和 EF 6
  • C#基础(⑥动态链接库DLL)
  • Python 中将 JSON 字符串转为对象的几种方法对比
  • (五)Python控制结构(循环结构)
  • 最快的 C 语言 JSON 库 - yyjson
  • 爬虫-----最全的爬虫库介绍(一篇文章让你成为爬虫大佬,爬你想爬)
  • 【鸿蒙心迹】从疑惑到热爱:我的鸿蒙开发启蒙
  • Java消息中间件(RocketMQ)
  • Linux 文本处理实战手册
  • 【专栏升级】大模型应用实战并收录RAG专题,Agent专题,LLM重构数据科学流程专题,端侧AI专题,累计63篇文章
  • Redis 哨兵 (基于 Docker)
  • YOLO 目标检测:YOLOv5网络结构、Focus、CSP、自适应Anchor、激活函数SiLU、SPPF、C3
  • 3.2-C++基础组件
  • Kafka面试精讲 Day 5:Broker集群管理与协调机制
  • 深度学习-----通过本地数据实现图片识别的训练
  • PS痕迹检测器:基于深度学习的图像篡改检测
  • 撤销修改 情况⼀:对于⼯作区的代码,还没有 add
  • 浏览器内存 (JavaScript运行时内存)存储的优劣分析
  • linux(cut,sort,uniq ,tr,sed,awk)命令介绍
  • 贝叶斯定理:理解概率更新与实际场景应用