【发布时间】:2016-07-27 10:33:53
【问题描述】:
乐于助人的朋友们,
我们在这里设置了 100 多台由 Salt 状态管理的服务器。由于组织中的不同角色由不同的人执行,我真的很想有可能“聚合”一些状态。在这种情况下:更新(yum)包。
我真的希望我们的系统管理员能够安全地在主服务器上执行这样的命令:
salt '*' state.apply update.packages
也许我们的开发人员能够执行:
salt 'dev-*' state.apply update.application
当然,我们有大量的 sls 文件,而这个问题的关键是我不希望执行所有这些状态,而只想执行其中的一部分。
为此,我尝试创建一个update/packages.sls 状态,其中包含:
update-packages:
test.nop
然后添加到,例如以下现有状态:
nagios-plugins-all:
pkg.latest:
- require:
- pkg: corepackages
watch_in 如下:
nagios-plugins-all:
pkg.latest:
- require:
- pkg: corepackages
- watch_in:
- test: update-packages
不幸的是,这显然不是要走的路,因为现在执行salt 'testserver001' state.apply update.packages 只会返回:
testserver001:
----------
test_|-update-packages_|-update-packages_|-nop:
----------
__id__:
update-packages
__run_num__:
0
changes:
----------
comment:
Success!
duration:
0.946
name:
update-packages
result:
True
start_time:
12:10:46.035686
虽然我确信有可用的更新包。我不能将所有现有状态文件include 放入update/packages.sls 文件中,因为这会导致在这些文件中执行 所有 状态,这也不是我想要的。它也会变成一个非常混乱的文件。
我也不想只执行salt '*' pkg.upgrade,因为我的状态取决于更新;即如果更新了包nagios,则应运行有关最新配置文件的状态,因此应重新启动nagios 服务。所有这些都是使用 watch 和 require 参数在 salt 中配置的,所以我想在更新我的包时也使用它。另外,我想控制可以更新哪些包。
我不知道我是否走在正确的道路上,或者这是否可以通过 Salt 实现,但也许这里有人对如何实现这种行为有一个绝妙的想法。非常感谢!
【问题讨论】:
标签: salt-stack