如何使用Ansible Playbooks来自动化多个远程服务器上的复杂任务 - 第2部分

在本文中,我们将介绍如何使用Ansible playbooks在多个远程Linux主机上同时运行命令和执行复杂任务。

此Ansible系列以前的文章中 ,我们解释说,Ansible是一种无代理的工具,让您能够快速,高效地管理多台计算机(也称为节点-并进行部署,他们也一样)从一个单一的系统。

使用Ansible Playbooks在Linux上自动执行复杂任务

使用Ansible Playbooks在Linux上自动完成复杂的任务 - 第2部分

在控制器机器上安装软件,创建后的密码登录密钥并将其复制到节点,它的时间来学习如何优化使用管理等Ansible远程系统的过程。

Ansible测试环境

在本文以及下一篇文章中,我们将使用以下测试环境。 所有主机都CentOS 7盒:

Controller machine (where Ansible is installed): 192.168.0.19
Node1: 192.168.0.29
Node2: 192.168.0.30

此外,请注意,两个节点的本地/ etc / ansible / hosts文件的Web服务器部分增加了:

Ansible主机文件

Ansible主机文件

也就是说,让我们开始了手头的主题。

介绍Ansible Playbooks

正如前面指南中所述,您可以使用ansible实用程序来运行如下的远程节点的命令:

# ansible -a "/bin/hostnamectl --static" webservers
Ansible:在远程Linux上运行命令

Ansible:在远程Linux上运行命令

在上面的例子中,我们跑了hostnamectl --staticnode1node2。 人们意识到这种在远程计算机上运行任务的方法对于短命令运行良好,但对于需要进一步结构化的配置参数或与其他服务交互的更复杂任务,可能很快变得繁重或麻烦

例如,建立和多个主机上配置WordPress的 -我们将在本系列的下一篇文章)的介绍。 这是剧本进入现场。

简单地说, 剧本是写在YAML格式纯文本文件,并且包含与一个或多个键/值对的项目(也称为“ 散列 ”或“ 词典 ”)的列表。

每个剧本内你会发现主机的一个或多个基团(这些基团中的每一个也被称为播放 ),其中所希望的任务是执行。

官方文档的一个例子将帮助我们说明:

1. 主机 :这是机器的列表(按照在/ etc / ansible /主机 ),其中以下任务将被执行。

2. REMOTE_USER:将用于执行的任务远程帐户。

3. 瓦尔 :用于修改在远程系统(多个)行为的变量。

4.任务在顺序执行,一次一个,针对匹配的主机的所有机器。 在一个戏剧中,所有主机都将获得相同的任务指令。

如果需要执行一组不同的相关联的任务的特定主机时,创建在当前剧本另一个播放(换言之,一个播放的目的是要映射的主机到明确定义的任务的特定选择)。

在这种情况下,通过在底部添加hosts指令并重新开始来开始新的播放:

---
- hosts: webservers
remote_user: root
vars:
variable1: value1
variable2: value2
remote_user: root
tasks:
- name: description for task1
task1: parameter1=value_for_parameter1 parameter2=value_for_parameter2
- name: description for task1
task2: parameter1=value_for_parameter1 parameter2=value_for_parameter2
handlers:
- name: description for handler 1
service: name=name_of_service state=service_status
- hosts: dbservers
remote_user: root
vars:
variable1: value1
variable2: value2
…

5.处理程序是在每个播放的任务段的结束触发,大多用于重新启动服务或触发重新引导在远程系统的操作。

# mkdir /etc/ansible/playbooks

和文件apache.yml的里面有一个名为包含以下内容:

---
- hosts: webservers
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: replace default index.html file
copy: src=/static_files/index.html dest=/var/www/html/ mode=0644
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

二,创建目录/ static_files:

# mkdir /static_files

在这里您将存储自定义index.html文件:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
</script>
</head>
<body>
<h1>Apache was started in this host via Ansible</h1><br>
<h2>Brought to you by Howtoing.com</h2>
</body>
</html>

也就是说,现在是时候使用这本手册来执行前面提到的任务。 你会注意到,Ansible将通过主机每次一个地处理每个任务,并且将报告这些任务的状态:

# ansible-playbook /etc/ansible/playbooks/apache.yml
Ansible:在Linux中自动执行任务

Ansible:在Linux中自动执行任务

现在,让我们看到,当我们打开一个浏览器,并指向192.168.0.29192.168.0.30会发生什么:

Ansible:确认自动任务

Ansible:确认自动任务

让我们走一步,手动停止和Node1Node2禁用Apache:

# systemctl stop httpd
# systemctl disable httpd
# systemctl is-active httpd
# systemctl is-enabled httpd
停止和禁用Apache服务

停止和禁用Apache服务

然后再次运行,

# ansible-playbook /etc/ansible/playbooks/apache.yml

这一次,任务报告Apache Web服务器在每台主机上启动和启用:

Ansible:启动Web服务器

Ansible:启动Web服务器

请考虑上面的例子,看看Ansible的力量。 虽然当在少量服务器上执行这些任务时,这些任务是相对容易的,但如果您需要在几台(也许是数百台)计算机上执行同样的操作,那么它可能变得非常乏味和耗时。

概要

在本文中,我们描述了如何使用Ansible运行命令并在多个远程主机上同时执行复杂任务。 官方文档GitHub的库提供有关如何使用Ansible实现几乎任何可以想象任务大量的实例和指南。

当你开始学习如何在远程Linux主机的任务自动化使用Ansible,我们想听听你的看法。 问题,意见和建议也总是欢迎,所以随时联系我们使用下面的形式任何时间。