Puppetで構成された実稼働環境があり、開発マシンで同様の環境(Red Hat、Ubuntu、OSXを組み合わせたもの)をセットアップできるようにしたいと考えています。当然のことながら、OSXはここでは奇妙な人間であり、悲しいことに、これを機能させるのに多くの問題があります。
私の最初の試みは、次の宣言を使用してmacports
を使用することでした。
package { 'rabbitmq-server':
ensure => installed,
provider => macports,
}
しかし、悲しいことに、これは次のエラーを生成します。
Error: /Stage[main]/Rabbitmq/Package[rabbitmq-server]: Could not evaluate: Execution of '/opt/local/bin/port -q installed rabbitmq-server' returned 1: usage: cut -b list [-n] [file ...]
cut -c list [file ...]
cut -f list [-s] [-d delim] [file ...]
while executing
"exec dscl -q . -read /Users/$env(Sudo_USER) NFSHomeDirectory | cut -d ' ' -f 2"
(procedure "mportinit" line 95)
invoked from within
"mportinit ui_options global_options global_variations"
次に、homebrew
を試してみようと思いました。デフォルトで利用できるパッケージプロバイダーはありませんが、 puppet-homebrew は有望なようです。ここでは、さらに遠くまで行き、実際にインストールを機能させることができました。
package { 'rabbitmq':
ensure => installed,
provider => brew,
}
file { "plist":
path => "/Library/LaunchDaemons/homebrew.mxcl.rabbitmq.plist",
source => "/usr/local/opt/rabbitmq/homebrew.mxcl.rabbitmq.plist",
ensure => present,
owner => root,
group => wheel,
mode => 0644,
}
service { "homebrew.mxcl.rabbitmq":
enable => true,
ensure => running,
provider => "launchd",
require => [ File["/Library/LaunchDaemons/homebrew.mxcl.rabbitmq.plist"] ],
}
ここでは、エラーは発生しません。しかし、RabbitMQも起動しません(launchctl
を使用して手動でロードした場合と同様)。
[... snip ...]
Debug: Executing '/bin/launchctl list'
Debug: Executing '/usr/bin/plutil -convert xml1 -o /dev/stdout
/Library/LaunchDaemons/homebrew.mxcl.rabbitmq.plist'
Debug: Executing '/usr/bin/plutil -convert xml1 -o /dev/stdout
/var/db/launchd.db/com.Apple.launchd/overrides.plist'
Debug: /Schedule[weekly]: Skipping device resources because running on a Host
Debug: /Schedule[puppet]: Skipping device resources because running on a Host
Debug: Finishing transaction 2248294820
Debug: Storing state
Debug: Stored state in 0.01 seconds
Finished catalog run in 25.90 seconds
私は何が間違っているのですか?
Edit:記録として、OSXマシンではなくVagrant VMを使用してこれを実行していますが、ネイティブソリューションが引き続き推奨されます。
残念ながら、構成管理ツールはデスクトップマシンでは実際にはうまく機能しません。 Vagrant (あなたが持っているように)のようなツールを使用する方がはるかに良いです。
Vagrantは、ハイパーバイザーを介して環境を複製できるオープンソースの仮想化ソフトウェアです。私のMacでは、OracleのVirtualBoxで使用しています(主にChefのテスト用)。 VirtualBoxも無料です。 Vagrantの本来の目的は、開発者が一貫した環境で作業できるようにすることでした(つまり、探していたものではなく、望んでいた方法ではない)。 VagrantはPuppetと組み合わせることができます これらの例 をチェックしてください。
一種のブルートフォースアプローチ:
class rabbitmqosx {
exec { "rabbitmqosx":
command => "/path/to/rabbitmq",
unless => [
"/bin/ps |grep -c rabbitmq"
]
}
node fancymac { include "rabbitmqosx }
これがまだ問題かどうかはわかりませんが、これは3.1.0で修正されたlaunchdプロバイダーのバグのようです。バグ: https://projects.puppetlabs.com/issues/16271