web-dev-qa-db-ja.com

Puppet-マニフェストからカスタム関数(case / whenを含む)を呼び出す

私は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.htmlhttps://stackoverflow.com/questions/948135/how- to-write-a-switch-statement-in-Ruby この点に到達します。

現在の環境:Ruby 1.8.7およびpuppet2.7.19

1
Mike Purcell

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}")
2
Shane Madden