Vagrant 中的 Chef Solo:如何创建 RabbitMQ 虚拟主机并将其绑定到给定的用户名

Chef Solo in Vagrant: How to create RabbitMQ virtual host nad bind it to given username

我在 Vagrant 中创建了一个虚拟机(一个简单的 hashicorp/precise64)。我需要用 RabbitMq 来配置它,我会:

这是我的尝试:

Vagrant.configure(2) do |config|
    config.vm.box = "hashicorp/precise64"

    config.vm.provision "chef_solo" do |chef|
        chef.add_recipe "rabbitmq"

        chef.json = {
            'rabbitmq' => {
                'default_user' => 'testUsr',
                'default_pass' => 'testPass',
                'virtualhosts' => ['testVirtualHost'],
                'enabled_users' => [
                    { 
                        'name' => 'testUsr', 
                        'password' => 'testPass', 
                        'rights' => [{ 'vhost' => 'testVirtualHost', 'conf' => '.*', 'write' => '.*', 'read' => '.*' }]
                    }
                ]
            }
        }

    end
    config.vm.network "forwarded_port", guest: 15672, host: 15672, id: "rabbitmq"
end

用户和密码已创建,但虚拟主机尚未创建。哪里错了?

这是根据您的要求修改后的 Vagrantfile:

  Vagrant.configure(2) do |config|
      config.vm.box = "hashicorp/precise64"
      config.vm.provision "chef_solo" do |chef|
        chef.add_recipe "rabbitmq::user_management"
        chef.add_recipe "rabbitmq::mgmt_console"
        chef.json = {
          'rabbitmq' => {
            'default_user' => 'testUsr',
            'default_pass' => 'testPass',
            'virtualhosts' => ['testVirtualHost'],
            'enabled_users' => [
              {
                'name' => 'testUsr',
                'password' => 'testPass',
                'rights' => [{ 'vhost' => 'testVirtualHost', 'conf' => '.*', 'write' => '.*', 'read' => '.*' }],
                'tag' => 'administrator'
              }
            ]
          }
        }
      end
      config.vm.network "forwarded_port", guest: 15672, host: 15672, id: "rabbitmq"
    end

以下是我所做的修改和补充:

  • 创建用户名 testUsr 并将 testPass 作为具有管理角色的密码

要使 testUsr 成为管理员,此用户需要标记为 'administrator' permissions:

        'enabled_users' => [
          {
            'name' => 'testUsr',
            'password' => 'testPass',
            'rights' => [{ 'vhost' => 'testVirtualHost', 'conf' => '.*', 'write' => '.*', 'read' => '.*' }],
            'tag' => 'administrator'
          }
  • 创建虚拟主机testVirtualHost

这里的变化不是调用 rabbitmq 配方,而是调用 rabbitmq::user_management 配方:

chef.add_recipe "rabbitmq::user_management"

这个配方调用rabbitmq配方。 user_management 部分代码将创建 testVirtualHost。

  • 将 testVirtualHost 绑定到 testUsr

您已经为此准备好了代码。更改如上(调用 rabbitmq::user_management 配方)

我还注意到您正在将端口转发到 rabbitmq 管理控制台。要使控制台正常工作,您需要根据 management.

启用 rabbitmq_management 插件

我补充了:

chef.add_recipe "rabbitmq::mgmt_console"

因为 mgmt_console 配方管理该插件。

您现在可以通过 http://localhost:15672

访问管理控制台