Назад | Перейти на главную страницу

Шеф: как я могу запретить рецепту user_management в книге рецептов rabbitmq добавить гостевую учетную запись?

Я новичок в шеф-поваре и хочу использовать рецепт 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 ниже). Что я делаю не так?

/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:

 {
   "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"]

чтобы убедиться, что он не существует из более ранних прогонов (я использую его Вот).