总结Anisble中的任务执行控制并练习

news2024/11/18 9:20:57

文章目录

  • 一、循环
    • 1.简单循环
    • 2.循环散列或字典列表
  • 二、条件
  • 三、触发器
  • 四、处理失败任务
    • 1.ignore_errors
    • 2.force_handlers
    • 3.changed_when
    • 4.failed_when
    • 5.block
  • 五、 练习
    • 建立大小为1500M名为/dev/sdb1的设备
    • 利用ansible循环安装且开启vsftpd,apache,dns,并在火墙中设定
    • 建立用户
    • 挂载,检测是否存在
  • 六、重要:ansible-doc用法


一、循环

循环迭代任务

1.简单循环

loop:         ##赋值列表
 - value1
 - value2
 - ...
{{item}}     ##迭代变量名称

#实例#
---
- name: create file
  hosts: 172.25.0.254
  tasks:
    - name: file module
      file:
        name: /mnt/{{item}}
        state: present
      loop:
        - westos_file1
        - westos_file2

在这里插入图片描述

在这里插入图片描述

2.循环散列或字典列表

---
- name: create file
  hosts: 172.25.0.254
  tasks:
    - name: file module
      service:
        name: "{{ item.name}}"
        state: "{{ item.state }}"
      loop:
        - name: httpd
          state: started
        - name: vsftpd
          state: stopped

在这里插入图片描述
在这里插入图片描述

二、条件

when:
  - 条件1
  - 条件2
#条件判断#
=                     value == "字符串",value == 数字
<                     value < 数字
>                     value > 数字
<=                    value <= 数字
>=                    value >= 数字
!=                    value != 数字
is defined value      value is defined         变量存在
is not defined        value is not defined     变量不存在
in                    value is in value        变量为 
not in                value is not in value    变量不为
bool变量 为true        value                   value的值为true
bool变量 false         not value               value的值为false
                       value in value2         value的值在value2列表中
#多条条件组合#
when:
 条件1 and 条件2
  - 条件1
  - 条件2
when:
 条件1 or 条件2
when: >
 条件1
 or
 条件2

在这里插入图片描述
在这里插入图片描述
2.
在这里插入图片描述
在这里插入图片描述
3.多个条件
在这里插入图片描述
在这里插入图片描述
4.true和false
在这里插入图片描述

在这里插入图片描述

三、触发器

notify:      触发器当遇到更改是触发handlers
handlers:   触发器触发后执行的动作
#实例#
---
- name: create virtualhost for web server
  hosts: 172.25.0.254
  vars_files:
    ./vhost_list.yml
  tasks:
    - name: create document
      file:
        path: "{{web2.document}}"
        state: directory
    - name: create vhost.conf
      copy:
        dest: /etc/httpd/conf.d/vhost.conf
        content:
          "<VirtualHost *:{{web1.port}}>\n\tServerName {{web1.name}}\n\tDocumentRoot 
{{web1.document}}\n\tCustomLog logs/{{web1.name}}.log combined\n</VirtualHost>\n\n<VirtualHost *:
{{web2.port}}>\n\tServerName {{web2.name}}\n\tDocumentRoot {{web2.document}}\n\tCustomLog logs/
{{web2.name}}.log combined\n</VirtualHost>"
      notify:
        restart apache
  handlers:
    - name: restart apache
      service:
        name: httpd
        state: restarted

在这里插入图片描述

四、处理失败任务

1.ignore_errors

#作用:
当play遇到任务失败时会终止
ignore_errors: yes 将会忽略任务失败使下面的任务继续运行

#实例#
- name: test
  dnf:
    name: westos
    state: latest
  ignore_errors: yes
 
- name: create file
  file:
    path: /mnt/westos
    state: touch

在这里插入图片描述
在这里插入图片描述

2.force_handlers

#作用:
#当任务失败后play被终止也会调用触发器进程

#example
---
- name: apache change port
  hosts: 172.25.0.254
  force_handlers: yes
  vars:
    http_port: 80
  tasks:
    - name: configure apache conf file
      lineinfile:
        path: /etc/httpd/conf/httpd.conf
        regexp: "^Listen"
        line: "Listen {{ http_port }}"
      notify: restart apache
      
    - name: install error
      dnf:
        name: westos
        state: latest
  handlers:
    - name: restart apache
      service:
        name: httpd
        state: restarted
        enabled: yes

更改24、25主机的ftp匿名用户访问
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.changed_when

#作用:
#控制任务在何时报告它已进行更改;强制更改:true,强制不更改:false

---
- name: apache change port
  hosts: 172.25.0.254
  force_handlers: yes
  vars:
    http_port: 8080
  tasks:
    - name: configure apache conf file
      lineinfile:
        path: /etc/httpd/conf/httpd.conf
        regexp: "^Listen"
        line: "Listen {{ http_port }}"
      changed_when: true
      notify: restart apache
  handlers:
    - name: restart apache
      service:
        name: httpd
        state: restarted
        enabled: yes

