嘗試使用 Puppet 安裝 RabbitMQ

嘗試使用 Puppet 安裝 RabbitMQ

這是我收到的錯誤:

ubuntu@sync1:/etc/puppet$ sudo /usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install rabbitmq-server
Reading package lists...
Building dependency tree...
Reading state information...
rabbitmq-server is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up rabbitmq-server (3.2.2-1) ...
 * Starting message broker rabbitmq-server                                                                        * FAILED - check /var/log/rabbitmq/startup_\{log, _err\}
                                                                                                          [fail]
invoke-rc.d: initscript rabbitmq-server, action "start" failed.
dpkg: error processing rabbitmq-server (--configure):
 subprocess installed post-installation script returned error exit status 1
E: Sub-process /usr/bin/dpkg returned an error code (1)
ubuntu@sync1:/etc/puppet$ 

在我運行 sudo puppet apply manifests/site.pp 後會發生這種情況。

這是我的兔子課程:

# See https://github.com/puppetlabs/puppetlabs-rabbitmq
class my_rabbitmq ($environment, $type, $user, $password) {

#  case $environment {
#    staging: {
#      #@todo
#    }
#    production: {
#      #@todo
#    }
#  }
#
#  case $type {
#    sync: {
#      #@todo
#    }
#    async: {
#      #@todo
#    }
#  }

class { '::rabbitmq':
  delete_guest_user => true,
  version           => '3.2.2',
}->
rabbitmq_user { 'richard':
  admin    => true,
  password => 'richard_password',
  provider => 'rabbitmqctl',
}->
rabbitmq_user_permissions { 'richard@/':
  configure_permission => '.*',
  read_permission      => '.*',
  write_permission     => '.*',
  provider             => 'rabbitmqctl',
}

}

我正在 Ubuntu 12.04 LTS VM 上嘗試此操作。有任何想法嗎?這讓我發瘋,我已經被困了幾個小時試圖弄清楚這一點。

答案1

我也有這個問題。原因是在 Ubuntu 上安裝“rabbitmq-server”軟體包後,一個rabbitmq實例啟動。這是設計使然。可悲的是。

至於解決辦法,我還沒找到。

編輯

我不知道您是否屬於這種情況,但就我而言,我將 puppet 中的節點名稱從“兔子”更改為其他名稱。

簡單的解釋是,正如我所提到的,安裝rabbitmq-server會導致rabbitmq-server服務運作。預設情況下,它使用節點名稱“rabbit”。

就我而言,puppet 出現了,配置了rabbitmq,然後在嘗試啟動服務之前,運行“/etc/init.d/rabbitmq-service status”,以檢查它是否已經在運行。

在理想的情況下,答案是“是”,因為它實際上正在運行,但在這種情況下,“/etc/init.d/rabbitmq-service”腳本使用配置的節點名稱來檢查和查看實例是否正在運行- 當puppet 更改/etc/rabbitmq/rabbitmq-env.conf 中的節點名稱時,這完全破壞了服務腳本確定其是否正在運行的能力,所以當然,腳本返回0,因為它找不到正在運行的實例。

然後,Puppet 嘗試使用新節點名稱啟動新實例,但失敗了,因為一次只有一個服務可以擁有一個端口,而正在運行的實例擁有該端口。

為了解決這個問題,我將 RABBITMQ_NODENAME 設定回“兔子”,一切正常。

我在這裡寫過:

http://www.standalone-sysadmin.com/blog/2014/02/rabbitmq-on-ubuntu-via-puppet/

答案2

http://blog.zugschlus.de/archives/974-Debians-Policy-rc.d-infrastruct-explained.html

Debian 經常因為這種預設設定而受到批評,規範的答案是使用 sysv-rc 提供的策略框架來避免啟動服務。由於這個機制經常被誤解,我寫這篇文章是為了給這個問題帶來更多的困惑。

(部落格文章不是我的)

相關內容