나만의 인형 기능

나만의 인형 기능

나만의 기능을 만들어보려고 합니다. 계속 이런 메시지가 옵니다.

오류: 원격 서버에서 카탈로그를 검색할 수 없습니다. 서버의 오류 400: 'brent_k' 함수는 XYZ.com 노드의 /etc/puppet/modules/munin/manifests/init.pp:17에서 값을 반환하지 않습니다.

여기 내 간단한 코드가 있습니다

xyz.com:/etc/puppet/modules/munin/lib/puppet/parser/functions# cat brent_k.rb
  module Puppet::Parser::Functions
    newfunction(:brent_k, :type => :rvalue) do |args|
      val = 'ok'
      val
    end
  end

그리고 내 매니페스트에는

$a = brent_k()

나도 노력했다 return val. 이 문제를 어떻게 해결할 수 있나요?

답변1

사용자 정의 함수와 같은 사용자 정의 Ruby 코드를 변경하는 경우 Puppetmaster를 다시 시작해야 합니다. 승객 아래에서 꼭두각시를 실행하는 경우 이는 Apache를 다시 시작하는 것을 의미합니다. 그렇지 않으면 이전 버전을 받게 됩니다.

게다가, 다른 환경에서 동일한 이름의 함수를 사용하여 Puppetmaster에서 여러 환경을 호스팅하는 경우 발생하는 다소 불쾌한 버그가 있습니다. 이 경우 함수 이름을 호출할 때 어떤 환경의 함수가 사용되는지 확인할 방법이 없습니다! 모든 환경에서 동일한 함수 네임스페이스를 사용합니다... (이는 Puppet 2.7.22에서 발생하는 것으로 확인되었으나 3.x에서는 확실하지 않습니다.)

답변2

문서에 따르면 다음과 같습니다.

Puppet 마스터는 사용자 정의 기능을 캐시합니다. 기존 기능을 편집하는 경우(예: 개발 중) 새 버전을 사용하기 전에 Puppet 마스터를 다시 시작해야 합니다.

https://puppet.com/docs/puppet/latest/writing_custom_functions.html

Puppet 마스터 다시 시작에 대한 참고 사항:

다음 명령을 실행하여 Puppet 마스터를 다시 시작하는 경우:

$ service puppetmaster restart
Restarting puppet master
puppetmaster not configured to start, please edit /etc/default/puppetmaster to enable 
.

서비스가 중지되었지만 시작되지는 않음을 알 수 있습니다.

이 경우 Steve Shipway가 언급했듯이 Passenger에서 Puppet 마스터를 실행 중일 수 있으며 실제로 Puppet 마스터를 다시 시작하려면 apache2를 다시 로드해야 합니다.

$ service apache2 reload

관련 정보