写点什么

Ansible Playbook - 01

用户头像
耳东
关注
发布于: 3 小时前

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
复制代码


发布于: 3 小时前阅读数: 3
用户头像

耳东

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论

发布
暂无评论
Ansible Playbook - 01