私はhttpdとnginxの仮想ホストのconfをパペット化する作業をしています。現在、5つのサーバーがあり、それぞれに独自のポートがあり、server1で実行されていますが、nginxはserver2で実行されています。明らかに、httpdとnginxへのマニフェスト呼び出しは異なるサーバーで実行できるため、別々に保つ必要があります。
私がやろうとしているのは、両方のマニフェスト間でポートを共有することです。そのため、必要なvhostの名前をhttpdとnginxのいずれかに渡すだけで、中央の場所でポートが検索されます。カスタム関数を実装しようとしていますが、現在、次のように設定しています。
# /path/to/puppet/modules/global/lib/puppet/parser/functions/app_to_port.rb
module Puppet::Parser::Functions
newfunction(:app_to_port, :type => :rvalue) do |args|
case args[0]
when app_1
return 27960
when app_2
return 27961
end
end
end
# /path/to/puppet/modules/httpd/manifests/vhost/conf.pp
...
$vhost_port = app_to_port($name)
...
$ nameでundefined local variable or method 'app_1'
エラーが発生し続け、intを渡した場合、$vhost_port
変数が値を取得しないというさまざまな問題が発生し続けます。私はRubyとpuppetを初めて使用するため、言語やアプリの構成が不足していると思います。Ruby -rpuppet /path/to/app_to_port.rb
を実行しても応答がなく、コードは構文的に正しいです。
記録のために、私は http://docs.puppetlabs.com/guides/custom_functions.html と https://stackoverflow.com/questions/948135/how- to-write-a-switch-statement-in-Ruby この点に到達します。
現在の環境:Ruby 1.8.7およびpuppet2.7.19
HieraはPuppet3.0に含まれています-2.7では、マスターに個別にインストールする必要があります。
マッピングをグローバルにしたいように思われるので、すべてのシステムに適用されるHieraファイルにマッピングする必要があります。だからあなたのhiera.yaml
、あなたは次のようなものが欲しいでしょう。
:backends:
- yaml
:hierarchy:
- common
:yaml:
:datadir: /etc/puppet/hieradata
次に/etc/puppet/hieradata/common.yaml
、ポートマッピングを設定します。
port_app_1: "27960"
port_app_2: "27961"
これが適切な場所にあると、vhost構成で検索できます。
$vhost_port = hiera("port_${name}")