Mapr 클라이언트 설치 상황이 있습니다. /opt/mapr/hive/hive-x.y/conf/dir 아래에있는 사용자 정의 된 hive-site.xml 파일을 복사 할 수 있기를 원합니다. 문제는 패키지 (하이브 포함)가 완전히 설치 될 때까지 하이브 버전 번호를 알 수 없다는 것입니다. 그래서, 다음과 같은 코드가 실패 :요리사 : 가변 인수에 대한 게으른 평가
템플릿 이름이 너무 이름이/conf/hive-site.xml
대신
/opt/mapr/hive/hive-1.2/conf/site.xml
로 평가 받고있다 완료되지 않은 설치 패키지를 지적되는 컴파일 시간에 평가하기 않은 것 같습니다
package 'mapr-client'
...
...
dir_hive = Dir["/opt/mapr/hive/hive-*"]
template "#{dir_hive[0]}/conf/hive-site.xml" do
source "devg_hive-site.xml.erb"
mode 0644
end
. 우리는 모든 패키지가 완전히 설치하기 위해 별도의 호출을 기다리거나 다음 코드를 수동으로 실행 할 경우 는 :
dir_hive = Dir["/opt/mapr/hive/hive-*"]
template "#{dir_hive[0]}/conf/hive-site.xml" do
source "devg_hive-site.xml.erb"
mode 0644
end
우리는 설정 파일의 성공적인 복사본이; 그러나 설치하고 구성하려고하는 프로세스의 일부인 경우에는 작동하지 않습니다. 다음은 우리가 시도한 몇 가지 다른 것들입니다 :
- 코드의 구성 복사 부분을 별도의 레시피로 이동하고 실행 목록을 만들려고했는데 실행 순서가 유지되면 패키지 설치가 완료되면 하이브 디렉토리를 사용할 수 있으므로 올바른 파일 경로를 갖게됩니다. 그것은 작동하지 않았다.
- ruby_block, lazy evluator only_if (/ opt/mpar/hive 디렉토리 확인) 등에 config 복사 코드를 넣습니다.
- /tmp/dir에 소스 xml 파일을 복사하면/opt/mapr/hive 디렉토리를 사용할 수있을 때 파일을 복사하려고 시도했지만 lazy evaluator, ruby_block 등을 사용하면 다시 실패합니다.
- Ruby_block의 루프를 통해 시도하여
if !Dir.glob('/opt/mapr/hive/hive-*/conf/hive-site.xml').empty?
을 확인하고 5 초 동안 수면을 시도했습니다. 실패.
위의 변경 사항 중 일부는 성공적이지 못했습니다. 이 모든 경우에 "#{dir_hive[0]}/conf/hive-site.xml"
이 컴파일 타임에 평가되어 잘못된 파일 경로를 생성하는 것으로 나타납니다.
와일드 카드 문자를 사용하여 설치된 파일 경로를 캡처 한 다음 해당 경로를 일부 작업 (예 : 사용자 정의 파일로 바꾸기)으로 사용하는 가장 좋은 방법은 무엇입니까?
또는 어떤 동작이 수행되고 지연된 평가 된 변수 이름이 동작 후에 존재하는 파일 이름에 따라 달라지는 경우 표현식을 지연 평가하여 변수 이름을 생성 할 수 있습니까?
시간을 내 주셔서 감사합니다.
정확하게 코드 아래에 무엇을하고있다가 필요합니다 , 고맙습니다! 패키지 버전 관리 형식에 동의합니다. 각 패키지마다 다르며 향후 변경해야하므로 스크립트가 실패합니다. –