added zoni-cli
Found here: https://svn.apache.org/repos/asf/incubator/tashi/import/zoni-intel-r843/
This commit is contained in:
parent
ec0003bfa8
commit
68b51c7a0a
22 changed files with 3547 additions and 0 deletions
207
ssh/zoni-cli/delldrac.py
Normal file
207
ssh/zoni-cli/delldrac.py
Normal file
|
@ -0,0 +1,207 @@
|
|||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
import sys
|
||||
import os
|
||||
import pexpect
|
||||
import time
|
||||
|
||||
from systemmanagementinterface import SystemManagementInterface
|
||||
|
||||
|
||||
#class systemmagement():
|
||||
#def __init__(self, proto):
|
||||
#self.proto = proto
|
||||
|
||||
def log(f):
|
||||
def myF(*args, **kw):
|
||||
print "calling %s%s" % (f.__name__, str(args))
|
||||
res = f(*args, **kw)
|
||||
print "returning from %s -> %s" % (f.__name__, str(res))
|
||||
return res
|
||||
myF.__name__ = f.__name__
|
||||
return myF
|
||||
|
||||
import time
|
||||
|
||||
def timeF(f):
|
||||
def myF(*args, **kw):
|
||||
start = time.time()
|
||||
res = f(*args, **kw)
|
||||
end = time.time()
|
||||
print "%s took %f" % (f.__name__, end-start)
|
||||
return res
|
||||
myF.__name__ = f.__name__
|
||||
return myF
|
||||
|
||||
|
||||
class dellDrac(SystemManagementInterface):
|
||||
def __init__(self, host):
|
||||
self.hostname = host['location']
|
||||
self.host = host['drac_name']
|
||||
self.user = host['drac_userid']
|
||||
self.password = host['drac_password']
|
||||
self.port = host['drac_port']
|
||||
self.powerStatus = None
|
||||
self.verbose = 0
|
||||
self.server = "Server-" + str(self.port)
|
||||
|
||||
def setVerbose(self, verbose):
|
||||
self.verbose = verbose
|
||||
|
||||
def __login(self):
|
||||
switchIp = "telnet " + self.host
|
||||
child = pexpect.spawn(switchIp)
|
||||
|
||||
if self.verbose:
|
||||
child.logfile = sys.stdout
|
||||
|
||||
opt = child.expect(['Login:', pexpect.EOF, pexpect.TIMEOUT])
|
||||
|
||||
|
||||
#XXX Doesn't seem to do what I want:(
|
||||
child.setecho(False)
|
||||
if opt == 0:
|
||||
child.sendline(self.user)
|
||||
time.sleep(.5)
|
||||
child.sendline(self.password)
|
||||
time.sleep(.5)
|
||||
i=child.expect(['DRAC/MC:', pexpect.EOF, pexpect.TIMEOUT])
|
||||
else:
|
||||
mesg = "Error"
|
||||
sys.stderr.write(mesg)
|
||||
exit(1)
|
||||
|
||||
return child
|
||||
|
||||
@timeF
|
||||
@log
|
||||
def getPowerStatus(self):
|
||||
child = self.__login()
|
||||
cmd = "getmodinfo -m " + self.server
|
||||
child.sendline(cmd)
|
||||
#i=child.expect(['DRAC/MC:', pexpect.EOF, pexpect.TIMEOUT])
|
||||
#exit()
|
||||
val = child.readline()
|
||||
val = child.readline()
|
||||
while self.server not in val:
|
||||
val = child.readline()
|
||||
|
||||
if "ON" in val:
|
||||
mesg = self.hostname + " Power is on\n\n"
|
||||
self.powerStatus = 1
|
||||
if "OFF" in val:
|
||||
mesg = self.hostname + " Power is off\n\n"
|
||||
self.powerStatus = 0
|
||||
|
||||
sys.stdout.write(mesg)
|
||||
|
||||
#while status not in val:
|
||||
#val = child.readline()
|
||||
#
|
||||
#print "val for", status, "is ", val
|
||||
#i=child.expect(['DRAC/MC:', pexpect.EOF, pexpect.TIMEOUT])
|
||||
#val = child.readlines()
|
||||
child.close()
|
||||
child.terminate()
|
||||
|
||||
|
||||
@timeF
|
||||
def isPowered(self):
|
||||
if self.powerStatus == None:
|
||||
self.getPowerStatus()
|
||||
if self.powerStatus:
|
||||
return 1;
|
||||
if not self.powerStatus:
|
||||
return 0;
|
||||
|
||||
|
||||
@timeF
|
||||
def powerOn(self):
|
||||
if self.powerStatus == 1:
|
||||
mesg = self.hostname + " Power On\n\n"
|
||||
exit(1)
|
||||
|
||||
child = self.__login()
|
||||
cmd = "racadm serveraction -m " + self.server + " powerup"
|
||||
child.sendline(cmd)
|
||||
val = child.readline()
|
||||
val = child.readline()
|
||||
if "OK" in val:
|
||||
mesg = self.hostname + " Power On\n\n"
|
||||
else:
|
||||
mesg = self.hostname + " Power On Fail\n\n"
|
||||
sys.stdout.write(mesg)
|
||||
#i=child.expect(['DRAC/MC:', pexpect.EOF, pexpect.TIMEOUT])
|
||||
child.terminate()
|
||||
|
||||
@timeF
|
||||
def powerOff(self):
|
||||
child = self.__login()
|
||||
cmd = "racadm serveraction -m " + self.server + " powerdown"
|
||||
child.sendline(cmd)
|
||||
val = child.readline()
|
||||
val = child.readline()
|
||||
if "OK" in val:
|
||||
mesg = self.hostname + " Power Off\n\n"
|
||||
else:
|
||||
mesg = self.hostname + " Power Off Fail\n\n"
|
||||
sys.stdout.write(mesg)
|
||||
#i=child.expect(['DRAC/MC:', pexpect.EOF, pexpect.TIMEOUT])
|
||||
child.terminate()
|
||||
|
||||
@timeF
|
||||
def powerCycle(self):
|
||||
child = self.__login()
|
||||
cmd = "racadm serveraction -m " + self.server + " powercycle"
|
||||
child.sendline(cmd)
|
||||
val = child.readline()
|
||||
val = child.readline()
|
||||
if "OK" in val:
|
||||
mesg = self.hostname + " Power Cycle\n\n"
|
||||
else:
|
||||
mesg = self.hostname + " Power Cycle Fail\n\n"
|
||||
sys.stdout.write(mesg)
|
||||
#i=child.expect(['DRAC/MC:', pexpect.EOF, pexpect.TIMEOUT])
|
||||
child.terminate()
|
||||
|
||||
@timeF
|
||||
def powerReset(self):
|
||||
child = self.__login()
|
||||
cmd = "racadm serveraction -m " + self.server + " hardreset"
|
||||
child.sendline(cmd)
|
||||
val = child.readline()
|
||||
val = child.readline()
|
||||
if "OK" in val:
|
||||
mesg = self.hostname + " Power Reset\n\n"
|
||||
else:
|
||||
mesg = self.hostname + " Power Reset Fail\n\n"
|
||||
sys.stdout.write(mesg)
|
||||
#i=child.expect(['DRAC/MC:', pexpect.EOF, pexpect.TIMEOUT])
|
||||
child.terminate()
|
||||
|
||||
def activateConsole(self):
|
||||
child = self.__login()
|
||||
cmd = "connect -F " + self.server
|
||||
child.sendline(cmd)
|
||||
i=child.expect(['DRAC/MC:', pexpect.EOF, pexpect.TIMEOUT])
|
||||
child.terminate()
|
||||
|
||||
#ipmitool -I lanplus -E -H r2r1c3b0-ipmi -U root chassis power status
|
Loading…
Add table
Add a link
Reference in a new issue