in community/front-end/ofe/website/ghpcfe/views/clusters.py [0:0]
def get_mp_formset(self, **kwargs):
def formfield_cb(model_field, **kwargs):
field = model_field.formfield(**kwargs)
cluster = self.object
if model_field.name == "export":
if cluster.shared_fs is None:
# Create and save the shared filesystem, exports, and mount points
shared_fs = Filesystem(
name=f"{cluster.name}-sharedfs",
cloud_credential=cluster.cloud_credential,
cloud_id=cluster.cloud_id,
cloud_state=cluster.cloud_state,
cloud_region=cluster.cloud_region,
cloud_zone=cluster.cloud_zone,
subnet=cluster.subnet,
fstype="n",
impl_type=FilesystemImpl.BUILT_IN,
)
shared_fs.save()
export = FilesystemExport(filesystem=shared_fs, export_name="/opt/cluster")
export.save()
export = FilesystemExport(filesystem=shared_fs, export_name="/home")
export.save()
cluster.shared_fs = shared_fs
cluster.save()
# Create and save mount points
export = cluster.shared_fs.exports.all()[0]
mp = MountPoint(
export=export,
cluster=cluster,
mount_order=0,
mount_options="defaults,nofail,nosuid",
mount_path="/opt/cluster",
)
mp.save()
export = cluster.shared_fs.exports.all()[1]
mp = MountPoint(
export=export,
cluster=cluster,
mount_order=1,
mount_options="defaults,nofail,nosuid",
mount_path="/home",
)
mp.save()
# Continue with the usual logic for handling exports
if cluster.shared_fs is not None:
fsquery = (
Filesystem.objects.exclude(
impl_type=FilesystemImpl.BUILT_IN
)
.filter(cloud_state__in=["m", "i"])
.values_list("pk", flat=True)
)
# Add back our cluster's filesystem
fsystems = list(fsquery) + [cluster.shared_fs.id]
field.queryset = FilesystemExport.objects.filter(
filesystem__in=fsystems
)
return field
# This creates a new class on the fly
FormClass = inlineformset_factory( # pylint: disable=invalid-name
Cluster,
MountPoint,
form=ClusterMountPointForm,
formfield_callback=formfield_cb,
can_delete=True,
extra=0,
)
if self.request.POST:
kwargs["data"] = self.request.POST
return FormClass(instance=self.object, **kwargs)