def raid_disk(self): # 查看物理硬盘状态 if self.obj.vendor == 'HP': cmd = "/opt/ssacli/bin/ssacli ctrl slot=%s pd all show" % ( self.obj.raid_adapter_slot) ret_data = remote_cmd(cmd, self.addr, user=self.user, passwd=self.passwd) if self.obj.disk_set.all(): self.obj.disk_set.all().delete() if ret_data.find('physicaldrive'): cmd1 = "/opt/ssacli/bin/ssacli ctrl slot=%s pd all show status" % ( self.obj.raid_adapter_slot) ret_data1 = remote_cmd(cmd1, self.addr, user=self.user, passwd=self.passwd) ph_drivers = ret_data1.strip('\n').split('\n') for driver in ph_drivers: item = driver.split() disk = Disk.objects.create(name=item[1], server_id=self.obj.id, size=item[6], status=item[8]) disk.save() else: ret_data = "暂时不支持该品牌,请联系管理员,我们会尽快加入支持。" return ret_data
def raid_card(self): # 查看raid卡信息(包括控制器状态、Cache状态、电池状态) if self.obj.vendor == 'HP': cmd = "/opt/ssacli/bin/ssacli ctrl all show status" else: return "暂时不支持该品牌,请联系管理员,我们会尽快加入支持。" ret_data = remote_cmd(cmd, self.addr, user=self.user, passwd=self.passwd) return ret_data
def create_raid(self, drivers, raid_type): # 创建raid if self.obj.vendor == 'HP': cmd = "/opt/ssacli/bin/ssacli ctrl slot=%s create type=ld drives=%s raid=%s" % ( self.obj.raid_adapter_slot, drivers, raid_type) else: return "暂时不支持该品牌,请联系管理员,我们会尽快加入支持。" ret_data = remote_cmd(cmd, self.addr, user=self.user, passwd=self.passwd) return ret_data
def raid_status(self): # 查看raid状态 if self.obj.vendor == 'HP': cmd = "/opt/ssacli/bin/ssacli ctrl slot=%s ld all show" % ( self.obj.raid_adapter_slot) else: return "暂时不支持该品牌,请联系管理员,我们会尽快加入支持。" ret_data = remote_cmd(cmd, self.addr, user=self.user, passwd=self.passwd) return ret_data
def raid_detail(self): # 查看raid详细信息 if self.obj.vendor == 'HP': cmd = "/opt/ssacli/bin/ssacli ctrl slot=%s show config detail" % ( self.obj.raid_adapter_slot) else: return "暂时不支持该品牌,请联系管理员,我们会尽快加入支持。" ret_data = remote_cmd(cmd, self.addr, user=self.user, passwd=self.passwd) return ret_data
def delete_raid(self, array): # 删除raid if self.obj.vendor == 'HP': cmd = "/opt/ssacli/bin/ssacli ctrl slot=%s array %s delete forced" % ( self.obj.raid_adapter_slot, array) else: return "暂时不支持该品牌,请联系管理员,我们会尽快加入支持。" ret_data = remote_cmd(cmd, self.addr, user=self.user, passwd=self.passwd) return ret_data
def raid_card(self): # 查看raid卡信息(包括控制器状态、Cache状态、电池状态) ret = {'status':False,'result':''} if self.obj.vendor in ['HP','Hewlett-Packard']: cmd = "/opt/ssacli/bin/ssacli ctrl all show status" try: ret = remote_cmd(cmd,self.addr,user=self.user,passwd=self.passwd) except Exception as e: ret['result'] = str(e) else: ret['result'] = "暂时不支持该品牌,请联系管理员,我们会尽快加入支持。" return ret
def raid_status(self): # 查看raid状态 ret = {'status':False,'result':''} if self.obj.vendor in ['HP','Hewlett-Packard']: cmd = "/opt/ssacli/bin/ssacli ctrl slot=%s ld all show"%(self.obj.raid_adapter_slot) try: ret = remote_cmd(cmd,self.addr,user=self.user,passwd=self.passwd) except Exception as e: ret['result'] = str(e) else: ret['result'] = "暂时不支持该品牌,请联系管理员,我们会尽快加入支持。" return ret
def raid_disk(self): # 查看物理硬盘状态 ret = {'status':False,'result':''} if self.obj.vendor in ['HP','Hewlett-Packard']: cmd = "/opt/ssacli/bin/ssacli ctrl slot=%s pd all show"%(self.obj.raid_adapter_slot) try: ret = remote_cmd(cmd,self.addr,user=self.user,passwd=self.passwd) except Exception as e: ret['result'] = str(e) if self.obj.disk_set.all(): self.obj.disk_set.all().delete() if ret.find('physicaldrive'): cmd1 = "/opt/ssacli/bin/ssacli ctrl slot=%s pd all show status"%(self.obj.raid_adapter_slot) ret = remote_cmd(cmd1,self.addr,user=self.user,passwd=self.passwd) ph_drivers = ret1.strip('\n').split('\n') for driver in ph_drivers: item = driver.split() disk = Disk.objects.create(name=item[1],server_id=self.obj.id,size=item[6],status=item[8]) disk.save() else: ret['result'] = "暂时不支持该品牌,请联系管理员,我们会尽快加入支持。" return ret
def create_raid(self,drivers,raid_type): # 创建raid ret = {'status':False,'result':''} if self.obj.vendor in ['HP','Hewlett-Packard']: cmd = "/opt/ssacli/bin/ssacli ctrl slot=%s create type=ld drives=%s raid=%s forced"%(self.obj.raid_adapter_slot,drivers,raid_type) try: ret = remote_cmd(cmd,self.addr,user=self.user,passwd=self.passwd) if re.search('Error',ret['result']): ret = {'status':False,'result':ret['result']} except Exception as e: ret['result'] = str(e) else: ret['result'] = "暂时不支持该品牌,请联系管理员,我们会尽快加入支持。" return ret
def delete_raid(self,array): # 删除raid ret = {'status':False,'result':''} if self.obj.vendor in ['HP','Hewlett-Packard']: cmd = "/opt/ssacli/bin/ssacli ctrl slot=%s array %s delete forced"%(self.obj.raid_adapter_slot,array) try: ret = remote_cmd(cmd,self.addr,user=self.user,passwd=self.passwd) if re.search('Error',ret['result']): ret = {'status':False,'result':ret['result']} except Exception as e: ret['result'] = str(e) else: ret['result'] = "暂时不支持该品牌,请联系管理员,我们会尽快加入支持。" return ret
def state_delete(request): ids = request.POST.getlist('ids[]', '') ret_data = {} salt_master = get_object_or_404(ServiceHost, service='salt_master') for state_id in ids: try: state = get_object_or_404(SaltState, pk=state_id) cmd = "rm -rf %s" % (os.path.join(state.path, state.name)) ret = remote_cmd(cmd, salt_master.ip, salt_master.port, salt_master.user, salt_master.password) if ret['status'] and not ret['err']: state.delete() else: ret_data[state.name] = ret['result'] except Exception as e: ret_data[state.name] = str(e) return HttpResponse(json.dumps(ret_data))
def state_upload(request): if request.method == 'GET': # pass return render(request, 'opsdb/salt/upload_state.html') else: myFile = request.FILES.get("myfile", None) if not myFile: messages.error(request, 'No files for upload!') return render(request, 'opsdb/salt/upload_state.html') else: if not 'tar' in myFile.name: messages.error(request, 'Must be archived a tar package!') return render(request, 'opsdb/salt/upload_state.html') else: destination = open(os.path.join("/tmp", myFile.name), 'wb+') for chunk in myFile.chunks(): destination.write(chunk) destination.close() salt_master = get_object_or_404(ServiceHost, service='salt_master') try: localpath = "/tmp/%s" % (myFile.name) # remotepath = "/srv/salt/%s"%(myFile.name) remotepath = "/srv/salt" remotefile = os.path.join(remotepath, myFile.name) ret1 = put_file(salt_master.ip,salt_master.user,salt_master.password,\ localpath,remotefile,salt_master.port) if ret1['status']: cmd = "tar xvf %s -C %s;rm -f %s" % ( remotefile, remotepath, remotefile) ret2 = remote_cmd(cmd, salt_master.ip, salt_master.port, salt_master.user, salt_master.password) if ret2['status'] and not ret2['err']: SaltState.objects.update_or_create( name=myFile.name.split('.')[0], defaults={ 'path': remotepath, 'owner': request.user.username }) messages.success(request, 'Upload over!') else: messages.error(request, ret2['result']) else: messages.error(request, ret1['err']) except Exception as e: messages.error(request, str(e)) return render(request, 'opsdb/salt/upload_state.html')
def add_system(request): if request.method == "GET": return render(request, 'opsdb/host/add_system.html') else: ip = request.POST.get('ip', '') port = request.POST.get('port', '') username = request.POST.get('username', '') password = request.POST.get('password', '') if ip and port and username and password: cmd = "curl -L http://192.168.3.166/cobbler/svc/install-minion.sh | sh" ret = remote_cmd(cmd, ip, port=int(port), user=username, passwd=password) if ret['status'] and not ret['err']: messages.success(request, '添加成功') else: messages.error(request, ret['result']) return render(request, 'opsdb/host/add_system.html', locals())
def server_raid(request, server_id, fun, array): ''' raid模块,包含以下方法: 1、查看物理硬盘状态 (raid_status) 2、创建raid (create_raid) 3、删除raid (delete_raid) ''' server = get_object_or_404(Server, pk=server_id) addr = server.pxe_ip if fun == 'raid_status': disks = server.disk_set.all() values = disks.values('raid_name', 'raid_type').distinct() rds = dict() for value in values: tmp = {} tmp['raid_type'] = value['raid_type'] dks = disks.filter(raid_name=value['raid_name']) dk = [] for d in dks: dk.append({'path': d.path, 'dtype': d.dtype, 'size': d.size}) tmp['disks'] = dk rds[value['raid_name']] = tmp elif fun == 'create_raid': if request.method == 'GET': disks = server.disk_set.filter(raid_name='Unassigned') return render(request, 'installation/create_raid.html', locals()) else: disks = request.POST.getlist('drivers', '') drivers = ','.join(disks) raid_type = request.POST.get('raid_type', '') rd = RAIDAPI(server, addr, user='******', passwd='P@ssw0rd') ret_data = rd.create_raid(drivers, raid_type) if ret_data['status']: cobbler = get_object_or_404(ServiceHost, service='cobbler') cmd = "curl -L http://%s:%s/cobbler/svc/post_server_info.sh | sh > /tmp/curl.log 2>&1" % ( cobbler.ip, cobbler.port) try: ret = remote_cmd(cmd, addr, user='******', passwd='P@ssw0rd') if ret['status']: ret_data[ 'result'] = 'Raid %s has been created on %s' % ( raid_type, drivers) else: ret_data['result'] = ret['result'] except Exception as e: ret_data['result'] = str(e) else: pass return HttpResponse(ret_data['result']) elif fun == 'delete_raid': rd = RAIDAPI(server, addr, user='******', passwd='P@ssw0rd') ret_data = rd.delete_raid(array) if ret_data['status']: cobbler = get_object_or_404(ServiceHost, service='cobbler') cmd = "curl -L http://%s:%s/cobbler/svc/post_server_info.sh | sh > /tmp/curl.log 2>&1" % ( cobbler.ip, cobbler.port) try: ret = remote_cmd(cmd, addr, user='******', passwd='P@ssw0rd') if ret['status']: ret_data['result'] = 'Array %s has been deleted' % (array) else: ret_data['result'] = ret['result'] except Exception as e: ret_data['result'] = str(e) else: pass return HttpResponse(json.dumps(ret_data)) else: pass return render(request, 'installation/raid.html', locals())