我有一个文件,在这种情况下叫做alarm.file。下面的代码遍历文件的每一行,如果包含“Blade_HostName”它将其添加到一个列表中,并将该行的分离版本分配给一个变量,则它检查该文件中的“Node:”并添加Blade_HostName作为字典中的关键字,并添加“节点:”作为键的值。返回字典中具有相同值的所有密钥
我被困在下一步。我希望它通过字典并返回共享相同值的所有密钥。我可以从那里处理它。
从返回的键列表中,我将使用子过程ssh到该值,对所有具有该值的键运行一个命令,然后对每个具有其他唯一值的键执行相同的操作(如注释所示在底部的代码)。
在此先感谢。
样品的alarm.file的情况下,它需要:
报警类型:寄存重新启动警报
节点:10.xx.xx.2
主机名:
摘要:电子CM_HELLO 7213存储10。 xx.xx.1重新启动
BladeIP_Storage_Was_restarted = 10.xx.xx.1
Blade_HostName = r33b26
Xcat_Info = njxcat01
地区= NJ
甲cknowledged:0
FirstOccurrence:2016年2月24日9点49分32秒EST
LastOccurrence:2016年2月24日9点49分32秒EST
出现次数= 1
数-------- -----------
报警类型:寄存重新启动警报
节点:10.xx.xx.2
主机名:
摘要:电子CM_HELLO 7213存储10.xx.xx.2已重新启动
BladeIP_Storage_Was_restarted = 10.xx.xx.2
Blade_HostName = r39b14
Xcat_Info = njxcat01
地区= NJ
确认:0
FirstOccurrence:2016年2月24日9时49分40秒EST
LastOccurrence:2016年2月24日9时49分40秒EST
发生次数= 1种
-------------------
报警类型:寄存重新启动警报
节点:10.xx.xx.3
主机名:
摘要: E CM_HELLO 7213存储10.xx.xx.3重新启动
BladeIP_Storage_Was_restarted = 10.xx.xx.3
Blade_HostName = r54b05
Xcat_Info = njxcat01
地区= NJ
确认:0
FirstOccurrence:2016年2月24日9点49分43秒EST
LastOccurrence:2016年2月24日9点49分43秒EST = 1
-------------------
发生
数
#!/usr/bin/python3
import os, sys, subprocess
myRackDict = {}
myRack = ""
myListX = []
myBladeList = []
if len(sys.argv) <= 1:
print('Not a valid file, please try again')
sys.exit()
elif len(sys.argv) > 1:
myFile = sys.argv[1]
if myFile == '':
sys.exit()
with open(myFile, 'r') as f:
for line in f:
if 'Blade_HostName' in line:
line = line.replace('Blade_HostName = ', '')
line = line.rstrip('\n')
line = line.lstrip()
#print(line)
myRack = line
#myBladeList.append(myRack)
elif 'Node: ' in line:
line = line.rstrip('\n')
line = line.lstrip(' ')
line = line.replace('Node: ', '')
if not myRack in myRackDict.keys():
myRackDict[myRack] = line
else:
continue
print(myRackDict)
#myString = ('for i in ' + ' '.join(myBladeList) + ' ;do echo $i; psh $i monit summary; done')
#print(myString)
"""
mySsh = subprocess.check_output("ssh " + "[email protected]" + myxCat['hixxcat'] + " 'psh r1046b01 monit summary'", shell=True)
encoded = mySsh.decode()
print(encoded)
"""
你有另一个问题。由于节点先于Blade_HostName,因此'myRackDict [myRack] = line'正在使用上一节中的旧刀片。 – tdelaney
我没有意识到..谢谢你指出。我会看看我能否修复。 – Dimurof82
@tdelaney我看到我把它搞砸了。 Orignally我正在使用Blade_HostName后出现的另一个字段,并将其更改为Node。我会重新安排。再次感谢您指出。 – Dimurof82