Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects

Remove credential columns

Merged Frederico SEQUEIRA requested to merge remove_credential_columns into add_createvm_form

Files

+ 69
12
from django import forms
from django.forms import inlineformset_factory
from django.contrib.contenttypes.models import ContentType
from django.db import transaction
from utilities.forms.fields import DynamicModelChoiceField
from netbox.forms import NetBoxModelForm
from virtualization.models import ClusterType, Cluster, VirtualMachine, VMInterface
from ipam.models import IPAddress, Service
from dcim.models import DeviceRole,Site, Platform
from utilities.forms.fields import DynamicModelChoiceField
from django.db import transaction
from extras.models import Tag, TaggedItem
@@ -25,7 +28,7 @@ class ClusterForm(NetBoxModelForm):
super().__init__(*args, **kwargs)
self.fields.pop('tags',None)
class ClusterFormList(NetBoxModelForm):
class ClusterFormList(NetBoxModelForm, forms.Form):
"""Form for Cluster List."""
cluster_type = DynamicModelChoiceField(
queryset=ClusterType.objects.all(), required=False, label="Provider Type"
@@ -38,7 +41,7 @@ class ClusterFormList(NetBoxModelForm):
class Meta:
model = Cluster
fields = ('cluster_type','cluster')
fields = ('cluster_type','cluster','tags')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@@ -90,6 +93,21 @@ class IPAddressForm(NetBoxModelForm):
super().__init__(*args, **kwargs)
self.fields.pop('tags',None)
class TagsForm(NetBoxModelForm):
"""Form for IP Addresses."""
tag = DynamicModelChoiceField(
queryset=Tag.objects.all(), required=False, label="Tag"
)
class Meta:
model = Tag
fields = ('tag',)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields.pop('tags',None)
# Inline formsets for managing relationships
ClusterFormSet = inlineformset_factory(
@@ -122,10 +140,14 @@ ClusterListFormSet = forms.modelformset_factory(
Cluster, form=ClusterFormList, formset=ClusterFormList, extra=1, can_delete=False
)
TagFormSet = forms.modelformset_factory(
Tag, form=TagsForm, formset=TagsForm, extra=1, can_delete=False
)
# Combined form
class CreateVmForm(NetBoxModelForm):
"""Combined form for managing ClusterType, Cluster, and VirtualMachine."""
"""Combined form for managing ClusterType, Cluster, and VirtualMachine, etc"""
name = forms.CharField(max_length=50, min_length=1, required=False, label="Name")
slug = forms.CharField(max_length=100, min_length=1, required=False, label="Slug")
@@ -172,6 +194,10 @@ class CreateVmForm(NetBoxModelForm):
self.cl_list_formsets = []
empty_cl_list_formset = ClusterListFormSet(data=data, prefix='cl_list_new')
self.cl_list_formsets.append(('new', empty_cl_list_formset))
# Tags
self.tagformsets = []
empty_tagformset = TagFormSet(data=data, prefix='tag_new')
self.tagformsets.append(('new', empty_tagformset))
@staticmethod
def check_cluster_exist(data):
@@ -194,6 +220,31 @@ class CreateVmForm(NetBoxModelForm):
return ports
except ValueError:
raise ValueError(f"Invalid ports value: {ports_field}")
@staticmethod
def get_parse_tags(data):
tag_id = data.get('tag_new-tag', '')
if not tag_id:
return []
try:
tags_field = Tag.objects.get(pk=tag_id)
return [tags_field]
except Tag.DoesNotExist:
raise ValueError (f"Invalid tag: {tags_field}")
@staticmethod
def assign_tags(obj,data):
"""Assign Tags to the created objects"""
tags = CreateVmForm.get_parse_tags(data)
content_type = ContentType.objects.get_for_model(obj)
for tag in tags:
TaggedItem.objects.create(
tag=tag,
content_type=content_type,
object_id=obj.pk
)
@staticmethod
def create_cluster_type(data):
@@ -201,10 +252,11 @@ class CreateVmForm(NetBoxModelForm):
cluster_type = ClusterType(
name=data.get('name', ''),
slug=data.get('slug', ''),
description=data.get('description', '')
description=data.get('description', ''),
)
cluster_type.full_clean()
cluster_type.save()
CreateVmForm.assign_tags(cluster_type,data)
return cluster_type
@staticmethod
@@ -221,10 +273,11 @@ class CreateVmForm(NetBoxModelForm):
type=cluster_type,
status=data.get('clusters-0-status', ''),
site=site,
description=data.get('clusters-0-description', '')
description=data.get('clusters-0-description', ''),
)
cluster.full_clean()
cluster.save()
CreateVmForm.assign_tags(cluster,data)
return cluster
@staticmethod
@@ -249,10 +302,11 @@ class CreateVmForm(NetBoxModelForm):
site=cluster.site,
platform=platform,
description=data.get('vms_new-0-description', ''),
cluster=cluster
cluster=cluster,
)
vm.full_clean()
vm.save()
CreateVmForm.assign_tags(vm,data)
return vm
@staticmethod
@@ -264,6 +318,7 @@ class CreateVmForm(NetBoxModelForm):
)
vmi.full_clean()
vmi.save()
CreateVmForm.assign_tags(vmi,data)
return vmi
@staticmethod
@@ -277,10 +332,11 @@ class CreateVmForm(NetBoxModelForm):
protocol=data.get(f'{prefix}-0-protocol', ''),
ports=ports,
description=description,
virtual_machine=vm
virtual_machine=vm,
)
service.full_clean()
service.save()
CreateVmForm.assign_tags(service,data)
return service
def create_all_services(self, data, vm):
@@ -296,14 +352,15 @@ class CreateVmForm(NetBoxModelForm):
address=data.get('ip_new-address', ''),
status=data.get('ip_new-status', ''),
role=data.get('ip_new-role', ''),
assigned_object=vm_interface
assigned_object=vm_interface,
)
ip_address.full_clean()
ip_address.save()
CreateVmForm.assign_tags(ip_address,data)
return ip_address
def process_creation(self, data):
"""Process creation of ClusterType, Cluster, VM, and related objects."""
"""Object creation"""
try:
with transaction.atomic():
cluster_exists = self.check_cluster_exist(data)
Loading