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