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

tnv*_*nvr 1 puppet

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

例如,这是在 Puppet 中删除一行的正确方法吗?

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

Ale*_*vey 5

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

file { '/path/to/file.html':
  ensure  => file,
  content => '',
}
Run Code Online (Sandbox Code Playgroud)

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

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

file_line { 'bashrc_proxy':
  ensure            => absent,
  path              => '/etc/bashrc',
  match             => '^export\ HTTP_PROXY\=',
  match_for_absence => true,
}
Run Code Online (Sandbox Code Playgroud)

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

请注意,line => ...参数将被接受在上面的示例中被忽略

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

file_line { 'bashrc_proxy':
  ensure => absent,
  path   => '/etc/bashrc',
  line   => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',
}
Run Code Online (Sandbox Code Playgroud)

请注意,当以这种方式确保行不存在时,这次的默认行为是始终删除所有匹配的行,并且无法禁用此行为。

另请参阅此处此处的代码以及单元测试。

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

谢谢你的提问。