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

ansible循环

ansible循环

with_items:(迭代列表)最基础的列表遍历,支持简单列表或嵌套列表(会自动展开),通过item访问元素

示例:

[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1tasks:- name: 1debug:msg: echo {{ item }}with_items:- 123- 234- 345
~  
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug] *******************************************************************
ok: [node1] => (item=123) => {"msg": "echo 123"
}
ok: [node1] => (item=234) => {"msg": "echo 234"
}
ok: [node1] => (item=345) => {"msg": "echo 345"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

with_dict:(迭代字典)遍历字典结构,用item.keyitem.value分别访问键和值

示例:

[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1tasks:- name: debugdebug:msg: "{item.key }} & {{item.value}}"with_dict:address: 1network: 2gateway: 3
~ 
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug] *******************************************************************
ok: [node1] => (item={'key': 'address', 'value': 1}) => {"msg": "{item.key }} & 1"
}
ok: [node1] => (item={'key': 'network', 'value': 2}) => {"msg": "{item.key }} & 2"
}
ok: [node1] => (item={'key': 'gateway', 'value': 3}) => {"msg": "{item.key }} & 3"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

with_fileglob:(迭代文件)匹配本地文件系统中的文件路径,用于批量处理文件

示例:

[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1tasks:- name: cp filecopy:src: "{{item}}"dest: /tmp/with_fileglob:- /tmp/*.sh- /tmp/*.py
~   
[student@master ansible]$ cd /tmp/
[student@master tmp]$ sudo touch a.sh b.sh c.py d.py
[student@master tmp]$ cd -
/home/student/ansible
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [cp file] *****************************************************************
changed: [node1] => (item=/tmp/a.sh)
changed: [node1] => (item=/tmp/b.sh)
changed: [node1] => (item=/tmp/c.py)
changed: [node1] => (item=/tmp/d.py)PLAY RECAP *********************************************************************
node1                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

with_lines:(迭代行)可以将命令行的输出结果按行迭代

示例:

[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1tasks:- name: cp filecopy:src: "{{item}}"dest: /tmp/with_lines:- find /home/student/ansible -name "*.yml"
~                                               

with_nested:实现嵌套循环,组合多个列表的元素

示例:

[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1tasks:- name: debugdebug:msg: "{{item[0]}} & {{item[1]}}"with_nested:- [a,b]- [1,2,3]
~ 
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug] *******************************************************************
ok: [node1] => (item=['a', 1]) => {"msg": "a & 1"
}
ok: [node1] => (item=['a', 2]) => {"msg": "a & 2"
}
ok: [node1] => (item=['a', 3]) => {"msg": "a & 3"
}
ok: [node1] => (item=['b', 1]) => {"msg": "b & 1"
}
ok: [node1] => (item=['b', 2]) => {"msg": "b & 2"
}
ok: [node1] => (item=['b', 3]) => {"msg": "b & 3"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

with_sequence 排序列(start是从什么开始,end结束 stride每隔多少**)**

示例:

[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1tasks:- name: debugdebug:msg: "{{item}}"with_sequence:start=1end=5stride=1
~
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug] *******************************************************************
ok: [node1] => (item=1) => {"msg": "1"
}
ok: [node1] => (item=2) => {"msg": "2"
}
ok: [node1] => (item=3) => {"msg": "3"
}
ok: [node1] => (item=4) => {"msg": "4"
}
ok: [node1] => (item=5) => {"msg": "5"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1tasks:- name: debugdebug:msg: "{{item}}"with_sequence:start=10end=5stride=-1
~                               
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug] *******************************************************************
ok: [node1] => (item=10) => {"msg": "10"
}
ok: [node1] => (item=9) => {"msg": "9"
}
ok: [node1] => (item=8) => {"msg": "8"
}
ok: [node1] => (item=7) => {"msg": "7"
}
ok: [node1] => (item=6) => {"msg": "6"
}
ok: [node1] => (item=5) => {"msg": "5"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

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

示例:

[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1tasks:- name: debugdebug:msg: "{{item}}"with_random_choice:- 1- 2- 3- 4- 5
~     
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug] *******************************************************************
ok: [node1] => (item=1) => {"msg": 1
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1tasks:- name: debugdebug:msg: echo {{ item }}with_items:- a- b- c- e- f
~                                  
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug] *******************************************************************
ok: [node1] => (item=a) => {"msg": "echo a"
}
ok: [node1] => (item=b) => {"msg": "echo b"
}
ok: [node1] => (item=c) => {"msg": "echo c"
}
ok: [node1] => (item=e) => {"msg": "echo e"
}
ok: [node1] => (item=f) => {"msg": "echo f"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   [student@master ansible]$ vim a.yml 
---
- name: testhosts: node1tasks:- name: debugdebug:msg: echo {{ item }}loop:- a- b- c- e- f
~ 
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug] *******************************************************************
ok: [node1] => (item=a) => {"msg": "echo a"
}
ok: [node1] => (item=b) => {"msg": "echo b"
}
ok: [node1] => (item=c) => {"msg": "echo c"
}
ok: [node1] => (item=e) => {"msg": "echo e"
}
ok: [node1] => (item=f) => {"msg": "echo f"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Loop:

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

过滤器:

常用字符串有关的过滤器

示例:(upper将字符串转换成纯大写)

[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1vars:testvar: "abc123ABC 666"testvar1: " abc "tasks: - name: debug1debug:msg: "{{ testvar |upper}}"
~   
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug1] ******************************************************************
ok: [node1] => {"msg": "ABC123ABC 666"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

示例:(lower将字符串转换成纯小写)

[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1vars:testvar: "abc123ABC 666"testvar1: " abc "tasks:- name: debug1debug:msg: "{{ testvar |lower}}"
~                           
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug1] ******************************************************************
ok: [node1] => {"msg": "abc123abc 666"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

示例:(将字符串首字母大写,之后的所有字母纯小写)

[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1vars:testvar: "abc123ABC 666"testvar1: " abc "tasks:- name: debug1debug:msg: "{{ testvar |capitalize}}"
~                                    
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug1] ******************************************************************
ok: [node1] => {"msg": "Abc123abc 666"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

示例:(trim 将字符串的首尾空格去掉)

[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1vars:testvar: "abc123ABC 666"testvar1: " abc "tasks:- name: debug1debug:msg: "{{ testvar1 |trim}}"
~ 
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug1] ******************************************************************
ok: [node1] => {"msg": "abc"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

使用加密算法对字符串进行hash加密

创建一个用户shenyifeng,并且设置密码为redhat,密码采用SHA512哈希格式

[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1tasks:- name: create useruser:name: testuer1password: "{{ 'redhat' | password_hash('sha512') }}"state: present
~   
[student@master ansible]$ vim pass
pw: redhat
~     
[student@master ansible]$ chmod 600 pass
[student@master ansible]$ vim a.yml 
---
- name: testhosts: node1vars_files:- /home/student/ansible/passtasks:- name: create useruser:name: testuer1password: "{{ pw | password_hash('sha512') }}"state: present
~                      
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [create user] *************************************************************
changed: [node1]PLAY RECAP *********************************************************************
node1                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

和数字操作有关的过滤器:

[student@master ansible]$ vim s.yml
---
- name: testhosts: node1tasks:- name: 1debug:msg: "{{ 8+8 }}"
~          
[student@master ansible]$ ansible-playbook s.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug] *******************************************************************
ok: [node1] => {"msg": "16"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

debug:

​ #将对应的值转换成int类型

​ #ansible中,字符串和整形不能直接计算,比如{{ 8+‘8’ }}会报错

​ #所以,我们可以把一个值为数字的字符串转换成整形后再做计算

​ msg: “{{ 8+(‘8’ | int) }}”

示例:

[student@master ansible]$ vim s.yml 
---
- name: testhosts: node1tasks:- name: 1debug:msg: "{{ 8+('8'|int) }}"
~           
[student@master ansible]$ ansible-playbook s.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug] *******************************************************************
ok: [node1] => {"msg": "16"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

debug:

​ #将对应的值转换成int类型,如果无法转换,默认返回0

​ #使用int(default=6)或者int(6)时,如果无法转换则返回指定值6

​ msg: “{{ ‘a’ | int(default=6) }}”

示例:

[student@master ansible]$ vim s.yml 
---
- name: testhosts: node1tasks:- name: 1debug:msg: "{{ 8+('a'|int(default=3)) }}"
~                 
[student@master ansible]$ ansible-playbook s.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug] *******************************************************************
ok: [node1] => {"msg": "11"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

debug:

​ #将对应的值转换成浮点型,如果无法转换,默认返回’0.0’

示例:

[student@master ansible]$ vim s.yml
---
- name: testhosts: node1tasks:- name: 1debug:msg: "{{ 8 | float }}"
~  
[student@master ansible]$ ansible-playbook s.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug] *******************************************************************
ok: [node1] => {"msg": "8.0"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
[student@master ansible]$ vim s.yml 
---
- name: testhosts: node1tasks:- name: 1debug:msg: "{{ 'fds' | float }}"
~        
[student@master ansible]$ ansible-playbook s.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug] *******************************************************************
ok: [node1] => {"msg": "0.0"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
[student@master ansible]$ vim s.yml 
---
- name: testhosts: node1tasks:- name: 1debug:msg: "{{ 'fds' | float(1.23) }}"
~         
[student@master ansible]$ ansible-playbook s.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug] *******************************************************************
ok: [node1] => {"msg": "1.23"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

debug:

​ #从0到100中随机返回一个随机数

示例:

[student@master ansible]$ vim s.yml 
---
- name: testhosts: node1tasks:- name: 1debug:msg: "{{ 100 | random }}"
~   
[student@master ansible]$ ansible-playbook s.yml PLAY [test] ********************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]TASK [debug] *******************************************************************
ok: [node1] => {"msg": "92"
}PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
http://www.dtcms.com/a/362778.html

相关文章:

  • GitHub Classroom:编程教育的高效协作方案
  • 从零开始的云计算生活——第五十七天,蓄势待发,DevOps模块
  • 数据量太大处理不了?Hadoop+Spark轻松解决海洋气象大数据分析难题
  • HQX SELinux 权限问题分析与解决
  • 使用 Avidemux 去除视频的重复帧
  • 亚马逊美加站点物流新规解读:库存处理逻辑重构与卖家应对策略
  • 两台电脑通过网线直连共享数据,设置正确,却互相ping不通的解决方法
  • 探索 UniHttp:解锁 Xml 及 JavaBean 序列化的多种方式
  • ASP.NET Core上传文件到minio
  • 嵌入式硬件 - 51单片机1
  • JVM中产生OOM(内存溢出)的8种典型情况及解决方案
  • 自从不小心踢了一脚主机之后,电脑频繁蓝屏、死机、无法开机……
  • 鸿蒙Next开发指南:XComponent与Progress组件的深度解析与实践
  • 睿思芯科正式加入龙蜥社区,携手共建 RISC-V 服务器生态新标杆
  • react+taro的使用整理
  • 【JavaEE】(21)Spring AOP
  • 解密GTH时钟架构:一网打尽收发器时钟之谜
  • 火语言 RPA 界面应用生成:低代码逻辑下的功能设计与场景适配
  • PowerPoint和WPS演示如何循环放映PPT
  • 想找Gamma的平替?这几款AI PPT工具值得试试
  • 从技术架构到经济价值:低代码在企业开发中的成本节约潜力
  • LeetCode 925.长按键入
  • 哈希表-面试题01.02.判定是否互为字符重排-力扣(LeetCode)
  • 趣味学RUST基础篇(HashMap)
  • 二叉树的非递归遍历 | 秋招面试必备
  • Spring Bean
  • LLM面试50问:NLP/RAG/部署/对齐/安全/多模态全覆盖
  • R语言根据经纬度获得对应样本的省份
  • WPF依赖属性和依赖属性的包装器:
  • iOS混淆工具实战 视频流媒体类 App 的版权与播放安全保护