Exemple #1
0
 def post(self, request):
   try:
     ip = request.DATA['ip']
     current_appliance = request.DATA['current_appliance']
     # authenticate if not adding current appliance
     if not current_appliance:
         username = request.DATA['username']
         password = request.DATA['password']
         url = 'https://%s/api/login' % ip
         logger.info('adding appliance %s at %s with %s %s' % (ip, url,
             username, password))
         r = requests.post(
                 url,
                 headers = {'content-type': 'application/json'},
                 verify=False,
                 data = json.dumps({'username': username,
                     'password': password}))
         logger.debug('in AppliancesView ')
         logger.debug(r.status_code)
         if (r.status_code != 200):
             raise Exception('Could not verify appliance %s' % ip)
         appliance = Appliance(ip = ip)
         appliance.save()
     else:
         appliance_uuid = ('%s:%s' % (hostid()[0][0], str(uuid.uuid4())))
         appliance = Appliance(uuid=appliance_uuid, ip=ip,
                               current_appliance=True)
         appliance.save()
     return Response(ApplianceSerializer(appliance).data)
   except Exception, e:
     handle_exception(e, request)
Exemple #2
0
    def post(self, request):
      try:
        ip = request.DATA['ip']
        current_appliance = request.DATA['current_appliance']
        # authenticate if not adding current appliance
        if not current_appliance:
            username = request.DATA['username']
            password = request.DATA['password']
            url = 'https://%s/api/login' % ip
            logger.info('adding appliance %s at %s with %s %s' % (ip, url,
                username, password))
            r = requests.post(
                    url,
                    headers = {'content-type': 'application/json'},
                    verify=False,
                    data = json.dumps({'username': username,
                        'password': password}))
            logger.debug('in AppliancesView ')
            logger.debug(r.status_code)
            if (r.status_code != 200):
                raise Exception('Could not verify appliance %s' % ip)
            appliance = Appliance(ip = ip)
            appliance.save()
        else:
            appliance_uuid = ('%s:%s' % (hostid()[0][0], str(uuid.uuid4())))
            appliance = Appliance(uuid=appliance_uuid, ip=ip,
                                  current_appliance=True)
            appliance.save()
            # the current appliance is created - open a support case
            # and send email
            try: 
                notes = 'Appliance %s initialized' % appliance.uuid
                sc = SupportCase(notes=notes, status='created', 
                        case_type='auto')
                sc.save()
                emsg = EmailMessage(subject='support case',
                        body=notes,
                        from_email='*****@*****.**',
                        to=[settings.SUPPORT['email']])
                emsg.send()
                sc.status = 'submitted'
                sc.save()
            except Exception, e:
                # if an exception occurs during the above, dont exit, 
                # the appliance should still be usable.
                logger.exception('exception while creating support \
                        case for Appliance initialization')

        return Response(ApplianceSerializer(appliance).data)
