Puppet에서 파일 / 디렉토리를 조건부로 작성하는 방법은 무엇입니까?


17

fail전달 된 디렉토리 경로가 존재하지 않는 경우 꼭두각시로 함수를 작성하려고 합니다.

if File["/some/path"]항상 true를 if defined(File["/some/path"])반환하고 리소스가 실제로 존재하는지 여부에 관계없이 꼭두각시에 리소스가 정의 된 경우에만 true를 반환합니다.

간단한 if진술로 이것을 수행하는 방법이 있습니까?

감사


2
기억하십시오 : 매니페스트는 마스터에서 컴파일됩니다. 그들은 제출 한 사실을 제외하고는 고객에 대해 아무것도 모른다. 따라서이 정보가있는 사실을 쓰거나 한 걸음 물러서서 실제로 해결하려는 것을 알려 주면 if 문보다 더 나은 접근 방식을 얻을 수 있습니다.
Dennis Kaarsemaker 2018 년

답변:


30

이에 대한 해결 방법 : exec "test"에서 ifif 만 사용하고 실행하려는 조치에 필요합니다.

exec {"check_presence":
  command => '/bin/true',
  onlyif => '/usr/bin/test -e /path/must/be/available',
}

whatever {"foo...":
  .....
  require => Exec["check_presence"],
}

5
오, 그건 악하다, 나는 그것을 좋아한다 :-)
Dennis Kaarsemaker

1
더 간단 할 수도 있습니다 : exec { "test -e / path / must / be / available":}
Dennis Kaarsemaker

1
감사. 이것은 단일 dir 확인에 효과적입니다. 그러나 디렉토리 배열의 유효성을 검사하려고합니다 ... 이것을 함수에 추가하면 '재 선언 할 수 없습니다'오류가 발생합니다.
ddario 2016 년

6
좋은 생각이지만 이것은 모든 퍼펫 실행마다 "Exec [check_presence] / returns : 성공적으로 실행되었습니다"라는 알림이 표시 될 것입니다. 더 나은 방법은 다음과 같습니다. exec { 'check_presence': command => '/ bin / false', => '/ usr / bin / test -e / path / must / be / available'이 아닌 경우} 경로가 실제로 존재하지 않을 때만 오류 / 알림을 생성합니다.
S0me0ne

2
"요구 사항"이 실패하게 만드는 것은 onlyif를 사용하든 그렇지 않든 상관없이 실패한 종속성이있는 모든 것에 오류를 줄 것입니다 ... 기술적으로 작동하지만 꼭두각시 로그에 많은 오류가 기록됩니다 ...
David Gardner

0

디렉토리가 없으면 모듈이 실행되지 않도록하는 방법을 알아내는 데 어려움이있었습니다. 이것이 내가 찾은 것입니다.

exec { 'module_name':
   command => "command to run with variables", # Double quotes for Variable interpolation
   path   => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:",
   onlyif => 'test -d /mydirectory',
   }

경로를 추가하는 것이 실제로 나를 위해 트릭을 한 것입니다. 어떤 이유로 테스트 명령에 경로를 추가해도 /bin/test제대로 작동하지 않는 것처럼 보입니다.

이것이 동일한 문제를 겪고있는 다른 사람들에게 도움이되기를 바랍니다.


0

내장 함수 find_file ()을 사용할 수도 있습니다 ... 파일 / 경로가 존재하지 않으면 undef를 반환하고 존재하면 문자열을 반환합니다.

https://puppet.com/docs/puppet/5.5/function.html#findfile


1
이것은 마스터에서만 실행되며 모듈에서 파일을 찾기위한 것입니다.
bodgit

고맙지 만, 전체 경로를 제공하여 OS에서 파일을 찾을 수도 있습니다.
마이크

카탈로그가 컴파일되는 머신, 즉 마스터에서만.
bodgit

네 맞습니다.
마이크
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.