博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ansible 判断和循环
阅读量:4307 次
发布时间:2019-06-06

本文共 6004 字,大约阅读时间需要 20 分钟。

标准循环

模式一- name: add several users  user: name={
{ item }} state=present groups=wheel with_items: - testuser1 - testuser2 or with_items: "{
{
somelist }}"
模式2. 字典循环- name: add several users  user: name={
{ item.name }} state=present groups={
{ item.groups }} with_items: - { name: 'testuser1', groups: 'wheel' } - { name: 'testuser2', groups: 'root' }

嵌套循环

---- name: test  hosts: masters  tasks:    - name: give users access to multiple databases      command: "echo name={
{ item[0] }} priv={
{ item[1] }} test={
{ item[2] }}" with_nested: - [ 'alice', 'bob' ] - [ 'clientdb', 'employeedb', 'providerdb' ] - [ '1', '2', ]result:changed: [localhost] => (item=[u'alice', u'clientdb', u'1'])changed: [localhost] => (item=[u'alice', u'clientdb', u'2'])changed: [localhost] => (item=[u'alice', u'employeedb', u'1'])changed: [localhost] => (item=[u'alice', u'employeedb', u'2'])changed: [localhost] => (item=[u'alice', u'providerdb', u'1'])changed: [localhost] => (item=[u'alice', u'providerdb', u'2'])changed: [localhost] => (item=[u'bob', u'clientdb', u'1'])changed: [localhost] => (item=[u'bob', u'clientdb', u'2'])changed: [localhost] => (item=[u'bob', u'employeedb', u'1'])changed: [localhost] => (item=[u'bob', u'employeedb', u'2'])changed: [localhost] => (item=[u'bob', u'providerdb', u'1'])changed: [localhost] => (item=[u'bob', u'providerdb', u'2'])

 字典循环(with_dict)

假设字典如下---users:  alice:    name: Alice Appleworth    telephone: 123-456-7890  bob:    name: Bob Bananarama    telephone: 987-654-3210可以访问的变量tasks:  - name: Print phone records    debug: msg="User {
{ item.key }} is {
{ item.value.name }} ({
{ item.value.telephone }})" with_dict: "{
{ users }}"

 

文件循环(with_file, with_fileglob)

  with_file 是将每个文件的文件内容作为item的值

  with_fileglob 是将每个文件的全路径作为item的值, 在文件目录下是非递归的, 如果是在role里面应用改循环, 默认路径是roles/role_name/files_directory

