天天看点

Puppet学习之模板(6)

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实践》

继续阅读