如何使用Puppet更改文件的内容?

时间:2017-09-28 12:15:53

标签: puppet

我有一个html文件,我想使用Puppet将文件替换为具有相同文件名的空文件。我想知道Puppet是否有可能删除文件的全部内容?

E.g。这是在Puppet中删除一行的正确方法吗?

file_line { 'delete a line':
 ensure => absent,
 path => /tmp/test,
 line => '\ '
 match => '^(?:.*)'
}

1 个答案:

答案 0 :(得分:2)

如果你知道有一个文件/path/to/file.html并且你想确保该文件存在且为空,那么很容易:

file { '/path/to/file.html':
  ensure  => file,
  content => '',
}

如果您想确保使用file_line删除该文件中的一行,则设置ensure => absent时有两种方法可以执行此操作。

一个是设置match => ...match_for_absence => true, 如下例所示:

file_line { 'bashrc_proxy':
  ensure            => absent,
  path              => '/etc/bashrc',
  match             => '^export\ HTTP_PROXY\=',
  match_for_absence => true,
}

在此代码示例中,匹配将查找以export开头的行 然后是HTTP_PROXY并删除它。如果多行匹配,则 除非设置了multiple => true参数,否则将引发错误。

请注意,line => ...参数将被接受但忽略 上面的例子。

使用ensure => absent的第二种方法是指定line => ..., 并且没有匹配:

file_line { 'bashrc_proxy':
  ensure => absent,
  path   => '/etc/bashrc',
  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',
}

请注意,当确保行不存在这种方式时,默认行为 这个时候总是删除所有匹配的行,以及这种行为 无法禁用。

另请参阅代码herehere以及单元测试。

我还提出了一个拉取请求,将file_line的这些示例添加到官方文档here中,因为之前没有充分记录。

感谢您的提问。