ansible_playbook语法中的循环语句归纳

种类一、标准循环
添加多个用户

- name: add several users
  user: name={{ item }} state=present groups=wheel
  with_items:
     - testuser1
     - testuser2

添加多个用户,并将用户加入不同的组内。

- name: add several users
  user: name={{ item.name }} state=present groups={{ item.groups }}
  with_items:
    - { name: ‘testuser1‘, groups: ‘wheel‘ }
    - { name: ‘testuser2‘, groups: ‘root‘ }

种类二、锚点嵌套循环
分别给用户授予3个数据库的所有权限

- name: give users access to multiple databases
  mysql_user: name={{ item[0] }} priv={{ item[1] }}.*:ALL append_privs=yes password=foo
  with_nested:
    - [ ‘alice‘, ‘bob‘ ]
    - [ ‘clientdb‘, ‘employeedb‘, ‘providerdb‘ ]

种类三、锚点遍历字典
输出用户的姓名和电话

tasks:
  - name: Print phone records
    debug: msg="User {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})"
    with_dict: {‘alice‘:{‘name‘:‘Alice Appleworth‘, ‘telephone‘:‘123-456-789‘},‘bob‘:{‘name‘:‘Bob Bananarama‘, ‘telephone‘:‘987-654-3210‘} }

种类四、锚点并行遍历列表

tasks:
  - debug: "msg={{ item.0 }} and {{ item.1 }}"
    with_together:
    - [ ‘a‘, ‘b‘, ‘c‘, ‘d‘,‘e‘ ]
    - [ 1, 2, 3, 4 ]

如果列表数目不匹配,用None补全

种类五、锚点遍历列表和索引

 - name: indexed loop demo
    debug: "msg=‘at array position {{ item.0 }} there is a value {{ item.1 }}‘"
    with_indexed_items: [1,2,3,4]

item.0 为索引,item.1为值

种类六、锚点遍历文件列表的内容

---
- hosts: all
  tasks:
       - debug: "msg={{ item }}"
      with_file:
        - first_example_file
        - second_example_file

种类七、锚点遍历目录文件
with_fileglob匹配单个目录中的所有文件,非递归匹配模式。

