运维自动化工具 Ansible-playbook
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运维自动化工具 Ansible-playbook 相关的知识,希望对你有一定的参考价值。
一、简介
playbook是一个非常简单的配置管理和多主机部署系统。可作为一个适合部署复杂应用程序的基础。
playbook可以定制配置,可以按指定的操作步骤有序执行,支持同步和异步方式。
playbook是通过YAML格式来进行描述定义的,可实现多台主机应用的部署,对不同分组的主机执行特定指令步骤。
第一个playbook
---
- hosts: all
remote_user: root
tasks:
- name: test yml
command: /usr/bin/wall "hello world"
Playbook工作流程
二、Playbook核心元素
hosts
hosts 行的内容是一个或多个组或主机的 patterns,以逗号为分隔符。通常是/etc/ansible/hosts定义的主机列表。
remote_user 就是远程执行任务的账户名。
---
- hosts: cluster1,cluster2
remote_user: root
tasks
任务集
tasks:
- name: install httpd
yum: name=httpd
- name: start httpd
service: name=httpd state=started
- name: check http port
shell: ss -ntl|grep 80 > /tmp/httpd.txt
- name: fetch
fetch: src=/tmp/httpd.txt dest=/tmp
一个yml文件里可以设计多个playbook,不过呢,为了更清晰的管理,建议应该独立存放不同任务需求,方便以后调用。
Handlers 和 notity
由特定条件触发的操作,满足条件方才执行,否则不执行。
Handlers也是task列表,这些task与前述的tasks并没有本质上的不同,用于当关注的资源发生变化时,才会采取一定的操作
还是拿上个例子的playbook修改下。
---
- hosts: clutser1
remote_user: root
tasks:
- name: install httpd
yum: name=httpd
- name: change httpd.conf
copy: src=/app/httpd.conf dest=/etc/httpd/conf/ backup=yes
notify: restart httpd # 在 notify 中定义内容一定要和handlers中定义的 - name 内容一样,这样才能达到触发的效果,否则会不生效。
- name: start httpd
service: name=httpd state=started
- name: wall http status
shell: /usr/bin/wall `ss -nltp|grep httpd`
handlers:
- name: restart httpd # 只有接收到通知才会执行这里的任务
service: name=httpd state=restarted
以上是关于运维自动化工具 Ansible-playbook 的主要内容,如果未能解决你的问题,请参考以下文章