Puppet学习之模板(6)

来源:互联网 发布:西门子plc编程 编辑:程序博客网 时间:2024/04/28 22:48
1.puppet的类
1.1Tips:
  • puppet 2.7之后,基类必须无参。
  • 子类和父类有相同的属性,如果在子类中再次赋值,将覆盖掉原有的属性值。
  • 如果想取消某个属性的值,可以使用undef覆盖原有的值。
  • 可以通过require对资源增加属性。
  例子:
  class :: foo inherits from nginx {
service { 'nginx':
 require +> [File['nginx.conf'], File['foo.conf']],
}
}
通过require+参数追加后,在子类nginx::foo中所定义的service资源需要依赖两个文件才能启动,其他参数默认继承父类。

1.2 参数化类
puppet中不存在重载,如果一个类被声明多次,并且存在相互矛盾的参数值,puppet会编译失败。
需要使用Hiera这个参数自动化查询工具
参数化类,是指通过动态变量的查找将参数传递到类。可以在节点范围内设置一些变量,进行类的声明,并将变量分配给父范围,这个类就会查找所需的信息并进行应用。
参数化类缺点如下:所有变量将应用到全局命名空间。
(1)参数化类定义
 class nginx ($package, $port) {.........}
(2)参数化类的使用
局部变量$package和$port在类中的定义可以作为参数名,也可以在作用域内使用。
#作为参数名
class nginx ($package, $port) {
   package {$package: ensure => present}

#在类作用域中引用
file {'nginx.conf':
port => $port,
ensure => tile,
  }
}
(3)参数默认值
class nginx ($package, $port = '80') {.......}

(4)声明参数化类
class {'nginx':}
或者
class {'nginx': $package => 'nginx', $port => '80'}


2.模板
2.1 Puppet模板主要是基于ERB。
(1)标签
除打上标签的内容外,ERB模板中的内容都会原封不动的传送回puppet
<% document = "" %>
(2)打印表达式
注意与标签的区别
<% = sectionheader %>
或者
environment = <% = gitversion [0,5]%>

(3)注释
<%# this is comment. %>

(4)禁止换行
<% document += thisline-%>

2.2ERB模板语法
<%= ruby expression%>直接替换成表达式的值
<% ruby code %> Ruby代码,包括条件,循环等
<%# comment%>注释
<%% or %%> 等同于<% or %>,分别进行
<%-    等同于<%,闭合标签,控制代码前输出大量空格
-%>    等同于%>, 闭合标签,控制代码后输出大量空格
例子:
<%= @ipaddress%> 也可以写成 <%= ipaddress%>

2.3 变量的引用
当前范围内的变量都可以作为ruby的变量,用@符号引用
puppet传递一个scop对象到模板中,其中包含当前设定的变量,以及其他数据。可以使用scope对象的lookupvar方法找到任何变量
(1)超出本范围的变量
<% = scope.lookipvar ('apache::user')%>
(2)测试不明变量
<% if @myvar%>
myvar has <%= @myvar%> value
<% end %>
(3)获取当期作用域下的所有变量名
如果使用的作用域在一个to_hash下,可以得到一个在当前作用域下的所有哈希变量表。这个哈希列表使用多个变量(osfamily),而不是合格的名称(::osfamily).
如下代码将打印所有变量
<%scope.to_hash.keys.each do |k| -%>
<%=k%>
<% end -%>

2.4模板结合
多个模板,可以使用逗号结合
template (’mumodule/template1.erb‘, ’mumodule/template2.erb‘)

2.5数组迭代
$values = [var1, var2, other]
<% values.each do |val| -%>
some stuff with <%= val %>
<% end -%>

2.6语法检查
erb -P -x -T '-' mytemplate.erb | ruby -c



以上参考《Puppet实践》
0 0
原创粉丝点击