Playbook 是 Ansible 进行配置管理的组件,虽然 Ansible 的日常 AD-Hoc 命令功能很强大,可以完成一些基本的配置管理工作,但是 AD-Hoc 命令无法支撑复杂环境的 配置管理工作。在我们实际使用 Ansible 的工作中,大部分时间都是在编写 Playbook 。
简单地说,playbook 是一个非常简单的配置管理和多机部署系统的基础,不像任何已经存在的系统,它非常适合部署复杂的应用程序。
Playbook 基本语法
Ansible 的 Playbook 文件格式 YAML 语法,所以需要对 YAML 语法有一定的了解。
下面通过一个安装部署 Nginx 的案例来进行讲解
 ---- hosts: webservers  vars:    http_port: 80    max_clients: 200  remote_user: root    tasks:  - name: ensure apache is at the latest version    yum:      name: httpd      state: latest  - name: write the apache config file    template:      src: /srv/httpd.j2      dest: /etc/httpd.conf    notify:    - restart apache  - name: ensure apache is running    service:      name: httpd      state: started  handlers:    - name: restart apache      service:        name: httpd        state: restarted
   复制代码
 
其中,notify 是触发 handlers,如果同步后,文件的 MD5 值有变化会触发 restart apache 这个 handler
handlers 是定义一个 handler 状态让 httpd 服务重启,handler 的名称是 restart apache 。
Playbook 也可以定义多个步骤,在一个 Playbook 里可以先执行一组服务器,再执行第二组服务器。
 ---- hosts: webservers  remote_user: root
  tasks:  - name: ensure apache is at the latest version    yum:      name: httpd      state: latest  - name: write the apache config file    template:      src: /srv/httpd.j2      dest: /etc/httpd.conf
- hosts: databases  remote_user: root
  tasks:  - name: ensure postgresql is at the latest version    yum:      name: postgresql      state: latest  - name: ensure that postgresql is started    service:      name: postgresql      state: started
   复制代码
 Playbook 主机和用户
对于 Playbook 中的每个步骤,您可以选择基础设施中的哪些机器作为目标,以及哪些远程用户作为完成步骤(称为任务)的对象。
hosts 这一行是一个或多个组或主机模式的列表,用冒号分隔,如使用模式文档中所述。remote_user 只是用户帐户的名称:
 ---- hosts: webservers  remote_user: root
   复制代码
 
远程用户也可以写在每个任务中
 ---- hosts: webservers  remote_user: root  tasks:    - name: test connection      ping:      remote_user: username
   复制代码
 
也支持使用其他用户
 ---- hosts: webservers  remote_user: username  become: yes
   复制代码
 
也可以使用关键字 become 在每个任务里来代替放在全局里。
 ---- hosts: webservers  remote_user: yourname  tasks:    - service:        name: nginx        state: started      become: yes      become_method: sudo
   复制代码
 
也可以使用其他的提权模式
 ---- hosts: webservers  remote_user: yourname  become: yes  become_method: su
   复制代码
 
评论