2. ansible-playbook 条件语句-内部变量使用

内部变量指的是把变量定义在playbook里面或者是执行结果作为变量

循环语句-标准Loops

[[email protected] playb]# cat p_loop.yaml
- hosts: u12
  gather_facts: False
  tasks:
    - name: debug loops
      debug: msg="name -------> {{ item  }}"
      with_items:
          - one
          - two

运行结果如下:

[[email protected] playb]# ansible-playbook p_loop.yaml 

PLAY [u12] ************************************************************************************************************************************************************************************

TASK [debug loops] ****************************************************************************************************************************************************************************
ok: [192.168.93.137] => (item=one) => {
    "changed": false,
    "item": "one",
    "msg": "name -------> one"
}
ok: [192.168.93.137] => (item=two) => {
    "changed": false,
    "item": "two",
    "msg": "name -------> two"
}

PLAY RECAP ************************************************************************************************************************************************************************************
192.168.93.137             : ok=1    changed=0    unreachable=0    failed=0   

当然也支持字典格式的数据对于要循环的内容

[[email protected] playb]# cat  p_loop.yaml
- hosts: u12
  gather_facts: False
  tasks:
    - name: debug loops
      debug: msg="key--> {{ item.key  }} value ---> {{ item.value  }}"
      with_items:
          - {"key":"name","value":"one"}
          - {"key":"name","value":"two"}
          - {"key":"name","value":"three"}
          - {"key":"name","value":"four"}

嵌套循环loop

[[email protected] playb]# cat p_iframe_loop.yaml
- hosts: u12
  gather_facts: False
  tasks:
    - name: debug loops
      debug: msg="name --> {{ item[0] }} value ---> {{ item[1] }}"
      with_nested:
        - [1]
        - [‘a‘,‘b‘,‘c‘]

执行效果如下:

[[email protected] playb]# ansible-playbook p_iframe_loop.yaml 

PLAY [u12] ************************************************************************************************************************************************************************************

TASK [debug loops] ****************************************************************************************************************************************************************************
ok: [192.168.93.137] => (item=[1, u‘a‘]) => {
    "changed": false,
    "item": [
        1,
        "a"
    ],
    "msg": "name --> 1 value ---> a"
}
ok: [192.168.93.137] => (item=[1, u‘b‘]) => {
    "changed": false,
    "item": [
        1,
        "b"
    ],
    "msg": "name --> 1 value ---> b"
}
ok: [192.168.93.137] => (item=[1, u‘c‘]) => {
    "changed": false,
    "item": [
        1,
        "c"
    ],
    "msg": "name --> 1 value ---> c"
}

PLAY RECAP ************************************************************************************************************************************************************************************
192.168.93.137             : ok=1    changed=0    unreachable=0    failed=0 

散列loops

散列loops比标准的loops就是变量支持更丰富的数据结构,比如标准的loops的最外层数据必须是Python 的List数据类型,而散列loops直接支持YAML格式的数据变量。例如下面的简单例子:

[[email protected] playb]# cat p-sanlieloop.yaml
- hosts: u12
  gather_facts: False
  vars:
    users:
          yq:
            name: yq
            shell: bash
          ljf:
            name: ljf
            shell: bash
  tasks:
    - name: test for sanlie loop
      debug: msg="name --> {{ item.key }} value --> {{ item.value.name }} shell ---> {{ item.value.shell }}"
      with_dict:  users

文件匹配loops

针对一个目录下制定格式的文件进行处理,这个时候直接使用with_fileglob循环去匹配我们需要处理的文件即可。

