-
从Cron运行Puppet
- cron { "run-puppet":
- command => "/usr/sbin/puppet agent --test",
- minute => inline_template("<%= hostname.hash.abs % 60 %>"),
- }
- service { "puppet":
- ensure => stopped,
- enable => false,
- }
-
显示命令的输出结果
用 logoutput 参数定义如下的 exec 资源:
- exec { "this-will-fail":
- command => "/bin/ls file-that-doesnt-exist",
- logoutput => on_failure,
- }
工作原理
现在,如果命令执行失败,Puppet 同时会打印命令的错误输出:
- notice: /Stage[main]//Node[cookbook]/Exec[this-will-fail]/returns: /bin/
- ls: cannot access file-that-doesnt-exist: No such file or directory
- err: /Stage[main]//Node[cookbook]/Exec[this-will-fail]/returns: change
- from notrun to 0 failed: /bin/ls file-that-doesnt-exist returned 2
- instead of one of [0] at /etc/puppet/manifests/nodes.pp:11
更多用法
你可以使用如下的配置为所有的 exec 资源设置打印错误输出的默认值:
- Exec {
- logoutput => on_failure,
- }
若不管命令执行成功与否,你都想看到其输出,需使用如下的配置:
- logoutput => true,
-
创建备份文件
只需要在配置清单中指定 backup 参数的值:
- file { "/etc/sudoers":
- mode => "440",
- source => "puppet:///modules/admin/sudoers",
- backup => ".bak",
- }
现在,如果 Puppet 替换了旧文件,就会在原始路径下面创建一个扩展名为 .bak 的备份文件。 若希望 Puppet 对所有的文件执行这样的默认备份策略,可以在配置清单中使用如下代码:
- File {
- backup => ".bak",
- }
要完全禁用备份,使用下面的代码:
- backup => false,
-
使用 define 资源
操作步骤
-
在配置清单中添加如下代码:
- define tmpfile() {
- file { "/tmp/$name":
- content => "Hello, world",
- }
- }
- tmpfile { ["a", "b", "c"]: }
-
运行 Puppet:
- notice: /Stage[main]//Node[cookbook]/Tmpfile[a]/File[/tmp/a]/
- ensure: defined content as '{md5}bc6e6f16b8a077ef5fbc8d59d0b931b9'
- notice: /Stage[main]//Node[cookbook]/Tmpfile[b]/File[/tmp/b]/
- ensure: defined content as '{md5}bc6e6f16b8a077ef5fbc8d59d0b931b9'
- notice: /Stage[main]//Node[cookbook]/Tmpfile[c]/File[/tmp/c]/
- ensure: defined content as '{md5}bc6e6f16b8a077ef5fbc8d59d0b931b9'
工作原理
你可以认为 define 就像是一个饼干切割器。它描述了一种模式,Puppet 可以用它创建许多类似的资源。任何时候你都可以在你的配置清单中声明 tmpfile 实例,Puppet 将会插入包含在 tmpfile 定义中的所有资源。
在我们的例子中,名为 tmpfile 的 define 包含了一个 file 资源, 其 content 为 "Hello, world";其 path 为 "/tmp/$name"。 如果你用名字 foo 声明了一个 tmpfile 实例,如下所示:
- tmpfile { "foo": }
会被 Puppet 要创建的实例名字所代替。这就像是我们创建了一个新的资源类型: tmpfile,它包含一个参数(即其名字)。
与常规资源一样,我们不仅可以为其传递一个字符串的名字,我们还可以传递一个数组名, Puppet 会对每一个数组元素创建一个 tmpfile 实例,就像上面的例子那样。
更多用法
在上面的例子中,我们定义的 define 仅有一个名字参数,不同实例的名字不同。 但是我们可以为其添加任何我们想要的参数,只要我们在 define 中声明这些参数即可:
- define tmpfile( $greeting ) {
- file { "/tmp/$name":
- content => $greeting,
- }
- }
当我们声明一个资源的实例时,可以为其传递参数值,例如:
- tmpfile{ "foo": greeting => "Hello, world" }
你可以使用逗号间隔的列表同时声明多个参数:
- define webapp( $domain, $path, $platform ) {
- ...
- }
- webapp { "mywizzoapp":
- domain => "mywizzoapp.com",
- path => "/var/www/apps/mywizzoapp",
- platform => "Rails",
- }
转载于:https://blog.51cto.com/1076468/1123791