例如:- copy: src={
{ item }} dest=/etc/fooapp/ owner=root mode=600 with_fileglob: - /playbooks/files/fooapp/*

 

with_together

tasks:    - command: echo "msg={
{ item.0 }} and {
{ item.1 }}" with_together: - [ 1, 2, 3 ] - [ 4, 5 ]result:changed: [localhost] => (item=[1, 4])changed: [localhost] => (item=[2, 5])changed: [localhost] => (item=[3, None])

 

子元素循环(with_subelements)

  with_subelements 有点类似与嵌套循环, 只不过第一个参数是个dict, 第二个参数是dict下的一个子项.

整数序列(with_sequence)

  with_sequence 产生一个递增的整数序列,

---- hosts: all  tasks:    # create groups    - group: name=evens state=present    - group: name=odds state=present    # create some test users    - user: name={
{ item }} state=present groups=evens with_sequence: start=0 end=32 format=testuser%02x # create a series of directories with even numbers for some reason - file: dest=/var/stuff/{
{ item }} state=directory with_sequence: start=4 end=16 stride=2 # a simpler way to use the sequence plugin # create 4 groups - group: name=group{
{ item }} state=present with_sequence: count=4

 

随机选择(with_random_choice)

  with_random_choice:在提供的list中随机选择一个值

Do-util

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

 

第一个文件匹配(with_first_found)

- name: some configuration template  template: src={
{ item }} dest=/etc/file.cfg mode=0444 owner=root group=root with_first_found: - files: - "{
{ inventory_hostname }}/etc/file.cfg" paths: - ../../../templates.overwrites - ../../../templates - files: - etc/file.cfg paths: - templates

 

循环一个执行结果(with_lines)

---- name: test  hosts: all  tasks:    - name: Example of looping over a command result      shell: touch /$HOME/{
{ item }} with_lines: /usr/bin/cat /home/fg/testwith_lines 中的命令永远都是在controller的host上运行, 只有shell命令才会在inventory中指定的机器上运行

 

带序列号的list循环(with_indexed_items)

ini 文件循环(with_ini)

[section1]value1=section1/value1value2=section1/value2[section2]value1=section2/value1value2=section2/value2Here is an example of using with_ini:- debug: msg="{
{ item }}" with_ini: value[1-2] section=section1 file=lookup.ini re=true

 

flatten循环(with_flattened)

---- name: test  hosts: all   tasks:    - name: Example of looping over a command result      shell:  echo {
{ item }} with_flattened: - [1, 2, 3] - [[3,4 ]] - [ ['red-package'], ['blue-package']]:resultchanged: [localhost] => (item=1)changed: [localhost] => (item=2)changed: [localhost] => (item=3)changed: [localhost] => (item=3)changed: [localhost] => (item=4)changed: [localhost] => (item=red-package)changed: [localhost] => (item=blue-package)

 

register循环

- shell: echo "{
{ item }}" with_items: - one - two register: echo变量echo是一个字典, 字典中result是一个list, list中包含了每一个item的执行结果

 

inventory循环(with_inventory_hostnames)

# show all the hosts in the inventory- debug: msg={
{ item }} with_inventory_hostnames: all# show all the hosts matching the pattern, ie all but the group www- debug: msg={
{ item }} with_inventory_hostnames: all:!www

 

条件判断

  ansible的条件判断非常简单关键字是when, 有两种方式

    1. python语法支持的原生态格式 conditions> 1 or conditions == "ss",   in, not 等等

              2. ;ansible Jinja2 “filters”

             

tasks:  - command: /bin/false    register: result    ignore_errors: True  - command: /bin/something    when: result|failed  - command: /bin/something_else    when: result|succeeded  - command: /bin/still/something_else    when: result|skippedtasks:    - shell: echo "I've got '{
{ foo }}' and am not afraid to use it!" when: foo is defined - fail: msg="Bailing out. this play requires 'bar'" when: bar is undefined

 

 

条件判断可以个loop role 和include一起混用

#when 和 循环tasks:    - command: echo {
{ item }} with_items: [ 0, 2, 4, 6, 8, 10 ] when: item > 5#when和include- include: tasks/sometasks.yml when: "'reticulating splines' in output"#when 和角色- hosts: webservers roles: - { role: debian_stock_config, when: ansible_os_family == 'Debian' }

转载于:https://www.cnblogs.com/wangjq19920210/p/9104668.html

你可能感兴趣的文章
PHP图形图像的典型应用 --常用图像的应用(验证码)
查看>>
Robot Framework-Ride界面介绍及库的添加
查看>>
IntelliJ IDEA 连接数据库 详细过程
查看>>
redis完全攻略
查看>>
D3---01基础的柱状图制作(转)
查看>>
Time-Varying Mesh Compression
查看>>
SocketServer源码学习(二)
查看>>
编写DLL所学所思(1)——导出函数
查看>>
POJ3006-Dirichlet's Theorem on Arithmetic Progressions
查看>>
QT分页控件,开源,供大家使用
查看>>
005.LVM删除
查看>>
Hibernate 简介(百度)
查看>>
深入理解 KVC\KVO 实现机制 — KVC
查看>>
Android develop 国际化
查看>>
快速求幂算法
查看>>
Freemarker模板引擎
查看>>
jQuery:表格的奇偶行变色,jquery实例之表格隔一行
查看>>
(Object-C)学习笔记(一)--开发环境配置和与c语言的区别
查看>>
hdu 3549 Flow Problem(最大流模板)
查看>>
编译器错误 CS1026
查看>>