class VirtualServerSerializer(ComponentSerializerMixin, BaseObjectSerializer): type = VirtualServerTypeSerializer() # TODO: cast BaseObject to DataCenterAsset for hypervisor field hypervisor = DataCenterAssetSimpleSerializer(source='parent') # TODO: clusters scmstatuscheck = SCMInfoSerializer() securityscan = SecurityScanSerializer() class Meta(BaseObjectSerializer.Meta): model = VirtualServer exclude = ('content_type', 'cluster')
class CloudHostSerializer(NetworkComponentSerializerMixin, BaseObjectSerializer): hypervisor = DataCenterAssetSimpleSerializer() parent = CloudProjectSimpleSerializer(source='cloudproject') cloudflavor = CloudFlavorSimpleSerializer() service_env = ServiceEnvironmentSimpleSerializer() scmstatuscheck = SCMInfoSerializer() securityscan = SecurityScanSerializer() class Meta(BaseObjectSerializer.Meta): model = CloudHost depth = 1
class DataCenterAssetSerializer(ComponentSerializerMixin, AssetSerializer): rack = SimpleRackSerializer() scmstatuscheck = SCMInfoSerializer() securityscan = SecurityScanSerializer() related_hosts = serializers.SerializerMethodField() def _get_serialized_sublist(self, full_list, serializer_class, cond): return serializer_class( [elem for elem in full_list if cond(elem)], many=True, context=self.context ).data def _get_physical_servers(self, obj): dca = ContentType.objects.get_for_model(DataCenterAsset) return self._get_serialized_sublist( obj.children.all(), DataCenterAssetSimpleSerializer, lambda child: child.content_type == dca ) def _get_virtual_servers(self, obj): from ralph.virtual.api import VirtualServerSimpleSerializer vs = ContentType.objects.get_for_model(VirtualServer) return self._get_serialized_sublist( obj.children.all(), VirtualServerSimpleSerializer, lambda child: child.content_type == vs ) def _get_cloud_hosts(self, obj): from ralph.virtual.api import CloudHostSimpleSerializer return self._get_serialized_sublist( obj.cloudhost_set.all(), CloudHostSimpleSerializer, lambda host: True ) def get_related_hosts(self, obj): related_hosts = {} related_hosts['virtual_servers'] = self._get_virtual_servers(obj) related_hosts['physical_servers'] = self._get_physical_servers(obj) related_hosts['cloud_hosts'] = self._get_cloud_hosts(obj) return related_hosts class Meta(AssetSerializer.Meta): model = DataCenterAsset depth = 2
def to_representation(self, value): if value and value.pk: return SecurityScanSerializer().to_representation(value)