
데몬화되지 않은 컴퓨터에서 Puppet 클라이언트를 실행할 때 정기적이지만 무작위로 다음 오류 메시지가 나타납니다.
오류: 생성할 수 없습니다. 매개변수 경로 실패: 파일 경로는 정규화되어야 합니다. 경고: 실패한 카탈로그에 캐시를 사용하지 않음 경고: 구성을 인스턴스화할 수 없습니다. 매개변수 경로 실패: 파일 경로는 정규화되어야 합니다.
매개변수에 정규화된 경로가 없다는 것이 무엇을 의미하는지 어느 정도 명확해 보입니다. 그러나 그것은 나에게 말해주지 않습니다어디이를 해결하기 위해 찾을 수도 있고 어떤 매개변수가 잘못되었는지도 알 수 있습니다. :(
(디버그 옵션을 사용하면 일관되게 작동하므로 매니페스트 캐싱에 문제가 있는 것 같습니다. 프로덕션 용도로 사용하려면 이 부분을 제거하는 것이 좋을 것 같습니다.)
참고: 이 일이 지속적으로 발생하도록 할 수는 없습니다. :/
답변1
[한동안 구성을 탐색한 후 자신의 질문에 대답]
나는 이것을 내가 작성한 모듈 중 하나까지 추적했지만(물론) 내가 예상한 대로 작동하지 않는 변수를 사용했기 때문에 발생했습니다.
일어난 일은 다음과 같습니다.
$variable_dir = "/etc/puppet/bar"
class foo {
file { $variable_dir:
ensure => directory
}
}
define some-define() {
# Trimmed for brevity
exec { "some-$name":
# command, creates, timeout etc here
require => File[$variable_dir],
}
}
..기본적으로 변수를 사용하는 File[]과 혼동을 일으켰습니다. 지금은 이것을 변수의 명시적인 값으로 대체했는데 모두 잘 작동하지만 뭔가 놀랐습니다! 범위와 변수를 정의/사용할 수 있는 시기를 이해하는 것이 Puppet에서는 다소 부족하다고 가정합니다.많은더 나은...
변수를 찾지 못하거나 값을 얻지 못하여 파일 문자열에서 정규화되지 않은 경로를 사용하는 것과 동일한 동작을 일으킨 것 같습니다. 어쨌든 꽤 이상합니다.
편집: 변수가 범위에서 발견되지 않아 비어 있었고 확실히 정규화된 경로가 아닐 가능성이 높습니다. 그러나 이것이 왜 일관성이 없는지 설명하지 않습니다 ...
답변2
꼭두각시 구성을 테스트할 때 다음을 실행하여 수행할 수 있습니다.
puppetd --test
그러면 훨씬 더 자세한 출력이 제공되며, 실패한 부분이 표시됩니다. 정말 절망적이라면 계속해서 --debug
더 많은 결과를 얻을 수 있습니다.
파일을 찾으려면 .pp
다음을 검색해야 합니다.
file { "path/to/file":
...
}
누락된 부분이 있습니다 /
(즉, 대신 읽어야 합니다 /path/to/file
).
답변3
실제 경로를 경로 속성에 넣으면 작동합니다. 이것은 나에게 효과적입니다.
$variable_dir = "/etc/puppet/bar"
class foo {
file { 'variable_dir':
path => ${variable_dir},
ensure => directory
}
}
define some-define() {
# Trimmed for brevity
exec { "some-$name":
# command, creates, timeout etc here
require => File['variable_dir'],
}
}
답변4
매개변수를 사용하지 않는 한 전체 경로는 키 이름에 배치되어야 합니다 path
.
예를 들어:
file { '/full/path':
ensure => directory,
recurse => true,
}
또는:
file { 'my name':
path => "/full/path",
ensure => directory,
recurse => true,
}
변수를 사용하는 경우 해당 변수가 정의되어 있는지 확인하세요. 다른 클래스에 있는 경우 표준 $class::variable
구문을 사용하세요. 자세한 내용을 보려면 -vd
(verbose+debug) 매개변수를 사용하여 puppet을 실행하세요.