---
- hosts: all
  tasks:
    - file: dest=/etc/fooapp state=directory
    - copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
      with_fileglob:
        - /playbooks/files/fooapp/*

当在role中使用with_fileglob的相对路径时,Ansible解析相对于roles/<rolename>/files目录的路径。

种类八、锚点遍历ini文件
lookup.ini
[section1]
value1=section1/value1
value2=section1/value2

[section2]
value1=section2/value1
value2=section2/value2

- debug: msg="{{ item }}"
  with_ini: value[1-2] section=section1 file=lookup.ini re=true

获取section1 里的value1和value2的值

种类九、锚点重试循环 until

- action: shell /usr/bin/foo
  register: result
  until: result.stdout.find("all systems go") != -1
  retries: 5
  delay: 10

"重试次数retries" 的默认值为3,"delay"为5。

锚点查找第一个匹配文件

  tasks:
  - debug: "msg={{ item }}"
    with_first_found:
     - "/tmp/a"
     - "/tmp/b"
     - "/tmp/default.conf"

依次寻找列表中的文件,找到就返回。如果列表中的文件都找不到,任务会报错。

种类十、锚点随机选择with_random_choice
随机选择列表中得一个值

- debug: msg={{ item }}
  with_random_choice:
     - "go through the door"
     - "drink from the goblet"
     - "press the red button"
     - "do nothing"

循环程序的结果
tasks:

  • debug: "msg={{ item }}"
    with_lines: ps aux
    种类十一、锚点循环子元素
    定义好变量
#varfile
---
users:
  - name: alice
    authorized:
      - /tmp/alice/onekey.pub
      - /tmp/alice/twokey.pub
    mysql:
        password: mysql-password
        hosts:
          - "%"
          - "127.0.0.1"
          - "::1"
          - "localhost"
        privs:
          - "*.*:SELECT"
          - "DB1.*:ALL"
  - name: bob
    authorized:
      - /tmp/bob/id_rsa.pub
    mysql:
        password: other-mysql-password
        hosts:
          - "db1"
        privs:
          - "*.*:SELECT"
          - "DB2.*:ALL"
---
- hosts: web
  vars_files: varfile
  tasks:

  - user: name={{ item.name }} state=present generate_ssh_key=yes
    with_items: "{{ users }}"

  - authorized_key: "user={{ item.0.name }} key=‘{{ lookup(‘file‘, item.1) }}‘"
    with_subelements:
      - "{{ users }}"
      - authorized

  - name: Setup MySQL users
    mysql_user: name={{ item.0.name }} password={{ item.0.mysql.password }} host={{ item.1 }} priv={{ item.0.mysql.privs | join(‘/‘) }}
    with_subelements:
      - "{{ users }}"
      - mysql.hosts

{{ lookup(‘file‘, item.1) }} 是查看item.1文件的内容

with_subelements 遍历哈希列表,然后遍历列表中的给定(嵌套)的键。

种类十二、锚点在序列中循环with_sequence
with_sequence以递增的数字顺序生成项序列。 您可以指定开始,结束和可选步骤值。 参数应在key = value对中指定。 ‘format‘是一个printf风格字符串。

数字值可以以十进制,十六进制(0x3f8)或八进制(0600)指定。 不支持负数。

---
- hosts: all

  tasks:

    # 创建组
    - group: name=evens state=present
    - group: name=odds state=present

    # 创建格式为testuser%02x 的0-32 序列的用户
    - user: name={{ item }} state=present groups=evens
      with_sequence: start=0 end=32 format=testuser%02x

    # 创建4-16之间得偶数命名的文件
    - file: dest=/var/stuff/{{ item }} state=directory
      with_sequence: start=4 end=16 stride=2

    # 简单实用序列的方法:创建4 个用户组分表是组group1 group2 group3 group4
    - group: name=group{{ item }} state=present
      with_sequence: count=4

种类十三、锚点随机选择with_random_choice
随机选择列表中得一个值

- debug: msg={{ item }}
  with_random_choice:
     - "go through the door"
     - "drink from the goblet"
     - "press the red button"
     - "do nothing"

合并列表

安装所有列表中的软件

- name: flattened loop demo
  yum: name={{ item }} state=installed
  with_flattened:
     - [ ‘foo-package‘, ‘bar-package‘ ]
     - [ [‘one-package‘, ‘two-package‘ ]]
     - [ [‘red-package‘], [‘blue-package‘]]

注册变量使用循环

- shell: echo "{{ item }}"
  with_items:
    - one
    - two
  register: echo

- name: Fail if return code is not 0
  fail:
    msg: "The command ({{ item.cmd }}) did not have a 0 return code"
  when: item.rc != 0
  with_items: "{{ echo.results }}"

循环主机清单

输出所有主机清单里的主机

- debug: msg={{ item }}
  with_items: "{{ groups[‘all‘] }}"

输出所有执行的主机

- debug: msg={{ item }}
  with_items: play_hosts

输出所有主机清单里的主机

  • debug: msg={{ item }}
    with_inventory_hostnames: all

输出主机清单中不在www中的所有主机

  • debug: msg={{ item }}
    with_inventory_hostnames: all:!www
    改变循环的变量项
# main.yml
- include: inner.yml
  with_items:
    - 1
    - 2
    - 3
  loop_control:
    loop_var: outer_item
# inner.yml
- debug: msg="outer item={{ outer_item }} inner item={{ item }}"
  with_items:
    - a
    - b
    - c

作者:Jeson老师
链接:https://www.imooc.com/article/22753
来源:慕课网

原文地址:https://www.cnblogs.com/wzxmt/p/9942839.html

时间: 2024-10-02 11:05:09

ansible_playbook语法中的循环语句归纳的相关文章

js中的循环语句

js中的循环语句可分为三种:1.while:2.do……while:3.for. while的语法为 while (exp) {    //statements;} var a=1,b=0; while(a<=1000){ if(a%2==0){ if(b%20==0) { document.write("<br>第"+parseInt(b/20+1)+"行偶数"); } document.write(a+"&nbsp"

Shell中的循环语句实例

1.for循环语句实例1.1 最基本的for循环 #!/bin/bash for x in one two three four do     echo number $x done 注:"for" 循环总是接收 "in" 语句之后的某种类型的字列表.在本例中,指定了四个英语单词,但是字列表也可以引用磁盘上的文件,甚至文件通配符.实例1.2 #!/bin/bash for x in /var/log/* do     #echo "$x is a file

2.1c#中的循环语句

java中的while循环,do...while循环,for循环在c#中也有且语法和执行过程完全一样,不过c#中引入了一种新的循环foreach 2.1.1基本循环语句 1.while循环:先判断条件是否满足,再执行里面的语句.语法如下 while(条件表达式) { 代码快 } 2.do,,,while循环:先执行再判断条件,所以至少会执行一次.语法如下 do { 代码块 }while(条件表达式) 3.for循环:常常用在确定循环次数的情况下.语法如下 for(表达式1;表达式2;表达式3)

Swift中的循环语句

循环语句能够使程序代码重复执行.Swift编程语言支持4种循环构造类型:while. do while.for和for in.for和while循环是在执行循环体之前测试循环条件,而do while是在执行循环体之后测试循环条件.这就意味着for和while循环可能连一次循环体都未执行,而do while将至少执行一次循环体.for in是for循环的变形,它是专门为集合遍历而设计的.一.while语句while语句是一种先判断的循环结构,格式如下:while 循环条件 {    语句组 }wh

Python中使用循环语句打印三角形、菱形

前言:在学习开发语言循环语句的使用过程中,经常会打印各种形状来验证对循环语句的熟练掌握程度,接下来就使用python来打印多种形状练习. 如下示例中:变量i用于控制外层循环(图形行数),j用于控制空格的个数,k用于控制星号(*)的个数 1. 打印三角形  1.1 打印直角三角形 #/usr/bin/python rows = int(raw_input('please input a rows:')) i=j=k=1 if rows >= 3: for i in range(0,rows+1):

20:python中的循环语句

20.1 while语句 问题描述: 求5!. 提示: 求5的阶乘,即5*4*3*2*1 我总觉得不直观,我想最后打印的是形如:5!= 5*4*3*2*1 = 120 20.1.1 print如何去掉自动换行 怎么去掉换行? 去掉了换行,但是,中间夹有空格,怎么去掉空格? 20.1.2 print如何去掉空格 个人练习:怎么实现从键盘输入一个数(需要判断大于0),计算它的阶乘. 20.2 for语句 问题描述: 写程序把字符串'I love python'以单个字符的形式打印出来. 效果如下:

电脑小白自学软件编程-.Net语法基础之循环语句,纯技巧干货

写代码也要读书,爱全栈,更爱生活.每日更新原创IT编程技术及日常实用视频. 我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是不在话下. 本教程是基础教程,适合任何有志于学习软件开发的人.当然因为技术的连贯性,推荐按照顺序查看. 上次课程:电脑小白学习软件开发-C#的选择语句.异常捕获,进攻程序员 课程总目录:因头条无法自定义目录,大家关注:“做全栈攻城狮”微信公众号.回复“.net目录”,即可获取.微信公众号也包含大量学习教程,等你来~ 本系列教程进行学习的是C#语法.具体开发

shell中的循环语句

for语法格式 for var in list;do commands done 其中list可以包含: 1) 直接写 for alpha in a b c d;do echo $alpha done 2)变量 list="a b c d" for alpha in $list;do echo $alpha done 在shell执行的时候会进行变量替换,上面的list变量替换之后,for循环的形式和1中的形式一模一样.但是如果为$list加上了引号,即如果写为下面的形式: list=

Python中的循环语句

Python中有while循环和for循环 下面以一个小例子来说明一下用法,用户输入一些数字,输出这些数字中的最大值和最小值 1 array = [5,4,3,1] 2 3 for i in array: 4 print(i) 5 6 largest = None 7 smallest = None 8 while True: 9 num = input("Enter a number: ") 10 if num == "done" : break if len(n