我正在尝试在 Puppet 中创建一个letsencrypt 模块。基本上,我想要实现的目标如下:
- 添加一个新节点并导入我的模块:
class { "letsencrypt": url => "example.com" }
- 如果给定 URL 已经有私钥和 CSR,则 puppet master 将检查他的文件夹,然后:
- 将私钥和 CSR 复制到节点,或
- 运行
openssl openssl genrsa 4096 > example.com.key
(以及letsencrypt帐户和证书签名请求的一个密钥),将其保存到puppet files文件夹并再次运行步骤2。
- 在节点上设置一个 cron 作业,每三个月运行一次acme-tiny 。
- 在节点上运行一次 acme-tiny 并获取第一个证书并重新加载/启动 Web 服务器。
基本上我的问题是如何在 puppet master 上运行命令。我想在 puppet master 上运行密钥生成并在那里拥有私钥,并且只在节点上运行证书请求。
Puppet 甚至可以做到这一点吗?或者我应该完全将完整的过程传递给节点,根本不跟踪 Puppet 中的任何内容(只是设置 cronjob 等)?
谢谢!
Puppet 提供了一个名为 的函数
generate
,它将使用任意本地命令的输出填充本地清单变量。它可用于调用执行密钥生成的自定义本地脚本,在本地安装公钥,并返回私钥内容,然后可以将其作为文件资源安装在 puppet 代理上。例如:file { "/path/to/private/key": ensure => present, content => generate("/path/to/my/custom/script"), ... }