【发布时间】:2017-07-24 03:33:11
【问题描述】:
使用puppet修改listener.ora文件:
file_line { 'addFloatingListenerTCPS':
ensure => present,
path => "${LSNR_PATH}/listener.ora",
line => " (ADDRESS = (PROTOCOL = TCPS)(HOST = ${FLOATING_IP})(PORT = 1522))",
after => "^\s+(ADDRESS = (PROTOCOL = TCPS)(HOST = DB)(PORT = 1522))",
require => Class["othernode"]
}
这不会导致任何 puppet 错误,但会将新条目一直放在文件的末尾,而不是放在侦听器块中应有的位置。 (对我来说,这表明 after 属性值与文件内容不匹配,因此 puppet 默认为附加模式)。
更改after 属性值以转义所有括号:
after => "^\s+\(ADDRESS = \(PROTOCOL = TCPS\)\(HOST = DB\)\(PORT = 1522\)\)",
在控制台中生成多个警告:
Warning: Unrecognised escape sequence '\(' in file /etc/puppet/modules/test_conf/manifests/init.pp at line 30
Warning: Unrecognised escape sequence '\(' in file /etc/puppet/modules/test_conf/manifests/init.pp at line 30
Warning: Unrecognised escape sequence '\)' in file /etc/puppet/modules/test_conf/manifests/init.pp at line 30
Warning: Unrecognised escape sequence '\(' in file /etc/puppet/modules/test_conf/manifests/init.pp at line 30
Warning: Unrecognised escape sequence '\)' in file /etc/puppet/modules/test_conf/manifests/init.pp at line 30
Warning: Unrecognised escape sequence '\(' in file /etc/puppet/modules/test_conf/manifests/init.pp at line 30
Warning: Unrecognised escape sequence '\)' in file /etc/puppet/modules/test_conf/manifests/init.pp at line 30
Warning: Unrecognised escape sequence '\)' in file /etc/puppet/modules/test_conf/manifests/init.pp at line 30
使其无法在卫星中使用。但是,执行完成后,新条目就在它应该在的块内。
这引发了多个问题:
- 括号是否被解释为特殊字符,如果是,为什么不能转义?
- puppet stdlib 正则表达式是否处理反向引用?
【问题讨论】:
-
是否有效:
"^\\s+\\(ADDRESS = \\(PROTOCOL = TCPS\\)\\(HOST = DB\\)\\(PORT = 1522\\)\\)"
标签: regex oracle puppet standard-library