首页 > 其他分享 >Playbook编写循环

Playbook编写循环

时间:2024-06-11 13:02:33浏览次数:6  
标签:name items item 循环 Playbook 编写 loop uid

 

目录

基本循环

使用with_items

高级循环

使用with_dict

使用with_list

使用with_fileglob

使用with_nested

注册变量与循环

循环中注册变量

循环控制与条件

使用when条件

使用loop_control设置标签

使用loop关键字

使用loop和复杂数据结构


在Ansible Playbook中,编写循环(loops)是一个常见且重要的功能,可以简化对多个相似对象的操作。以下是编写循环的方法总结及示例:

基本循环

使用with_items

with_items是最常用的循环方法,适用于列表中的每个元素执行任务。

- name: 安装软件包
  apt:
    name: "{{ item }}"
    state: present
  with_items:
    - nginx
    - git
    - htop

高级循环

使用with_dict

with_dict用于迭代字典的键值对。

- name: 创建用户
  user:
    name: "{{ item.key }}"
    uid: "{{ item.value.uid }}"
  with_dict:
    users:
      alice:
        uid: 1001
      bob:
        uid: 1002
使用with_list

with_list用于处理嵌套列表。

- name: 打印嵌套列表
  debug:
    msg: "Outer item: {{ outer_item }}, Inner item: {{ item }}"
  with_list:
    - "{{ item }}"
  with_items:
    - ["a", "b"]
    - ["c", "d"]
使用with_fileglob

with_fileglob用于迭代匹配文件路径的列表。

- name: 复制所有模板文件
  template:
    src: "{{ item }}"
    dest: "/etc/nginx/conf.d/{{ item | basename }}"
  with_fileglob:
    - "/path/to/templates/*.j2"
使用with_nested

with_nested用于处理嵌套循环,即所有可能的组合。

- name: 安装软件包在多个主机上
  command: "apt-get install {{ item[0] }} -y"
  with_nested:
    - ["nginx", "git"]
    - ["host1", "host2"]

注册变量与循环

循环中注册变量

在循环中注册任务结果到变量。

- name: 获取文件内容
  command: cat "{{ item }}"
  register: file_contents
  with_items:
    - "/path/to/file1"
    - "/path/to/file2"

- name: 打印文件内容
  debug:
    msg: "{{ item.stdout }}"
  with_items: "{{ file_contents.results }}"

循环控制与条件

使用when条件

在循环中使用条件判断。

- name: 安装特定条件下的软件包
  apt:
    name: "{{ item }}"
    state: present
  with_items:
    - nginx
    - apache2
  when: ansible_os_family == "Debian"
使用loop_control设置标签

自定义循环中的标签。

- name: 安装特定条件下的软件包
  apt:
    name: "{{ item }}"
    state: present
  with_items:
    - nginx
    - apache2
  when: ansible_os_family == "Debian"

使用loop关键字

loopwith_*系列的替代方案,提供更灵活的语法。

- name: 使用loop安装软件包
  apt:
    name: "{{ item }}"
    state: present
  loop:
    - nginx
    - git
    - htop
使用loop和复杂数据结构

处理复杂数据结构时,loop更加灵活。

- name: 使用loop和复杂数据结构
  user:
    name: "{{ item.name }}"
    uid: "{{ item.uid }}"
  loop:
    - { name: 'alice', uid: 1001 }
    - { name: 'bob', uid: 1002 }

标签:name,items,item,循环,Playbook,编写,loop,uid
From: https://blog.csdn.net/Lzcsfg/article/details/139596106

相关文章

  • 【C语言】分支与循环(下)
     目录 6. while循环7. for循环8. do-while循环9. break和continue循环10. 循环的嵌套11. goto语句正文开始——6. while循环  C语言提供了三种循环,while就是其中一种。while语句的语法结构与if语句非常相似。6.1 if和while的对......
  • JDK23新特性:通过原始类型模式提升代码编写效率
    在JEP455中包含了通过增强switch语句,简化了代码编写,以及提高了代码的可读性。1.相关优化原始类型模式:您可以int,long,boolean在模式匹配结构中直接使用原始类型(例如等)。这样就无需对值进行不必要的装箱和拆箱。扩展的instanceof和switch:运算instanceof符和switch表达......
  • python-10-数据处理得学:while+for循环搭配使用,排查数据和除重
    学习内容:《python编程:从入门到实践》第二版知识点:whilefor循环搭配使用,利用while排查数据,删除重复选项练习内容:练习7-8:熟食店创建一个名为sandwich_orders的列表,在其中包含各种三明治的名字,再创建一个名为finished_sandwiches的空列表。遍历列表sandwich_orders,对于其中......
  • 请编写函数fun,它的功能是:求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有
    //请编写函数fun,它的功能是:求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有整数,并将他们放在a所指的数组中,通过n返回这些数的个数。#include<stdio.h>intfun(int*a){intresult[100];intcount=0;for(inti=1;i<=100;i++){......
  • java for循环打印三角形
    通过嵌套for循环实现控制台打印一个三角形,外层的循环来规定这个三角形是多少行,内部循环来行成三角形//比如我规定输出六行的三角形,循环次数是设置为6次for(inti=1;i<=6;i++){//首先要我们要输出一个倒着的直角三角形,这个倒着的直角三角形是我们打印这个三......
  • 使用 Scapy 库编写 TCP 劫持攻击脚本
    一、介绍TCP劫持攻击(TCPHijacking),也称为会话劫持,是一种攻击方式,攻击者在合法用户与服务器之间的通信过程中插入或劫持数据包,从而控制通信会话。通过TCP劫持,攻击者可以获取敏感信息、执行未授权的操作或中断正常通信。1.1TCP劫持攻击的原理TCP劫持攻击主要利用了TCP协议的......
  • 使用 Scapy 库编写 TCP RST 攻击脚本
    一、介绍TCPRST攻击是一种拒绝服务攻击(Denial-of-Service,DoS)类型,攻击者通过伪造TCP重置(RST)包,中断目标主机与其他主机之间的TCP连接。该攻击利用了TCP协议中的重置机制,强制关闭合法的TCP连接,导致通信中断。1.1TCP重置机制TCP重置(RST)是TCP协议中的一种控制消息,用于立即终......
  • JS事件循环
    文章目录前言一、浏览器的进程与线程二、渲染主线程三、关于异步总结前言事件循环,不管是在面试还是在工作中都至关重要,属于学前端就绕不开的一个知识点,本篇文章将讲解JS事件循环的全部流程。文章借鉴了渡一大师课中关于事件循环的课程思路,对此表示感谢。一、浏览......
  • 初阶 《分支和循环语句》 3.循环语句
    3.循环语句whilefordowhile3.1while循环前面已经掌握了if语句:if(条件) 语句;当条件满足的情况下,if语句后的语句执行,否则不执行;但是这个语句只会执行一次。由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。那我们怎么做呢?C语言中给......
  • linux脚本编写备忘
    linux脚本编写备忘1、linux脚本的回车换行符最好用unix格式的。否则某些系统下运行会出错,例如veket18中必须要求是LF格式。Unix系统(包括Linux和macOS):使用LF(LineFeed,\n)字符作为行结束符。在ASCII码表中,LF字符的十进制表示为10。Windows系统:使用CRLF(Carriage......