Ansible(六)自动化运维之Playbook实战 1

一  playbook的简介

本章对ansible的palybook做了讲解,涉及了playbook的语法、变量、模板、判断、循环等,了解了如何编写playbook文件

playbook的强大只有在使用Ad-Hoc之后,才能深深的感受playbook的强大!

Ad-Hoc:注重解决一些简单或者平时工作中临时遇到的任务,解决一些非固化的任务!

playbook是一种简单的配置管理系统与多机器部署系统的基础,且非常适合于复杂应用的批量部署

playbook中可以编排有序的执行过程,甚至于做到在多组机器间来回有序的执行特别指定的步骤,并且可以同步或异步的发起任务,使用playbook可以方便的重用这些代码,可以移植到不同的机器上面!

二  playbook的语法

YMAL简介

重点:强调这种语言以数据做为中心,而不是以标记语言为重点

Ansible任务配置文件被叫做Playbook,称之为剧本,而每一个编写的人都是剧本的作者或者说是编剧

一个剧本:有主线,有任务,有衔接,有场景等等,在这里体现的淋漓尽致!

playbook由YMAL语言编写,常见的配置文件的格式还有xml(早期,现在仍然活跃),和json格式(主流)!

以下为playbook常用到的YMAL格式

(1)文件的第一行应该以"---"三个连字符开始,且需顶行首写,表明YMAL文件的开始
(2)在同一行中,#之后的内容表示注释,类似于shell,python和ruby
(3)YMAL中的列表元素以”-”开头然后紧跟着一个空格,同一个列表中的元素应该保持相同的缩进
(4)一个字典是由一个简单的键: 值 的形式组成(这个冒号后面必须是一个空格),字典也可以使用缩进形式来表示

  1. 字串不一定要用双引号标识;

  2. 在缩排中空白字符的数目并不是非常重要,只要相同阶层的元素左侧对齐就可以了;

  3. 允许在文件中加入选择性的空行,以增加可读性

  4. 在一个档案中,可同时包含多个文件,并用“---”分隔;

  5. 选择性的符号“...”可以用来表示档案结尾

小技巧:yaml文件的格式对空格是很敏感的,一般需要顶格书写,段落划分为两个空格,为了方便编写.yml文件,做如下调整

在devops用户家目录下新建隐藏文件

[devops@localhost anisble]$ cat ~/.vimrc 
autocmd FileType yaml setlocal ai ts=2 sw=2 et

三  案例的结合

需求1:temp组安装apache并且开启服务

apache.yml

---
# 针对这个任务的资源清单!
- hosts: test
  tasks:
    #(1)这个任务的描述
    - name: install httpd
      # 调用yum模块-->下面是该模块相关的参数
      yum:
        name: httpd
        state:  present
    #(2)另外一个任务的描述
    - name: start httpd
      # 调用service模块,启动服务
      service:
        name: httpd
        state: started

总结1:某个模块的相关参数以键值对的形式对应,对应":"

总结2:hosts、tasks、vars位于同一级别

总结3:列表对应[]-->"-",元组对应{}-->“:

ansible-playbook命令的相关参数

ansible-playbook apache.yml                                     #直接执行
ansible-playbook apache.yml --syntax-check                      #检查yaml文件的语法是否正确
ansible-playbook apache.yml -C                                  #注意与上面的区别

ansible-playbook apache.yml --list-task                         #检查tasks任务
ansible-playbook apache.yml --list-hosts                        #检查生效的主机
ansible-playbook apache.yml --start-at-task="启动apache服务"     #指定从某个task开始运行

总结4:playbook主要有四部分构成

target section    # 定义将要执行playbook的远程主机组
variable section  # 定义playbook运行时需要使用的变量
task section      # 定义将要在远程主机上执行的任务列表
handler section   # 定义task执行完成以后需要调用的任务

         Play的主体部分是task列表,task列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务。如果一个host执行task失败,整个tasks都会回滚。每一个task必须有一个名称name(标识的作用,这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。

总结5:playbook对应的目录层有五个

一般所需的目录层有:(视情况可变化)

    vars     变量层
    tasks    任务层
    handlers 触发条件
    files    文件
    template 模板

讨论一下其它事情:软件安装之后再卸载是无法删除依赖!

# 安装httpd对系统做的事情-->曾经的伤害!

rpm -q --scripts httpd    #查看安装过程以及安装前后所执行的所有脚本,很重要!

rpm -qi httpd             # -q查询 -i安装

需求2:由于管理端事先需要对服务进行定制,所以在上面的基础上进行配置文件的分发!

# 针对这个任务的资源清单!
- hosts: test
  tasks:
    #(1)这个任务的描述
    - name: install httpd
      # 调用yum模块-->下面是该模块相关的参数
      yum:
        name: httpd
        state:  present
    #(2)scp apache的配置文件
    - name: configure httpd
      copy:
        src: files/httpd.conf
        dest: /etc/httpd/conf/httpd.conf
        owner: root
        group: root
        mode: 0644
    #(3)另外一个任务的描述
    - name: restart httpd
      # 调用service模块,启动服务
      service:
        name: httpd
        state: restarted
# 对这个的理解-->执行命令的相对位置!

src: files/httpd.conf

需求3:当配置文件发生变化时,重启服务

---
# 针对这个任务的资源清单!
- hosts: test
  tasks:
    #(1)这个任务的描述
    - name: install httpd
      # 调用yum模块-->下面是该模块相关的参数
      yum:
        name: httpd
        state:  present
    #(2)scp apache的配置文件-->保持与原本的一致
    - name: configure httpd
      copy:
        src: files/httpd.conf
        dest: /etc/httpd/conf/httpd.conf
        owner: root
        group: root
        mode: 0644
      # 注意:要与下方的保持一致,notify也是一个模块!
      notify: restarted httpd
    #(2)另外一个任务的描述
    - name: start httpd
      # 调用service模块,启动服务
      service:
        name: httpd
        state: started
    #(3)触发机制,只有修改了配置文件才会触发-->相当于调转!
  handlers:
    - name: restarted httpd
      service:
        name: httpd
        state: restarted

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值