Giter Site home page Giter Site logo

Comments (7)

imp avatar imp commented on May 30, 2024 1
clusters.cluster.x-k8s.io schema
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
    controller-gen.kubebuilder.io/version: v0.7.0
  creationTimestamp: "2021-11-18T15:55:11Z"
  generation: 2
  labels:
    cluster.x-k8s.io/provider: cluster-api
    clusterctl.cluster.x-k8s.io: ""
  name: clusters.cluster.x-k8s.io
  resourceVersion: "2210"
  uid: 5fcaf00c-19be-426c-a063-e08c81b803e2
spec:
  conversion:
    strategy: Webhook
    webhook:
      clientConfig:
        caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURXVENDQWtHZ0F3SUJBZ0lRQisyRnBsMjNFd3E4WmRndXNpa0wwVEFOQmdrcWhraUc5dzBCQVFzRkFEQWsKTVNJd0lBWURWUVFLRXhsck9ITXRjMmxuTFdOc2RYTjBaWEl0YkdsbVpXTjVZMnhsTUI0WERUSXhNVEV4T0RFMQpOVFV5TVZvWERUSXlNREl4TmpFMU5UVXlNVm93SkRFaU1DQUdBMVVFQ2hNWmF6aHpMWE5wWnkxamJIVnpkR1Z5CkxXeHBabVZqZVdOc1pUQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU5YZUU3bkUKZUJRL3RWendWTnNjOVVIRDZndHVSYzIwUTVDS0dlOTFPNHY5VUtMNUhkMjdCL1ErZlVCOGhSWXAxMlN2aEZFUgppTUZtR0d2VlBvZkQ4TDV1VVlUVlV3d01IVFVZN1l2dWVhS1RmUXZDMmYzNXdOaXJaN0syaWJPN2pSTTF0STNSCjRJZFVWT2U2REZYOWlaTFF6U0Q1bjdIbzhUWk1WSDB1WkQrSWNiMXhsbEFLL2g3dXE4MkptU0RtL0VMMlk3NlkKRzJWS3haVm5GTU9PdHluR0U0WWVzeGRjSDBCRHVuUkR3TXExQlZ5Z2FkOS9iQkgydEQ0QlV6Uzc3TFkydUJscQp6UkdsLzFxdTVRb3hhSDBPckFBQU94SVBZS1lrU0ZwYUU1V21vV3RIdHUxYWh2Y01EekV4SyswZDZmejNrYlF1CnFiN3ovbHphUEFQaFl0a0NBd0VBQWFPQmhqQ0JnekFPQmdOVkhROEJBZjhFQkFNQ0JhQXdEQVlEVlIwVEFRSC8KQkFJd0FEQmpCZ05WSFJFRVhEQmFnaVJqWVhCcExYZGxZbWh2YjJzdGMyVnlkbWxqWlM1allYQnBMWE41YzNSbApiUzV6ZG1PQ01tTmhjR2t0ZDJWaWFHOXZheTF6WlhKMmFXTmxMbU5oY0drdGMzbHpkR1Z0TG5OMll5NWpiSFZ6CmRHVnlMbXh2WTJGc01BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQnRGMzhHRVNXaEROcUhyZjBNWmVGbDA4bUoKTnNoVTlVQ0xlcytsRjJHNENFODBCRFNUYkxYakNvNmhqQ3FjQ3hjbkxHRlF4RjdQSy9nRUpNQXFmc3NtdE5XZgpORXZHR2s5bVBram1NVkFEY2FUczhmU1RqMy9RTGRONFJJRTJOS243UnlBa3pTdE9Kd3NkNGJqTHUwL0hpRGE3CkljYUR1ZUhkeU9ETkczZE96U1VLZ2EwbHQ5aTFONzNXNWNTdWRDSXJwOVcxekhsOFY1clI2djhrRzdpUjloRU8KKzVBOGJxblcwSWQwTUFHeS8yS0h3SW9LVWZSTHU0N0RBNlFxZXp3ZW1QRmtiVy9vdFRpZG9OazhoUHVMS1hYUwo5WW04c2ZjbTNqV0FwQks4ZHdEcGtDdGx1Q0d0djNRMWFmSHlJb3RFVVpkZlhzeHNsQUF2aWl6M1EwbXkKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
        service:
          name: capi-webhook-service
          namespace: capi-system
          path: /convert
          port: 443
      conversionReviewVersions:
      - v1
      - v1beta1
  group: cluster.x-k8s.io
  names:
    categories:
    - cluster-api
    kind: Cluster
    listKind: ClusterList
    plural: clusters
    shortNames:
    - cl
    singular: cluster
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - description: Cluster status such as Pending/Provisioning/Provisioned/Deleting/Failed
      jsonPath: .status.phase
      name: Phase
      type: string
    name: v1alpha3
    schema:
      openAPIV3Schema:
        description: Cluster is the Schema for the clusters API.
        properties:
          apiVersion:
            description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            type: string
          kind:
            description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            description: ClusterSpec defines the desired state of Cluster.
            properties:
              clusterNetwork:
                description: Cluster network configuration.
                properties:
                  apiServerPort:
                    description: APIServerPort specifies the port the API Server should
                      bind to. Defaults to 6443.
                    format: int32
                    type: integer
                  pods:
                    description: The network ranges from which Pod networks are allocated.
                    properties:
                      cidrBlocks:
                        items:
                          type: string
                        type: array
                    required:
                    - cidrBlocks
                    type: object
                  serviceDomain:
                    description: Domain name for services.
                    type: string
                  services:
                    description: The network ranges from which service VIPs are allocated.
                    properties:
                      cidrBlocks:
                        items:
                          type: string
                        type: array
                    required:
                    - cidrBlocks
                    type: object
                type: object
              controlPlaneEndpoint:
                description: ControlPlaneEndpoint represents the endpoint used to
                  communicate with the control plane.
                properties:
                  host:
                    description: The hostname on which the API server is serving.
                    type: string
                  port:
                    description: The port on which the API server is serving.
                    format: int32
                    type: integer
                required:
                - host
                - port
                type: object
              controlPlaneRef:
                description: ControlPlaneRef is an optional reference to a provider-specific
                  resource that holds the details for provisioning the Control Plane
                  for a Cluster.
                properties:
                  apiVersion:
                    description: API version of the referent.
                    type: string
                  fieldPath:
                    description: 'If referring to a piece of an object instead of
                      an entire object, this string should contain a valid JSON/Go
                      field access statement, such as desiredState.manifest.containers[2].
                      For example, if the object reference is to a container within
                      a pod, this would take on a value like: "spec.containers{name}"
                      (where "name" refers to the name of the container that triggered
                      the event) or if no container name is specified "spec.containers[2]"
                      (container with index 2 in this pod). This syntax is chosen
                      only to have some well-defined way of referencing a part of
                      an object. TODO: this design is not final and this field is
                      subject to change in the future.'
                    type: string
                  kind:
                    description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                    type: string
                  name:
                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                    type: string
                  namespace:
                    description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                    type: string
                  resourceVersion:
                    description: 'Specific resourceVersion to which this reference
                      is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                    type: string
                  uid:
                    description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                    type: string
                type: object
              infrastructureRef:
                description: InfrastructureRef is a reference to a provider-specific
                  resource that holds the details for provisioning infrastructure
                  for a cluster in said provider.
                properties:
                  apiVersion:
                    description: API version of the referent.
                    type: string
                  fieldPath:
                    description: 'If referring to a piece of an object instead of
                      an entire object, this string should contain a valid JSON/Go
                      field access statement, such as desiredState.manifest.containers[2].
                      For example, if the object reference is to a container within
                      a pod, this would take on a value like: "spec.containers{name}"
                      (where "name" refers to the name of the container that triggered
                      the event) or if no container name is specified "spec.containers[2]"
                      (container with index 2 in this pod). This syntax is chosen
                      only to have some well-defined way of referencing a part of
                      an object. TODO: this design is not final and this field is
                      subject to change in the future.'
                    type: string
                  kind:
                    description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                    type: string
                  name:
                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                    type: string
                  namespace:
                    description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                    type: string
                  resourceVersion:
                    description: 'Specific resourceVersion to which this reference
                      is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                    type: string
                  uid:
                    description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                    type: string
                type: object
              paused:
                description: Paused can be used to prevent controllers from processing
                  the Cluster and all its associated objects.
                type: boolean
            type: object
          status:
            description: ClusterStatus defines the observed state of Cluster.
            properties:
              conditions:
                description: Conditions defines current service state of the cluster.
                items:
                  description: Condition defines an observation of a Cluster API resource
                    operational state.
                  properties:
                    lastTransitionTime:
                      description: Last time the condition transitioned from one status
                        to another. This should be when the underlying condition changed.
                        If that is not known, then using the time when the API field
                        changed is acceptable.
                      format: date-time
                      type: string
                    message:
                      description: A human readable message indicating details about
                        the transition. This field may be empty.
                      type: string
                    reason:
                      description: The reason for the condition's last transition
                        in CamelCase. The specific API may choose whether or not this
                        field is considered a guaranteed API. This field may not be
                        empty.
                      type: string
                    severity:
                      description: Severity provides an explicit classification of
                        Reason code, so the users or machines can immediately understand
                        the current situation and act accordingly. The Severity field
                        MUST be set only when Status=False.
                      type: string
                    status:
                      description: Status of the condition, one of True, False, Unknown.
                      type: string
                    type:
                      description: Type of condition in CamelCase or in foo.example.com/CamelCase.
                        Many .condition.type values are consistent across resources
                        like Available, but because arbitrary conditions can be useful
                        (see .node.status.conditions), the ability to deconflict is
                        important.
                      type: string
                  required:
                  - status
                  - type
                  type: object
                type: array
              controlPlaneInitialized:
                description: ControlPlaneInitialized defines if the control plane
                  has been initialized.
                type: boolean
              controlPlaneReady:
                description: ControlPlaneReady defines if the control plane is ready.
                type: boolean
              failureDomains:
                additionalProperties:
                  description: FailureDomainSpec is the Schema for Cluster API failure
                    domains. It allows controllers to understand how many failure
                    domains a cluster can optionally span across.
                  properties:
                    attributes:
                      additionalProperties:
                        type: string
                      description: Attributes is a free form map of attributes an
                        infrastructure provider might use or require.
                      type: object
                    controlPlane:
                      description: ControlPlane determines if this failure domain
                        is suitable for use by control plane machines.
                      type: boolean
                  type: object
                description: FailureDomains is a slice of failure domain objects synced
                  from the infrastructure provider.
                type: object
              failureMessage:
                description: FailureMessage indicates that there is a fatal problem
                  reconciling the state, and will be set to a descriptive error message.
                type: string
              failureReason:
                description: FailureReason indicates that there is a fatal problem
                  reconciling the state, and will be set to a token value suitable
                  for programmatic interpretation.
                type: string
              infrastructureReady:
                description: InfrastructureReady is the state of the infrastructure
                  provider.
                type: boolean
              observedGeneration:
                description: ObservedGeneration is the latest generation observed
                  by the controller.
                format: int64
                type: integer
              phase:
                description: Phase represents the current phase of cluster actuation.
                  E.g. Pending, Running, Terminating, Failed etc.
                type: string
            type: object
        type: object
    served: true
    storage: false
    subresources:
      status: {}
  - additionalPrinterColumns:
    - description: Time duration since creation of Cluster
      jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    - description: Cluster status such as Pending/Provisioning/Provisioned/Deleting/Failed
      jsonPath: .status.phase
      name: Phase
      type: string
    name: v1alpha4
    schema:
      openAPIV3Schema:
        description: Cluster is the Schema for the clusters API.
        properties:
          apiVersion:
            description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            type: string
          kind:
            description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            description: ClusterSpec defines the desired state of Cluster.
            properties:
              clusterNetwork:
                description: Cluster network configuration.
                properties:
                  apiServerPort:
                    description: APIServerPort specifies the port the API Server should
                      bind to. Defaults to 6443.
                    format: int32
                    type: integer
                  pods:
                    description: The network ranges from which Pod networks are allocated.
                    properties:
                      cidrBlocks:
                        items:
                          type: string
                        type: array
                    required:
                    - cidrBlocks
                    type: object
                  serviceDomain:
                    description: Domain name for services.
                    type: string
                  services:
                    description: The network ranges from which service VIPs are allocated.
                    properties:
                      cidrBlocks:
                        items:
                          type: string
                        type: array
                    required:
                    - cidrBlocks
                    type: object
                type: object
              controlPlaneEndpoint:
                description: ControlPlaneEndpoint represents the endpoint used to
                  communicate with the control plane.
                properties:
                  host:
                    description: The hostname on which the API server is serving.
                    type: string
                  port:
                    description: The port on which the API server is serving.
                    format: int32
                    type: integer
                required:
                - host
                - port
                type: object
              controlPlaneRef:
                description: ControlPlaneRef is an optional reference to a provider-specific
                  resource that holds the details for provisioning the Control Plane
                  for a Cluster.
                properties:
                  apiVersion:
                    description: API version of the referent.
                    type: string
                  fieldPath:
                    description: 'If referring to a piece of an object instead of
                      an entire object, this string should contain a valid JSON/Go
                      field access statement, such as desiredState.manifest.containers[2].
                      For example, if the object reference is to a container within
                      a pod, this would take on a value like: "spec.containers{name}"
                      (where "name" refers to the name of the container that triggered
                      the event) or if no container name is specified "spec.containers[2]"
                      (container with index 2 in this pod). This syntax is chosen
                      only to have some well-defined way of referencing a part of
                      an object. TODO: this design is not final and this field is
                      subject to change in the future.'
                    type: string
                  kind:
                    description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                    type: string
                  name:
                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                    type: string
                  namespace:
                    description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                    type: string
                  resourceVersion:
                    description: 'Specific resourceVersion to which this reference
                      is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                    type: string
                  uid:
                    description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                    type: string
                type: object
              infrastructureRef:
                description: InfrastructureRef is a reference to a provider-specific
                  resource that holds the details for provisioning infrastructure
                  for a cluster in said provider.
                properties:
                  apiVersion:
                    description: API version of the referent.
                    type: string
                  fieldPath:
                    description: 'If referring to a piece of an object instead of
                      an entire object, this string should contain a valid JSON/Go
                      field access statement, such as desiredState.manifest.containers[2].
                      For example, if the object reference is to a container within
                      a pod, this would take on a value like: "spec.containers{name}"
                      (where "name" refers to the name of the container that triggered
                      the event) or if no container name is specified "spec.containers[2]"
                      (container with index 2 in this pod). This syntax is chosen
                      only to have some well-defined way of referencing a part of
                      an object. TODO: this design is not final and this field is
                      subject to change in the future.'
                    type: string
                  kind:
                    description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                    type: string
                  name:
                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                    type: string
                  namespace:
                    description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                    type: string
                  resourceVersion:
                    description: 'Specific resourceVersion to which this reference
                      is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                    type: string
                  uid:
                    description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                    type: string
                type: object
              paused:
                description: Paused can be used to prevent controllers from processing
                  the Cluster and all its associated objects.
                type: boolean
              topology:
                description: 'This encapsulates the topology for the cluster. NOTE:
                  It is required to enable the ClusterTopology feature gate flag to
                  activate managed topologies support; this feature is highly experimental,
                  and parts of it might still be not implemented.'
                properties:
                  class:
                    description: The name of the ClusterClass object to create the
                      topology.
                    type: string
                  controlPlane:
                    description: ControlPlane describes the cluster control plane.
                    properties:
                      metadata:
                        description: "Metadata is the metadata applied to the machines
                          of the ControlPlane. At runtime this metadata is merged
                          with the corresponding metadata from the ClusterClass. \n
                          This field is supported if and only if the control plane
                          provider template referenced in the ClusterClass is Machine
                          based."
                        properties:
                          annotations:
                            additionalProperties:
                              type: string
                            description: 'Annotations is an unstructured key value
                              map stored with a resource that may be set by external
                              tools to store and retrieve arbitrary metadata. They
                              are not queryable and should be preserved when modifying
                              objects. More info: http://kubernetes.io/docs/user-guide/annotations'
                            type: object
                          labels:
                            additionalProperties:
                              type: string
                            description: 'Map of string keys and values that can be
                              used to organize and categorize (scope and select) objects.
                              May match selectors of replication controllers and services.
                              More info: http://kubernetes.io/docs/user-guide/labels'
                            type: object
                        type: object
                      replicas:
                        description: Replicas is the number of control plane nodes.
                          If the value is nil, the ControlPlane object is created
                          without the number of Replicas and it's assumed that the
                          control plane controller does not implement support for
                          this field. When specified against a control plane provider
                          that lacks support for this field, this value will be ignored.
                        format: int32
                        type: integer
                    type: object
                  rolloutAfter:
                    description: RolloutAfter performs a rollout of the entire cluster
                      one component at a time, control plane first and then machine
                      deployments.
                    format: date-time
                    type: string
                  version:
                    description: The Kubernetes version of the cluster.
                    type: string
                  workers:
                    description: Workers encapsulates the different constructs that
                      form the worker nodes for the cluster.
                    properties:
                      machineDeployments:
                        description: MachineDeployments is a list of machine deployments
                          in the cluster.
                        items:
                          description: MachineDeploymentTopology specifies the different
                            parameters for a set of worker nodes in the topology.
                            This set of nodes is managed by a MachineDeployment object
                            whose lifecycle is managed by the Cluster controller.
                          properties:
                            class:
                              description: Class is the name of the MachineDeploymentClass
                                used to create the set of worker nodes. This should
                                match one of the deployment classes defined in the
                                ClusterClass object mentioned in the `Cluster.Spec.Class`
                                field.
                              type: string
                            metadata:
                              description: Metadata is the metadata applied to the
                                machines of the MachineDeployment. At runtime this
                                metadata is merged with the corresponding metadata
                                from the ClusterClass.
                              properties:
                                annotations:
                                  additionalProperties:
                                    type: string
                                  description: 'Annotations is an unstructured key
                                    value map stored with a resource that may be set
                                    by external tools to store and retrieve arbitrary
                                    metadata. They are not queryable and should be
                                    preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations'
                                  type: object
                                labels:
                                  additionalProperties:
                                    type: string
                                  description: 'Map of string keys and values that
                                    can be used to organize and categorize (scope
                                    and select) objects. May match selectors of replication
                                    controllers and services. More info: http://kubernetes.io/docs/user-guide/labels'
                                  type: object
                              type: object
                            name:
                              description: Name is the unique identifier for this
                                MachineDeploymentTopology. The value is used with
                                other unique identifiers to create a MachineDeployment's
                                Name (e.g. cluster's name, etc). In case the name
                                is greater than the allowed maximum length, the values
                                are hashed together.
                              type: string
                            replicas:
                              description: Replicas is the number of worker nodes
                                belonging to this set. If the value is nil, the MachineDeployment
                                is created without the number of Replicas (defaulting
                                to zero) and it's assumed that an external entity
                                (like cluster autoscaler) is responsible for the management
                                of this value.
                              format: int32
                              type: integer
                          required:
                          - class
                          - name
                          type: object
                        type: array
                    type: object
                required:
                - class
                - version
                type: object
            type: object
          status:
            description: ClusterStatus defines the observed state of Cluster.
            properties:
              conditions:
                description: Conditions defines current service state of the cluster.
                items:
                  description: Condition defines an observation of a Cluster API resource
                    operational state.
                  properties:
                    lastTransitionTime:
                      description: Last time the condition transitioned from one status
                        to another. This should be when the underlying condition changed.
                        If that is not known, then using the time when the API field
                        changed is acceptable.
                      format: date-time
                      type: string
                    message:
                      description: A human readable message indicating details about
                        the transition. This field may be empty.
                      type: string
                    reason:
                      description: The reason for the condition's last transition
                        in CamelCase. The specific API may choose whether or not this
                        field is considered a guaranteed API. This field may not be
                        empty.
                      type: string
                    severity:
                      description: Severity provides an explicit classification of
                        Reason code, so the users or machines can immediately understand
                        the current situation and act accordingly. The Severity field
                        MUST be set only when Status=False.
                      type: string
                    status:
                      description: Status of the condition, one of True, False, Unknown.
                      type: string
                    type:
                      description: Type of condition in CamelCase or in foo.example.com/CamelCase.
                        Many .condition.type values are consistent across resources
                        like Available, but because arbitrary conditions can be useful
                        (see .node.status.conditions), the ability to deconflict is
                        important.
                      type: string
                  required:
                  - status
                  - type
                  type: object
                type: array
              controlPlaneReady:
                description: ControlPlaneReady defines if the control plane is ready.
                type: boolean
              failureDomains:
                additionalProperties:
                  description: FailureDomainSpec is the Schema for Cluster API failure
                    domains. It allows controllers to understand how many failure
                    domains a cluster can optionally span across.
                  properties:
                    attributes:
                      additionalProperties:
                        type: string
                      description: Attributes is a free form map of attributes an
                        infrastructure provider might use or require.
                      type: object
                    controlPlane:
                      description: ControlPlane determines if this failure domain
                        is suitable for use by control plane machines.
                      type: boolean
                  type: object
                description: FailureDomains is a slice of failure domain objects synced
                  from the infrastructure provider.
                type: object
              failureMessage:
                description: FailureMessage indicates that there is a fatal problem
                  reconciling the state, and will be set to a descriptive error message.
                type: string
              failureReason:
                description: FailureReason indicates that there is a fatal problem
                  reconciling the state, and will be set to a token value suitable
                  for programmatic interpretation.
                type: string
              infrastructureReady:
                description: InfrastructureReady is the state of the infrastructure
                  provider.
                type: boolean
              observedGeneration:
                description: ObservedGeneration is the latest generation observed
                  by the controller.
                format: int64
                type: integer
              phase:
                description: Phase represents the current phase of cluster actuation.
                  E.g. Pending, Running, Terminating, Failed etc.
                type: string
            type: object
        type: object
    served: true
    storage: false
    subresources:
      status: {}
  - additionalPrinterColumns:
    - description: Cluster status such as Pending/Provisioning/Provisioned/Deleting/Failed
      jsonPath: .status.phase
      name: Phase
      type: string
    - description: Time duration since creation of Cluster
      jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    - description: Kubernetes version associated with this Cluster
      jsonPath: .spec.topology.version
      name: Version
      type: string
    name: v1beta1
    schema:
      openAPIV3Schema:
        description: Cluster is the Schema for the clusters API.
        properties:
          apiVersion:
            description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            type: string
          kind:
            description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            description: ClusterSpec defines the desired state of Cluster.
            properties:
              clusterNetwork:
                description: Cluster network configuration.
                properties:
                  apiServerPort:
                    description: APIServerPort specifies the port the API Server should
                      bind to. Defaults to 6443.
                    format: int32
                    type: integer
                  pods:
                    description: The network ranges from which Pod networks are allocated.
                    properties:
                      cidrBlocks:
                        items:
                          type: string
                        type: array
                    required:
                    - cidrBlocks
                    type: object
                  serviceDomain:
                    description: Domain name for services.
                    type: string
                  services:
                    description: The network ranges from which service VIPs are allocated.
                    properties:
                      cidrBlocks:
                        items:
                          type: string
                        type: array
                    required:
                    - cidrBlocks
                    type: object
                type: object
              controlPlaneEndpoint:
                description: ControlPlaneEndpoint represents the endpoint used to
                  communicate with the control plane.
                properties:
                  host:
                    description: The hostname on which the API server is serving.
                    type: string
                  port:
                    description: The port on which the API server is serving.
                    format: int32
                    type: integer
                required:
                - host
                - port
                type: object
              controlPlaneRef:
                description: ControlPlaneRef is an optional reference to a provider-specific
                  resource that holds the details for provisioning the Control Plane
                  for a Cluster.
                properties:
                  apiVersion:
                    description: API version of the referent.
                    type: string
                  fieldPath:
                    description: 'If referring to a piece of an object instead of
                      an entire object, this string should contain a valid JSON/Go
                      field access statement, such as desiredState.manifest.containers[2].
                      For example, if the object reference is to a container within
                      a pod, this would take on a value like: "spec.containers{name}"
                      (where "name" refers to the name of the container that triggered
                      the event) or if no container name is specified "spec.containers[2]"
                      (container with index 2 in this pod). This syntax is chosen
                      only to have some well-defined way of referencing a part of
                      an object. TODO: this design is not final and this field is
                      subject to change in the future.'
                    type: string
                  kind:
                    description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                    type: string
                  name:
                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                    type: string
                  namespace:
                    description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                    type: string
                  resourceVersion:
                    description: 'Specific resourceVersion to which this reference
                      is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                    type: string
                  uid:
                    description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                    type: string
                type: object
              infrastructureRef:
                description: InfrastructureRef is a reference to a provider-specific
                  resource that holds the details for provisioning infrastructure
                  for a cluster in said provider.
                properties:
                  apiVersion:
                    description: API version of the referent.
                    type: string
                  fieldPath:
                    description: 'If referring to a piece of an object instead of
                      an entire object, this string should contain a valid JSON/Go
                      field access statement, such as desiredState.manifest.containers[2].
                      For example, if the object reference is to a container within
                      a pod, this would take on a value like: "spec.containers{name}"
                      (where "name" refers to the name of the container that triggered
                      the event) or if no container name is specified "spec.containers[2]"
                      (container with index 2 in this pod). This syntax is chosen
                      only to have some well-defined way of referencing a part of
                      an object. TODO: this design is not final and this field is
                      subject to change in the future.'
                    type: string
                  kind:
                    description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                    type: string
                  name:
                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                    type: string
                  namespace:
                    description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                    type: string
                  resourceVersion:
                    description: 'Specific resourceVersion to which this reference
                      is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                    type: string
                  uid:
                    description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                    type: string
                type: object
              paused:
                description: Paused can be used to prevent controllers from processing
                  the Cluster and all its associated objects.
                type: boolean
              topology:
                description: 'This encapsulates the topology for the cluster. NOTE:
                  It is required to enable the ClusterTopology feature gate flag to
                  activate managed topologies support; this feature is highly experimental,
                  and parts of it might still be not implemented.'
                properties:
                  class:
                    description: The name of the ClusterClass object to create the
                      topology.
                    type: string
                  controlPlane:
                    description: ControlPlane describes the cluster control plane.
                    properties:
                      metadata:
                        description: "Metadata is the metadata applied to the machines
                          of the ControlPlane. At runtime this metadata is merged
                          with the corresponding metadata from the ClusterClass. \n
                          This field is supported if and only if the control plane
                          provider template referenced in the ClusterClass is Machine
                          based."
                        properties:
                          annotations:
                            additionalProperties:
                              type: string
                            description: 'Annotations is an unstructured key value
                              map stored with a resource that may be set by external
                              tools to store and retrieve arbitrary metadata. They
                              are not queryable and should be preserved when modifying
                              objects. More info: http://kubernetes.io/docs/user-guide/annotations'
                            type: object
                          labels:
                            additionalProperties:
                              type: string
                            description: 'Map of string keys and values that can be
                              used to organize and categorize (scope and select) objects.
                              May match selectors of replication controllers and services.
                              More info: http://kubernetes.io/docs/user-guide/labels'
                            type: object
                        type: object
                      replicas:
                        description: Replicas is the number of control plane nodes.
                          If the value is nil, the ControlPlane object is created
                          without the number of Replicas and it's assumed that the
                          control plane controller does not implement support for
                          this field. When specified against a control plane provider
                          that lacks support for this field, this value will be ignored.
                        format: int32
                        type: integer
                    type: object
                  rolloutAfter:
                    description: RolloutAfter performs a rollout of the entire cluster
                      one component at a time, control plane first and then machine
                      deployments.
                    format: date-time
                    type: string
                  version:
                    description: The Kubernetes version of the cluster.
                    type: string
                  workers:
                    description: Workers encapsulates the different constructs that
                      form the worker nodes for the cluster.
                    properties:
                      machineDeployments:
                        description: MachineDeployments is a list of machine deployments
                          in the cluster.
                        items:
                          description: MachineDeploymentTopology specifies the different
                            parameters for a set of worker nodes in the topology.
                            This set of nodes is managed by a MachineDeployment object
                            whose lifecycle is managed by the Cluster controller.
                          properties:
                            class:
                              description: Class is the name of the MachineDeploymentClass
                                used to create the set of worker nodes. This should
                                match one of the deployment classes defined in the
                                ClusterClass object mentioned in the `Cluster.Spec.Class`
                                field.
                              type: string
                            metadata:
                              description: Metadata is the metadata applied to the
                                machines of the MachineDeployment. At runtime this
                                metadata is merged with the corresponding metadata
                                from the ClusterClass.
                              properties:
                                annotations:
                                  additionalProperties:
                                    type: string
                                  description: 'Annotations is an unstructured key
                                    value map stored with a resource that may be set
                                    by external tools to store and retrieve arbitrary
                                    metadata. They are not queryable and should be
                                    preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations'
                                  type: object
                                labels:
                                  additionalProperties:
                                    type: string
                                  description: 'Map of string keys and values that
                                    can be used to organize and categorize (scope
                                    and select) objects. May match selectors of replication
                                    controllers and services. More info: http://kubernetes.io/docs/user-guide/labels'
                                  type: object
                              type: object
                            name:
                              description: Name is the unique identifier for this
                                MachineDeploymentTopology. The value is used with
                                other unique identifiers to create a MachineDeployment's
                                Name (e.g. cluster's name, etc). In case the name
                                is greater than the allowed maximum length, the values
                                are hashed together.
                              type: string
                            replicas:
                              description: Replicas is the number of worker nodes
                                belonging to this set. If the value is nil, the MachineDeployment
                                is created without the number of Replicas (defaulting
                                to zero) and it's assumed that an external entity
                                (like cluster autoscaler) is responsible for the management
                                of this value.
                              format: int32
                              type: integer
                          required:
                          - class
                          - name
                          type: object
                        type: array
                    type: object
                required:
                - class
                - version
                type: object
            type: object
          status:
            description: ClusterStatus defines the observed state of Cluster.
            properties:
              conditions:
                description: Conditions defines current service state of the cluster.
                items:
                  description: Condition defines an observation of a Cluster API resource
                    operational state.
                  properties:
                    lastTransitionTime:
                      description: Last time the condition transitioned from one status
                        to another. This should be when the underlying condition changed.
                        If that is not known, then using the time when the API field
                        changed is acceptable.
                      format: date-time
                      type: string
                    message:
                      description: A human readable message indicating details about
                        the transition. This field may be empty.
                      type: string
                    reason:
                      description: The reason for the condition's last transition
                        in CamelCase. The specific API may choose whether or not this
                        field is considered a guaranteed API. This field may not be
                        empty.
                      type: string
                    severity:
                      description: Severity provides an explicit classification of
                        Reason code, so the users or machines can immediately understand
                        the current situation and act accordingly. The Severity field
                        MUST be set only when Status=False.
                      type: string
                    status:
                      description: Status of the condition, one of True, False, Unknown.
                      type: string
                    type:
                      description: Type of condition in CamelCase or in foo.example.com/CamelCase.
                        Many .condition.type values are consistent across resources
                        like Available, but because arbitrary conditions can be useful
                        (see .node.status.conditions), the ability to deconflict is
                        important.
                      type: string
                  required:
                  - lastTransitionTime
                  - status
                  - type
                  type: object
                type: array
              controlPlaneReady:
                description: ControlPlaneReady defines if the control plane is ready.
                type: boolean
              failureDomains:
                additionalProperties:
                  description: FailureDomainSpec is the Schema for Cluster API failure
                    domains. It allows controllers to understand how many failure
                    domains a cluster can optionally span across.
                  properties:
                    attributes:
                      additionalProperties:
                        type: string
                      description: Attributes is a free form map of attributes an
                        infrastructure provider might use or require.
                      type: object
                    controlPlane:
                      description: ControlPlane determines if this failure domain
                        is suitable for use by control plane machines.
                      type: boolean
                  type: object
                description: FailureDomains is a slice of failure domain objects synced
                  from the infrastructure provider.
                type: object
              failureMessage:
                description: FailureMessage indicates that there is a fatal problem
                  reconciling the state, and will be set to a descriptive error message.
                type: string
              failureReason:
                description: FailureReason indicates that there is a fatal problem
                  reconciling the state, and will be set to a token value suitable
                  for programmatic interpretation.
                type: string
              infrastructureReady:
                description: InfrastructureReady is the state of the infrastructure
                  provider.
                type: boolean
              observedGeneration:
                description: ObservedGeneration is the latest generation observed
                  by the controller.
                format: int64
                type: integer
              phase:
                description: Phase represents the current phase of cluster actuation.
                  E.g. Pending, Running, Terminating, Failed etc.
                type: string
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    categories:
    - cluster-api
    kind: Cluster
    listKind: ClusterList
    plural: clusters
    shortNames:
    - cl
    singular: cluster
  conditions:
  - lastTransitionTime: "2021-11-18T15:55:11Z"
    message: no conflicts found
    reason: NoConflicts
    status: "True"
    type: NamesAccepted
  - lastTransitionTime: "2021-11-18T15:55:11Z"
    message: the initial names have been accepted
    reason: InitialNamesAccepted
    status: "True"
    type: Established
  storedVersions:
  - v1beta1

from kopium.

clux avatar clux commented on May 30, 2024

Hm. That's weird. I am testing it on fairly large crds, but I guess there must be something in these particular ones that we don't handle. Maybe something about references to foreign crds being inlined in the schema (i haven't handled anything like that so far at least)? Any chance of adding a link to the full schema / collapsible comment with it inlined?

(There's also a point in here about camelCase -> snake_case not being done, raising that separately - #22)

from kopium.

clux avatar clux commented on May 30, 2024

Ok, that does actually look pretty normal (apart from the multiple versions in there making it effectively 4 times the size). I'll try to play around and debug the analyzer later to see why it's spitting out that.

from kopium.

clux avatar clux commented on May 30, 2024

It is slightly better now with the fix in 0.6.0 (#28)

generated from your crd:

#[derive(CustomResource, Serialize, Deserialize, Clone, Debug)]
#[kube(group = "cluster.x-k8s.io", version = "v1beta1", kind = "Cluster", plural = "clusters")]
#[kube(namespaced)]
#[kube(schema = "disabled")]
pub struct ClusterSpec {
    pub clusterNetwork: Option<ClusterClusterNetwork>,
    pub controlPlaneEndpoint: Option<ClusterControlPlaneEndpoint>,
    pub controlPlaneRef: Option<ClusterControlPlaneRef>,
    pub infrastructureRef: Option<ClusterInfrastructureRef>,
    pub paused: Option<bool>,
    pub topology: Option<ClusterTopology>,
}

and those second level structs exist

from kopium.

clux avatar clux commented on May 30, 2024

however it is failing at failureDomains within that crd:

              failureDomains:
                additionalProperties:
                  description: FailureDomainSpec is the Schema for Cluster API failure
                    domains. It allows controllers to understand how many failure
                    domains a cluster can optionally span across.
                  properties:
                    attributes:
                      additionalProperties:
                        type: string
                      description: Attributes is a free form map of attributes an
                        infrastructure provider might use or require.
                      type: object
                    controlPlane:
                      description: ControlPlane determines if this failure domain
                        is suitable for use by control plane machines.
                      type: boolean
                  type: object
                description: FailureDomains is a slice of failure domain objects synced
                  from the infrastructure provider.

generates this member:

#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct ClusterStatus {
    #[serde(default, skip_serializing_if = "Vec::is_empty")]
    pub conditions: Vec<ClusterStatusConditions>,
    pub controlPlaneReady: Option<bool>,
    #[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
    pub failureDomains: BTreeMap<String, Object>,
    pub failureMessage: Option<String>,
    pub failureReason: Option<String>,
    pub infrastructureReady: Option<bool>,
    pub observedGeneration: Option<i64>,
    pub phase: Option<String>,
}

from kopium.

clux avatar clux commented on May 30, 2024

ok, i have identified one logic error inside

kopium/src/analyzer.rs

Lines 30 to 36 in c74379d

if let Some(JSONSchemaPropsOrBool::Schema(s)) = schema.additional_properties {
let dict_type = s.type_.unwrap_or_default();
if !dict_type.is_empty() {
warn!("not generating type {} - using {} map", current, dict_type);
return Ok(()); // no members here - it'll be inlined
}
}

we end up in that case for failureDomains because of how the schema looks:

[2022-03-01T06:09:38Z WARN  kopium::analyzer] not generating type Annotations - using string map
[2022-03-01T06:09:38Z WARN  kopium::analyzer] not generating type Labels - using string map
[2022-03-01T06:09:38Z WARN  kopium::analyzer] not generating type Annotations - using string map
[2022-03-01T06:09:38Z WARN  kopium::analyzer] not generating type Labels - using string map
[2022-03-01T06:09:38Z WARN  kopium::analyzer] not generating type FailureDomains - using object map

and that's because it has its properties nested inside additionalProperties. this is not necessary, but will try to make a branch to see if we can handle it.

from kopium.

clux avatar clux commented on May 30, 2024

Several fixes has gone in since this was opened. The CRD case herein now at least builds - but i don't have a crd instance to fully test it. Please re-open if this is seen again. Definitely areas in the analyzer that i'm not sure about.

from kopium.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.