
puppet 代码如下:
# Verification script
file { 'tls_verification_script':
ensure => file,
path => '/opt/puppetlabs/facter/custom/tls_verification.py', # 确保脚本存在于目标系统
owner => 'root',
group => 'root',
content => template('module/tls_verification.erb'), # 使用模板部署脚本
mode => '0755',
}
# Concatenation of certificates
concat { 'tls_cert':
ensure => present,
path => '/etc/ssl/certs/tls_cert.pem',
owner => 'root',
group => 'root',
validate_cmd => '/usr/bin/python3 /opt/puppetlabs/facter/custom/tls_verification.py %',
}
# Fragment for tls_cert_file1
concat::fragment { 'tls_cert_file1':
target => 'tls_cert',
source => 'puppet:///modules/module/tls_cert_file1.pem',
order => '01',
}
# Fragment for tls_cert_file2
concat::fragment { 'tls_cert_file2':
target => 'tls_cert',
source => 'puppet:///modules/module/tls_cert_file2.pem',
order => '02',
}在这个例子中,validate_cmd 被设置为 /usr/bin/python3 /opt/puppetlabs/facter/custom/tls_verification.py %。当 concat 资源需要更新 /etc/ssl/certs/tls_cert.pem 文件时,Puppet 会先执行该命令,并将 /etc/ssl/certs/tls_cert.pem 的路径替换 % 占位符。如果脚本返回 0,则文件更新会继续进行;否则,Puppet 会报错并停止应用 catalog。
注意事项
- 确保校验脚本具有执行权限。
- 校验脚本应该处理各种可能的错误情况,并返回合适的错误代码。
- 仔细测试校验脚本,确保其能够正确地验证拼接后的文件。
- 避免在校验脚本中使用外部依赖,除非这些依赖是目标系统上稳定存在的。
- 校验脚本应该尽可能快速地完成,以避免影响 Puppet 的执行效率。
总结
validate_cmd 是 Puppet concat 模块中一个强大的功能,可以确保拼接后的文件符合预期。通过正确配置 validate_cmd 和编写合适的校验脚本,您可以提高配置的可靠性和安全性,避免因不正确的文件内容而导致的问题。记住,validate_cmd 作用于最终的 File 资源,并且需要在命令中包含文件路径占位符 %。










