리소스가 이미 다른 파일에 정의되어 있는지 여부를 테스트하는 방법을 알아 내려고 노력하고 있습니까? 간단한 예 :
if File[$local_container] {
alert("Testing - It existed $local_container")
} else {
file{ "$local_container":
ensure => directory,
}
}
그러나- File[$local_container]
항상 참으로 평가되는 것 같습니다. 이것을 할 수있는 방법이 있습니까?
답변
이를 수행하는 더 좋은 방법은 puppetlabs stdlib 의 ensure_resource 함수를 사용하는 것입니다.
자원 유형, 제목 및 자원을 매개 변수로 설명하는 속성 목록을 사용합니다.
이미 존재하지 않는 경우에만 리소스를 생성하는 테스트 사례가 있다고 가정하십시오.
ensure_resource('package', 'test-pkg', {'ensure' => 'present'})
답변
“자원이 이미 정의되어 있는지 테스트”를 의미 합니까? 리소스 (즉, file {}
등) 를 정의하면 꼭두각시 (Puppet)는 이미 존재하지 않는 경우 설명하는 내용을 생성합니다 ( ensure => present
물론 통과한다고 가정 ).
자원이 카탈로그에 이미 정의되어 있는지 확인하려면 다음을 수행하십시오.
mark-draytons-macbook:~ mark$ cat test.pp
file { "/tmp/foo": ensure => present }
if defined(File["/tmp/foo"]) {
alert("/tmp/foo is defined")
} else {
alert("/tmp/foo is not defined")
}
if defined(File["/tmp/bar"]) {
alert("/tmp/bar is defined")
} else {
alert("/tmp/bar is not defined")
}
mark-draytons-macbook:~ mark$ puppet test.pp
alert: Scope(Class[main]): /tmp/foo is defined
alert: Scope(Class[main]): /tmp/bar is not defined
notice: //File[/tmp/foo]/ensure: created
참고 : defined()
이다 구문 분석 순서에 따라 다릅니다 .
답변
또는….
unless File["${local_container}"] {
file{ "${local_container}":
ensure => directory,
}
}
그리고 그 따옴표와 중괄호를 주시하십시오 ….
답변
간단히,
file{ "$local_container":
ensure => directory,
replace => false,
}