个性化阅读
专注于IT技术分析

了解有关Ansible Playbook自动化任务的信息

点击下载

本文概述

了解有关Ansible Playbook自动化任务的信息。

之前, 我们讨论了Ansible简介, 安装指南, 接下来讨论了Playbook及其构建基块。

什么是Ansible Playbook?

该Playbook是Ansible自动化语言。这是带有一组说明的简单文件。在Playbook中, 我们定义了我们希望Ansible做的事情。Playbook包含运行任务的Playbook, 而这些任务运行模块。他们的任务按顺序执行。

例如, 它可以很简单, 只需在不同的服务器上依次运行一系列命令, 然后按顺序重新启动这些服务器。或者它可能像在公共云和私有云中部署和配置数百个VM一样复杂, 包括其负载平衡, 监视, 网络设置。

Playbook语言

Playbook是用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

Ansible Playbook基础

本文的这一部分介绍了基本的Ansible概念, 以进一步了解Ansible Playbook。

主机和用户

Ansible的需求是必须从Ansible Playbook中部署游戏的基础架构中的目标计算机。主机通过其IP地址添加到Ansible清单。主机是由冒号分隔的一个或多个组或主机模式的列表。 remote_user包含用户帐户的名称。

---
- hosts: ProdServers
  remote_user: geekflare

变量

变量使你能够更改Playbook的运行方式。它们几乎可以在Playbook中的任何地方使用, 并且可以从在Playbook开始运行时发现的清单中继承, 清单是在运行时明确设置的。你可以使用字母, 数字和下划线定义变量名, 但是它只能以字母开头。

例如, port_01是有效变量, 而01_post是无效变量。这是Ansible Playbook中变量的示例:

vars:
    http_port: 80
    max_clients: 200

存货

要运行Playbook, 你需要一个要实现自动化的目标列表。这就是清单的作用。清单列表可以通过几种不同的方式构建和存储, 包括静态文件, 即Ansible Hosts。也可以通过清单脚本动态生成该脚本, 该脚本将提取外部源的主机列表。

你还可以将变量指定为库存清单的一部分。清单最终是你要自动化的事物的列表。

[webservers]
192.168.20.1
192.168.20.2
192.168.20.4
[dbservers]
172.17.1.56
172.17.1.57

任务

播放Ansible Playbook运行任务。该任务负责运行ansible模块。一次只能运行一个任务, 并且任务将按顺序执行。他们的任务是用YAML编写的, YAML非常类似于英语。

例如:install package_name, Update software_name等。下​​面是Ansible Playbook中安装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

创建并运行你的第一个Ansible Playbook

让我告诉你如何写Playbook。每个Playbook的开头都是三个破折号(-)。

你在Ansible Playbook中提到的第一件事是要在其上运行Playbook的主机。

然后, 你可以通过收集事实来提及变量。然后你可以提及你要执行的不同任务。现在, 请记住任务是按照与编写任务相同的顺序执行的。例如, 你要先安装软件A, 然后再安装软件B, 请确保在Playbook中编写的第一个任务是安装软件A, 而下一个任务可以安装软件B。

然后, 你将在底部找到处理程序。处理程序也是任务, 但是区别在于要执行处理程序, 你需要任务列表中的某种触发器来运行处理程序。

让我向你展示如何创建Ansible Playbook, 以在主机上安装并启动nginx并启动它。

创建一个.yml文件, 你将在其中放置用于创建Ansible Playbook的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文件以主机开头, 我想在客户端计算机(客户端)上运行此Playbook。客户端IP地址已经保存在/ etc / ansible / hosts文件中。

下一行允许使用sudo特权运行任务。

然后, 在此Playbook中将server_port定义为变量。

接下来是我在这本有趣的Playbook中的第一个任务, 即安装Nginx Web服务器。此任务还具有notify参数, 这意味着在此任务之后运行的处理程序。

最后, 我编写了一个处理程序以在客户端计算机上启动nginx。

既然你已经清楚了Ansible Playbook中的YAML代码, 那么我们就可以运行该Playbook。以下是运行Ansible Playbook的语法:

ansible-playbook file_name.yml

现在, 我将运行Ansible Playbook, 该Playbook是我创建用来安装和启动nginx的。

[email protected]:/home/geekflare# ansible-playbook nginx.yml 

PLAY [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 Playbook是否已正确安装并启动了nginx服务器。

[email protected]:/home/geekflare# ps waux | grep nginx
root      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 Playbook的。我希望本文能帮助你学习如何创建和运行Ansible Playbook。如果你想学习Ansible中的高级主题, 请查看此课程, 包括角色, Jinja2, 查找, 过滤器, 自定义模块。

赞(0)
未经允许不得转载:srcmini » 了解有关Ansible Playbook自动化任务的信息

评论 抢沙发

评论前必须登录!