Пример #1
0
    def post(self, request, *args, **kwargs):
        """Add machine."""
        if not request.user.is_superuser:
            return ErrorMessage(
                "Only superusers are allowed to perform this action!").as_json

        data = json.loads(request.body.decode('utf-8'))['form']
        form = MachineAPIForm(data)

        if form.is_valid():

            cleaned_data = form.cleaned_data
            mac_address = cleaned_data['mac_address']
            del cleaned_data['mac_address']
            hypervisor = None
            if cleaned_data['hypervisor_fqdn']:
                hypervisor = Machine.objects.get(
                    fqdn=cleaned_data['hypervisor_fqdn'])
            del cleaned_data['hypervisor_fqdn']
            new_machine = Machine(**cleaned_data)
            new_machine.hypervisor = hypervisor
            new_machine.mac_address = mac_address
            try:
                new_machine.save()
            except Exception as e:
                logger.exception(e)
                return ErrorMessage("Something went wrong!").as_json

            return Message('Ok.').as_json

        return ErrorMessage("\n{}".format(
            format_cli_form_errors(form))).as_json
Пример #2
0
    def create(self, *args, **kwargs):
        """
        Create a virtual machine.

        Method returns a new `Machine` object and calls the subclass to actually create the virtual
        machine physically.
        """
        from orthos2.data.models import (Architecture, Machine, RemotePower,
                                         SerialConsole, SerialConsoleType,
                                         System)
        from django.contrib.auth.models import User

        vm = Machine()
        vm.unsaved_networkinterfaces = []

        vm.architecture = Architecture.objects.get(name=kwargs['architecture'])
        vm.system = System.objects.get(pk=kwargs['system'])

        self._create(vm, *args, **kwargs)

        vm.mac_address = vm.unsaved_networkinterfaces[0].mac_address
        vm.check_connectivity = Machine.Connectivity.ALL
        vm.collect_system_information = True
        vm.save()

        for networkinterface in vm.unsaved_networkinterfaces[1:]:
            networkinterface.machine = vm
            networkinterface.save()
        vm.remotepower = RemotePower(fence_name="virsh")
        vm.remotepower.save()

        if self.host.has_serialconsole():
            stype = SerialConsoleType.objects.get(name='libvirt/qemu')
            if not stype:
                raise Exception("Bug: SerialConsoleType not found")
            vm.serialconsole = SerialConsole(stype=stype, baud_rate=115200)
            vm.serialconsole.save()

        if vm.vnc['enabled']:
            vm.annotations.create(text='VNC enabled: {}:{}'.format(
                self.host.fqdn, vm.vnc['port']),
                                  reporter=User.objects.get(username='******'))

        return vm
Пример #3
0
    def setUp(self, m_is_dns_resolvable):
        m_is_dns_resolvable.return_value = True

        ServerConfig.objects.create(key='domain.validendings', value='bar.de')

        m1 = Machine()
        m1.pk = 1
        m1.fqdn = 'machine1.foo.bar.de'
        m1.mac_address = '01:AB:22:33:44:55'
        m1.architecture_id = Architecture.Type.X86_64

        m1.save()

        m2 = Machine()
        m1.pk = 2
        m2.fqdn = 'machine2.foo.bar.de'
        m2.mac_address = '02:AB:22:33:44:55'
        m2.architecture_id = Architecture.Type.X86_64

        m2.save()