class SecurityGroupRuleSerializer(serializers.Serializer): ip_protocol = serializers.CharField(label="IP protocol", allow_blank=True) from_port = serializers.CharField(allow_blank=True) to_port = serializers.CharField(allow_blank=True) cidr_ip = serializers.CharField(label="CIDR IP", allow_blank=True) group = ProviderPKRelatedField(label="Source group", queryset='security.security_groups', display_fields=['name', 'id'], display_format="{0} (ID: {1})", required=False, allow_null=True) url = CustomHyperlinkedIdentityField( view_name='security_group_rule-detail', lookup_field='id', lookup_url_kwarg='pk', parent_url_kwargs=['cloud_pk', 'security_group_pk']) def create(self, validated_data): view = self.context.get('view') provider = view_helpers.get_cloud_provider(view) sg_pk = view.kwargs.get('security_group_pk') if sg_pk: sg = provider.security.security_groups.get(sg_pk) if sg and validated_data.get('group'): return sg.add_rule(src_group=validated_data.get('group')) elif sg: return sg.add_rule(validated_data.get('ip_protocol'), validated_data.get('from_port'), validated_data.get('to_port'), validated_data.get('cidr_ip')) return None
class AttachmentInfoSerializer(serializers.Serializer): device = serializers.CharField(read_only=True) instance_id = ProviderPKRelatedField(label="Instance ID", queryset='compute.instances', display_fields=['name', 'id'], display_format="{0} (ID: {1})", required=False, allow_null=True) instance = CustomHyperlinkedIdentityField(view_name='instance-detail', lookup_field='instance_id', lookup_url_kwarg='pk', parent_url_kwargs=['cloud_pk'])
class VolumeSerializer(serializers.Serializer): id = serializers.CharField(read_only=True) url = CustomHyperlinkedIdentityField(view_name='volume-detail', lookup_field='id', lookup_url_kwarg='pk', parent_url_kwargs=['cloud_pk']) name = serializers.CharField() description = serializers.CharField(allow_blank=True) size = serializers.IntegerField(min_value=0) create_time = serializers.CharField(read_only=True) zone_id = PlacementZonePKRelatedField(label="Zone", queryset='non_empty_value', display_fields=[ 'id'], display_format="{0}", required=True) state = serializers.CharField(read_only=True) snapshot_id = ProviderPKRelatedField(label="Snapshot ID", queryset='block_store.snapshots', display_fields=[ 'name', 'id', 'size'], display_format="{0} (ID: {1}," " Size: {2} GB)", write_only=True, required=False, allow_null=True) attachments = AttachmentInfoSerializer() def create(self, validated_data): provider = view_helpers.get_cloud_provider(self.context.get('view')) try: return provider.block_store.volumes.create( validated_data.get('name'), validated_data.get('size'), validated_data.get('zone_id'), description=validated_data.get('description'), snapshot=validated_data.get('snapshot_id')) except Exception as e: raise serializers.ValidationError("{0}".format(e)) def update(self, instance, validated_data): try: if instance.name != validated_data.get('name'): instance.name = validated_data.get('name') if instance.description != validated_data.get('description'): instance.description = validated_data.get('description') return instance except Exception as e: raise serializers.ValidationError("{0}".format(e))
class SnapshotSerializer(serializers.Serializer): id = serializers.CharField(read_only=True) url = CustomHyperlinkedIdentityField(view_name='snapshot-detail', lookup_field='id', lookup_url_kwarg='pk', parent_url_kwargs=['cloud_pk']) name = serializers.CharField() description = serializers.CharField() state = serializers.CharField(read_only=True) volume_id = ProviderPKRelatedField(label="Volume ID", queryset='block_store.volumes', display_fields=[ 'name', 'id', 'size'], display_format="{0} (ID: {1}," " Size: {2} GB)", required=True) create_time = serializers.CharField(read_only=True) size = serializers.IntegerField(min_value=0, read_only=True) def create(self, validated_data): provider = view_helpers.get_cloud_provider(self.context.get('view')) try: return provider.block_store.snapshots.create( validated_data.get('name'), validated_data.get('volume_id'), description=validated_data.get('description')) except Exception as e: raise serializers.ValidationError("{0}".format(e)) def update(self, instance, validated_data): try: if instance.name != validated_data.get('name'): instance.name = validated_data.get('name') if instance.description != validated_data.get('description'): instance.description = validated_data.get('description') return instance except Exception as e: raise serializers.ValidationError("{0}".format(e))
class InstanceSerializer(serializers.Serializer): id = serializers.CharField(read_only=True) url = CustomHyperlinkedIdentityField(view_name='instance-detail', lookup_field='id', lookup_url_kwarg='pk', parent_url_kwargs=['cloud_pk']) name = serializers.CharField() public_ips = serializers.ListField(serializers.IPAddressField()) private_ips = serializers.ListField(serializers.IPAddressField()) instance_type_id = ProviderPKRelatedField( label="Instance Type", queryset='compute.instance_types', display_fields=['name'], display_format="{0}", required=True) instance_type_url = CustomHyperlinkedIdentityField( view_name='instance_type-detail', lookup_field='instance_type_id', lookup_url_kwarg='pk', parent_url_kwargs=['cloud_pk']) image_id = ProviderPKRelatedField(label="Image", queryset='compute.images', display_fields=['name', 'id'], display_format="{0} ({1})", required=True) image_id_url = CustomHyperlinkedIdentityField( view_name='machine_image-detail', lookup_field='image_id', lookup_url_kwarg='pk', parent_url_kwargs=['cloud_pk']) key_pair_name = ProviderPKRelatedField(label="Keypair Name", queryset='security.key_pairs', display_fields=['id'], display_format="{0}", required=True) zone_id = PlacementZonePKRelatedField(label="Placement Zone", queryset='non_empty_value', display_fields=['id'], display_format="{0}", required=True) security_group_ids = ProviderPKRelatedField( label="Security Groups", queryset='security.security_groups', display_fields=['name'], display_format="{0}", many=True) user_data = serializers.CharField(write_only=True, style={'base_template': 'textarea.html'}) def create(self, validated_data): provider = view_helpers.get_cloud_provider(self.context.get('view')) name = validated_data.get('name') image_id = validated_data.get('image_id') instance_type = validated_data.get('instance_type_id') kp_name = validated_data.get('key_pair_name') zone_id = validated_data.get('zone_id') security_group_ids = validated_data.get('security_group_ids') user_data = validated_data.get('user_data') try: return provider.compute.instances.create( name, image_id, instance_type, zone=zone_id, key_pair=kp_name, security_groups=security_group_ids, user_data=user_data) except Exception as e: raise serializers.ValidationError("{0}".format(e)) def update(self, instance, validated_data): try: if instance.name != validated_data.get('name'): instance.name = validated_data.get('name') return instance except Exception as e: raise serializers.ValidationError("{0}".format(e))