반응형
개인적으로 자주쓰고 활용도 있는 함수들을 따로 기록해놓는 공간입니다.
Case 1. Router 장비만 추출하기
def getRouterList():
routerList = list()
device = requests.get('serverName/api-script?password=supersecret;function=web_export_device_list;', verify=False)
for elem in device.text.splitlines():
line = elem.split(',')
temp = list()
if line[0][1].startswith('R'):
temp.append(line[0])
temp.append(line[1].strip())
routerList.append(temp)
return routerList
AKiPS에서 장비리스트를 추출하는 방법은 몇 가지가 된다. 그 중에 나는 AKiPS에서 제공하는 Site Scripting 기능과 Python 코드를 이용해서 장비 리스트를 추출하도록 했다. 위의 파이썬 코드를 정상적으로 동작시키기 위해서는 아래의 Perl 코드를 AKiPS의 site scripting 항목에 붙여넣어 주어야 한다.
# It is a Perl script
sub web_export_device_list
{
my %ip_data;
my @device = ();
for my $line (adb_result ('mget text * sys ip4addr')) {
my ($dev, undef, undef, undef, $val) = split (" ", $line, 5);
push @device, $dev;
$ip_data{$dev} = $val;
}
# deviceName,ip4 address
for my $dev (@device) {
printf "%s, %s\n", $dev, $ip_data{$dev};
}
return;
}
Case 2. 특정 UPS mib를 확인 후 ticket 만들기
ISP 백그라운 경력을 갖고 있는 내게 UPS는 서비스의 availabilty를 위해 굉장히 중요한 장비라고 생각한다. 따라서, 입사 후 개인적으로 side project를 만들며 추진해 왔었던 것이 UPS 관련 업무 자동화이다. 이를 위해 perl 스크립트 하나를 작성해보았다. 프로그램의 로직은 다음과 같다. UPS에서 batteryLow라는 SNMP mib 정보가 수집되면 특정 이메일 수신자로 메일을 보낸다. 물론, 여기서는 ticketing 시스템으로 이메일을 보내게 된다. 시간에 대한 처리가 존재하는데 중복으로 ticket을 만들지 않기 위해서 추가한 부분이다. 만약 해당 시간처리 부분의 코드가 없으면 매일 (AKiPS는 특정 시간에 새로운 장비가 추가되었는지 discover하는 과정이 존재) 동일한 시간에 ticket이 생성된다.
sub custom_autoSubmit_tickets
{
my @upsbatteryStatusArr = adb_result ("mget * * * /UPS-MIB.upsbatteryStatus/ value /batteryLow/");
my @body;
my $mail_from = 'yourEmail';
my $mail_to = 'toEmail';
my $suffix = "Assign:ISNFRA";
my $cur_tt = time();
$cur_tt = $cur_tt - (60 * 60 * 12);
# This script handles two different cases
# Case 1. UPS generates battery low status
foreach my $elem (@upsbatteryStatusArr) {
my ($device, undef, undef, $val) = split (" ", $elem , 4);
my (undef, undef, undef, $alerted_time, undef) = split(",", $val, 5);
# For not submitting duplicate SRs
if ($cur_tt < $alerted_time) {
push @body, sprintf ("Device: %s\n", $device);
my $subject = sprintf ("UPS battery is low %s", $suffix);
mail ({
to => $mail_to,
from => $mail_from,
subject => $subject,
body => \@body
});
@body = ();
}
}
}
반응형
'<툴, 프로그램 관련> > [Script]' 카테고리의 다른 글
Outlook에서 Python Script 실행하기 (0) | 2021.03.16 |
---|---|
MAC Address 포맷 변경 크롬 익스텐션 (0) | 2021.02.10 |
Infoblox WAPI example (0) | 2020.12.03 |
[CLI Script] VTP domain gathering pexpect module (0) | 2020.06.02 |
SecureCRT python script to update hostname and banner (0) | 2020.03.04 |