我是新来的厨师,想使用 rabbitmq user_management 配方,而不是添加 rabbitmq 来宾帐户的默认行为。
我正在使用 chef-server 11.1.3 和 rabbitmq cookbook 版本 3.3.0 ( https://supermarket.getchef.com/cookbooks/rabbitmq ) 在 ubuntu 14.04 上安装和配置 rabbitmq 3.3.5。
我定义了一个厨师角色,我使用 user_management 配方和 disabled_users 删除来宾帐户,但每次运行厨师客户端时,来宾帐户首先添加到rabbitmq,然后再次删除(从“-执行”行中可以看到下面的 client.log 输出)。我究竟做错了什么?
/var/log/chef/client.log 输出
Recipe: rabbitmq::user_management
* rabbitmq_user[guest] action addRecipe: <Dynamically Defined Resource>
* execute[rabbitmqctl add_user guest] action run
- execute rabbitmqctl add_user guest 'guest'
Recipe: rabbitmq::user_management
* rabbitmq_user[guest] action set_tags (up to date)
* rabbitmq_user[guest] action set_permissionsRecipe: <Dynamically Defined Resource>
* execute[rabbitmqctl set_permissions guest ".*" ".*" ".*"] action run
- execute rabbitmqctl set_permissions guest ".*" ".*" ".*"
Recipe: rabbitmq::user_management
* rabbitmq_user[user1] action add (up to date)
* rabbitmq_user[user1] action set_tags (up to date)
* rabbitmq_user[user1] action set_permissionsRecipe: <Dynamically Defined Resource>
* execute[rabbitmqctl set_permissions -p / user1 ".*" ".*" ".*"] action run
- execute rabbitmqctl set_permissions -p / user1 ".*" ".*" ".*"
Recipe: rabbitmq::user_management
* rabbitmq_user[guest] action deleteRecipe: <Dynamically Defined Resource>
* execute[rabbitmqctl delete_user guest] action run
- execute rabbitmqctl delete_user guest
我的厨师角色
{
"name": "server-rabbitmq-test",
"description": "testing",
"json_class": "Chef::Role",
"default_attributes": {
"rabbitmq": {
"version": "3.3.5",
"use_distro_version": "true",
"port": "5672",
"virtualhosts": [
"/vhost1"
],
"disabled_users": [
"guest"
],
"enabled_users": [
{
"name": "user1",
"password": "user1",
"tag": "user tag",
"rights": [
{
"vhost": "/vhost1",
"conf": ".*",
"write": ".*",
"read": ".*"
}
]
}
]
}
},
"override_attributes": {
},
"chef_type": "role",
"run_list": [
"recipe[rabbitmq]",
"recipe[rabbitmq::mgmt_console]",
"recipe[rabbitmq::policy_management]",
"recipe[rabbitmq::user_management]",
"recipe[rabbitmq::virtualhost_management]",
"recipe[rabbitmq::plugin_management]"
],
"env_run_lists": {
}
}
修改rabbitmq食谱???
我可以通过更改 rabbitmq/attributes/default.rb 文件来停止该行为:
# users
default['rabbitmq']['enabled_users'] =
[{ :name => 'guest', :password => 'guest', :rights =>
[{ :vhost => nil , :conf => '.*', :write => '.*', :read => '.*' }]
}]
对此:
# users
default['rabbitmq']['enabled_users'] = []
但是必须有更好的方法来做到这一点,不是吗?
谢谢!!
您需要在
[:rabbitmq][:enabled_users]
某处覆盖该属性。编辑原始食谱并不是最好的方法,因为有一天食谱会更新,你需要记住再做一次。当您处理
default
在食谱属性文件中设置的属性时,它几乎可以在 Chef 的任何位置被覆盖。包装食谱
可能最便携的方法是创建您自己的特定领域的 RabbitMQ包装食谱,并通过它完成所有定制工作。基本上,它是一个薄垫片,可以将大部分工作直接传递到原始的 RabbitMQ 食谱上,除非你想改变的地方。
在这种情况下,您可以
default[:rabbitmq][:enabled_users] = []
在包装器说明书中进行设置attributes.rb
,因为它首先加载将是默认的default
。角色、环境、节点覆盖
您还可以在节点(单数)、环境(组)或角色(全局)级别为 Chef 服务器上的属性设置覆盖。如果您觉得将在这些分组之一中使用属性覆盖,那么在那里完成可能会更好。
请注意,您会丢失在食谱中执行此类操作时获得的版本控制(并且很可能是更改跟踪)。
是的,差不多。您还可以使用显式禁用用户
确保它在早期运行中不存在(我在这里使用它)。
再次感谢@mtm。对于此处的记录,添加了解决 override_attributes 部分问题的完整角色: