L'utilisation de marionnettes pour modifier un fichier listener.ora
:manière correcte de regex parenthèse match file_line fantoche après l'article
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"]
}
Cela ne provoque pas d'erreurs de marionnettes, mais place la nouvelle entrée tout le chemin à la fin de le fichier, plutôt que dans le bloc d'écoute où il devrait être. (Pour moi, cela indique que la valeur de l'attribut after
ne correspond pas au contenu du fichier, donc le mode ajout par défaut de la marionnette).
Modification de la valeur d'attribut after
pour échapper à toutes les parenthèses:
after => "^\s+\(ADDRESS = \(PROTOCOL = TCPS\)\(HOST = DB\)\(PORT = 1522\)\)",
génère plusieurs avertissements dans la console:
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
rendant inutilisable par satellite. Cependant, l'exécution se termine et après la nouvelle entrée est à l'intérieur du bloc où il devrait être.
Cela soulève plusieurs questions:
- sont-parenthèses interprétés comme des caractères spéciaux, et si oui, pourquoi ne peuvent-ils être échappées?
- Est-ce que les expressions régulières de marionnette stdlib gèrent les références?
fonctionne-t-il: '"^\\ s + \\ (adresse = \\ (PROTOCOLE = EPTC \\) \\ (HOST = DB \\) \\ (PORT = 1522 \\) \\) "' – MohaMad