Я видел многочисленные посты в Интернете о входе в 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.
]
Для полноты, моя конечная цель - запускать этот скрипт каждую минуту или несколько минут и записывать данные в файл, чтобы отслеживать энергопотребление во времени и в конечном итоге создать некоторый график этих данных.