꼭두각시-템플릿
Templating여러 위치에서 사용할 수있는 표준 형식으로 물건을 가져 오는 방법입니다. Puppet에서 템플릿과 템플릿은 표준 Ruby 라이브러리의 일부로 제공되는 erb를 사용하여 지원되며 Ruby on Rails 프로젝트에서와 같이 Ruby를 제외한 다른 프로젝트에서 사용할 수 있습니다. 표준 관행으로 Ruby에 대한 기본적인 이해가 필요합니다. 템플릿은 사용자가 템플릿 파일의 내용을 관리하려고 할 때 매우 유용합니다. 기본 제공 Puppet 유형으로 구성을 관리 할 수없는 경우 템플릿이 중요한 역할을합니다.
템플릿 평가
템플릿은 간단한 기능을 사용하여 평가됩니다.
$value = template ("testtemplate.erb")
템플릿의 전체 경로를 지정하거나 일반적으로 / var / puppet / templates에있는 Puppet의 templatedir에있는 모든 템플릿을 가져올 수 있습니다. puppet –-configprint templatedir을 실행하여 디렉토리 위치를 찾을 수 있습니다.
템플릿은 항상 클라이언트가 아닌 파서에 의해 평가됩니다. 즉, puppetmasterd를 사용하는 경우 템플릿은 서버에 있어야하며 클라이언트에 다운로드 할 필요가 없습니다. 클라이언트가 템플릿을 사용하는 것과 파일의 모든 콘텐츠를 문자열로 지정하는 것 사이에는 차이가 없습니다. 이는 puppet 시작 단계에서 puppetmasterd가 클라이언트 별 변수를 먼저 학습했음을 나타냅니다.
템플릿 사용
다음은 테스트 사이트를위한 tomcat 구성을 생성하는 예입니다.
define testingsite($cgidir, $tracdir) {
file { "testing-$name":
path => "/etc/tomcat/testing/$name.conf",
owner => superuser,
group => superuser,
mode => 644,
require => File[tomcatconf],
content => template("testsite.erb"),
notify => Service[tomcat]
}
symlink { "testsym-$name":
path => "$cgidir/$name.cgi",
ensure => "/usr/share/test/cgi-bin/test.cgi"
}
}
다음은 템플릿 정의입니다.
<Location "/cgi-bin/ <%= name %>.cgi">
SetEnv TEST_ENV "/export/svn/test/<%= name %>"
</Location>
# You need something like this to authenticate users
<Location "/cgi-bin/<%= name %>.cgi/login">
AuthType Basic
AuthName "Test"
AuthUserFile /etc/tomcat/auth/svn
Require valid-user
</Location>
이렇게하면 각 템플릿 파일을 별도의 파일로 푸시 한 다음 Apache에 이러한 구성 파일을로드하도록 지시하면됩니다.
Include /etc/apache2/trac/[^.#]*
템플릿 결합
다음 명령을 사용하여 두 개의 템플릿을 쉽게 결합 할 수 있습니다.
template('/path/to/template1','/path/to/template2')
템플릿의 반복
Puppet 템플릿은 배열 반복도 지원합니다. 1이 액세스하는 변수가 배열 인 경우이를 반복 할 수 있습니다.
$values = [val1, val2, otherval]
다음과 같은 템플릿을 가질 수 있습니다.
<% values.each do |val| -%>
Some stuff with <%= val %>
<% end -%>
위의 명령은 다음과 같은 결과를 생성합니다.
Some stuff with val1
Some stuff with val2
Some stuff with otherval
템플릿의 조건
그만큼 erb템플릿은 조건을 지원합니다. 다음 구성은 조건부로 파일에 내용을 넣는 빠르고 쉬운 방법입니다.
<% if broadcast != "NONE" %> broadcast <%= broadcast %> <% end %>
템플릿 및 변수
템플릿을 사용하여 파일 내용을 채우는 것 외에도 변수를 채울 수 있습니다.
testvariable = template('/var/puppet/template/testvar')
정의되지 않은 변수
변수를 사용하기 전에 정의되어 있는지 확인해야하는 경우 다음 명령이 작동합니다.
<% if has_variable?("myvar") then %>
myvar has <%= myvar %> value
<% end %>
범위 외 변수
lookupvar 함수를 사용하여 명시 적으로 범위를 벗어난 변수를 찾을 수 있습니다.
<%= scope.lookupvar('apache::user') %>
샘플 프로젝트 템플릿
<#Autogenerated by puppet. Do not edit.
[default]
#Default priority (lower value means higher priority)
priority = <%= @priority %>
#Different types of backup. Will be done in the same order as specified here.
#Valid options: rdiff-backup, mysql, command
backups = <% if @backup_rdiff %>rdiff-backup,
<% end %><% if @backup_mysql %>mysql,
<% end %><% if @backup_command %>command<% end %>
<% if @backup_rdiff -%>
[rdiff-backup]
<% if @rdiff_global_exclude_file -%>
global-exclude-file = <%= @rdiff_global_exclude_file %>
<% end -%>
<% if @rdiff_user -%>
user = <%= @rdiff_user %>
<% end -%>
<% if @rdiff_path -%>
path = <%= @rdiff_path %>
<% end -%>
#Optional extra parameters for rdiff-backup
extra-parameters = <%= @rdiff_extra_parameters %>
#How long backups are going to be kept
keep = <%= @rdiff_keep %>
<% end -%>
<% if @backup_mysql -%>%= scope.lookupvar('apache::user') %>
[mysql]
#ssh user to connect for running the backup
sshuser = <%= @mysql_sshuser %>
#ssh private key to be used
sshkey = <%= @backup_home %>/<%= @mysql_sshkey %>
<% end -%>
<% if @backup_command -%>
[command]
#Run a specific command on the backup server after the backup has finished
command = <%= @command_to_execute %>
<% end -%>