Puppet:如何解决" file_line"多重匹配模式

时间:2016-08-13 08:29:16

标签: puppet

我尝试使用puppet更改配置文件。

这是我要更改的test.txt文件:

[default]
#puppet=no
abc=123

[nova]
#puppet=no

我想改变"#puppet = no" to" puppet = yes" 仅限于[默认]标签。

这是我的test.pp两个版本:

file_line{"someline":
   path => '/root/openstack-puppet/computenode/nova/test.txt',
   match => '[default]\n#puppet',
   line => 'puppet=ok'
}

这个找不到匹配模式,所以只需添加" puppet = ok"在文件的末尾。

file_line{"someline":
   path => '/root/openstack-puppet/computenode/nova/test.txt',
   match => '#puppet',
   line => 'puppet=ok'
}

由于多重匹配模式问题导致此失败。

我也尝试了Augeas,但是我无法找到如何使用Augeas取消注释。

有人请帮助我解决这个问题!!

=============================================== ==========================

我运行此代码:

file_line { 'someline':
  path     => '/root/openstack-puppet/computenode/nova/test.txt',
  after    => '\[default\]',
  multiple => 'false',
  match    => '#puppet',
  line     => 'puppet=ok',
}

但是当我和&#34跑步时,木偶申请"它仍然会出现同样的错误:

Error: More than one line in file '/root/openstack-puppet/computenode/nova/test.txt' matches pattern '#puppet'
Error: /Stage[main]/Main/File_line[someline]/ensure: change from absent to present failed: More than one line in file '/root/openstack-puppet/computenode/nova/test.txt' matches pattern '#puppet'

我认为'之后'当匹配时,属性无法应用'属性已定义。

当我删除'匹配'属性,它有效,但它没有取代原始字符串('#puppet = no')。

它只是在[默认]之后添加了新行:

[default]
puppet=ok
#puppet=no
abc=123
dedd=0


[nova]
#puppet=no

所以问题仍然存在,如何删除(或替换)字符串'#puppet = no' 仅在[默认]标签上

2 个答案:

答案 0 :(得分:1)

该文件看起来符合 ini 文件格式,因此更好的解决方案是使用 inifile 资源类型 https://forge.puppet.com/modules/puppetlabs/inifile

ini_setting { "sample setting":
  ensure  => present,
  path    => '/root/openstack-puppet/computenode/nova/test.txt',
  section => 'default',
  setting => 'puppet',
  value   => 'yes',
}

答案 1 :(得分:0)

你好,你可以试试。

include stdlib
file_line{"someline":
   ensure => 'present',
   after => 'default',
   multiple => false,
   path => '/root/openstack-puppet/computenode/nova/test.txt',
   line => 'puppet=ok',
}