[[email protected] playb]# cat  p-fileloop.yaml
- hosts: u12
  gather_facts: False
  tasks:
    - name: debug file loop
      debug: msg="files ---> {{ item }}"
      with_fileglob:
        - /tmp/playb/*.yaml

随机选择loops

随机数

[[email protected] playb]# cat p-randomloop.yaml
- hosts: u12
  gather_facts: False
  tasks:
    - name: debug loops
      debug: msg="name -->> {{ item }}"
      with_random_choice:
        - "a1"
        - "a2"
        - "a3"
        - "a4"

条件判断loops

有时候task执行一个task后,我们需要检测这个task的结果是否达到了预想状态,如果没有达到我们预想的状态,那么就需要退出整个playbook执行,那么这个时候我们就需要对某个task结果一直循环检测了。

[[email protected] playb]# cat p-conditionloop.yaml
- hosts: u12
  tasks:
    - name: debug loop
      shell: hostname
      register: pwd
      until: pwd.stdout.startswith("LeoTestMachine")  # stdout与stdout_lines是不一样的,这个要注意哦
      retries: 3   # 重复3次
      delay: 2  # 间隔2秒

文件优先匹配

[[email protected] playb]# cat p-filefilter.yaml
- hosts: u12
  gather_facts: True
  tasks:
    - name: debug codes
      debug: msg="files --->{{ item }}"
      with_first_found:
        - "{{ ansible_distribution }}.yaml"
        - "default.yaml"

register Loops

register不但用于task直接互相传递数据,也可以吧register用在单一的task中进行变量临时存储,并且可以接受多个task结果当做变量临时存储。

[[email protected] playb]# cat register_loops.yaml
- hosts: u12
  gather_facts: True
  tasks:
    - name: debug loops
      shell: "{{ item }}"
      with_items:
          - hostname
          - uname
      register: ret
    - name: display loops
      debug: msg="{% for i in ret.results  %}--->{{ i.stdout  }}{% endfor  %}"

执行多个task并且register给一个变量时,它的数据就和平常的不一样了,就需要使用jinja2语法显示出来

原文地址:https://www.cnblogs.com/liaojiafa/p/9353766.html

时间: 2024-08-27 01:51:48

2. ansible-playbook 条件语句-内部变量使用的相关文章

python条件语句和变量赋值

python的条件语句 字符串内变量赋值的方法 name = input("name:") age = int(input("age:")) job = input("job:") salary = input("salary:") info = ''' ---------- info of %s ---------- Name:%s Age:%d Job:%s Salary:%s ''' % (name,name,age,j

【Go语言】【8】GO语言的条件语句和选择语句

一.条件语句 条件语句即if-else语句,通常用来判断条件是否满足,下面通过猜价格游戏来了解条件语句: 1.猜价格游戏 假如有一件商品价格为81元,在[0,100]范围之内 系统请猜测者输入一个价格 猜测者:50 系统提示:低了 猜测者:87 系统提示:高了 猜测者:83 系统提示:高了 猜测者:81 系统提示:恭喜您猜对了 最终效果如下图: 2.猜价格代码实现 package main import ( "fmt" "math/rand" "time&

Ansible 自动化运维工具之when条件语句

1.When语句 有时候用户有可能需要某一个主机越过某一个特定的步骤.这个过程就可以简单的像在某一个特定版本的系统上少装了一个包一样或者像在一个满了的文件系统上执行清理操作一样. 这些操作在Ansible上,若使用`when`语句都异常简单.When语句也含Jinja2表达式, 第一个例子: tasks:   - name: "shutdown Debian flavored systems"     command: /sbin/shutdown -t now     when: a

php的注释、变量、类型、常量、运算符、比较符、条件语句;

php的注释 1.// 2.# 3./*  */ 变量 变量是储存信息的容器: 变量规则: 1.变量以$开头,后面跟名称>>>$sum; 2.变量必须以字母或下滑先开头,不能用数字开头: 3.变量名称对大小写敏感>>>$q与$Q是不相同的: php数据类型 四种标量类型: 1.Boolean(布尔型)>>>True  False; 2.Integer(整型)>>>没有小数的数字,正负均可: 3.Float(浮点型)>>&g

ASP基础教程:ASP脚本变量、函数、过程和条件语句

在上一期中作者向诸位简要介绍了 ASP 脚本语言之一 VBScript 的一些基本常识,本期将继续给大家讲解 VBScript 的脚本编写方法,并通过展示 VBScript 在 ASP 程序编写过程中的一系列实例使大家对 VBScript 有更进一层的理解. 大家在学习了脚本语言 VBScript 的变量.常量和过程的基本概念后,本期将继续向各位介绍 VBScript 的函数和语法. 函数和过程一样都是命名了的代码块,但它们却有很大的区别,过程完成程序任务,函数则返回值.我们可以这样理解,过程象

python基础:变量、编码、运算符、条件语句、while循环

一.变量命名 a.只能以数字.字母.下划线组成,不能以数字开头 b.不能和内置关键词一样 c.不能是关键字:and.continue.def.elif…… d.变量命名遵从驼峰式命名:my_name 二.编码介绍 ascill 8位 00000000 例如:00000001 unicode 最少16位 0000000000000000+ 例如:0000000000000001 utf-8 最少位数表示 例如:如果¥在用ascill中表示为00000101    在unicode中表示为00000

ansible playbook

说明:这篇文章依赖上一篇的环境 http://ximenfeibing.blog.51cto.com/8809812/1669162 Yml介绍 Playbook是使用yaml语言定制的,YAML是一个可读性高的用来表达资料序列的格式.YAML参考了其他多种语言,包括:XML.C语言.Python.Perl以及电子邮件格式RFC2822等.Clark Evans在2001年在首次发表了这种语言,另外Ingy dt Net与Oren Ben-Kiki也是这语言的共同设计者. Yml语法: - ho

自动化运维工具ansible playbook和roles的使用

ansible的结构: Inventory 用来定义被控制端 Modules 定义被控制端可用的操作 Ad Hoc Commands 定义被控制端可以执行命令的 Playbook 批量运行的方式 Tasks: 任务:由各模块所支持执行的特定操作:可以通过ansible-doc module_name来查看帮助文档,非常详细 -m  user -a 'name= password=' Variables: 变量 Templates: 模板:(如执行httpd服务时,各节点上httpd的配置文件内容

Ansible9:条件语句【转】

在有的时候play的结果依赖于变量.fact或者是前一个任务的执行结果,从而需要使用到条件语句. 一.when    有的时候在特定的主机需要跳过特定的步骤,例如在安装包的时候,需要指定主机的操作系统类型,或者是当操作系统的硬盘满了之后,需要清空文件等,可以使用when语句来做判断 .when关键字后面跟着的是python的表达式,在表达式中你能够使用任何的变量或者fact,当表达式的结果返回的是false,便会跳过本次的任务 1.基本用法,示例: ---- name: Install VIM