Пример #1
0
 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
Пример #2
0
 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
Пример #3
0
 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
Пример #4
0
 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
Пример #5
0
 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
Пример #6
0
 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
Пример #7
0
 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
Пример #8
0
 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
Пример #9
0
 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
Пример #10
0
 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
Пример #11
0
 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
Пример #12
0
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))
Пример #13
0
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')
Пример #14
0
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())
Пример #15
0
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())