저는 사용자 정의 꼭두각시 모듈의 대규모 저장소에 대한 리팩토링 프로젝트를 진행 중입니다. 여기에는 puppet 2.x에서 3.2.4로의 업그레이드가 포함됩니다. 마침내 임계 질량에 도달하고 일부 변경 사항을 테스트하기 시작했을 때 신속하게 다음 오류가 발생했습니다.
Info: Retrieving plugin
Info: Loading facts in /etc/puppet/modules/base/lib/facter/elversion.rb
Info: Loading facts in /etc/puppet/modules/base/lib/facter/site.rb
Info: Loading facts in /var/lib/puppet/lib/facter/elversion.rb
Info: Loading facts in /var/lib/puppet/lib/facter/site.rb
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: stack level too deep at /etc/puppet/manifests/nodes.pp:9 on node puppet
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run
다양한 꼭두각시 버그 보고서를 살펴본 후 문제를 단순화하기로 결정했습니다. 나는 문제를 다음과 같이 정의된 두 가지 클래스로 좁혔습니다.
class base::includes { }
그리고
class prod_secure::base::includes inherits base::includes { }
prod_secure::base::includes만 포함하는 노드는 위에 나열된 오류 출력을 생성합니다. 내가 볼 수 있는 유일한 관련 경고는 다음 puppet-lint
과 같습니다.
WARNING: class inherits across module namespaces on line 1
...하지만 그건 단지 경고일 뿐이고 에이전트 실행 시 꼭두각시와 충돌해서는 안 된다고 생각합니다. 어떤 아이디어가 있나요? 내가 설정한 네임스페이스 체계가 꼭두각시에서 지원되지 않을 가능성이 있습니까?
업데이트
나는 테스트를 한 단계 더 진행하여 상속 클래스의 이름을 변경하기로 결정했습니다. 새로운 정의는 다음과 같습니다.
class prod_secure::base2::includes2 inherits base::includes { }
결과는 똑같습니다 stack level too deep
.... 이 문제는 네임스페이스와 관련이 없는 것 같습니다.
업데이트 2
이전 디버깅 단계에서 한 가지 중요한 세부 사항을 놓쳤습니다.
Wed Sep 11 11:25:09 -0400 2013 Puppet (info): Caching node for puppet
Wed Sep 11 11:25:09 -0400 2013 Puppet (debug): importing '/etc/puppet/manifests/nodes.pp' in environment production
Wed Sep 11 11:25:09 -0400 2013 Puppet (debug): importing '/etc/puppet/manifests/config_file.pp' in environment production
Wed Sep 11 11:25:10 -0400 2013 Puppet (debug): importing '/etc/puppet/modules/prod_secure/manifests/base2/includes2.pp' in environment production
Wed Sep 11 11:25:10 -0400 2013 Puppet (debug): Automatically imported prod_secure::base2::includes2 from prod_secure/base2/includes2 into production
Wed Sep 11 11:25:10 -0400 2013 Puppet (debug): importing '/etc/puppet/modules/prod_secure/manifests/base/includes.pp' in environment production
Wed Sep 11 11:25:10 -0400 2013 Puppet (debug): Automatically imported prod_secure::base::includes from prod_secure/base/includes into production
Wed Sep 11 11:25:10 -0400 2013 Puppet (err): stack level too deep at /etc/puppet/manifests/nodes.pp:9 on node puppet
Wrapped exception:
stack level too deep
이유는 확실하지 않지만 여전히 prod_secure::base::includes를 로드하려고 시도 중이었고 이것이 문제의 항목이었습니다. 해당 파일을 완전히 제거한 후 테스트가 통과되었습니다. 다시 네임스페이스 이론으로 돌아왔습니다.
답변1
꼭두각시 3.2.3을 사용해 볼 수도 있습니다.
3.2.2에는#21376유사한 문제이지만 3.2.3에서 수정되었습니다. 회귀일 수 있습니다.