在这里插入图片描述
在这里插入图片描述

4.failed_when

#当符合条件时强制任务失败
#强制某个play为失败状态

---
- name: test
  hosts: 172.25.0.254
  tasks:
    - name: shell
      shell: echo hello
      register: westos
      failed_when: "'hello' in westos.stdout"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.block

block:       ##定义要运行的任务
rescue:      ##定义当block句子中出现失败任务后运行的任务
             ##block运行成功,则rescue不运行
always:     ##定义最终独立运行的任务

1
在这里插入图片描述
在这里插入图片描述
2在这里插入图片描述
在这里插入图片描述

五、 练习

测试题:
建立playbook ~/ansibles/lvm.yml要求如下:
*建立大小为1500M名为exam_lvm的lvm 在westos组中
*如果westos不存在请输出:
 vg westos is not exist
*如果westos大小不足1500M请输出:
 vg westos is less then 1500M
并建立800M大小的lvm

建立大小为1500M名为/dev/sdb1的设备

#测试练习#
建立playbook ~/westos.yml要求如下:
建立大小为1500M名为/dev/sdb1的设备
如果/dev/sdb不存在请输入:
 /dev/vdb is not exist
如果/dev/sdb大小不足2G请输出:
 /dev/vdb is less then 2G
并建立800M大小的/dev/sdb1
此设备挂载到/westos上

实验前提:在24主机建立1G硬盘,25主机无硬盘
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

利用ansible循环安装且开启vsftpd,apache,dns,并在火墙中设定

在这里插入图片描述
在这里插入图片描述
实验中遇到的问题:主机网络仓库未镜像!!!
在这里插入图片描述

建立用户

建立用户user1、user2;密码均为:westos
在建立用户时需要检测用户是否存在,如果用户存在保持原密码不变!!
在这里插入图片描述

在这里插入图片描述

挂载,检测是否存在

挂载/dev/cdrom 至/mnt/isodir
检测/mnt/isodir是否存在
不存在:输出:/mnt/isodir is not exist ,并且建立:/mnt/isodir
存在:直接挂载
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

六、重要:ansible-doc用法

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353187.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java8新特性【2023】

