Ansible-playbook是一系列ansible命令的集合,利用yaml语言编写。playbook命令根据自上而下的顺序依次执行。同时,playbook开创了很多特性,他可以允许你传输某个命令的状态到后面的指令,如你可以从一台机器的文件中抓取内容并附为变量,然后再另一台机器中使用,这使得你可以实现一些复杂的部署机制,这是ansible命令无法实现的。
playbook通过ansible-playbook命令使用,它的参数和ansible命令类似,如参数-k(-ask -pass) 和-K( -ask-sudo)来询问ssh密码和sudo密码,-u指定用户,这些指令也可以通过规定的单元写在playbook。ansible-playbook的简单使用方法:
ansible-playbook example-play.yml
YAML基本语法
Play-book的基本规则
打印详细信息:
-v:打印任务运行结果
-vv:打印任务运行结果以及任务的配置信息
-vvv:包含了远程连接的一些信息
校验playbook语法
ansible-playbook —syntax-check manage_apache.yml
playbook:manager_apache.yml
测试运行playbook
- 一个play-book可以拥有多个play
- 每个play-book只能拥有一个tasks
playbook的结构说明:
主要有一下四个部分:
Target section:用于定义将要执行playbook的远程主机及远程主机组上的用户,还包括定义通过什么养的方式连接远程主机(默认ssh)
Variable section:定义playbook运行时需要使用的变量
Task section:定义将要在远程主机上执行的任务列表
Handler section:定义task执行完成以后需要调用的任务数据类型
1.纯量:
不可在分割的量 A=100
2.列表:
特点:每个元素都有索引号,从0开始
每个元素可以重复
每个元素之间相互独立,没有直接关系
类似数组:
B=[1,2,2,4]
0 1 2 3
B[0]=1
B[1]=2
B[2]=2
B[3]=4
例子
- marry
- harry
- natasha
- name: marry
- name: arry
age:20 - name: natasha
age: 20
转换成python的语法
[marry,harry,natasha]
3.字典
python
C={name: marry, age: 18}
C[name]=marry
C[age]=18
例子
yaml语法
name: marry
age: 18
name: install httpd
yum:
name: httpd
state: present
{name: “install httpd”, yum: {name: httpd, state: present} }
特点:
字典的每个元素都是由键值对组成 key: value
key是唯一的,不可重复
value可以重复
每个key都是用来描述一个对象的,key之间有关联
冒号后面一定要有空格
play-book例子
# cat user.yml- name: create userhosts: allremote_user: rootgather_facts: falsevars:user:"test"tasks:- name: create useruser: name="{{ user }}"
参数说明
name:对该playbook实现的功能做一个概述,后面执行过程中,会打印name变量的值
hosts:指定对哪些被管理机进行操作
remote_user:指定再远程被管理机上执行操作时使用什么用户,如果不指定,则会使用ansible.cfg中配置的remote_user
gather_facts:指定再执行任务之前,是否先执行setup模块获取主机相关信息,如未用到,可不指定
vars:定义后续任务中会使用到的变量,如未用到,可不指定
tasks:定义具体需要执行的任务
name:对任务的描述,再执行过程会打印出来
user:指的是一个模块
name:user中的 一个参数,用来创建用户
Target section
- name: create files
hosts: datacenter
tasks:- name: install httpd
说明:play的主体部分是任务列表。任务列表中的各任务按次序逐个在hosts中指定的所有主机上执行,在所有主机上完成第一个任务后再开始第二个。在自上而下运行某playbook时,如果中途发生错误,则整个playbook会停止执行,由于playbook的幂等性,playbook可以被反复执行,所以即使发生了错误,在修复错误后,再执行一次即可。Handler section
定义task执行完成以后需要调用的任务-name: create fileshosts: datacentertasks:-name: install httpdhandlers:-name: restarted httpd
hanlder的用法
```yaml
- name: install httpd
hosts: node3 force_handlers: yes #报证被触发的handler会运行,就需要设置一个参数 tasks:
- name: install httpd yum: name: httpd state: present
name: copy httpd.conf to remote hosts copy: src: /home/admin/ansible/httpd.conf dest: /etc/httpd/conf/httpd.conf notify:
- restarted httpd
- install php
name: start httpd systemd:
name: httpdstate: startedenabled: yes
- name: stop firewalld
systemd:
ignore_errors: yes #表示如果任务运行失败,则忽略该错误继续运行name: firewalldstate: stopped
- name: edit index.html
copy:
content: | #代表换行
dest: /var/www/html/index.html notify: restarted httpdhello yutianeduwelcome to yutian
- shell: | #代表换行
ls /root
setenforce 0
handlers:
