Puppet-template
人形-テンプレート
*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/[^.#]*
テンプレートを結合する
次のコマンドを使用して、2つのテンプレートを簡単に組み合わせることができます。
template('/path/to/template1','/path/to/template2')
テンプレートでの反復
Puppetテンプレートは配列反復もサポートしています。 アクセスしている変数が配列である場合、それを反復処理できます。
$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 -%>