Ansible(三)Playbook 编写

一、playbook

1 简介

  • Playbook与ad-hoc相比,是一种完全不同的运用。
  • playbook是一种简单的配置管理系统与多机器部署系统的基础,且非常适合于复杂应用的部署。
  • playbook中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤,并且可以同步或异步的发起任务。
  • 使用playbook可以方便的重用这些代码,可以移植到不同的机器上面。
  • playbook才是ansible真正强大之处。

2 playbook语法

playbook由YMAL语言编写,以下为playbook常用到的YMAL格式:

  • 文件的第一行应该以"—"三个连字符开始,表明YMAL文件的开始。
  • 在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
  • YMAL中的列表元素以”-”开头然后紧跟着一个空格,同一个列表中的元素应该保持相同的缩进:
---
# 一个美味水果的列表
- Apple
- Orange
- Mango

一个字典是由一个简单的 键: 值 的形式组成(这个冒号后面必须是一个空格):

---
# 一位职工的记录
name: Example Developer
job: Developer
skill: Elite

字典也可以使用缩进形式来表示, 如果你喜欢这样的话:

---
# 一位职工的记录
{name: Example Developer, job: Developer, skill: Elite}

3 playbook示例

yaml 以缩进 进行判断!!!

autocmd FileType yaml setlocal ai ts=2 sw=2 et
setlocal ##设定当前文件

ai ##自动退格对齐 auto indent

ts ##tab建长度为2空格 tabstop=2

sw ##缩进长度为2 shiftwidth=2

et ##把tab键变成空格 expandtab

设定一个tab=2个空格
在这里插入图片描述

vim apache.yml

Playbook的核心组件:

name            可选,建议使用多用于说明
hosts           受控主机列表
tasks           任务
                用与选择执行部分代码
---
- hosts: test  %单独主机//多个组 /all都可
  tasks:
    - name: install apache %任务1
      yum:
        name: httpd
        state: present

    - name: start apache  %任务2
      service:
        name: httpd
        state: started

在这里插入图片描述

检测语法

[root@ansible ansible]# ansible-playbook --syntax-check apache.yml

在这里插入图片描述

[root@ansible ansible]# ansible-playbook -C apache.yml

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

列出任务

在这里插入图片描述

列出tag

当前未设定标签
在这里插入图片描述

指定执行主机

当yal文件中未指定执行主机,可以使用limit进行指定;当文件和命令行指定不同主机时,以文件中指定的主机优先!!!
在这里插入图片描述

执行yaml文件

在这里插入图片描述Gathering Facts 采集数量
明等性,检测是否执行过,相同状态一致不执行
在这里插入图片描述

4 playbook基础

主机与用户

---
- hosts: server2      		  //指定主机组,可以是一个或多个组,逗号分隔。
  remote_user: root                //指定远程主机执行的用户名
  ---
- hosts: webservers
  remote_user: root            
  become: yes                		//切换用户运行
  become_user: mysql          	//指定sudo用户为mysql

Tasks 列表

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

所有主机上完成第一个任务后再开始第二个任务。如果一个host执行task失败,整个tasks都会回滚。
在这里插入图片描述

在这里插入图片描述

  • 定义一个task,常见的格式:”module: options” 例如:
tasks:
    - name: install apache
      yum: name=httpd state=present		
也可以写成以下格式:
    - name: "启动apache服务"
      service:
        name: httpd
        state: started
  • Ansible的自带模块中,command模块和shell模块无需使用key=value格式:
tasks:
  - name: disable selinux
    command: /sbin/setenforce 0
  • 使用 command 和 shell 时,我们需要关心返回码信息:
tasks:
  - name: run this command and ignore the result
    shell: /usr/bin/somecommand
    ignore_errors: True	   		//返回值如果不为0,就会报错,tasks停止。
  • 执行playbook
ansible-playbook apache.yml
ansible-playbook apache.yml --syntax-check    	//检查yaml文件的语法是否正确
ansible-playbook apache.yml --list-task       	//检查tasks任务
ansible-playbook apache.yml --list-hosts      	//检查生效的主机
ansible-playbook apache.yml --start-at-task="start apache"   
//指定从某个task开始运行

检查生效的主机
在这里插入图片描述

配置apache

在这里插入图片描述
将node1的httpd.conf复制到ansible主机端
在这里插入图片描述

检测语法并执行
在这里插入图片描述
此处发现未执行,因为ansible端和node1端的配置文件相同,可以使用md5sum进行校验
在这里插入图片描述在这里插入图片描述
ansible端修改监听端口为8080
在这里插入图片描述
此时md5sum校验码已经改变!!!
在这里插入图片描述

重新执行yml文件,发现改变,
在这里插入图片描述
node1和node2端的httpd.conf中的端口已经修改为8080, 但是未生效!!!
在这里插入图片描述
在这里插入图片描述

重新修改yaml文件,

---
- hosts: test
  tasks:
    - name: install apache
      yum:
        name: httpd
        state: present
    - name: config apache
      copy:
        src: httpd.conf
        dest: /etc/httpd/conf/httpd.conf
      notify: restart apache
    - name: start apache
      service:
        name: httpd
        state: started
  handlers:                                %在发生改变时执行的操作
    - name: restart apache
      service:
        name: httpd
        state: restarted

在这里插入图片描述
修改本地的conf文件中的端口为8000,执行yaml文件
在这里插入图片描述
测试:
访问8000端口成功
在这里插入图片描述在这里插入图片描述

二、练习

练习1

完成脚本,要求自动配置软件仓库并安装启动ftp,允许匿名用户访问
repo.yml

练习2

用 playbook 剧本的方式在安装 dns 服务,维护 westos.org 的域,在这个域中有三个网址,www.westos.org 对应的 ip 是 172.25.28.28,bbs.westos.org 对应的是 westosa.westos.org 对应的 ip 是 172.25.28.100 和 172.25.28.200

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值