playbook 循环

发布时间: 更新时间: 总字数:718 阅读时间:2m 作者: 分享 复制网址

ansible playbook 循环

with_items

---
- hosts: testservers
  remote_user: root
  gather_facts: no
  tasks:
  - debug:
      msg: "{{item}}"
    with_items:
    - 1
    - 2
    - 3

  - debug:
      msg: "{{item}}"
    with_items: [ 1, 2, 3 ]

  - debug:
      msg: "{{item}}"
    with_items:  # with_items 将嵌套在大列表中的每个小列表都 `展开`,与 with_flattened 效果相同
    - [ 1, 2, 3 ]
    - [ a, b ]

  - debug:
      msg: "{{item}}"
    with_list:  # with_list 不展开嵌套的小列表
    - [ 1, 2, 3 ]
    - [ a, b ]

  - debug:
      msg: "{{item}}"
    with_together:  # with_together 将两个列表中的元素 `对齐合并` [1,a], [2, b], [3, null]
    - [ 1, 2, 3 ]
    - [ a, b ]

with_cartesian

  • 将每个小列表中的元素按照 笛卡尔的方式 组合后,循环的处理每个组合
  - file:
      state: directory
      path: "/tmp/{{item.0}}/{{item.1}}"
    with_cartesian:
    - [ a, b, c ]
    - [ test1, test2 ]

效果同

mkdir -p /testdir/{a,b,c}/{test1,test2}

with_nested

功能同 with_cartesian

with_indexed_items

  • with_indexed_items 在循环处理列表时为列表中的每一项添加 数字索引,从0开始
    • with_indexed_items 会将嵌套的两层列表 展开,并按照顺序为每一项编号
  - debug:
      msg: "idnex is :{{item.0}},value is {{item.1}}"
    with_indexed_items:
    - test1
    - [test2, test3]
  • 输出
ok: [h-1] => (item=[0, 'test1']) => {
    "msg": "idnex is :0,value is test1"
}
ok: [h-1] => (item=[1, 'test2']) => {
    "msg": "idnex is :1,value is test2"
}
ok: [h-1] => (item=[2, 'test3']) => {
    "msg": "idnex is :2,value is test3"
}

with_sequence

  • with_sequence 按照顺序生成数字序列
    • “start=1 end=5 stride=1”,从1开始,到5结束(包括),步长为1,即从1到5每次增加1
    • format 参数支持格式化输出,如 format="number is %0.2f"
  tasks:
  - debug:
      msg: "{{item}}"
    with_sequence: start=1 end=5 stride=1
    # with_sequence:  # 以下两个和上面通效果
    #   start=1
    #   end=5
    #   stride=1
    # with_sequence: count=5

with_random_choice

with_random_choice 从列表的多个值中随机返回一个值

  - debug:
      msg: "{{item}}"
    with_random_choice:
    - 1
    - 2
    - 3
    - 4
    - 5

with_dict

with_dict 操作字典

  • 键值对中: 被放入 key 关键字中, 被放入 value 关键字中
  • value 支持嵌套,通过 item.<value>.<key> 获取值
---
- hosts: testservers
  remote_user: root
  gather_facts: no
  vars:
    users:
      alice: female
      bob: male
  tasks:
  - debug:
      msg: "User name: {{item.key}}, User grnder: {{item.value}}"
    with_dict: "{{users}}"

输出

ok: [h-1] => (item={'key': 'alice', 'value': 'female'}) => {
    "msg": "User name: alice, User grnder: female"
}
ok: [h-1] => (item={'key': 'bob', 'value': 'male'}) => {
    "msg": "User name: bob, User grnder: male"
}

with_subelements

with_subelements

---
- hosts: testservers
  remote_user: root
  gather_facts: no
  vars:
    users:
    - name: bob
      gender: male
      hobby:
        - Skateboard
        - VideoGame
    - name: alice
      gender: female
      hobby:
        - Music
  tasks:
  - debug:
      msg: "{{ item.0.name }} 's hobby is {{item.1}}"
    with_subelements:
    - "{{users}}"
    - hobby

输出

ok: [h-1] => (item=[{'name': 'bob', 'gender': 'male'}, 'Skateboard']) => {
    "msg": "bob 's hobby is Skateboard"
}
ok: [h-1] => (item=[{'name': 'bob', 'gender': 'male'}, 'VideoGame']) => {
    "msg": "bob 's hobby is VideoGame"
}
ok: [h-1] => (item=[{'name': 'alice', 'gender': 'female'}, 'Music']) => {
    "msg": "alice 's hobby is Music"
}

with_file

  • with_file 循环获取文件的内容,即 {{item}} 为文件的内容
  tasks:
  - debug:
      msg: "{{item}}"
    with_file:
    - /testdir/testdir/a.log
    - /etc/hosts

with_fileglob

  • with_fileglob 获取指定目录中匹配符合模式的文件名
  tasks:
  - debug:
      msg: "{{item}}"
    with_fileglob:
    - /testdir/*
    - /etc/test*.???
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数