Lambda表达式 新的一套语法规则 是一个匿名函数 Testpublic void test1(){Runnable r1 new Runnable(){Overridepublic void run() {System.out.println("线程A");}};r1.run();System.out.println("");Runnable r2 () -> System.out.println("…

linux 安装rabbitmq 文档

1、下载rabbitMQ https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.9.15对应的erlang https://packagecloud.io/app/rabbitmq/erlang/search?distel%2F7https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.3.4.11-1.el7.x86_64.rpm?distro_ver…

Mysql | Error Code: 1153 - Got a packet bigger than ‘max_allowed_packet‘ bytes

描述 在执行sql语句插入的时候&#xff0c;报出了Error Code: 1153 - Got a packet bigger than ‘max_allowed_packet’ bytes 错误 解决方法 &#x1f6a9; 临时调整&#xff0c;重启后失效 1️⃣ 查询默认的max_allowed_packet值大小 执行语句&#xff1a; SHOW VARIABLE…

[Android Studio] Android Studio Virtual Device虚拟机的功能试用

&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Android Debug&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Topic 发布安卓学习过程中遇到问题解决过程&#xff0c;希望我的解决方案可以对小伙伴们有帮助。 &#x1f680;write…

JS:构造函数和原型

目录 1.构造函数和原型 1.1 概述 1.2 构造函数 1.2.1创建 1.2.2 静态成员和实例成员 1.3 构造函数原型 prototype 1.4 对象原型_proto_ 1.5 constructor 构造函数 1.6 构造函数、实例、原型对象的关系 1.7 原型链 2. 继承 2.1 call() 1.构造函数和原型 1.1 概述 在…

OpenStack

名词解释RAM 身份验证管理SDN 软件定义网络虚拟化为什么openstack清一色的KVM&#xff1f;KVM属于redhat&#xff0c;开源可定制nentron实现SDNSDN实现了东西向流量管理&#xff08;VPC与VPC的流量管理&#xff09;SDNVXLan实现隧道网络&#xff08;对等连接&#xff09;SDN在公…

【郭东白架构课 模块一:生存法则】04|法则二:架构师为什么要学习马斯洛的需求理论?

你好&#xff0c;我是郭东白&#xff0c;今天我们来聊聊架构师的第二个生存法则&#xff1a;架构活动需要尊重和顺应人性。 自从学习计算机专业的那一天起&#xff0c;我们似乎就走入了一个简单直接的机器世界&#xff0c;一个完全靠逻辑和数字主宰的世界。于是我们总不自觉地认…

如何将数据库结构导入到word

在navicat执行查询语句 SELECT COLUMN_NAME 备注, COLUMN_COMMENT 名称, COLUMN_TYPE 数据类型, false as 是键 FROM INFORMATION_SCHEMA.COLUMNS where -- wx 为数据库名称&#xff0c;到时候只需要修改成你要导出表结构的数据库即可 table_schema yuncourt_ai AND -- articl…

蓝库云|制造业数字化转型为何转不动?资料处理很重要

数字化转型已经成为每个产业势在必行的课题&#xff0c;没有人会怀疑数字化技术与科技能解放的生产力能量&#xff0c;但为什么看似美好的愿景&#xff0c;实行起来却如此缓慢&#xff1f;蓝库云认为这是因为没有盖好「资料治理」的地基。 面对不断变化的法令规范要求&#xf…

<<Java开发环境配置>>7-Apache Tomcat安装教程环境变量配置IDEA配置

一.Apache Tomcat简介: Apache是普通服务器&#xff0c;本身只支持html即普通网页。不仅可以通过插件支持php,还可以与Tomcat连通(单向Apache连接Tomcat,就是说通过Apache可以访问Tomcat资源。反之不然)。Apache只支持静态网页&#xff0c;但像php,cgi,jsp等动态网页就需要Tomc…

无需端口映射,快解析外网访问U8C

U8C是用友针对成长型、创新型企业&#xff0c;提供企业级ERP整体解决方案&#xff0c;支持多组织业务协同、营销创新、智能财务、人力服务&#xff0c;构建产业链制造平台&#xff0c;实现企业互联网资源连接、共享、协同。 在系统实施过程中&#xff0c;多数企业想要自主掌握企…

分支管理方案

背景 在工作的过程中&#xff0c;git管理方式已经成为每一个项目开发的基础&#xff0c;每个项目的开发都离不开git管理方式。 但是在使用的过程中&#xff0c;由于对git分支管理方案的了解不深&#xff0c;导致会出现分支管理不明确的情况。 本文主要是做科普作用&#xff…

c++类与对象

1.类的定义 2.类的构造函数 1.函数名与类名相同 2.无返回值 3.对象实例化时编译器会自己调用构造函数 4.构造函数可以重载 5.没有显示定义时&#xff0c;编译器会自动调用一个无参的默认构造函数&#xff0c;一旦写显示则不生成 6.对于内置类型构造函数不做处理&#xff0c;对于…

麒麟 arm架构安装nginx

目录 1、下载nginx安装包并解压 在线安装&#xff1a; 离线安装&#xff1a; 上传nginx安装包&#xff08;下载地址&#xff1a;https://nginx.org/download/nginx-1.20.2.tar.gz&#xff09;到指定目录 2、安装系统相关依赖软件、组件包 1、上传或者下载对应的组件包 2、安…

SQL 中的窗口函数

SQL 中的窗口函数&#xff08;Window Functions&#xff09;是一种特殊的函数&#xff0c;它可以在查询结果的某个区间内执行计算&#xff0c;而不仅仅是对单个行进行计算。 以下是一些常用的窗口函数&#xff1a; 1、ROW_NUMBER() ROW_NUMBER() 函数可以给查询结果的每一行…

C语言常见关键字

写在前面 这个博客是结合C语言深度解剖这本书和我以前学的知识综合而成的,我希望可以更见详细的谈一下C语言的关键字,内容有点多,有错误还请斧正. 常见关键字 下面我们说下C语言的关键字,所谓的关键字是指具有特定功能的单词,我们可以使用关键字来帮助我们完成不同的事物.C语…

win系统电脑如何打开sketch?

2 个方法快速使用 Windows 系统打开 Sketch 文件&#xff1a;使用 Adobe XD 打开 Sketch 文件或者使用浏览器中就能做设计的即时设计直接打开 Sketch 文件。众所周知&#xff0c; Sketch 只能在 Mac 电脑上使用&#xff0c;因此只有借助 XD 这种能在 Windows 系统启动的软件工具…

LSTM原理解析

一、背景 前文讲了RNN的基本原理&#xff0c;可以发现RNN是一个比较简单的神经网络结构&#xff0c;虽然为文本和时间序列的建模提供了一个很好的思路&#xff0c;但是也有一定的局限性。最直观的就是使用了Tanh函数造成梯度消失的问题。 根据Tanh的性质&#xff0c;很容易出…

树莓派Bullseye版本更新

1、参考链接&#xff1a;树莓派11bullseye换源/Opencv安装_所罗门大帝的博客-CSDN博客 2、参考链接&#xff1a;https://blog.csdn.net/weixin_39589455/article/details/124514099 步骤1、使用镜像帮助&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/help/raspbian/ 步骤…

面试题 链表相交 -剑指offer简单

面试题 链表相交 题目链接 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#…