Con rối - Mẫu

Templatinglà một phương pháp lấy mọi thứ ở định dạng chuẩn, có thể được sử dụng ở nhiều vị trí. Trong Puppet, tạo khuôn mẫu và các mẫu được hỗ trợ bằng cách sử dụng erb, là một phần của thư viện Ruby chuẩn, có thể được sử dụng trên các dự án khác ngoài Ruby như trong các dự án Ruby on Rails. Để thực hành tiêu chuẩn, người ta cần phải có hiểu biết cơ bản về Ruby. Tạo khuôn mẫu rất hữu ích khi người dùng đang cố gắng quản lý nội dung của tệp mẫu. Mẫu đóng vai trò quan trọng khi không thể quản lý cấu hình bằng loại Con rối tích hợp sẵn.

Đánh giá mẫu

Các mẫu được đánh giá bằng các chức năng đơn giản.

$value = template ("testtemplate.erb")

Người ta có thể chỉ định đường dẫn đầy đủ của một mẫu hoặc người ta có thể kéo tất cả các mẫu trong khuôn mẫu của Puppet, thường được đặt tại / var / rối / mẫu. Người ta có thể tìm thấy vị trí thư mục bằng cách chạy con rối –-configprint templatedir.

Các mẫu luôn được đánh giá bởi trình phân tích cú pháp, không phải ứng dụng khách, có nghĩa là nếu một người đang sử dụng rốimasterd, thì mẫu chỉ cần ở trên máy chủ và người ta không bao giờ cần tải chúng xuống ứng dụng khách. Không có sự khác biệt về cách khách hàng nhìn thấy giữa việc sử dụng một mẫu và chỉ định tất cả nội dung của một tệp dưới dạng một chuỗi. Điều này chỉ ra rõ ràng rằng các biến dành riêng cho khách hàng được học trước bởi Rốimasterd trong giai đoạn khởi động rối.

Sử dụng Mẫu

Sau đây là một ví dụ về việc tạo cấu hình tomcat cho các trang web thử nghiệm.

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" 
   } 
}

Sau đây là định nghĩa mẫu.

<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>

Điều này đẩy mỗi tệp mẫu thành một tệp riêng biệt và sau đó người ta chỉ cần yêu cầu Apache tải các tệp cấu hình này.

Include /etc/apache2/trac/[^.#]*

Kết hợp các mẫu

Có thể dễ dàng kết hợp hai mẫu bằng lệnh sau.

template('/path/to/template1','/path/to/template2')

Lặp lại trong Mẫu

Mẫu con rối cũng hỗ trợ lặp lại mảng. Nếu biến mà người ta đang truy cập là một mảng, thì người ta có thể lặp lại nó.

$values = [val1, val2, otherval]

Chúng tôi có thể có các mẫu như sau.

<% values.each do |val| -%> 
Some stuff with <%= val %> 
<% end -%>

Lệnh trên sẽ cho kết quả như sau.

Some stuff with val1 
Some stuff with val2 
Some stuff with otherval

Điều kiện trong Mẫu

Các erbtemplating hỗ trợ các điều kiện. Cấu trúc sau là một cách nhanh chóng và dễ dàng để đưa một nội dung vào tệp có điều kiện.

<% if broadcast != "NONE" %> broadcast <%= broadcast %> <% end %>

Mẫu và biến

Người ta có thể sử dụng các mẫu để điền vào các biến ngoài việc điền vào nội dung tệp.

testvariable = template('/var/puppet/template/testvar')

Biến không xác định

Nếu một người cần kiểm tra xem biến có được xác định trước khi sử dụng hay không, thì lệnh sau sẽ hoạt động.

<% if has_variable?("myvar") then %> 
myvar has <%= myvar %> value 
<% end %>

Biến ngoài phạm vi

Người ta có thể tìm kiếm biến ngoài phạm vi một cách rõ ràng bằng hàm lookupvar.

<%= scope.lookupvar('apache::user') %>

Mẫu dự án mẫu

<#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 -%>