Exemple #3
0
    def post(self, request, *args, **kwargs):
        with self._handle_exception(request):
            ip = request.data.get("ip", "")
            current_appliance = request.data.get("current_appliance")
            # authenticate if not adding current appliance
            if Appliance.objects.filter(ip=ip).exists():
                e_msg = (
                    "The appliance with ip = {} already exists and "
                    "cannot be added again."
                ).format(ip)
                handle_exception(Exception(e_msg), request)

            if current_appliance is False:
                client_id = request.data.get("client_id", None)
                if client_id is None:
                    raise Exception("ID is required")
                client_secret = request.data.get("client_secret", None)
                if client_secret is None:
                    raise Exception("Secret is required")
                try:
                    mgmt_port = int(request.data["mgmt_port"])
                except Exception as e:
                    logger.exception(e)
                    e_msg = (
                        "Invalid management port ({}) supplied. Try again."
                    ).format(request.data["mgmt_port"])
                    handle_exception(Exception(e_msg), request)
                url = "https://%s" % ip
                if mgmt_port != 443:
                    url = "%s:%s" % (url, mgmt_port)
                ra_uuid = self._get_remote_appliance(
                    request, ip, mgmt_port, client_id, client_secret
                )
                appliance = Appliance(
                    uuid=ra_uuid,
                    ip=ip,
                    mgmt_port=mgmt_port,
                    client_id=client_id,
                    client_secret=client_secret,
                )
                appliance.save()
            else:
                appliance = Appliance(uuid=hostid(), ip=ip, current_appliance=True)
                if "hostname" in request.data:
                    appliance.hostname = request.data["hostname"]
                appliance.save()
                sethostname(appliance.hostname)
            return Response(ApplianceSerializer(appliance).data)
    def post(self, request, *args, **kwargs):
        with self._handle_exception(request):
            ip = request.data.get('ip', '')
            current_appliance = request.data.get('current_appliance')
            # authenticate if not adding current appliance
            if (Appliance.objects.filter(ip=ip).exists()):
                e_msg = ('The appliance with ip = {} already exists and '
                         'cannot be added again.').format(ip)
                handle_exception(Exception(e_msg), request)

            if (current_appliance is False):
                client_id = request.data.get('client_id', None)
                if (client_id is None):
                    raise Exception('ID is required')
                client_secret = request.data.get('client_secret', None)
                if (client_secret is None):
                    raise Exception('Secret is required')
                try:
                    mgmt_port = int(request.data['mgmt_port'])
                except Exception as e:
                    logger.exception(e)
                    e_msg = ('Invalid management port ({}) supplied. Try '
                             'again.').format(request.data['mgmt_port'])
                    handle_exception(Exception(e_msg), request)
                url = ('https://%s' % ip)
                if (mgmt_port != 443):
                    url = ('%s:%s' % (url, mgmt_port))
                ra_uuid = self._get_remote_appliance(request, ip, mgmt_port,
                                                     client_id, client_secret)
                appliance = Appliance(uuid=ra_uuid,
                                      ip=ip,
                                      mgmt_port=mgmt_port,
                                      client_id=client_id,
                                      client_secret=client_secret)
                appliance.save()
            else:
                appliance = Appliance(uuid=hostid(),
                                      ip=ip,
                                      current_appliance=True)
                if ('hostname' in request.data):
                    appliance.hostname = request.data['hostname']
                appliance.save()
                sethostname(appliance.hostname)
            return Response(ApplianceSerializer(appliance).data)
    def post(self, request, *args, **kwargs):
        with self._handle_exception(request):
            ip = request.data.get('ip', '')
            current_appliance = request.data.get('current_appliance')
            # authenticate if not adding current appliance
            if (Appliance.objects.filter(ip=ip).exists()):
                e_msg = ('The appliance with ip = %s already exists and '
                         'cannot be added again' % ip)
                handle_exception(Exception(e_msg), request)

            if (current_appliance is False):
                client_id = request.data.get('client_id', None)
                if (client_id is None):
                    raise Exception('ID is required')
                client_secret = request.data.get('client_secret', None)
                if (client_secret is None):
                    raise Exception('Secret is required')
                try:
                    mgmt_port = int(request.data['mgmt_port'])
                except Exception as e:
                    logger.exception(e)
                    e_msg = ('Invalid management port(%s) supplied. Try '
                             'again' % request.data['mgmt_port'])
                    handle_exception(Exception(e_msg), request)
                url = ('https://%s' % ip)
                if (mgmt_port != 443):
                    url = ('%s:%s' % (url, mgmt_port))
                ra_uuid = self._get_remote_appliance(request, ip, mgmt_port,
                                                     client_id, client_secret)
                appliance = Appliance(uuid=ra_uuid, ip=ip, mgmt_port=mgmt_port,
                                      client_id=client_id,
                                      client_secret=client_secret)
                appliance.save()
            else:
                appliance = Appliance(uuid=hostid(), ip=ip,
                                      current_appliance=True)
                if ('hostname' in request.data):
                    appliance.hostname = request.data['hostname']
                appliance.save()
                sethostname(appliance.hostname)
            return Response(ApplianceSerializer(appliance).data)
                except Exception, e:
                    logger.exception(e)
                    e_msg = ('Invalid management port(%s) supplied. Try '
                             'again' % request.data['mgmt_port'])
                    handle_exception(Exception(e_msg), request)
                url = ('https://%s' % ip)
                if (mgmt_port != 443):
                    url = ('%s:%s' % (url, mgmt_port))
                ra_uuid = self._get_remote_appliance(request, ip, mgmt_port,
                                                     client_id, client_secret)
                appliance = Appliance(uuid=ra_uuid, ip=ip, mgmt_port=mgmt_port,
                                      client_id=client_id,
                                      client_secret=client_secret)
                appliance.save()
            else:
                appliance_uuid = ('%s-%s' % (hostid()[0][0],
                                             str(uuid.uuid4())))
                appliance = Appliance(uuid=appliance_uuid, ip=ip,
                                      current_appliance=True)
                if ('hostname' in request.data):
                    appliance.hostname = request.data['hostname']
                appliance.save()
                sethostname(appliance.hostname)
            return Response(ApplianceSerializer(appliance).data)


