Ansible 剧本简介

Ansible 是一个开源工具,它使用 playbook 来启用配置管理、软件供应和应用程序部署。 它主要是用 Python 编写的,于 2012 年发布。从那时起,它已经节省了无数小时的部署和维护 IT 基础设施的琐碎工作。 总体而言,Ansible 非常一致、安全、可靠,并且需要极短的学习曲线。 简而言之,Ansible 是一个用于自动化应用程序和基础架构的强大工具。 您可以在我们最近发表的文章中阅读更多关于 Ansible 的一般信息。

什么是 Ansible 剧本?

Ansible Playbook 是用户可以发送到单个目标服务器或多个服务器的“指令”(或播放)集。 它们是 Ansible 本身的核心,可以实现基础设施管理的自动化。 Ansible Playbook 在管理和部署简单或复杂的应用程序(通常在大量机器上)方面提供了出色的可重复性和可重用性。 作为一个类比,想象一支 NBA 球队在比赛日使用他们为特定情况创建的各种剧本。 事情类似于公司内部的 IT 部门。 Ansible Playbooks 使他们能够为特定目的部署多个“剧本”。

基本的 Ansible 语法

Ansible Playbook 用 YAML(另一种标记语言)表达(编写)。 Ansible 创建者选择了 YAML,因为它对人类来说相对容易编写、阅读和理解它(与 XML 或 JSON 相比,对于 example)。 需要注意的是,YAML 是一种用于表示数据的空格缩进格式。 YAML 是一种严格的语言,文件以 —(3 个连字符)开头。

总的来说,Ansible playbook 是一个 YAML 文件。 在剧本中,我们有单独的剧本(我们可以在一个剧本文件中包含一个或多个剧本),它们定义了一组将在服务器上运行的任务。 总之,任务是将在目标主机名上执行的操作(执行命令、安装包等)

基本 YAML 标签

  • 姓名: 名称标签定义了特定 Ansible Playbook 的名称。 用简单的英语,它解释了该剧将要做什么。
  • 主持人: hosts 标签使我们能够指定要在 playbook 中使用的特定主机名或组(在清单文件中定义)。 剧本中需要此标签。
  • 任务: 任务是将要执行的特定操作。 它通常有一个描述任务的名称字段。
  • 变量: 这个标签使我们能够定义我们将在我们的剧本中使用的变量。 Ansible 中的变量帮助我们弥合不同系统之间的差异。 用法类似于编程语言。

调整库存文件

在本文中,我们不会介绍如何安装 Ansible,正如我们在此处所写的那样。 但是,在创建和执行 Playbook 之前,我们需要编辑 Ansible 目录中的清单文件。 默认清单位置是 /etc/ansible/hosts。 但是,我们可以使用以下命令创建自定义清单。

touch inventory 

此外,请注意,我们可以指定我们想与 -i <路径> 运行剧本时的选项。

在清单文件中(无论我们决定使用哪个),我们都可以添加我们的主机名,以便 Ansible 了解执行 playbook 的主机。 Ansible 通过在清单中定义主机名提供了极大的额外灵活性。 我们可以一个一个地添加它们,但我们也可以创建一个组以便更容易地在 playbook 中定位。 让我们看一个 example 库存文件。

mainserver.test.com

[webservers]
web01.test.com
web02.test.com

[dbservers]
db01.test.com
db02.test.com

[apps]
app01.test.com
app02.test.com

剧本示例

让我们看看下面这个简单的 Ansible playbook example:

---
    name: install and start HTTPD
    hosts: mainserver.test.com
    remote_user: root
    tasks:
    - name: Install HTTPD
         yum:
                name: httpd
                state: present
         
    - name: Start HTTPD
         service:
                 name: httpd
                 state: started

正如在 example 上面,我们将只在一个主机名上运行这个剧本 – mainserver.test.com。 同样重要的是要注意,我们的目标主机是在 playbook 内的播放级别定义的。 如果我们想在我们的网络服务器上运行这个剧本,我们可以用一组网络服务器替换 mainserver.test.com 条目。 这样,将选择清单文件中记录的该组中的所有 Web 服务器。

在这个简单的 example, 这个 playbook 将安装并启动 httpd。 尽管这很明显且合乎逻辑,但我们的第一个任务是安装 httpd,而不是启动它。 YAML 语法受到严格监管,准确性至关重要,尤其是在执行任务时。 重要的是要注意我们在剧本中创建的任务的缩进和顺序,因为它们是一个接一个地执行的。

剧本到剧本

扩展我们之前的 example 安装的 Apache,想象一下安装 Apache 没有 Ansible 提供的自动化的 100 台不同服务器上的 Web 服务器。 这项任务必须手动完成,既不高效,也不高效。 如果系统管理员必须手动执行此操作,他们可能会使用这样的脚本。

#!/bin/bash
# Install Apache.
yum install --quiet -y httpd
# Copy configuration files.
cp httpd.conf /etc/httpd/conf/httpd.conf
cp httpd-vhosts.conf /etc/httpd/conf/httpd-vhosts.conf
# Start Apache and configure it to run at system boot.
service httpd start
chkconfig httpd on

Ansible Playbooks 的最佳属性之一是将 shell 脚本转换为用 YAML 编写的 Playbooks 相对容易。 为了避免一次在一台服务器上运行此脚本的繁重劳动,我们可以创建以下 Ansible Playbook 并使用以下命令从 playbook 所在的同一目录运行它。

root@host:~# ansible-playbook playbook.yaml
 ---
     name: Install and configure Apache
     remote_user: root
     hosts: webservers     

     tasks:
       - name: Install Apache.
         command: yum install --quiet -y httpd httpd-devel
       - name: Copy configuration files.
         command: cp httpd.conf /etc/httpd/conf/httpd.conf
         command: cp httpd-vhosts.conf /etc/httpd/conf/httpd-vhosts.conf
       - name: Start Apache and configure it to run at boot.
         command: service httpd start
         command: chkconfig httpd on

此任务将安装和配置 Apache 在我们所有的服务器上 [webservers] 清单文件中注明的组。

结论

在本文中,我们从基础层面概述了 Ansible Playbook。 Playbooks 更高级的功能可用于部署多层应用程序,在服务器集群和负载平衡器上运行更新,以及其他特定的监控服务器,例如 Prometheus 或 Nagios。 Ansible 自发布以来的八年里已经改变了整个行业。 它是现代技术公司的关键组成部分之一,这些公司依赖于他们在日常业务中需要维护的大量机器或服务器。

今天就开始吧!

立即致电 1.800.580.4985 联系我们,与知识渊博的解决方案提供商交谈,他们可以为您提供所需的信息,以便立即做出明智的决定。

太忙没时间说话? 点击 这里 打开与我们的快速聊天以了解更多信息。

想通过电子邮件查看更多信息,您可以在闲暇时查看? 立即给我们发送电子邮件,以获得最适合您需求的产品的实用建议。

我们期待您的回音!