playbook是Ansible进行配置管理的基本组件。

第一个playbook

Ansible playbook的文件格式为yaml,具体yaml的语法可以参考这里

下面我们编写一个使用yum安装nginx的playbook作为入门,nginx.yaml的内容如下:

 1---
 2- hosts: web-servers
 3  tasks:
 4  - selinux: state=disabled
 5  - name: Add repository
 6    yum_repository:
 7      name: nginx
 8      baseurl: http://nginx.org/packages/centos/7/$basearch/
 9      gpgcheck: no
10      enabled: yes
11      description: nginx repo
12  - name: Install nginx
13    yum: name=nginx state=present
14  - name: Copy nginx.conf
15    template: src=./nginx.conf.j2 dest=/etc/nginx/nginx.conf owner=root group=root  mode=0644 validate='nginx -t -c %s'
16    notify:
17    - Restart nginx
18  handlers:
19  - name: Restart nginx
20    systemd: name=nginx state=restarted enabled=yes
  • - hosts: web-servers定义了该playbook的目标主机,这里指定了资源清单文件/etc/ansible/hosts中的web-servers组,如果目标是所有主机则可以使用all
  • tasks:定义该playbook的task集合,可以使用ansible-playbook nginx.yaml --list-task打印playbook中的task。
  • - selinux: state=disabled定义了一个名称为selinux的task,使用Ansible的selinuxmodule禁用目标主机上的色Linux。
  • - name: Add repository定义的task使用Ansible的yum_repositorymodule向目标主机添加nginx官方的yum repo
  • - name: Install nginx定义的task使用Ansible的yummodule在各个目标主机上安装nginx
  • - name: Copy nginx.conf定义的task使用Ansible的templatemodule将nginx.conf.j2模板生成nginx.conf配置文件并推送到各个目标主机。notify指定了配置文件推送成功且配置文件内容发生变化侯触发名称为Restart nginx的handler。
  • handlers中只有一个Restart nginx的handler,使用Ansible的systemdmodule实现重启nginx服务。

nginx.conf.j2模板是python的Jinja2模本,这里作为一个入门的例子,先不考虑模板功能,直接使用一个期望的nginx配置文件的内容即可。

运行playbook

在运行playbook之前可以对playbook的语法进行检查:

1ansible-playbook nginx.yaml --syntax-check
2
3playbook: nginx.yaml

查看playbook中的task:

1ansible-playbook nginx.yaml --list-task

显示playbook面向的主机:

1ansible-playbook nginx.yaml --list-hosts

运行playbook:

1ansible-playbook nginx.yaml

playbook运行成功后,会在各个目标主机上安装并启动nginx。以后如果需要更改nginx.conf的内容,只需要修改nginx.conf.j2,在运行这个playbook时,指定运行Copy nginx.conf这个task。

1ansible-playbook nginx.yaml --start-at-task='Copy nginx.conf'

参考