퍼펫 : 리소스가 정의되어 있는지 테스트하거나 생성


14

리소스가 이미 다른 파일에 정의되어 있는지 여부를 테스트하는 방법을 알아 내려고 노력하고 있습니까? 간단한 예 :

  if File[$local_container] {
    alert("Testing - It existed $local_container")
  } else {
    file{ "$local_container":
      ensure => directory,
    }
  }

그러나- File[$local_container]항상 참으로 평가되는 것 같습니다. 이것을 할 수있는 방법이 있습니까?

답변:


10

이를 수행하는 더 좋은 방법은 puppetlabs stdlib 의 ensure_resource 함수를 사용하는 것입니다.

자원 유형, 제목 및 자원을 매개 변수로 설명하는 속성 목록을 사용합니다.

이미 존재하지 않는 경우에만 리소스를 생성하는 테스트 사례가 있다고 가정하십시오.

ensure_resource('package', 'test-pkg', {'ensure' => 'present'})

이 방법으로 확인 표시를 전달하면 훨씬 깔끔해 보입니다. 팁 고마워!
gnarf

15

"자원이 이미 정의되어 있는지 테스트"를 의미 합니까? 리소스 (즉, 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()이다 구문 분석 순서에 따라 다릅니다 .


5
"파싱 순서에 따라"부분은 거의 쓸모가 없습니다.
joerx

2

또는....

unless File["${local_container}"] {
  file{ "${local_container}":
     ensure => directory,
  }
}

그리고 그 따옴표와 중괄호를 주시하십시오 ....


-2

간단히,

file{ "$local_container":
  ensure => directory,
  replace => false,
}

"$local_container"파일이 이미 다른 곳에 정의되어 있다면 (예 : 권한 / 소유자를 제어하려는 무언가로) 같은 리소스를 두 번 정의 할 수 없습니다.
gnarf 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.