there is Mediaplan CustomDefinitionResource:

# CustomResourceDefinition
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: mediaplans.crd.idom.project
spec:
  group: crds.idom.project
  scope: Namespaced
  names:
    plural: mediaplans
    singular: mediaplan
    kind: Mediaplan
    shortNames:
    - mediap
  versions:
  - name: v1alpha1
    served: true
    storage: true
    schema:
      openAPIV3Schema:
        type: object
        properties:
          apiVersion:
            type: string
            description: ‘A unique version for the Kubernetes API’
          kind:
            type: string
            description: ‘Type of resource’
          metadata:
            type: object
            properties:
            name:
              type: string
              description: ‘Name of the resource’
            required:
            - name
          spec:
            type: object
            properties:
              # scheduling
              schedule:
                type: string
                description: ‘Scheduling format for the mediaplan’
              # channel metadata
              channel:
                type: object
                properties:
                  name:
                    type: string
                    description: ‘Name of the channel’
                  guid:
                    type: string
                    description: ‘GUID of the channel’
                  id:
                    type: integer
                    description: ‘ID of the channel’
                  link:
                    type: string
                    description: ‘Link for the channel’
              messagingSettings:
                type: object
                properties:
                  # oneof: topic or files
                  # generation topics
                  topics:
                    type: array
                    items:
                      type: object
                      properties:
                        code:
                          type: string
                          description: ‘Code for the topic’
                        weight:
                          type: integer
                          description: ‘Generation weight for the topic’
                          default: 1
                  # or choose files from s3
                  files:
                    type: array
                    items:
                      type: object
                      properties:
                        uri:
                          type: string
                          description: ‘URI for the file’
              # agent settings
              agentSettings:
                type: object
                properties:
                  # count
                  totalCount:
                    type: integer
                    description: ‘Total number of agents for the mediaplan’
                    default: 10
                  # credential comparison
                  credentials:
                    type: array
                    items:
                      type: object
                      properties:
                        key:
                          type: string
                          description: ‘Key for the credential’
                        value:
                          type: string
                          description: ‘Value for the credential’
                  # mimicry comparison
                  mimicry:
                    type: array
                    items:
                      type: object
                      properties:
                        key:
                          type: string
                          description: ‘Key for the mimicry option’
                        value:
                          type: string
                          description: ‘Value for the mimicry option’
              # common mediaplan settings
              commonSettings:
                type: object
                properties:
                  # output pkg generation coefficient
                  # define, how many packages will be generated for one incoming message
                  generationCoefficient:
                    type: number
                    description: ‘Output package generation coefficient’
                    default:
                  # total packages count
                  totalMessageCount:
                    type: integer
                    description: ‘Total number of messages for the mediaplan’
                  # estimated time for different messaging options
                  estimatedLeadTime:
                    type: string
                    description: ‘Estimated lead time for the mediaplan’
                  # disable mimicry options (for agents)
                  disableMimicryOptions:
                    type: boolean
                    description: ‘Disables mimicry options for agents’
                  # use image for packages
                  didImageUsedForGeneration:
                    type: boolean
                    description: ‘Indicates if an image was used for package generation’

build a python web application, which serve CRUD operations for Mediaplan CustomResourceDefinition. Application must be based on fastapi with pydantic, kubernetes, opentelemetry with jaeger support