
여러분
우리는 현재 직장에서 사용자 정의 배포 도구를 보유하고 있으며 이를 Puppet과 같은 비독점 도구로 교체하는 것을 평가하고 있습니다.
현재 우리가 수행하는 주요 작업 중 하나는 토큰화입니다. 예를 들어 Tomcat 배포의 server.xml 파일에서 server.xml.tokenzenized
아래와 같은 줄로 호출되는 파일을 배포할 수 있습니다.
<Ajp12Connector port="@@TOMCAT.AJP.PORT@@" ajpidFile="conf/ajp12_2.id" />
그런 다음 tokens.xml
다음과 같은 줄이 있는 파일이 있습니다.
<TOKEN NAME='TOMCAT.AJP.PORT' value = '8080/>
그러면 배포 프로세스에서 server.xml.tokenized를 스캔하고 토큰을 대체하여 파일을 server.xml에 기록합니다.
Puppet이 임의의 파일이나 Tomcat과 같은 파일에 대해 이 작업을 수행할 수 있습니까? Tomcat의 작동 방식을 이해하는 플러그인을 다운로드해야 합니까?
둘째, 내가 지금까지 읽은 내용에 따르면 대부분의 사람들은 마스터에서 파일을 검색하기 위해 puppet 에이전트를 사용하는 것 같습니다. 이것이 사실이어야 합니까? puppet 모델링 및 인프라를 사용하는 스크립트를 가질 수 있습니까? 그런 다음 호스트에 로그인하여 소프트웨어를 배포하시겠습니까? - 그 근거는 다양한 이유로 우리 환경의 에이전트에 대한 편견이 있다는 것입니다.
건배
답변1
첫 번째 질문에: 네,puppet
다음을 사용하여 그렇게 할 수 있습니다템플릿결합hiera
및/또는facter
. 이 프로세스는 템플릿 파일을 사용하여 소프트웨어에서 완전히 추상화됩니다.
server.xml
예를 들어 다음과 같은 섹션이 포함된 템플릿을 가질 수 있습니다 .
<Connector address="<%= @ipaddress_eth0 %>"
executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
이 <%= @ipaddress_eth0 %>
부분은 현재 '토큰'이라고 부르는 부분이며, Puppet은 다음을 사용하여 특정 호스트에 대해 이를 교체하는 방법을 알고 있습니다 facter
.
# facter ipaddress_eth0
10.0.0.2
당신은 가질 수 있습니다맞춤 사실당신도 필요하다면.
계층적 데이터 주제는 좀 더 복잡하며 배포에 어떻게 도움이 되는지 확인하려면 일부 설명서를 읽어야 합니다.이것그 가능성에 대한 아주 좋은 프레젠테이션입니다. 기본적으로 그 목적은 코드와 데이터('토큰')를 분리하는 수단을 제공하고 해당 데이터를 친숙하고 유지 관리하기 쉬운 형식(YAML 또는 JSON)으로 저장하는 것입니다. 위에서 설명한 사용 사례( 에 대한 사용자 정의 포트 정의 tomcat
)는 다음의 일반적인 사용 패턴입니다 hiera
.
모듈 에는 tomcat
다음과 같은 내용이 있습니다.
class tomcat (
$port
){
#rest of the module
}
템플릿(예: server.xml.erb
)에서:
<Ajp12Connector port="<%= port %>" ajpidFile="conf/ajp12_2.id" />
해당 코드와 일치하는 계층적 데이터 부분은 다음과 같습니다.
tomcat::port = 8080
두 번째 질문에 대한 대답도 어느 정도 '예'입니다. 당신이 사용할 수있는마리오네트 집단(실제로 puppetlabs 제공의 일부) 에이전트 없는 서버 팜에 변경 사항을 적용합니다. 하지만 클라이언트를 설치해야 합니다(정확히 동일하지는 않습니다. 이러한 클라이언트는 puppet
클라이언트를 요청하는 데 적극적으로 참여하는 에이전트 와 달리 수동적이기 때문입니다).카탈로그로 puppetmaster
). 다시 한 번 말씀드리지만,문서를 읽어보세요기능의 세부 사항을 더 잘 이해합니다.