Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >06-Ansible判断

06-Ansible判断

原创
作者头像
小朋友呢
修改于 2020-01-14 09:50:35
修改于 2020-01-14 09:50:35
8210
举报

条件语句

when

根据不同的系统,安装不同的Apache版本

代码语言:txt
AI代码解释
复制
[student@workstation ansible]$ cat one.yml
- hosts: all
  remote_user: root
  tasks:
  - name: 0.clean yum
    shell: rm -rf /etc/yum.repos.d/*
    when: ansible_os_family == "RedHat"

  - name: 1.install ali source
    get_url: url=http://mirrors.aliyun.com/repo/Centos-7.repo dest=/etc/yum.repos.d/CentOS-Base.repo mode=0644 force=yes
    when: ansible_os_family == "RedHat"
  
  - name: 2.change yum
    shell: sed -ri 's#\$releasever#7#g' /etc/yum.repos.d/CentOS-Base.repo && yum makecache
    when: ansible_os_family == "RedHat"

  - name: 3-1.Redhat family install web server
    yum: name=httpd state=latest
    when: ansible_os_family == "RedHat"

  - name: 3-2.Debian faily install web server
    apt: name=apache2 state=latest
    when: ansible_os_family == "Debian"

when in

判断变量是否在某个列表里

代码语言:txt
AI代码解释
复制
[student@workstation ansible]$ cat when_in.yml 
- hosts: all
  tasks:
  - yum:
     name: httpd
     state: latest
    #如果当前主机在webservers组中就执行安装httpd的任务
    when: ansible_hostname in groups['webservers']

判断变量是否不在某个列表里

代码语言:txt
AI代码解释
复制
- hosts: all
  tasks:
  - shell: 'reboot now'
    #如果不是admin组的主机就直接重启
    when: ansible_hostname not in groups['admin']

运算符

比较运算符

逻辑运算符

==

等于

and

!=

不等于

or

大于

not

<

小于

()

组合

=

大于等于

and

<=

小于等于

or

操作系统是Redhat7的6版本或者7版本并且主机名不是host2

代码语言:txt
AI代码解释
复制
- hosts: all
  remote_user: root

  tasks:
  - name: compare os version

    debug:
     msg: "System is RedHat6 or Redhat7 And host not host2"

    when: ansible_distribution == "RedHat"  and (ansible_distribution_major_version == "6" or ansible_distribution_major_version == "7") and (not ansible_nodename == "host2")

变量定义

defined

变量已经定义

undefined

变量未定义

none

变量定义了,没有值

代码语言:txt
AI代码解释
复制
[student@workstation ansible]$ cat var_define.yml
- hosts: servera
  gather_facts: no
  vars:
    keys:
  tasks:
  - debug:
     msg: "ansible_hostname is not defined"
    when: ansible_hostname is undefined
  
  - debug:
     msg: "key is defined"
    when: keys is defined

  - debug:
     msg: "keys is none"
    when: keys is none

执行结果

succeeded

通过任务返回信息,执行成功返回真

failed

通过任务返回信息,执行失败返回真

change

通过任务返回信息,执行状态为change返回真

Skipped

通过任务返回信息,任务没有满足条件跳过执行,返回真

代码语言:txt
AI代码解释
复制
[student@workstation ansible]$ cat status.yml
- hosts: servera
  gather_facts: no
  tasks:
  - shell: ls /home/
	register: retmsg

  - debug:
     msg: 
     - "runing successfully"
     - " {{ retmsg.stdout }}"
	when: retmsg is succeeded
	
  - debug:
     msg: 
     - "runing successfully"
     - " {{ retmsg.stdout }}"
	when: retmsg is failed
	
  - debug:
     msg: 
     - "runing successfully"
     - " {{ retmsg.stdout }}"
    when: retmsg is change
    
  - debug:
     msg: 
     - "runing successfully"
     - " {{ retmsg.stdout }}"
    when: retmsg is skipped

其他判断

string

全部是字符串返回真

lower

字符串全部小写返回真

upper

字符串全部大写返回真

even

偶数返回真

odd

奇数返回真

subset

一个list是另一个的子集返回真

superset

一个list是另一个的父集返回真

number

全部是数字返回真

代码语言:txt
AI代码解释
复制
[student@workstation ansible]$ cat when_other.yml
- hosts: servera
  gather_facts: no
  vars:
   comment: "wolala wolala wolalala"
   age: 13
  tasks:
  - debug:
     msg: "This is string"
    when: comment is string

  - debug:
     msg: "This is lower"
    when: comment is lower

  - debug:
     msg: "This not upper"
    when: comment is not upper

  - debug:
     msg: "This is not even"
    when: age is not even

  - debug:
     msg: "This is odd"
    when: age is odd

  - debug:
     msg: "This is number"
    when: age is number

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
05-Ansible变量
上面定义主机变量的方式是直接在hosts文件中,写主机变量,此种方法是把它独立到一个特定文件夹里的文件里面去写(推荐)
小朋友呢
2020/01/14
1.3K0
07-Ansible循环
循环语句 列表迭代 展开列表 - hosts: all remote_user: root tasks: - name: install {{ item }} yum: name={{ item }} state=latest #安装下列所有包 with_items: - mariadb-server - mariadb - php-fpm - httpd 改写方法1 with_items: [mariadb-server, mariadb, ph
小朋友呢
2020/01/14
5140
09-include
include模块 直接引用 现在有一个需求,我想在剧本中实现这样一个功能,我传递一个用户的名称,然后返回它的user uid gid home,可以给多个剧本调用 1.首先编写功能剧本,里面直接写任务列表即可 [student@workstation ansible]$ cat get_users_info.yml - shell: "cat /etc/passwd|cut -d: -f1,3,4,6 |grep devops" register: res 2.调用它的功能 [student@work
小朋友呢
2020/01/14
1.4K0
13-异步与并发
异步与并发 fork 尝试 先看一段剧本,要在12台主机进行执行,它的执行顺序是怎样的? 是一台主机执行完一个剧本后,再换下一台主机接着执行,还是多个主机同时执行完剧本中的一个任务后,再接着往下执行?
小朋友呢
2020/01/14
6090
[Ansible专栏]Ansible条件判断的介绍和使用
很多时候,某些场景下playbook的结果依赖于变量、fact或者是前一个任务的执行结果,或者有的时候,我们会基于上一个task执行返回的结果而决定如何执行后续的task。这个时候就需要用到条件判断。
没有故事的陈师傅
2022/12/06
1.6K0
2022年 RedHat 最新 RHCE 中级认证考题解析
RHCE考试一共分为两个部分,上午RHCSA考试2个半小时,下午RHCE4个小时,其中RHCE部分15道题,考试正常1个半小时到2个小时能做完,当然慢点也没事,RHCSA部分一共二十二道题,1月份新增容器两道题,后期会进行分享,考试正常1个多小时能做完,机构给的题和答案还有视频,讲解的也不透彻,这次分享一下自己的备注版本
网络技术联盟站
2023/03/01
3.3K0
2022年 RedHat 最新 RHCE 中级认证考题解析
实战RHCA-DO407(1)
3.创建一个名为/home/student/ansible/ansible.cfg的配置文件,如下所示:
小朋友呢
2020/01/14
7.7K2
08-tags与handler
always是Ansible有一个特殊tag,该标记的任务总是会执行,除非使用--skip-tags明确指定跳过always标签,才不会执行。
小朋友呢
2020/01/14
6200
Ansible PlayBook语法
playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过Ansible中的tasks定义好的角色(play的内容被称为tasks,即任务),从根本上来讲所谓tasks无非是调用Ansible的一个module,将多个play组织在一个playbook中即可以让它们联同起来按事先编排的机制一同工作.
王 瑞
2022/12/28
2.5K0
如何编写清晰的Ansible Playbook(复杂Playbook如何构建)
对于运维小伙伴来讲,Ansible并不陌生,配置简单,上手容易,只要掌握几个基本的模块就可以解决好多运维中重复的事,但是对于处理更为高级的功能和更大、更复杂的项目时,管理和维护Ansible Playbook或高效使用将变得更加困难。
山河已无恙
2023/01/30
3.6K0
如何编写清晰的Ansible Playbook(复杂Playbook如何构建)
11-Role
角色的配置在ansible.cfg中的roles_path选项,多个目录用':'隔开
小朋友呢
2020/01/14
7850
04-初识PlayBook
playbook 什么是playbook 中文名(剧本),它是一个自动化处理脚本,使用yaml语言来表示。 快速入门 当前inventory文件 [student@workstation ansible]$ cat inventory [dev] servera [test] serverb [prod] serverc serverd [balancers] serverb [webservers:children] prod 编写yaml剧本 [student@workstation ansi
小朋友呢
2020/01/14
7200
Ansible自动化运维学习笔记4
描述:在高级语言中条件判断是不可或缺的,同样我们也可以在ansible中条件判断的用户; 注意:绝大多数语言中都使用”if”作为条件判断的关键字,而在ansible中条件判断的关键字是"when"
全栈工程师修炼指南
2020/10/23
2.6K0
Ansible playbook简单示例
该文章介绍了如何利用 Ansible 在 Linux 系统中自动化部署 Web 服务器。主要内容包括了安装和配置 Apache HTTP 服务器、使用 playbook 进行自动化部署、配置 SSL 证书、配置虚拟主机、配置防火墙、配置访问控制、使用 GitLab CI/CD 进行自动化部署和监控等。此外,文章还介绍了如何使用 Ansible 的端口转发功能,将本地主机上的服务暴露给外部网络,以及如何使用 Ansible 的文件同步功能,将文件从本地复制到远程服务器。
程裕强
2018/01/02
3.4K1
ansible-语法
上述使用vars定义一个变量testvar1 并使用{{ testvar1 }}来引用
丁D
2022/08/12
5920
ansible-语法
ansible 变量
和大多数编程语言一样,ansible变量名应该由字符、数字、下划线组成,变量名需要以字母开头,ansible内置的关键字不能作为变量名。
张琳兮
2019/03/14
2.3K0
03 实战 Ansible-Playbook之初始化服务器
推荐专栏:https://blog.51cto.com/cloumn/detail/83from_distribution=VQcJVApVVQwxUwIHVQYFDA 代码gitee:https://gitee.com/wanghui1234/ansible_repo.git
alexhuiwang
2020/09/23
1.8K0
如何控制Ansible Playbook的执行顺序、运行选定的剧本资源
在处理大型或复杂的剧本时,如果只希望运行部分剧本或部分任务。可以将标签应用于可能要跳过或运行的特定资源。
山河已无恙
2023/01/30
2.9K0
第五章·自动化运维工具-Ansible流程控制
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
6960
第五章·自动化运维工具-Ansible流程控制
Ansible概要
检验清单是否正确。-i用于指定清单文件,all和master是被管理节点的模式(pattern)。
宅蓝三木
2024/10/09
4060
Ansible概要
相关推荐
05-Ansible变量
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档