linux--ansible(playbook9 过滤器)

本文详细介绍了Ansible Playbook中涉及的过滤器使用,包括与字符串、数字和列表相关的操作,如检查是否为空及文件权限设置等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

与字符串有关的过滤器

---
- hosts: testB
  remote_user: root
  vars:
    var1: "acaa192PLI acc"
    var2: "   abc   "
    var3: '1241209501'
    var4: "1l#@*&"
  tasks:
  - debug:
     #将字符串转换成纯大写
      msg: "{{ var1 | upper }}"
  - debug:
     #将字符串转换成纯小写
      msg: "{{ var1 | lower }}"
  - debug:
     #将字符串变为首字母大写,后面小写
     #python中的title
      msg: "{{ var1 | capitalize }}"
  - debug:
     #将字符串翻转
      msg: "{{ var1 | reverse }}"
  - debug:
     #返回第一个字符
      msg: "{{ var1 | first }}"
  - debug:
     #返回字符串最后一个字符
      msg: "{{ var1 | last }}"
  - debug:
     #将字符串开头结尾空格去掉
      msg: "{{ var2 | trim }}"
  - debug:
     #将字符串放在中间,并且设置字符串的长度为30,字符串两边用空格补齐30位长
      msg: "{{ var2 | center(width=30) }}"
  - debug:
     #返回字符串长度,也可以用count,两者等效
      msg: "{{ var3 | length }}"
  - debug:
     #将字符串转换成列表,每个字符作为一个元素
      msg: "{{ var4 | list }}"
  - debug:
     #将字符串转换成列表,每个字符作为一个元素,并且随机打乱
      msg: "{{ var4 | shuffle }}"

与数字有关的过滤器

---
- hosts: testB
  remote_user: root
  vars:
    var: -1
  tasks:
  - debug:
     #将字符串转换为整形再做计算
      msg: "{{ 8+('8' | int) }}"
  - debug:
     #将对应的值转换为int类型,如果无法转换,默认返回6,不写默认为0
      msg: "{{ 'a' | int(default=6) }}"
  - debug:
     #将对应的值转换为浮点型,如果无法转换,默认返回'0.0'
      msg: "{{ '8' | float }}"
  - debug:
     #或取对应数值的绝对值
      msg: "{{ var | abs }}"
  - debug:
     #四舍五入
      msg: "{{ 17.5 | round }}"
  - debug:
     #获取小数点后五位
      msg: "{{ 3.141592653 | round(5) }}"
  - debug:
     #从0到100中随机返回一个随机数
      msg: "{{ 100 | random }}"
  - debug:
     #从5到10中随机返回一个随机数
      msg: "{{ 10 | random(start=5) }}"
  - debug:
     #从5到15中随机返回一个随机数,步长为3
      msg: "{{ 15 | random(start=5,step=3) }}"

与列表有关的过滤器

---
- hosts: testB
  remote_user: root
  vars:
    var1: [22,18,5,33,27,30]
    var2: [1,[5,3,[14,0]],6,7]
    var3: [1,'b',5]
    var4: [1,'A','b',['QQ','wechat'],'GhlK']
    var5: ['abc',1,3,'abc','1',3]
    var6: ['abc',2,'b','a','c']
  tasks:
  - debug:
     #返回列表长度,length与count等效,可以写为count
      msg: "{{ var1 | length }}"
  - debug:
     #返回列表中的第一个值
      msg: "{{ var1 | first }}"
  - debug:
     #返回列表中的最后一个值
      msg: "{{ var1 | last }}"
  - debug:
     #返回列表最小的值
      msg: "{{ var1 | min }}"
  - debug:
     #返回列表最大的值
      msg: "{{ var1 | max }}"
  - debug:
     #升序排序输出
      msg: "{{ var1 | sort }}"
  - debug:
     #降序排序输出
      msg: "{{ var1 | sort(reverse=true) }}"
  - debug:
     #返回纯数字非嵌套列表中所有数字的和
      msg: "{{ var1 | sum }}"
  - debug:
     #如果列表包含列表,flatten可以拉平嵌套的列表
     #2.5版本之后可以使用
      msg: "{{ var2 | flatten }}"
  - debug:
     #只拉平第一层 2.5版本之后可用
      msg: "{{ var2 | flatten(levels=1) }}"
  - debug:
     #过滤器可以自由结合使用,就像linux中的管道符
      msg: "{{ var2 | sort(reverse=true) }}"
  - debug:
     #将列表中的元素合并成一个字符串
      msg: "{{ var3 | join }}"
  - debug:
     #将列表中的元素合并成一个字符串,每个元素用指定的字符隔开
      msg: "{{ var3 | join(',') }}"
  - debug:
     #从列表中随机返回一个元素
      msg: "{{ var3 | random }}"
  - debug:
     #随机打乱顺序列表中元素的顺序
      msg: "{{ var3 | shuffle }}"
  - debug:
     #将列表中的每个元素变成纯大写
      msg: "{{ var4 | upper }}"
  - debug:
     #将列表中的每个元素变成纯小写
      msg: "{{ var4 | lower }}"
  - debug:
     #去掉列表中重复的元素,重复元素只留一个
      msg: "{{ var5 | unique }}"
  - debug:
     #将两个列表合并,重复的元素只留下一个
      msg: "{{ var5 | union(var6) }}"
  - debug:
     #获取两个元素的交集,重复元素只留一个
      msg: "{{ var5 | intersect(var6) }}"
  - debug:
     #取出存在与var5,但不存在var6的元素,去重,重复元素只留一个
     #两个列表中的交集在列表1=var5中的补集
      msg: "{{ var5 | difference(var6) }}"
  - debug:
     #取出两个列表独有的元素,重复的只留一个
     #即取出交集
      msg: "{{ var5 | symmetric_difference(var6) }}"
过滤是否为空
---
- hosts: testB
  remote_user: root
  gather_facts: no
  vars:
    var1: ''
  tasks:
  - debug:
      #如果var2没有定义,返回默认值
      msg: "{{ var2 | default('aplox') }}"
  - debug:
      #如果var1没有定义,返回默认值 空也被认为是没定义
      msg: "{{ var1 | default('rico',boolean=true) }}"
      #如果var2没有定义,报错
  - debug:
      msg: "{{ var2 | mandatory }}"
创建3个文件,一个有权限,两个默认
---
- hosts: testB
  remote_user: root
  vars:
    paths:
      - path: /tmp/test1
        mode: '0444'
      - path: /tmp/test2
      - path: /tmp/test3
  tasks:
  - file: dest={{item.path}} state=touch mode={{item.mode}}
    with_items: "{{ paths }}"
    when: item.mode is defined
  - file: dest={{item.path}} state=touch
    with_items: "{{ paths }}"
    when: item.mode is undefined

在这里插入图片描述

---
- hosts: testB
  remote_user: root
  vars:
    paths:
      - path: /testdir/test1
        mode: '0444'
      - path: /testdir/test2
      - path: /testdir/test3
  tasks:
    #omit的意思是没有mode参数 直接省略mode设定
  - file: dest={{item.path}} state=touch mode={{item.mode | default(omit)}}
    with_items: "{{ paths }}"

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值