Я новичок в шеф-поваре и хочу использовать рецепт rabbitmq user_management без добавления гостевой учетной записи rabbitmq по умолчанию.
Я использую chef-server 11.1.3 и поваренную книгу rabbitmq версии 3.3.0 (https://supermarket.getchef.com/cookbooks/rabbitmq) для установки и настройки rabbitmq 3.3.5 на ubuntu 14.04.
Я определил роль повара, в которой я использую рецепт user_management и disabled_users для удаления гостевой учетной записи, но при каждом запуске chef-client гостевая учетная запись сначала добавляется в rabbitmq, а затем снова удаляется (как вы можете видеть из строк «- выполнить» в выводе 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 / 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:
{
"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": {
"rabbitmq": {
"enabled_users": []
}
},
"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": {
}
}
Да почти. Вы также можете явно отключить пользователей, используя
node[:rabbitmq][:disabled_users] = ["guest"]
чтобы убедиться, что он не существует из более ранних прогонов (я использую его Вот).