一.playbooks的简单介绍

[TOC]

理解成剧本即可

 playbook是ansible用于配置,部署,和管理被控节点的剧本,通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态.playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点必须要完成。

### 二.使用场景:

#### 1.需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook。

#### 2.就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,不过playbook有自己的语法格式。

#### 3.使用playbook你可以方便的重用这些代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码

### 三.playbooks组织格式

#### 1.YAML格式

YMAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写.,类似于半结构化数据,声明式配置;可读性较高的用来表达资料序列的格式,易于与脚本语言交互.

#### 2.YAML语法特点

- 1)任何数据结构都用缩进来标识,可以嵌套

- 2)每一行都是一个键值对key:value,冒号隔开,若想在一行标识需要{}和,分隔格式

- 3)列表用 - 标识

- 4)文件的第一行应该以 ---(三个连字符)开始,表示YAML文件的开始

- 5)在同一行中,#之后的表示注释

#### 3.playbooks的组成结构:

- 1)Tasks:任务列表,指远程主机将要执行的一系列的动作,核心就是ansible模块.

- 2)Variables:变量

- 3)Templates:包含模板语法的文本文件

- 4)Handlers:处理器,有某个条件触发执行操作

- 5)remoute_user:远程主机上执行任务的用户

- 6)Hosts:运行指定任务的目标主机

### 四.playbooks剧本编写:

```yaml

- hosts: node #host文件中定义呗监控主机组名

remote_user: root #远程执行命令用户名

vars:

- servername: nginx #定义变量

tasks:

- name: yum install {{ servername }} #任务名称1

yum: name={{ servername }} state=latest #使用yum模块安装最新的nginx

- name: copy {{ servername }} #任务名称2

yum: src=/app/{{ servername }}.cong dest=/etc/nginx/nginx.conf backup=yes ##备份文件

notify: reload #当notify标记的task发生变化,触发hander

tags: reload{{ servername }}

- name: start service

service: name={{ servername }} start=started ##使用service模块 启动nginx

tags: start{{ servername }}

handlers:

- name: reload

service: name={{ servername }} start=started ##notify呼应

二 现有集群剧本链接

https://gitee.com/linuxsamu/ansible

链接: https://pan.baidu.com/s/1owjcqBO6nHKmy0-LYhCdCw 提取码: edsb

## 部署docker

### 编辑文件

vim docker_install.yaml

```yaml

- hosts: docker #定义的主机组,即应用的主机

remote_user: root # 远程用户为root

gather_facts: true

tasks:

- name: setup yum-utils #docker依赖安装

yum: name=yum-utils state=present

- name: setup device-mapper-persistent-data #docker依赖安装

yum: name=device-mapper-persistent-data state=present

- name: setup lvm2

yum: name=lvm2 state=present

- name: download docker repo

shell: yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

tags:

- docker-ce

- name: yum clean ##清理重新加载yum仓库

shell: yum clean all

shell: yum makecache fast

- name: setup docker-ce #安装docker

yum: name=docker-ce state=present

- name: start docker # 打开docker 开机启动

service: name=docker.service enabled=yes state=started

```

### 运行

```yaml

ansible-playbook docker_install.yml

```

![](/uploads/ansible/images/m_566604cfb08f0ea3826449c5ae65fd68_r.png)![](/uploads/ansible/images/m_b8a522a02c3bde910f3c8da0a6bc1941_r.png)

![](/uploads/ansible/images/m_438d7ccf7e567d2629b2fd8def4d7f75_r.png)

三 部署docker

### 编辑文件

vim docker_install.yaml

```yaml

- hosts: docker #定义的主机组,即应用的主机

remote_user: root # 远程用户为root

gather_facts: true

tasks:

- name: setup yum-utils #docker依赖安装

yum: name=yum-utils state=present

- name: setup device-mapper-persistent-data #docker依赖安装

yum: name=device-mapper-persistent-data state=present

- name: setup lvm2

yum: name=lvm2 state=present

- name: download docker repo

shell: yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

tags:

- docker-ce

- name: yum clean ##清理重新加载yum仓库

shell: yum clean all

shell: yum makecache fast

- name: setup docker-ce #安装docker

yum: name=docker-ce state=present

- name: start docker # 打开docker 开机启动

service: name=docker.service enabled=yes state=started

```

### 运行

```yaml

ansible-playbook docker_install.yml

```

![](/uploads/ansible/images/m_566604cfb08f0ea3826449c5ae65fd68_r.png)![](/uploads/ansible/images/m_b8a522a02c3bde910f3c8da0a6bc1941_r.png)

![](/uploads/ansible/images/m_438d7ccf7e567d2629b2fd8def4d7f75_r.png)