Beispiel #1
0
 class Meta:
     _serializer_class = 'vstutils.api.serializers.VSTSerializer'
     _list_fields = ('name', 'local_filter_applied', 'filter_applied',
                     'string_filter_applied')
     _override_list_fields = {
         'id':
         fields.RedirectIntegerField(read_only=True,
                                     operation_name='files'),
         'name':
         fields.DependEnumField(field='id', choices={
             3: 'hello',
             1: 'NOO!'
         }),
         'local_filter_applied':
         fields.IntegerField(default=0, read_only=True),
         'filter_applied':
         fields.IntegerField(default=0, read_only=True),
         'string_filter_applied':
         DrfBooleanField(default=False, read_only=True)
     }
     _extra_serializer_classes = {
         'serializer_class_test': serializers.EmptySerializer
     }
     _filterset_fields = ('id', 'name')
     _filter_backends = (TestFilterBackend,
                         'test_proj.models.hosts.TestStringFilterBackend')
Beispiel #2
0
class ProjectTemplateCreateSerializer(vst_serializers.VSTSerializer):
    project_id = vst_fields.RedirectIntegerField(read_only=True,
                                                 default=None,
                                                 allow_null=True)
    name = serializers.CharField(required=False)

    class Meta:
        model = models.ProjectTemplate
        fields = (
            'project_id',
            'name',
        )

    def update(self, instance: models.ProjectTemplate,
               validated_data) -> models.Project:
        validated_data['name'] = validated_data.get(
            'name', '{} {}'.format(instance.name, uuid.uuid1()))
        data = dict(
            name=validated_data['name'],
            repository=instance.repository,
            type=instance.type,
            repo_auth=instance.repo_auth,
            auth_data=instance.auth_data or '',
        )
        serializer = ProjectCreateMasterSerializer(data=data,
                                                   context=self.context)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return serializer.instance

    def to_representation(self, instance: models.Project) -> Dict:
        return {'name': instance.name, 'project_id': instance.id}
Beispiel #3
0
class HostSerializer(VSTSerializer):
    id = fields.RedirectIntegerField(read_only=True)
    name = fields.DependEnumField(field='id', choices={ 3: 'hello', 1: 'NOO!' })

    class Meta:
        model = Host
        fields = (
            'id',
            'name',
        )
Beispiel #4
0
class InventoryImportSerializer(serializers.Serializer):
    # pylint: disable=abstract-method
    inventory_id = vst_fields.RedirectIntegerField(default=None,
                                                   allow_null=True,
                                                   read_only=True)
    name = serializers.CharField(required=True)
    raw_data = vst_fields.VSTCharField()

    def create(self, validated_data: Dict) -> Dict:
        return models.Inventory.import_inventory_from_string(**validated_data)

    def to_representation(self, instance):
        return dict(inventory_id=instance.id,
                    name=instance.name,
                    raw_data=getattr(instance, 'raw_data', ''))
Beispiel #5
0
class InventoryImportSerializer(DataSerializer):
    inventory_id = vst_fields.RedirectIntegerField(default=None,
                                                   allow_null=True)
    name = serializers.CharField(required=True)
    raw_data = vst_fields.VSTCharField()

    @transaction.atomic()
    def create(self, validated_data: Dict) -> Dict:
        parser = AnsibleInventoryParser()
        inv_json = parser.get_inventory_data(validated_data['raw_data'])

        inventory = models.Inventory.objects.create(
            name=validated_data['name'])
        inventory.vars = inv_json['vars']
        created_hosts, created_groups = dict(), dict()

        for host in inv_json['hosts']:
            inv_host = inventory.hosts.create(name=host['name'])
            inv_host.vars = host['vars']
            created_hosts[inv_host.name] = inv_host

        for group in inv_json['groups']:
            children = not len(group['groups']) == 0
            inv_group = inventory.groups.create(name=group['name'],
                                                children=children)
            inv_group.vars = group['vars']
            created_groups[inv_group.name] = inv_group

        for group in inv_json['groups']:
            inv_group = created_groups[group['name']]
            g_subs = list()
            if inv_group.children:
                for name in group['groups']:
                    g_subs.append(created_groups[name])
                inv_group.groups.add(*g_subs)
            else:
                for name in group['hosts']:
                    g_subs.append(created_hosts[name])
                inv_group.hosts.add(*g_subs)

        inventory.raw_data = validated_data['raw_data']
        return inventory

    def to_representation(self, instance):
        return dict(inventory_id=instance.id,
                    name=instance.name,
                    raw_data=getattr(instance, 'raw_data', ''))
Beispiel #6
0
 class Meta:
     _serializer_class = 'vstutils.api.serializers.VSTSerializer'
     _list_fields = (
         'id',
         'name',
         'local_filter_applied',
         'filter_applied',
     )
     _override_list_fields = {
         'id':
         fields.RedirectIntegerField(read_only=True),
         'name':
         fields.DependEnumField(field='id', choices={
             3: 'hello',
             1: 'NOO!'
         }),
         'local_filter_applied':
         fields.IntegerField(default=0, read_only=True),
         'filter_applied':
         fields.IntegerField(default=0, read_only=True),
     }
     _filterset_fields = ('id', 'name')
     _filter_backends = (TestFilterBackend, )
Beispiel #7
0
class ExecuteResponseSerializer(ActionResponseSerializer):
    history_id = vst_fields.RedirectIntegerField(default=None, allow_null=True)
    executor = serializers.IntegerField(default=None, allow_null=True)