Ansible Playbook自动化任务管理
之前,我们讨论了Ansible简介,安装指南,然后讨论了Playbook及其构建基块。
1什么是Ansible Playbook?
该剧本是Ansible自动化语言。这是带有一组说明的简单文件。在剧本中,我们定义了我们希望Ansible做的事情。剧本包含运行任务的剧本,而这些任务运行模块。他们的任务按顺序执行。
例如,它可以很简单,只需在不同的服务器上依次运行一系列命令,然后按顺序重新启动这些服务器。或者它可能像在公共云和私有云中部署和配置数百个VM一样复杂,包括它们的负载平衡,监视和网络设置。
2手册语言
剧本是用YAML代码编写的简单文件。
YAML是一种数据序列化语言。它是人类并且机器可读的。您不需要任何特殊的编码技能即可编写YAML代码。您可以将数据序列化语言看作是一种分解器,用于分解所有数据结构并以可以重新构造以供以后使用的顺序对其进行序列化。您可以在相同的环境甚至不同的环境中使用此重构的数据结构。
以下是安装mysql的示例YAML文件:
---- name: Install MySQL
hosts: geekflare-mysql-service
tasks:
- name: Install MySQL
action: $ansible_pkg_mgr pkg=mysql-server state=installed
- name: Add Python MySQL DB
action: $ansible_pkg_mgr pkg=python-mysqldb state=installed
3 Ansible Playbook基础
本文的这一部分介绍了基本的Ansible概念,以进一步了解Ansible Playbook。
主机和用户
Ansible需求目标是必须从Ansible剧本中部署游戏的基础架构中的机器。主机通过其IP地址添加到Ansible清单。主机是由冒号分隔的一个或多个组或主机模式的列表。remote_user包含用户帐户的名称。
---- hosts: ProdServers
remote_user: geekflare
变量
变量使您能够更改剧本的运行方式。它们几乎可以在剧本中的任何地方使用,并且可以从在剧本运行开始时发现的清单中继承,清单是在运行时明确设置的。您可以使用字母,数字和下划线定义变量名,但是它只能以字母开头。
例如,port_01是有效变量,而01_post是无效变量。这是Ansible Playbook中变量的示例:
vars:
http_port: 80
max_clients: 200
存货
要运行剧本,您需要一个要实现自动化的目标列表。这就是清单的作用。清单列表可以以几种不同的方式构建和存储,包括静态文件,即Ansible Hosts。也可以通过清单脚本动态生成该脚本,该脚本将为外部源提取主机列表。
您还可以将变量指定为清单列表的一部分。清单最终是您要自动化的事物的列表。
[webservers]192.168.20.1192.168.20.2192.168.20.4[dbservers]172.17.1.56172.17.1.57
任务
播放Ansible Playbook运行任务。该任务负责运行ansible模块。一次只能运行一个任务,并且任务会按顺序执行。他们的任务是用YAML编写的,YAML非常类似于英语。
例如:install package_name,Update software_name等。下面是Ansible剧本中安装httpd的任务的示例:
tasks:
- name: Install httpd Package
yum: name=httpd state=latest
处理程序
处理程序是一种特殊的任务。
它们可以由任务触发,并在播放结束时运行一次。它用于在配置文件中发生任何更改时发送通知,例如,安装后通知服务以启动Apache。“通知”语法用于调用处理程序。以下是重新启动apache的处理程序的示例:
---- hosts: all
tasks:
- name: ensure apache is at the latest version
yum: name=httpd state=latest
notify:
- restart apache
- name: ensure apache is running (and enable it at boot)
service: name=httpd state=started enabled=yes
handlers:
- name: restart apache
service: name=httpd state=restarted
4创建并运行您的第一个Ansible剧本
让我告诉你如何写剧本。每个剧本的开头都是三个破折号(-)。
您在Ansible Playbook中提到的第一件事是要在其上运行Playbook的主机。
然后,您可以通过收集事实来提及变量。然后您可以提及您要执行的不同任务。现在,请记住任务是按照与编写任务相同的顺序执行的。例如,您要先安装软件A,然后再安装软件B,请确保在剧本中编写的第一个任务是安装软件A,而下一个任务可以安装软件B。
然后,您将在底部找到处理程序。处理程序也是任务,但是区别在于要执行处理程序,您需要任务列表中的某种触发器来运行处理程序。
让我向您展示如何创建ansible剧本,以在主机上安装并启动nginx并启动它。
创建一个.yml文件,您将在其中放置用于创建ansible剧本的YAML代码。
gedit nginx.yml
将以下YAML代码放入此文件中,然后保存该文件。
---- hosts: Client
sudo: yes
vars:
- server_port: 8080
tasks:
- name: Installs nginx web server
apt: pkg=nginx state=installed update_cache=true
notify:
- start nginx
handlers:
- name: start nginx
service: name=nginx state=started
上面的YAML文件以hosts开头,我想在客户端计算机(客户端)上运行此剧本。客户端IP地址已保存在/etc/ansible/hosts文件中。
下一行允许使用sudo特权运行任务。
然后在该剧本中将server_port定义为变量。
接下来是我在这本有趣的剧本中的第一个任务,即安装Nginx Web服务器。此任务还具有notify参数,这意味着在此任务之后运行的处理程序。
最后,我编写了一个处理程序以在客户端计算机上启动nginx。
现在您已经清楚了Ansible剧本中的YAML代码,让我们运行该剧本。以下是运行ansible剧本的语法:
ansible-playbook file_name.yml
现在,我将运行ansible剧本,该剧本是我为安装和启动nginx而创建的。
root@geekflare:/home/geekflare# ansible-playbook nginx.ymlPLAY [Client] ******************************************************************TASK [Gathering Facts] *********************************************************ok: [node1]TASK [Installs nginx web server] ***********************************************changed: [node1]RUNNING HANDLER [start nginx] **************************************************ok: [node1]PLAY RECAP *********************************************************************node1 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
运行以下命令,检查ansible剧本是否已正确安装并启动了nginx服务器。
root@geekflare:/home/geekflare# ps waux | grep nginxroot 3021 0.0 0.0 77676 1516 ? Ss 15:27 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
结论
那是关于Ansible剧本的。我希望本文能帮助您学习如何创建和运行Ansible剧本。