我如何限制 Puppet 代理命令?我只需要允许 Puppet 代理在生产分支上无操作地运行。
- 堵塞
puppet agent --test --environment devbranch
- 允许
puppet agent --test --environment devbranch --noop
- 允许
puppet agent --test --environment production
我认为 auth.conf 中的某种魔法应该能够解决这个问题,但我对此不够熟悉。
答案1
感谢@Zoredache,我已经设法按照我需要的方式获得此构建。
我使用 [main] 部分动态创建和管理分支,并使用 [production] 覆盖 noop 设置。我确信也可以在 [agent] 中完成,但我已经在这里开始了。
[main]
logdir = /var/log/puppet
rundir = /var/run/puppet
confdir = /puppet/$environment
vardir = /puppet/.$environment-var
ssldir=/etc/puppet/ssl
environment = production
server = puppet.domain.org
pluginsync = true
noop = true
# Disable running all branches by default
[production]
noop = false
编辑:看来我说得太早了。noop 已经渗透进来了。虽然上面的语法是正确的,但我看过的一个警告不允许它工作。https://puppet.com/docs/puppet/latest/env_environments.html
.. 环境有一些限制,其中大多数是已知的错误或实施的变化,而不是设计选择。
Puppet 将仅从环境配置块中读取 modulepath、manifest、manifestdir 和 templatedir 设置;这些块中的其他设置将被忽略,而采用 [master] 或 [main] 块中的设置。(问题 7497)
答案2
你不能那样做,有权限访问命令行的人可以强制执行几乎任何选项。
如果你想控制谁可以部署什么环境我建议使用集体用于运行 puppet。您可以在那里创建非常详细的 ACL,它可以协调多个节点上的 puppet 并执行诸如“在 2 台机器上部署,如果没有失败,则在下 10 台机器上部署,如果没有失败,则在其余机器上部署”之类的操作。