Playbooks
大约 2 分钟运维ansible
简介
Palybooks(剧本)是一种简单的配置管理系统与多机器部署系统的基础.与现有的其他系统有不同之处,且非常适合于复杂应用的部署。在 playbooks 中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤.并且可以同步或异步的发起任务。Playbooks 的格式是YAML。
快速入门
编写playbook-test.yaml
文件,内容如下:
---
## 指定hosts
- hosts: webservers
tasks:
- name: Copy ansible inventory file to client
copy:
src: /etc/ansible/hosts
dest: /etc/ansible/hosts
owner: root
group: root
mode: 0644
执行: ansible-playbook playbook-test -f 10
,-f 指定并发数,输出如下:
Roles
Palybooks可以自由编排不同的子任务,完成复杂的功能,但是当Palybooks过多时维护也会变得困难,那怎样组织 playbook 才是最好的方式呢?答案就是:使用Roles,Roles 基于一个已知的文件结构,去自动的加载某些 vars_files,tasks 以及 handlers。基于 roles 对内容进行分组,使得我们可以容易地与其他用户分享roles,简单来说约定大于配置。
目录结构组成:
roles/
common/ # this hierarchy represents a "role"
tasks/ #
main.yml # <-- tasks file can include smaller files if warranted
handlers/ #
main.yml # <-- handlers file
templates/ # <-- files for use with the template resource
ntp.conf.j2 # <------- templates end in .j2
files/ #
bar.txt # <-- files for use with the copy resource
foo.sh # <-- script files for use with the script resource
vars/ #
main.yml # <-- variables associated with this role
defaults/ #
main.yml # <-- default lower priority variables for this role
meta/ #
main.yml # <-- role dependencies
library/ # roles can also include custom modules
module_utils/ # roles can also include custom module_utils
lookup_plugins/ # or other types of plugins, like lookup in this case
webtier/ # same kind of structure as "common" was above, done for the webtier role
monitoring/ # ""
fooapp/ # ""
- tasks/main.yml,角色执行的主要任务列表。
- handlers/main.yml,处理程序,可以在此角色内部或外部使用。
- library/my_module.py,自定义模块,用的比较少。
- defaults/main.yml,默认变量 ,优先级更低。
- vars/main.yml,变量设置。
- files/,存放文件。
- templates/main.yml,存放模板。
- meta/main.yml,存放元数据。
注
此外还有site.yml
,用来构建站点信息。
基于Roles结构的示例
结构如下图所示:
hosts文件:
[webservers]
124.223.63.123
## 也可以不分组
#124.223.63.123
site.yml文件:
---
## 指定哪些主机执行
- hosts: webservers
## 设置标签值
tags: [ common-tag ]
roles:
## 与下面的common文件夹对应
- role: common
roles/tasks/main.yaml
文件:
---
- name: cp-common-file
copy:
src: test.log
dest: /data/test.log
- name: cp-common-file
template:
src: test1.log.j2
dest: /data/test1.log
roles/common/templates/test1.log.j2
文件:
fdsfdsggggggggggggggggggggggggggggggg
fdfd{{my_var1}}
{{my_var2}}
roles/common/templates/test1.log.j2
文件内容:
my_var1: this is var1
my_var2: this is var2
执行命令:
## 按照site.yml从上到下依次执行
ansible-playbook -i hosts site.yml
## 按照标签指定执行
ansible-playbook -i hosts site.yml --tags=common-tag
输出:
至此,完成了一个基本的roles。roles是Ansible一个非常重要的部分,大部分都是基于roles去开发。
注意:变量的格式为