当大多数人开始学习 Ansible 时,他们首先从 Ansible Galaxy 下载一个预先构建的 playbook。诚然,这是一个以最小的努力完成复杂任务的绝佳资源。而且,虽然我通常很喜欢通过剖析他人的工作来学习,但在 Ansible 的情况下,从角色和 playbook 入手可能是一个很大的错误。Ansible 的 ad hoc 模式非常强大,它可能是某些人所需要的一切。
例如,假设您需要在实验室的一组 Linux 工作站上安装 Firefox。您可以通过几种方式来完成这项任务。您可以逐个 SSH 到每个工作站并键入
sudo apt-get update
sudo apt-get install firefox (type "y" when asked about dependencies)
exit
您可以通过添加几个分号将其做成一行命令
sudo apt-get update; sudo apt-get -y install firefox; exit
但这仍然需要登录到每台计算机。因此,假设您设置了 SSH 密钥,并且 sudo 不需要密码,您可以编写一个快速 Bash 脚本来在整个实验室中执行此操作。注意:这就是我工作了 20 年的方式。Bash 脚本就像系统管理员世界的瑞士军刀。
#!/bin/bash
for i in {1..50};
do
ssh user@192.168.1.$1 "sudo apt-get update; sudo apt-get -y install firefox"
done
这种方法有很多缺点:没有错误检查。没有成功和失败的日志。只有当计算机具有增量 IP 地址时,此示例才能工作。将这种“黑客”式的解决方案与使用 Ansible 完成相同任务进行比较
ansible cadlab -b -m apt -a "update_cache=yes name=firefox state=latest"
唯一需要做的初步工作是根据主机名或 IP 地址简单地定义“cadlab”组包含哪些内容。而该组定义只是一个包含这些 IP 地址列表的文本文件!
别误会,Ansible playbook 非常强大,它们可以完成令人惊叹的事情。如果您需要创建配置文件、基于条件语句执行命令或构建多步骤安装过程,那么 playbook 是完美的工具。但对于多个服务器上的日常操作,我发现自己经常使用 Ansible。ad hoc 模式通常被 playbook 和角色所掩盖,但它是一个强大的工具,可以在几分钟内完全实现。因此,如果您对 Ansible 感兴趣,请不要跳过它提供的 ad hoc 功能。大多数时候,它们是我使用的全部!
1 条评论