class ApplianceDetailView(rfc.GenericView):
    serializer_class = ApplianceSerializer

    def get(self, *args, **kwargs):
        if 'ip' in self.kwargs or 'id' in self.kwargs:
                             'again' % request.DATA['mgmt_port'])
                    handle_exception(Exception(e_msg), request)
                url = ('https://%s' % ip)
                if (mgmt_port != 443):
                    url = ('%s:%s' % (url, mgmt_port))
                ra_uuid = self._get_remote_appliance(request, ip, mgmt_port,
                                                     client_id, client_secret)
                appliance = Appliance(uuid=ra_uuid,
                                      ip=ip,
                                      mgmt_port=mgmt_port,
                                      client_id=client_id,
                                      client_secret=client_secret)
                appliance.save()
            else:
                appliance_uuid = ('%s-%s' %
                                  (hostid()[0][0], str(uuid.uuid4())))
                appliance = Appliance(uuid=appliance_uuid,
                                      ip=ip,
                                      current_appliance=True)
                if ('hostname' in request.DATA):
                    appliance.hostname = request.DATA['hostname']
                appliance.save()
                sethostname(ip, appliance.hostname)
            return Response(ApplianceSerializer(appliance).data)
        except RockStorAPIException:
            raise
        except Exception, e:
            handle_exception(e, request)

    def delete(self, request, id):
        try:
                    e_msg = ('Invalid management port(%s) supplied. Try '
                             'again' % request.data['mgmt_port'])
                    handle_exception(Exception(e_msg), request)
                url = ('https://%s' % ip)
                if (mgmt_port != 443):
                    url = ('%s:%s' % (url, mgmt_port))
                ra_uuid = self._get_remote_appliance(request, ip, mgmt_port,
                                                     client_id, client_secret)
                appliance = Appliance(uuid=ra_uuid,
                                      ip=ip,
                                      mgmt_port=mgmt_port,
                                      client_id=client_id,
                                      client_secret=client_secret)
                appliance.save()
            else:
                appliance = Appliance(uuid=hostid(),
                                      ip=ip,
                                      current_appliance=True)
                if ('hostname' in request.data):
                    appliance.hostname = request.data['hostname']
                appliance.save()
                sethostname(appliance.hostname)
            return Response(ApplianceSerializer(appliance).data)


class ApplianceDetailView(rfc.GenericView):
    serializer_class = ApplianceSerializer

    def get(self, *args, **kwargs):
        with self._handle_exception(self.request):
            data = Appliance.objects.get(id=self.kwargs.get('appid'))
Exemple #9
0
                except Exception, e:
                    logger.exception(e)
                    e_msg = ('Invalid management port(%s) supplied. Try '
                             'again' % request.data['mgmt_port'])
                    handle_exception(Exception(e_msg), request)
                url = ('https://%s' % ip)
                if (mgmt_port != 443):
                    url = ('%s:%s' % (url, mgmt_port))
                ra_uuid = self._get_remote_appliance(request, ip, mgmt_port,
                                                     client_id, client_secret)
                appliance = Appliance(uuid=ra_uuid, ip=ip, mgmt_port=mgmt_port,
                                      client_id=client_id,
                                      client_secret=client_secret)
                appliance.save()
            else:
                appliance_uuid = ('%s-%s' % (hostid()[0][0],
                                             str(uuid.uuid4())))
                appliance = Appliance(uuid=appliance_uuid, ip=ip,
                                      current_appliance=True)
                if ('hostname' in request.data):
                    appliance.hostname = request.data['hostname']
                appliance.save()
                sethostname(ip, appliance.hostname)
            return Response(ApplianceSerializer(appliance).data)


class ApplianceDetailView(rfc.GenericView):
    serializer_class = ApplianceSerializer

    def get(self, *args, **kwargs):
        if 'ip' in self.kwargs or 'id' in self.kwargs:
Exemple #10
0
                except Exception, e:
                    logger.exception(e)
                    e_msg = ('Invalid management port(%s) supplied. Try '
                             'again' % request.data['mgmt_port'])
                    handle_exception(Exception(e_msg), request)
                url = ('https://%s' % ip)
                if (mgmt_port != 443):
                    url = ('%s:%s' % (url, mgmt_port))
                ra_uuid = self._get_remote_appliance(request, ip, mgmt_port,
                                                     client_id, client_secret)
                appliance = Appliance(uuid=ra_uuid, ip=ip, mgmt_port=mgmt_port,
                                      client_id=client_id,
                                      client_secret=client_secret)
                appliance.save()
            else:
                appliance = Appliance(uuid=hostid(), ip=ip,
                                      current_appliance=True)
                if ('hostname' in request.data):
                    appliance.hostname = request.data['hostname']
                appliance.save()
                sethostname(appliance.hostname)
            return Response(ApplianceSerializer(appliance).data)


class ApplianceDetailView(rfc.GenericView):
    serializer_class = ApplianceSerializer

    def get(self, *args, **kwargs):
        with self._handle_exception(self.request):
            data = Appliance.objects.get(id=self.kwargs.get('appid'))
            serialized_data = ApplianceSerializer(data)