我在网上看到了无数有关使用Python pexpect,PHP等通过telnet登录APC PDU的帖子。但是,所有示例都是这样的:
Python - telnet - automation APC PDU
https://github.com/quackenbush/APC
他们使用控制台登录,我认为控制台不能提供那么多的指标。我正在寻找一种自动化命令行界面并发送各种命令以检查指标的方法。
我了解到可以通过在登录提示符处(从此来源:https://www.apc.com/us/en/faqs/FA156163/)向您的密码附加-c
:
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.
]
为了完整起见,我的最终目标是每分钟或每分钟运行一次此脚本,并将数据写入文件以跟踪一段时间内的电源使用情况,并最终创建此数据的一些图形。