Example #1
0
File: pods.py Project: zhangrb/maas
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        if self.request is None:
            raise ValueError("'request' kwargs is required.")
        self.pod = kwargs.pop('pod', None)
        if self.pod is None:
            raise ValueError("'pod' kwargs is required.")
        super(ComposeMachineForm, self).__init__(*args, **kwargs)

        # Build the fields based on the pod and current pod hints.
        self.fields['cores'] = IntegerField(min_value=1,
                                            max_value=self.pod.hints.cores,
                                            required=False)
        self.initial['cores'] = 1
        self.fields['memory'] = IntegerField(min_value=1024,
                                             max_value=self.pod.hints.memory,
                                             required=False)
        self.initial['memory'] = 1024
        self.fields['architecture'] = ChoiceField(choices=[
            (arch, arch) for arch in self.pod.architectures
        ],
                                                  required=False)
        self.initial['architecture'] = self.pod.architectures[0]
        if self.pod.hints.cpu_speed > 0:
            self.fields['cpu_speed'] = IntegerField(
                min_value=300,
                max_value=self.pod.hints.cpu_speed,
                required=False)
        else:
            self.fields['cpu_speed'] = IntegerField(min_value=300,
                                                    required=False)

        def duplicated_hostname(hostname):
            if Node.objects.filter(hostname=hostname).exists():
                raise ValidationError(
                    'Node with hostname "%s" already exists' % hostname)

        self.fields['hostname'] = CharField(required=False,
                                            validators=[duplicated_hostname])
        self.initial['hostname'] = make_unique_hostname()
        self.fields['domain'] = ModelChoiceField(required=False,
                                                 queryset=Domain.objects.all())
        self.initial['domain'] = Domain.objects.get_default_domain()
        self.fields['zone'] = ModelChoiceField(required=False,
                                               queryset=Zone.objects.all())
        self.initial['zone'] = Zone.objects.get_default_zone()
        self.fields['pool'] = ModelChoiceField(
            required=False, queryset=ResourcePool.objects.all())
        self.initial['pool'] = self.pod.pool
        self.fields['storage'] = CharField(validators=[storage_validator],
                                           required=False)
        self.initial['storage'] = 'root:8(local)'
        self.fields['interfaces'] = LabeledConstraintMapField(
            validators=[interfaces_validator],
            label="Interface constraints",
            required=False)
        self.initial['interfaces'] = None
        self.fields['skip_commissioning'] = BooleanField(required=False)
        self.initial['skip_commissioning'] = False
        self.allocated_ips = {}
Example #2
0
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop("request", None)
        if self.request is None:
            raise ValueError("'request' kwargs is required.")
        self.pod = kwargs.pop("pod", None)
        if self.pod is None:
            raise ValueError("'pod' kwargs is required.")
        super(ComposeMachineForm, self).__init__(*args, **kwargs)

        # Build the fields based on the pod and current pod hints.
        self.fields["cores"] = IntegerField(min_value=1,
                                            max_value=self.pod.hints.cores,
                                            required=False)
        self.initial["cores"] = DEFAULT_COMPOSED_CORES
        # LP:1877126 - Focal requires 2048M of memory to deploy, older
        # versions of Ubuntu only need 1024M. The default is 2048M so all
        # versions of Ubuntu work but users may use 1024M.
        self.fields["memory"] = IntegerField(min_value=1024,
                                             max_value=self.pod.hints.memory,
                                             required=False)
        self.initial["memory"] = DEFAULT_COMPOSED_MEMORY
        self.fields["architecture"] = ChoiceField(
            choices=[(arch, arch) for arch in self.pod.architectures],
            required=False,
        )
        self.initial["architecture"] = self.pod.architectures[0]
        if self.pod.hints.cpu_speed > 0:
            self.fields["cpu_speed"] = IntegerField(
                min_value=300,
                max_value=self.pod.hints.cpu_speed,
                required=False,
            )
        else:
            self.fields["cpu_speed"] = IntegerField(min_value=300,
                                                    required=False)

        def duplicated_hostname(hostname):
            if Node.objects.filter(hostname=hostname).exists():
                raise ValidationError(
                    'Node with hostname "%s" already exists' % hostname)

        self.fields["hostname"] = CharField(
            required=False,
            validators=[duplicated_hostname, validate_hostname])
        self.initial["hostname"] = make_unique_hostname()
        self.fields["domain"] = ModelChoiceField(required=False,
                                                 queryset=Domain.objects.all())
        self.initial["domain"] = Domain.objects.get_default_domain()
        self.fields["zone"] = ModelChoiceField(required=False,
                                               queryset=Zone.objects.all())
        self.initial["zone"] = Zone.objects.get_default_zone()
        self.fields["pool"] = ModelChoiceField(
            required=False, queryset=ResourcePool.objects.all())
        self.initial["pool"] = self.pod.pool
        self.fields["storage"] = CharField(validators=[storage_validator],
                                           required=False)
        self.initial["storage"] = f"root:{DEFAULT_COMPOSED_STORAGE}(local)"
        self.fields["interfaces"] = LabeledConstraintMapField(
            validators=[interfaces_validator],
            label="Interface constraints",
            required=False,
        )
        self.initial["interfaces"] = None
        self.fields["skip_commissioning"] = BooleanField(required=False)
        self.initial["skip_commissioning"] = False
        self.allocated_ips = {}