当前位置: 首页 > 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.xdnf.cn/news/1430641.html

相关文章:

  • 零依赖每月工作计划备忘录:高效管理你的每一天
  • TSMC-1987《Convergence Theory for Fuzzy c-Means: Counterexamples and Repairs》
  • 电动车动力电池自动点焊机|深圳比斯特自动化
  • 证明有理数集不是完备的度量空间
  • SpringBoot 整合 RabbitMQ 的完美实践
  • 【代码随想录day 22】 力扣 40.组合总和II
  • Elasticsearch 深分页限制与解决方案
  • 计算机Python毕业设计推荐:基于Django+Vue用户评论挖掘旅游系统
  • 深度学习——基于卷积神经网络实现食物图像分类之(保存最优模型)
  • 前缀和之距离和
  • 架构设计:AIGC 新规下 UGC 平台内容审核防火墙的构建
  • 【XR技术概念科普】什么是注视点渲染(Foveated Rendering)?为什么Vision Pro离不开它?
  • A股大盘数据-20250902分析
  • 深入浅出 RabbitMQ-消息可靠性投递
  • 学习日记-SpringMVC-day48-9.2
  • WPF应用程序资源和样式的使用示例
  • 洗衣店小程序的设计与实现
  • 深度学习篇---DenseNet网络结构
  • gitlab中回退代码,CI / CD 联系运维同事处理
  • VR森林经营模拟体验带动旅游经济发展
  • Time-MOE 音频序列分类任务
  • 【C++框架#2】gflags 和 gtest 安装使用
  • Redis 的跳跃表:像商场多层导航系统一样的有序结构
  • 疯狂星期四文案网第58天运营日记
  • 大模型微调数据准备全指南:清洗、标注与高质量训练集构造实战
  • 科研界“外挂”诞生了:科学多模态模型Intern-S1-mini开源
  • 我的项目我做主:Focalboard+cpolar让团队协作摆脱平台依赖
  • 大数据毕业设计选题推荐-基于大数据的电脑硬件数据分析系统-Hadoop-Spark-数据可视化-BigData
  • 临时邮箱地址获取服务器邮件工作流程与实现
  • playwright+python 实现图片对比