Puppet - Chamar função personalizada (que contém case / when) do manifesto

1

Estou trabalhando para criar fantoches meus httpd e nginx vhost confs. Agora eu tenho 5 servidores, cada um com sua própria porta e são executados no server1, enquanto o nginx está sendo executado no server2. Obviamente, preciso manter as chamadas de manifesto para httpd e nginx separadas, porque elas podem ser executadas em servidores diferentes.

O que eu estou tentando fazer é compartilhar as portas entre os dois manifestos, então tudo que eu preciso fazer é passar o nome do vhost que eu quero, para o httpd e o nginx e ele irá procurar a porta em um local central . Estou tentando implementar uma função personalizada e atualmente configurá-la assim:

# /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)

...

Eu continuo correndo em vários problemas, com $ name eu continuo recebendo undefined local variable or method 'app_1' erros, e se eu passar em um int, a variável $vhost_port nunca recebe um valor. Sou novo em Ruby e Puppet, o que me leva a acreditar que estou perdendo alguma linguagem ou construção de aplicativo. Eu corri ruby -rpuppet /path/to/app_to_port.rb sem resposta, o que me leva a acreditar que o código está sintaticamente correto.

Para o registro, eu estava lendo no link e link para me levar a este ponto.

env atual: ruby 1.8.7 e fantoche 2.7.19

    
por Mike Purcell 11.01.2013 / 02:44

1 resposta

2

O Hiera está incluído no Puppet 3.0 - em 2.7, você precisará instalá-lo separadamente em seus mestres.

Como parece que você quer que o mapeamento seja global, você vai querer colocá-lo em um arquivo Hiera que se aplique a todos os sistemas. Então, no seu hiera.yaml , você vai querer algo como ...

:backends:
  - yaml

:hierarchy:
  - common

:yaml:
   :datadir: /etc/puppet/hieradata

Em seguida, em /etc/puppet/hieradata/common.yaml , configure seus mapeamentos de portas:

port_app_1: "27960"
port_app_2: "27961"

Com isso, você pode procurar em sua configuração vhost.

$vhost_port = hiera("port_${name}")
    
por 11.01.2013 / 07:32