FOSS 项目聚焦:使用 Puppet Bolt 在 Linux 和 Windows 上运行远程任务
Puppet,这家为管理系统和交付软件制作自动化软件的公司,推出了 Puppet Bolt,这是一款开源、无代理的多平台工具,用于在远程 Linux 和 Windows 系统上运行命令、脚本、任务和编排的工作流程。
该工具免费提供 Linux 软件包、Ruby gem 以及 macOS 或 Windows 安装程序,非常适合希望在远程裸机服务器、虚拟机或云实例上执行各种自动化任务的系统管理员和其他人员,而无需任何先决条件。Puppet Bolt 不需要任何先前的 Puppet 知识。它也不需要 Puppet agent 或 Puppet master。它仅使用 SSH 和 WinRM(或可以搭载 Puppet 传输)来通信和执行远程节点上的任务。
尽管 Puppet Bolt 很简单,但它可以执行您所有现有的 Bash、PowerShell、Python 或任何其他语言编写的脚本,停止和启动 Linux 或 Windows 服务,收集有关软件包和系统信息,或部署过程编排的工作流程,也称为计划。您可以在工作站或笔记本电脑上完成所有这些操作。
对于那些已经使用开源 Puppet 或 Puppet Enterprise 的用户,Puppet Bolt 使您能够利用 Puppet Forge 中提供的 5,700 多个模块,用于从部署数据库服务器到设置 Docker 或 Kubernetes 的所有操作。您还可以使用 Puppet Bolt 直接查询 PuppetDB。
安装 Puppet Bolt 并运行一些任务一旦您添加了 Puppet 仓库,您也可以使用 apt
或 yum
安装 Puppet Bolt
$ sudo apt install puppet-bolt
您可以使用可用的 .msi 在 Windows 上安装 Puppet Bolt,或者如果您在 Windows 10 上运行 Bash,则可以使用您安装的版本的 Linux 说明。请点击“资源”部分中的链接,查看您喜欢的平台的详细安装说明。
如果您正在运行 Ruby(并且工作站上安装了 gcc
和 make
),您可以使用简单的命令在几分钟内启动并运行 Puppet Bolt
$ gem install bolt
只需几分钟,您现在就可以开始运行一次性命令、任务、脚本或计划。Puppet Bolt 非常适合故障排除或部署快速更改、分发脚本以在您的基础设施上运行,或自动化需要在特定顺序中发生以作为应用程序部署一部分的更改。通过运行以下命令查看内置的 Puppet Bolt 命令
$ bolt help

图 1. 内置的 Puppet Bolt 命令
典型的 Puppet Bolt 命令如下所示
$ bolt <SUBCOMMAND> <ACTION> [options] --nodes <NODE>
其中 <SUBCOMMAND>
可以是命令、文件、脚本、任务或计划。目标节点可以在 --nodes
(或 -n
)标志后列出,也可以在纯文本文件中列出。例如,像这样一次性检查所有节点的正常运行时间
$ bolt command run uptime -n server01,server02,server03...
或
$ bolt command run uptime -n @mynodes.txt
在 WinRM 节点上执行时,在节点字符串中指示 WinRM 协议
$ bolt command run <COMMAND> --nodes winrm://<WINDOWS.NODE>
↪--user <USERNAME> --password <PASSWORD>
在远程节点上运行您现有的经过验证的脚本(以任何语言编写)也同样简单
$ bolt script run mypythonfile.py -n @mynodes.txt
当涉及到依赖于更正式的编排能力的任务和计划时,Puppet Bolt 真正地大放异彩。您可以通过执行 $ bolt task show
查看内置的 Bolt 任务(图 2)。

图 2. 内置的 Bolt 任务
例如,如果您想在 Linux 或 Windows 节点上停止、启动或重启服务,您可以执行以下任务
$ bolt task run service::linux name=cron action=restart -n
↪linuxnode01
或
$ bolt task run service::windows name=Netman action=restart
↪-n @windowsnodes.txt
您还可以使用 task
命令查看特定软件包或应用程序在一个或数千个节点上的状态和版本
$ bolt task run package name=cron action=status -n linuxnode01
Started on linuxnode01...
Finished on linuxnode01:
{
"status": "up to date",
"version": "3.0pl1-128ubuntu2"
}
Successful on 1 node: linuxnode01
Ran on 1 node in 2.10 seconds
同样,您可以使用 $ bolt plan show
语句查看内置的计划(图 3)。

图 3. 内置的 Bolt 计划
您可以在没有任何 Puppet agent(或 master)的情况下运行这些计划,但如果您想利用您编写或从 Forge 下载的 Puppet 模块,例如一个用于设置 nodejs 并将其连接到您的负载均衡器的模块,您可以将 Puppet Bolt 与已安装 Puppet agent 的目标节点结合使用来完成此操作
$ bolt plan run nodejs::myplan load_balancer=lb.myorg.com
并非所有模块都需要 Puppet agent。例如,Puppet Bolt 可以在没有 agent 的情况下运行 puppetlabs/aws
模块。
Puppet Bolt 轻量级且易于学习,Puppet 的开发团队定期添加新功能,使其成为 Ansible、Rundeck、Bladelogic 甚至 Bash 和 PowerShell 脚本的理想替代品。与范围有限的工具不同,Puppet Bolt 将每个目标节点都视为一等公民,让您可以完成从快速修复到完整应用部署的所有操作。
与此同时,使用 Puppet Bolt 是向基于模型的自动化介绍自己的绝佳方式,Puppet 开创了基于模型的自动化,并且它已成为决心收获普及自动化好处的组织的实际标准。您可以在 Puppet 世界的其他地方使用您从 Puppet Bolt 中学到的一切,这意味着您和您的 DevOps 队友最终可以共享一个通用的工具和专业知识——而无需任何先决条件。
资源