2014-06-20 2 views
1

저는 Docker 컨테이너 안에있는 퍼핏 에이전트와 작업 중이므로 최대한 작은 파일 시스템 공간을 사용하는 것이 중요합니다. 따라서, 내 부두 노동자의 맨 끝에, I was running the following을 bulid :아무런 변경 사항이 없으면 모든 퍼펫 실행 전에 적절한 업데이트, 모든 퍼핏 실행 후 적절한 캐시 지우기

RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

문제는 내 인형이 패키지를 설치하려고 실행하고,에서 끌어 할 목록이 없기 때문에, 실패한다는 것입니다. 간단한 apt-get update을 사용하면 모든 것이 올바르게 실행됩니다.

나는 그들의 저장소에서 사용 가능한 최신 Puppet 3 클라이언트를 실행 중입니다. 어떻게 각 인형 실행 포장 다음과 같은 요구하는 단계를 사용할 수 있습니다 아무것도하기 전에

  1. 는,이 인스턴스의 인형 카탈로그가 변경된 경우에만, apt-get update를 실행합니다. (예 : 아무것도 변경하지 않았 으면 아무것도하지 말고주기, 대역폭, 자원 등의 낭비이기 때문에 업데이트하지 마십시오.)
  2. 모든 것이 끝나면 apt-get clean을 실행하여 모든 것을 제거하고 해당 항목을 실행할 수 있습니다 위에 나열된 Docker RUN 명령의

어떻게 지능적으로 적절한 사전을 업데이트하고 이후 캐시를 닦아, 퍼핏 실행을 래핑하는 인형 실행 단계를 사용할 수 있습니까? 당신이 puppetlabs-apt 모듈을 사용하는 경우

+0

http://stackoverflow.com/q/10845864/3346514 - 1 단계 질문. –

+0

퍼핏은받은 카탈로그가 이전 카탈로그와 다른지 여부를 묻는 좋은 방법이 있다고 생각하지 않습니다. 아마도 당신은 Puppet 주위에 몇 가지 스크립트 작업을 할 수 있습니다. 1. 카탈로그를 가져오고 아무 것도하지 마십시오. 2. 변경 사항이 감지되면 업데이트를 수행하십시오. 3. 실제 꼭두각시를 실행하십시오. 4. 정리. –

답변

0

, 단지 정의 :

Class['apt'] -> Package<| |> 

그렇지 않으면 사용

exec { 'apt-update': 
    command => '/usr/bin/apt update' 
} 

Exec['apt-update'] -> Package <| |> 

이 방법 apt update 일부 패키지가 누락 된 경우에 실행됩니다.