如何在Puppet 6中替代mco命令,按需针对多台远程Linux节点执行Puppet?
在Puppet 6中替代MCollective
mco puppet runonce 的方案 MCollective被弃用后,Puppet 6提供了几种官方或灵活的替代方案来实现批量触发节点的Puppet agent按需运行,以下是针对你的Ubuntu 20环境(Puppet 6.19.1/Server 6.14.1)的具体实现方法:
1. 官方推荐:使用Puppet Orchestrator(puppet job命令)
这是MCollective的官方替代工具,依托PuppetDB进行节点筛选,无需额外安装组件(已集成在Puppet Server中):
步骤:
- 确保Puppet Server上的Orchestrator服务运行:
sudo systemctl start puppetserver-orchestrator sudo systemctl enable puppetserver-orchestrator - 直接通过节点查询语句批量触发
puppet agent -t:sudo puppet job run --nodes 'nodes { certname ~ "hostname-pattern-1" or certname ~ "hostname-pattern-2" }' --command 'puppet agent -t'- 若节点的证书名(
certname)与主机名不一致,可改用主机名字段筛选:sudo puppet job run --nodes 'nodes { facts.hostname ~ "hostname-pattern-1" or facts.hostname ~ "hostname-pattern-2" }' --command 'puppet agent -t'
- 若节点的证书名(
- 查看任务执行状态:
sudo puppet job show <job-id>
2. 灵活远程执行:使用Puppet Bolt
Bolt是Puppet推出的轻量远程执行工具,支持多种节点数据源,适合需要更灵活执行逻辑的场景:
步骤:
- 安装Bolt:
sudo apt update && sudo apt install puppet-bolt - 直接基于PuppetDB查询执行命令:
bolt command run 'sudo puppet agent -t' \ --query 'nodes { certname ~ "hostname-pattern-1" or certname ~ "hostname-pattern-2" }' \ --transport ssh \ --user root \ --private-key /root/.ssh/id_rsa- 若需要重复使用节点分组,可编写
inventory.yaml配置文件,将节点查询逻辑固化:
然后通过分组执行:groups: - name: target_nodes query: "nodes { certname ~ 'hostname-pattern-1' or certname ~ 'hostname-pattern-2' }" config: transport: ssh ssh: user: root private-key: /root/.ssh/id_rsabolt command run 'sudo puppet agent -t' --inventoryfile inventory.yaml --group target_nodes
- 若需要重复使用节点分组,可编写
3. 轻量脚本方案:PuppetDB查询 + SSH批量执行
如果不想依赖官方工具,可结合PuppetDB查询与批量SSH工具实现:
步骤:
- 安装
pssh(批量SSH工具):sudo apt install pssh - 筛选目标节点并执行命令:
# 导出符合条件的节点列表 sudo puppet query 'nodes { certname ~ "hostname-pattern-1" or certname ~ "hostname-pattern-2" }' --format=json | jq -r '.[].certname' > target_nodes.txt # 批量执行puppet agent -t pssh -i -h target_nodes.txt 'sudo puppet agent -t'- 若无
pssh,也可使用xargs配合SSH:sudo puppet query 'nodes { certname ~ "hostname-pattern-1" or certname ~ "hostname-pattern-2" }' --format=json | jq -r '.[].certname' | xargs -I {} ssh {} 'sudo puppet agent -t'
- 若无
注意事项
- 所有方案均需确保目标节点的Puppet Agent正常运行,且Puppet Server与节点网络连通(Orchestrator需开放8143端口,SSH需开放22端口)
- 使用Orchestrator时,需确保节点已注册到Orchestrator,且执行用户拥有足够的RBAC权限
- 节点筛选条件可根据实际需求调整,比如按环境、角色等字段查询
内容的提问来源于stack exchange,提问作者stockunderflow
相关产品推荐
相关产品推荐

