다음에 표시되거나 표시되지 않을 수 있는 항목이 있습니다 /etc/rsyslog.conf
.
# Added for Kiwi
*.err;*.emerg;*.alert;*.warning;*.debug;*.notice;*.crit;*.info @10.19.24.50
이러한 서버 중 일부는 이를 수동으로 입력하기 때문에 공백이 균일하다고 가정할 수 없습니다(그리고 내가 찾은 최소 두 개의 서버에 따라 다릅니다). 이 줄을 제거하기 위해 꼭두각시 모듈을 작성하려고 합니다.
이 모듈의 관련 부분:
file_line {'remove_kiwi_comment':
ensure => absent,
path => $confFile,
match => "^#.*Kiwi$",
line => "# Added for Kiwi",
match_for_absence => true,
}
file_line {'remove_kiwi_forward2':
ensure => absent,
match_for_absence => true,
path => $confFile,
match => '^.*50$',
line => '*.err;*.emerg;*.alert;*.warning;*.debug;*.notice;*.crit;*.info @10.19.24.50',
notify => Service[$serviceName],
}
위 코드는 DEV 서버 중 하나에서 주석을 성공적으로 제거했지만 실제 리디렉션은 제거되지 않은 것으로 보입니다. 나는 성공하지 못한 채 정규식을 사용해 보았지만 match=>
줄을 삭제하기 위해 무엇을 시도할 수 있는지 잘 모르겠습니다. 충분한 공간을 추가하면 제거되지만 모듈이 공간을 차지하지 않고 rsyslog
.
Stdlib 모듈 버전은 4.11, 마스터는 3.3, 이 서버의 클라이언트 노드는 3.6입니다.
답변1
이 file_line
유형에는 귀하에게 적합한 이후 옵션이 있습니다. 유일한 문제는 댓글을 달기 전에 규칙을 삭제했는지 확인해야 한다는 것입니다.
file_line {'remove_kiwi_comment':
ensure => absent,
path => $confFile,
match => '^#.*Kiwi$',
line => '# Added for Kiwi',
match_for_absence => true,
}
file_line {'remove_kiwi_forward2':
ensure => absent,
path => $confFile,
line => '# Added for Kiwi',
after => '^#.*Kiwi$',
before => File_line['remove_kiwi_comment'],
notify => Service[$serviceName],
}
주석이 파일에 있다는 것을 믿을 수 없다면 제가 생각할 수 있는 가장 간단한 해결책은 exec
with 를 사용하는 것입니다 sed
.
exec { 'remove-kiwi-rsyslog-line-with-sed':
command => "sed -i '/@10\.19\.24\.50$/d' $confFile",
path => '/usr/bin:/bin',
onlyif => "grep -q '@10.19.24.50$' $confFile",
}
exec는 파일에 IP 주소 10.19.24.50이 포함된 경우에만 실행됩니다.
답변2
리디렉션 회선을 제거하려면 다음을 사용해 보십시오.
file_line {'remove_kiwi_forward2': 보장 => 결석, match_for_absence => 사실, 경로 => $conf파일, 일치 => '^.*50$', line => '\*.err;\*.emerg;\*.alert;\*.warning;\*.debug;\*.notice;\*.crit;\*.info.*@10.19.24.50' , 알림=>서비스[$serviceName], }
답변3
더 많은 조사를 한 후에 나는 이것이 file_line
비침해적인 프로필 관리에 대한 최선의 노력이라는 것을 알았습니다. 나와 비슷한 불만을 갖고 있는 사람들이 많이 있다. file_line
읽기 쉬운 인형을 원할 때 인형 모듈을 사용하는 것이 일반적이지만, 문제의 첫 징후가 나타나면 포기하고 다른 모든 용도로 Augeas를 사용하기 시작하는 것 같습니다.
내 임시 인형 모듈의 최종 버전:
class kiwiprep {
if ($::syslogng == "ABSENT"){
case $::operatingsystemmajrelease {
/^5/: {
$serviceName="syslog"
$confFile="/etc/syslog.conf"
}
/^(6|7)/: {
$serviceName="rsyslog"
$confFile="/etc/rsyslog.conf"
}
default:{
fail("Platform Not Supported")
}
}
service {$serviceName:
ensure => running,
enable => true,
}
file_line {'remove_kiwi_comment':
ensure => absent,
path => $confFile,
match => "^#.*Kiwi$",
line => "# Added for Kiwi",
match_for_absence => true,
}
augeas {"kiwi forwarder 1":
context => "/files$confFile",
changes => ["rm *[descendant::hostname = '10.19.24.50']"],
}
augeas {"kiwi forwarder 2":
context => "/files$confFile",
changes => ["rm *[descendant::hostname = '10.18.104.50']"],
}
}
}
(이것은 RHEL에만 해당되며 SUSE 또는 Debian에 맞게 변경해야 합니다.)
보시다시피 내 최종 모듈에는 file_line
주석이 유지되는데 이는 나에게 잘 작동합니다. 그런 다음 값이 내 전달자 중 하나와 동일한 하위 항목이 있는 최상위 개체를 삭제하는 작업으로 되돌아갑니다 augeas
. hostname
이 모듈은 환경을 정리할 때 완벽하게 작동합니다. file_line
이제 기존 응답기를 정리했으므로 돌아가서 새 응답기를 제자리에 추가하겠습니다.