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 = {}
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 = {}