Автоматизация CLI APC PDU через телнет - PullRequest
3 голосов
/ 29 марта 2019

Я видел многочисленные посты в Интернете о входе в APC PDU через telnet с использованием Python pexpect, PHP и т. Д. Однако все примеры выглядят так:

Python - телнет - автоматизация APC PDU

https://github.com/quackenbush/APC

Они входят в систему с помощью консоли управления, которая, как мне кажется, не предлагает столько метрик. Я ищу способ автоматизации интерфейса командной строки и отправки различных команд для проверки метрик.

Я узнал, что это возможно, добавив -c к вашему паролю в приглашении для входа в систему (из этого источника: https://www.apc.com/us/en/faqs/FA156163/):

APC_DEFAULT_USER     = 'apc'
APC_DEFAULT_PASSWORD = 'apc -c'
self.child.expect('User Name : ')
self.child.send(APC_DEFAULT_USER + '\r\n')
self.child.expect('Password  : ')
self.child.send(APC_DEFAULT_PASSWORD + '\r\n')

Но это то, где я застреваю. Мне бы хотелось общее решение, позволяющее мне указывать различные команды PDU в качестве аргументов командной строки, например:

--command power
--command current
etc.

Я использую argparse для получения аргументов от пользователя, поэтому args.command выглядит так:

parser.add_argument('--command', action='store', default='',
                    help='The command to run')

У меня также нет сильных чувств по поводу этого в Python. Я более чем счастлив использовать другой язык, если он более понятен. Я просто пытаюсь основать свой сценарий на сценарии quankenbush / APC.

Я пытался выполнить ожидания для приглашения APC>, например:

self.info("Attempting to run command: {}".format(self.command))
self.child.expect('APC> ')
self.sendnl(self.command)
self.child.expect(' OK')
self.child.expect('APC> ')

Но я получаю

"Команда не существует"

ошибок, хотя я знаю, что команды "power" и "current" существуют.

Вот полный вывод (в режиме --verbose):

$ python apc_metrics.py --host <my.ip.addr> --command power -v
Acquiring lock /tmp/apc.lock
Connecting to APC @ <my.ip.addr>
Logged in as user apc
Attempting to run command: power
apc    
******

American Power Conversion
Rack PDU AP7930 v3.7.3
AOS v3.7.3
Outlets: 24
(c) 2008 All Rights Reserved
Unit ID: RackPDU

 1: ON    : Outlet 1
 2: ON    : Outlet 2
 3: ON    : Outlet 3
 4: ON    : Outlet 4
 5: ON    : Outlet 5
 6: ON    : Outlet 6
 7: ON    : Outlet 7
 8: ON    : Outlet 8
 9: ON    : Outlet 9
10: ON    : Outlet 10
11: ON    : Outlet 11
12: ON    : Outlet 12
13: ON    : Outlet 13
14: ON    : Outlet 14
15: ON    : Outlet 15
16: ON    : Outlet 16
17: ON    : Outlet 17
18: ON    : Outlet 18
19: ON    : Outlet 19
20: ON    : Outlet 20
21: ON    : Outlet 21
22: ON    : Outlet 22
23: ON    : Outlet 23
24: ON    : Outlet 24

APC> 
power

DISCONNECTED from <my.ip.addr>
[
 E100 : Command does not exist
APC> 
4
 OK
 E100 : Command does not exist
APC> 


Bye.

Connection Closed - Bye
Connection closed by foreign host.
]

Для полноты, моя конечная цель - запускать этот скрипт каждую минуту или несколько минут и записывать данные в файл, чтобы отслеживать энергопотребление во времени и в конечном итоге создать некоторый график этих данных.

...