1、playbook是什么?
在Ansible中,Playbook是用于配置、部署和管理被控节点的剧本。它由一个或多个play(角色)组成,每个play可以包含多个task(台词,动作)。使用Ansible的Playbook,可以通过描述和执行一系列的操作步骤,让受控主机达到预期的状态。
2、为什么要编写playbook?
写Playbook的目的主要有以下几点:
- 自动化和可重复性:Playbook可以确保在多个环境中实现一致性和可重复性。一旦编写完成,可以在任何需要的地方运行,从而消除了手动配置和部署的繁琐性。
- 提高效率:通过自动化常见任务,Playbook可以显著减少完成这些任务所需的时间和精力。这允许团队将更多资源投入到创新和增值活动中。
- 减少错误:自动化的配置和部署过程可以消除人为错误,从而提高了系统的稳定性和可靠性。
- 文档化:Playbook可以作为系统配置和部署过程的文档。这有助于新团队成员了解系统,并允许团队在出现问题时快速回溯和诊断。
- 可扩展性和灵活性:Playbook可以轻松适应不断变化的需求和环境。只需对Playbook进行必要的修改,即可在多个环境中重复使用。
- 一致性:通过使用Playbook,可以确保在多个环境或主机上实现一致的配置和部署。这有助于维护系统的一致性和稳定性。
- 易于审计和跟踪:由于Playbook是文本文件,因此可以轻松进行版本控制,从而允许团队跟踪对系统所做的更改。这有助于满足合规性和审计要求。
3、如何编写playbook?
编写Ansible Playbook需要遵循一定的结构和语法规则。以下是一些编写Ansible Playbook的基本步骤和注意事项:
- 确定目标:在开始编写Playbook之前,需要明确你想要达到的目标。例如,你可能想要部署一个应用程序、配置网络设置、管理软件包等。
- 创建Playbook文件:在Ansible目录中创建一个以
.yml
为扩展名的Playbook文件。例如,你可以创建一个名为deploy.yml
的文件。 - 定义inventory:在Playbook文件中,你需要定义一个或多个inventory(主机清单)。Inventory可以包含受控主机的列表、主机组、变量等。
---
- hosts: webservers
become: yes
tasks:
- name: install nginx
apt: name=nginx state=present
在这个示例中,hosts
字段指定了一个名为webservers
的主机组,become
字段用于执行需要管理员权限的任务。
4.定义task(任务):在Playbook中,每个任务都是一个要执行的指令或动作。你可以定义多个任务来达到你的目标。
- name: install nginx
apt: name=nginx state=present
在这个示例中,任务是安装Nginx软件包。
5.执行Playbook:使用Ansible命令行工具或脚本执行Playbook。例如,你可以运行以下命令来执行名为deploy.yml
的Playbook:
ansible-playbook deploy.yml
6.调试和优化:在执行Playbook后,检查输出和日志以确认任务是否成功执行。根据需要调试和优化Playbook以确保其正确性和效率。
4、单据本编写
1.查看ansible是否安装,如下图是已安装示例图,如果还没有可以参考我上一篇文章《Ansible介绍与安装》
2.管理的我的主机IP地址 vi /etc/ansible/hosts
[m1]
192.168.31.135
[all:vars]
ansible_user=root
ansible_password=123456
3.确定ansible能与受控机通信
4.创建一个ploybook目录,用于专门存放ploybook文件,编写playbook,名为waha.yml。
[root@localhost /]# cd /etc/ansible
[root@localhost ansible]# mkdir playbook
[root@localhost ansible]# cd playbook/
[root@localhost playbook]# vim waha.yml
[root@localhost playbook]# cat waha.yml
---
- name: 系统初始化 ##任务名称,自定义。
hosts: 192.168.31.135 ##对哪个受控机进行操作。
tasks: ## 任务。
- name: 关闭防火墙 ##任务里可以有很多个小任务,比如这里就只有一个任务,关闭防火墙,名称自定义。
service: ##关闭防火墙要用哪个模块。
name: firewalld ##service模块参数,作用对象。
state: stopped ##service模块参数,操作动作。
5.语法验证。验证没问题之后才能往后面操作。
ansible-playbook --syntax-check waha.yml
6.执行空运行,测试结果是否是我们想要的,但不实际在受控机上执行。
7.执行ploybook,查看结果。
8.之前192.168.31.135的防火墙状态
9.现在192.168.31.135的防火墙状态
5、多剧本编写
1.管理的主机IP地址 vi /etc/ansible/hosts
[m1]
192.168.31.135[m2]
192.168.31.140
[all:vars]
ansible_user=root
ansible_password=123456
3.确定ansible能与受控机通信
4.创建一个ploybook目录,用于专门存放ploybook文件,编写playbook,名为happy.yml。
[root@localhost /]# cd /etc/ansible
[root@localhost ansible]# mkdir playbook
[root@localhost ansible]# cd playbook/
[root@localhost playbook]# vim happy.yml
[root@localhost playbook]# cat happy.yml
---
- name: 系统初始化 ##任务名称,自定义。
hosts: [192.168.31.135 192.168.31.140] ##对哪个受控机进行操作。
tasks: ## 任务。
- name: 关闭防火墙 ##任务里可以有很多个小任务,比如这里就只有一个任务,关闭防火墙,名称自定义。
service: ##关闭防火墙要用哪个模块。
name: firewalld ##service模块参数,作用对象。
state: stopped ##service模块参数,操作动作。
5.语法验证。验证没问题之后才能往后面操作。
ansible-playbook --syntax-check happy.yml
6.执行空运行,测试结果是否是我们想要的,但不实际在受控机上执行。
7.执行ploybook,查看结果。
8.之前192.168.31.135和192.168.31.140的防火墙状态
9.现在192.168.31.135和192.168.31.140的防火墙状态
如果在查看两台主机防火墙的主机的防火墙的状态时,如果防火墙都关闭了,恭喜你最基础的Ansible-playbook编译.yml脚本已经掌握!!