如何让Puppet与Terraform协同完成Azure虚拟机配置管理
Terraform创建Azure VM后触发Puppet配置落地方案
关于按资源名称识别目标节点的说明
完全可以实现。Puppet默认通过节点上报的certname(证书名)做节点匹配,你只需要把Terraform中定义的VM资源名称,作为Puppet Agent注册时的certname,Puppet侧直接写对应名称的节点定义,就能精准匹配到目标节点,不需要额外的资源映射逻辑。
具体实现方式
生产环境最常用的是Agent预装自注册模式,不需要额外写通知逻辑,VM启动后自动对接Puppet拉取配置,稳定性最高:
- 在Terraform定义VM资源时,通过
custom_data传入云初始化脚本,在VM首次启动时自动安装Puppet Agent,指定certname为当前VM的Terraform资源名,同时配置Puppet Server地址,启动Agent服务。 - 对应Terraform配置示例(Linux VM场景):
# 提前把Puppet Server地址、访问相关参数定义在变量里即可 resource "azurerm_linux_virtual_machine" "app_vm" { name = "vm-app-prod-03" # 这个值就是后续Puppet识别的节点名 resource_group_name = azurerm_resource_group.base.name location = azurerm_resource_group.base.location size = "Standard_B2s" admin_username = "opsadmin" # 系统盘、网络接口等基础配置省略 # 云初始化脚本,VM首次启动自动执行 custom_data = base64encode(<<-BOOTSTRAP #!/bin/bash # 安装Puppet Agent,指定服务端地址和当前节点certname curl -k https://${var.puppet_server_private_ip}:8140/packages/current/install.bash | \ bash -s main:server=${var.puppet_server_fqdn} main:certname=${self.name} # 设置Puppet Agent开机自启并立即启动,首次启动会自动向服务端拉取对应配置 /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true BOOTSTRAP ) }
- Puppet侧节点配置直接和VM资源名对齐即可:
# 节点名和Terraform里定义的VM name完全一致 node 'vm-app-prod-03' { # 这里放你预先写好的所有基础配置逻辑 include base_hardening include docker_runtime include app_deploy }
如果你用的是Puppet Bolt远程执行模式、或者需要Terraform在VM就绪后主动触发配置任务,可以在VM资源上添加local-exec provisioner,等VM网络连通后直接调用Puppet指令触发对应节点的配置运行:
resource "azurerm_linux_virtual_machine" "app_vm" { # 上述VM基础配置保持不变 # 等待VM SSH端口就绪后触发Puppet任务 provisioner "local-exec" { command = "puppet job run --nodes ${self.name} --environment prod" # 注意:执行Terraform的本地环境需要提前安装Puppet CLI,且完成和Puppet Server的认证 } }
注意事项
- Azure侧NSG需要放通VM到Puppet Server 8140端口的出站规则,否则Agent无法和服务端通信
- 如果使用自定义镜像,且镜像内已经预装了Puppet Agent,不需要重复执行安装步骤,只需要在初始化脚本里修改
/etc/puppetlabs/puppet/puppet.conf中的certname配置为VM资源名,重启Agent服务即可 - Puppet节点匹配支持通配符规则,如果是同角色批量创建的VM,可以在Terraform里按统一命名规则设置VM名称,Puppet侧用
node 'vm-app-prod-*'这类通配符规则匹配整组节点,不需要逐个编写节点定义
内容的提问来源于stack exchange,提问作者stackunderflow123
相关产品推荐
相关产品推荐

