傀儡 erb 动态内容
puppet erb dynamic content
site.pp
class httpd_conf_files ($repos) {
ensure_packages(['httpd'], {'ensure' => 'present'})
$repos.each |String $repo| {
file {"/etc/httpd/conf.d/${repo}_repo1.conf":
ensure => file,
mode => '0644',
content => template('deploy/repos.erb'),
}
}
}
nodes.pp
node 'repo-web-c010' {
class { httpd_conf_files:
repos => ['centos','ubuntu'],
}
}
但是,文件 centos_repo1.conf 和 ubuntu_repo1.conf 的内容相同。
repos.erb
<% @repos.each do |rep|
if rep == "centos"
$x = "/opt/repos/yum/"+rep
$_repo = rep
else
$x = "/opt/repos/"+rep
$_repo = rep
end
end -%>
Alias /<%=$_repo%> <%=$x%>
DocumentRoot <%=$x%>
IndexOptions NameWidth=* +SuppressDescription
<Directory <%=$x%>>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog logs/<%=$_repo%>_repo1_error.log
LogLevel warn
CustomLog logs/<%=$_repo%>_repo1_access.log combined
谁能告诉我哪里出了问题?
评论中提示的 ERB 模板中的逻辑无效。
因为您遍历 @repos
数组并在每次迭代中设置 $x
和 $_repo
,所以这些变量总是从该循环的最后一次迭代中获取它们的值。这就是为什么您总是以相同的生成内容结束。
模板可以改成这样:
<% if @repo == "centos"
x = "/opt/repos/yum/" + @repo
_repo = @repo
else
x = "/opt/repos/" + @repo
_repo = @repo
end -%>
Alias /<%= _repo %> <%= x %>
DocumentRoot <%= x %>
IndexOptions NameWidth=* +SuppressDescription
<Directory <%= x %>>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog logs/<%= _repo %>_repo1_error.log
LogLevel warn
CustomLog logs/<%= _repo %>_repo1_access.log combined
请注意,我还更改了您的变量 $x
和 $_repo
,因为美元符号在 Ruby 中表示全局变量,而全局变量可能不是您想要的。
如果您将条件逻辑从您的 ERB 模板移到您的 Puppet 清单中,那就更好了。
最后,您确实需要修复缩进,因为它很难阅读。
site.pp
class httpd_conf_files ($repos) {
ensure_packages(['httpd'], {'ensure' => 'present'})
$repos.each |String $repo| {
file {"/etc/httpd/conf.d/${repo}_repo1.conf":
ensure => file,
mode => '0644',
content => template('deploy/repos.erb'),
}
}
}
nodes.pp
node 'repo-web-c010' {
class { httpd_conf_files:
repos => ['centos','ubuntu'],
}
}
但是,文件 centos_repo1.conf 和 ubuntu_repo1.conf 的内容相同。
repos.erb
<% @repos.each do |rep|
if rep == "centos"
$x = "/opt/repos/yum/"+rep
$_repo = rep
else
$x = "/opt/repos/"+rep
$_repo = rep
end
end -%>
Alias /<%=$_repo%> <%=$x%>
DocumentRoot <%=$x%>
IndexOptions NameWidth=* +SuppressDescription
<Directory <%=$x%>>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog logs/<%=$_repo%>_repo1_error.log
LogLevel warn
CustomLog logs/<%=$_repo%>_repo1_access.log combined
谁能告诉我哪里出了问题?
评论中提示的 ERB 模板中的逻辑无效。
因为您遍历 @repos
数组并在每次迭代中设置 $x
和 $_repo
,所以这些变量总是从该循环的最后一次迭代中获取它们的值。这就是为什么您总是以相同的生成内容结束。
模板可以改成这样:
<% if @repo == "centos"
x = "/opt/repos/yum/" + @repo
_repo = @repo
else
x = "/opt/repos/" + @repo
_repo = @repo
end -%>
Alias /<%= _repo %> <%= x %>
DocumentRoot <%= x %>
IndexOptions NameWidth=* +SuppressDescription
<Directory <%= x %>>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog logs/<%= _repo %>_repo1_error.log
LogLevel warn
CustomLog logs/<%= _repo %>_repo1_access.log combined
请注意,我还更改了您的变量 $x
和 $_repo
,因为美元符号在 Ruby 中表示全局变量,而全局变量可能不是您想要的。
如果您将条件逻辑从您的 ERB 模板移到您的 Puppet 清单中,那就更好了。
最后,您确实需要修复缩进,因为它很难阅读。