Ansible playbook 基本概念

2024-2-1 23:50 wsl Ansible自动化 阅读量:1689

一、Ansible playbook 简介

        playbook 是 ansible 用于配置 ,部署,和管理被控节点的剧本。
        通过 playbook 的详细描述,执行其中的一系列 tasks  ,可以让远端主机达到预期的状态 。playbook 就像 Ansible 控制器给被控节点列出的的一系列 to-do-list ,而被控节点必须要完成。也可以这么理解,playbook 字面意思 ,即剧本,现实中由演员按照剧本表演,在Ansible中 ,这次由计算机进行表演 ,由计算机安装,部署应用,提供对外服务 ,以及组织计算机处理各种各样的事情。

二 、Ansible playbook使用场景

        执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是有时一个设施过于复杂 ,需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook 。
就像执行shell命令与写shell脚本一样 ,也可以理解为批处理任务,不过playbook有自己的语法格式。
        使用playbook你可以方便的重用这些代码,可以移植到不同的机器上面 ,像函数一样,最大化的利用代码。在你使用Ansible的过程中,你也会发现 ,你所处理的大部分操作都是编写playbook 。可以把常见的应用都编写成playbook ,之后管理服务器会变得十分简单。

三、Ansible playbook 格式

Ansible ad-hoc可以通过命令行形式远程管理其他主机,适合执行一些临时性简单任务。另外还有一种远程管理的方式叫Playbook,Ansible Playbook中文名称叫剧本,它将经常需要执行的任务写入一个文件 ,这个文件就叫剧本 。

  • 剧本中可以包含多个任务
  • 剧本写后,我们随时根据剧本,执行相关的任务命令
  • Playbook剧本要求按照YAML格式编写
  • 适合执行周期性经常执行的复杂任务

YAML是什么?

  • YAML是一个可读性高、用来表达数据序列的格式语言
  • YAML:YAML Ain't a Markup Language
  • YAML以数据为中心 ,重点描述数据的关系和结构
  • YAML的格式要求如下:
  1. "#"代表注释,一般第一行为三个横杠(---)
  2. 键值(key/value)对使用":"表示,数组使用"-"表示 ,"-"后面有空格
  3. key和value之间使用":"分隔
  4. ":"后面必须有空格
  5. 一般缩进由两个或以上空格组成
  6. 相同层级的缩进必须对齐,缩进代表层级关系
  7. 全文不可以使用tab键
  8. 区分大小写
  9. 扩展名为yml或者yaml
  10. 跨行数据需要使用>或者|,其中|会保留换行符

Playbook语法格式要求如下:

  • playbook采用YAML格式编写
  • playbook文件中由一个或多个play组成
  • 每个play中可以包含:
            hosts(主机) 、tasks(任务)、vars(变量)等元素组成
  • 使用ansible-playbook命令运行playbook剧本

四、Ansible playbook 核心元素

- hosts:         主机组;
  vars:            变量
  tasks:          任务列表;
  tmplates:    包含了模板语法的文本文件;
  handlers:     由特定条件触发的任务;

举例:

①安装运行apache服务:
# vim /tmp/httpd.yml
---
- hosts: web1
  remote_user: root
  tasks:
  - name: install httpd
    yum: name=httpd state=present
  - name: starting httpd service
    service: name=httpd state=started

# ansible-playbook /tmp/httpd.yml

转换为ad-hoc
# ansible web1 -m yum -a 'name=httpd state=present'
# ansible web1 -m service -a 'name=httpd state=started'


②安装并运行nginx服务:
# vim /tmp/nginx.conf
---
- hosts: web1
  remote_user: root
  tasks:
  - name: install nginx
    yum: name=nginx state=present
    tags: installnginx
  - name: copy nginx.conf
    copy: src=/tmp/nginx.conf dest=/etc/nginx/nginx.conf
    notify: reload                    #当nginx.conf发生改变时 ,通知给相应的handlers
    tags: reloadnginx              #打标签
  - name: copy index.html
    copy: src=/tmp/index.html dest=/usr/share/nginx/html/index.html
    tags: reloadnginx
  - name: start nginx service
    service: name=nginx state=started
    tags: startnginx                #打标签

  handlers:                            #注意 ,与tasks同级
  - name: reload
    service: name=nginx state=restarted

运行整个剧本:
# ansible-playbook /tmp/nginx.yaml

五 、运行前三部曲

检查错误:
# ansible-playbook /tmp/nginx.yaml --syntax-check
 
列出所有任务:
# ansible-playbook /tmp/nginx.yaml --list-task

列出在那些机器执行:
# ansible-playbook /tmp/nginx.yaml --list-hosts

运行:
# ansible-playbook /tmp/nginx.yaml

版权所有:
文章标题:Ansible playbook 基本概念
文章链接:https://www.51itlab.net/?post=103
本站文章均为原创,未经授权请勿用于任何商业用途

热门标签