apiVersion: v1
data:
  application: |
    apiVersion: core.oam.dev/v1beta1
    kind: Application
    metadata:
      annotations:
        addons.oam.dev/description: ocm-cluster-manager can deploy an OCM hub cluster
          environment.
      name: ocm-cluster-manager
      namespace: vela-system
    spec:
      components:
      - name: ns-open-cluster-management
        properties:
          apiVersion: v1
          kind: Namespace
          metadata:
            name: open-cluster-management
        type: raw
      - name: cluster-manager-role-binding
        properties:
          apiVersion: rbac.authorization.k8s.io/v1
          kind: ClusterRoleBinding
          metadata:
            name: cluster-manager-role-binding
          roleRef:
            apiGroup: rbac.authorization.k8s.io
            kind: ClusterRole
            name: cluster-manager-cluster-role
          subjects:
          - kind: ServiceAccount
            name: cluster-manager-service-account
            namespace: open-cluster-management
        type: raw
      - name: cluster-manager-cluster-role
        properties:
          apiVersion: rbac.authorization.k8s.io/v1
          kind: ClusterRole
          metadata:
            name: cluster-manager-cluster-role
          rules:
          - apiGroups:
            - ""
            resources:
            - configmaps
            - namespaces
            - serviceaccounts
            - services
            - secrets
            verbs:
            - create
            - get
            - list
            - update
            - watch
            - patch
            - delete
          - apiGroups:
            - ""
            resources:
            - nodes
            verbs:
            - get
            - list
            - watch
          - apiGroups:
            - authorization.k8s.io
            resources:
            - subjectaccessreviews
            verbs:
            - create
          - apiGroups:
            - ""
            - events.k8s.io
            resources:
            - events
            verbs:
            - create
            - patch
            - update
          - apiGroups:
            - apps
            resources:
            - deployments
            verbs:
            - create
            - get
            - list
            - update
            - watch
            - patch
            - delete
          - apiGroups:
            - rbac.authorization.k8s.io
            resources:
            - clusterrolebindings
            - rolebindings
            verbs:
            - create
            - get
            - list
            - update
            - watch
            - patch
            - delete
          - apiGroups:
            - rbac.authorization.k8s.io
            resources:
            - clusterroles
            - roles
            verbs:
            - create
            - get
            - list
            - update
            - watch
            - patch
            - delete
            - escalate
            - bind
          - apiGroups:
            - apiextensions.k8s.io
            resources:
            - customresourcedefinitions
            verbs:
            - create
            - get
            - list
            - update
            - watch
            - patch
            - delete
          - apiGroups:
            - apiregistration.k8s.io
            resources:
            - apiservices
            verbs:
            - create
            - get
            - list
            - update
            - watch
            - patch
            - delete
          - apiGroups:
            - admissionregistration.k8s.io
            resources:
            - validatingwebhookconfigurations
            - mutatingwebhookconfigurations
            verbs:
            - create
            - get
            - list
            - update
            - watch
            - patch
            - delete
          - apiGroups:
            - operator.open-cluster-management.io
            resources:
            - clustermanagers
            verbs:
            - get
            - list
            - watch
            - update
            - delete
          - apiGroups:
            - operator.open-cluster-management.io
            resources:
            - clustermanagers/status
            verbs:
            - update
            - patch
        type: raw
      - name: cluster-manager-service-account
        properties:
          apiVersion: v1
          kind: ServiceAccount
          metadata:
            name: cluster-manager-service-account
            namespace: open-cluster-management
        type: raw
      - name: clustermanagers.operator.open-cluster-management.io
        properties:
          apiVersion: apiextensions.k8s.io/v1
          kind: CustomResourceDefinition
          metadata:
            name: clustermanagers.operator.open-cluster-management.io
          spec:
            group: operator.open-cluster-management.io
            names:
              kind: ClusterManager
              listKind: ClusterManagerList
              plural: clustermanagers
              singular: clustermanager
            preserveUnknownFields: false
            scope: Cluster
            versions:
            - name: v1
              schema:
                openAPIV3Schema:
                  description: ClusterManager configures the controllers on the hub that
                    govern registration and work distribution for attached Klusterlets.
                    ClusterManager will only be deployed in open-cluster-management-hub
                    namespace.
                  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: Spec represents a desired deployment configuration
                        of controllers that govern registration and work distribution
                        for attached Klusterlets.
                      properties:
                        placementImagePullSpec:
                          default: quay.io/open-cluster-management/placement
                          description: PlacementImagePullSpec represents the desired image
                            configuration of placement controller/webhook installed on
                            hub.
                          type: string
                        registrationImagePullSpec:
                          default: quay.io/open-cluster-management/registration
                          description: RegistrationImagePullSpec represents the desired
                            image of registration controller/webhook installed on hub.
                          type: string
                        workImagePullSpec:
                          default: quay.io/open-cluster-management/work
                          description: WorkImagePullSpec represents the desired image
                            configuration of work controller/webhook installed on hub.
                          type: string
                      type: object
                    status:
                      description: Status represents the current status of controllers
                        that govern the lifecycle of managed clusters.
                      properties:
                        conditions:
                          description: 'Conditions contain the different condition statuses
                            for this ClusterManager. Valid condition types are: Applied:
                            Components in hub are applied. Available: Components in hub
                            are available and ready to serve. Progressing: Components
                            in hub are in a transitioning state. Degraded: Components
                            in hub do not match the desired configuration and only provide
                            degraded service.'
                          items:
                            description: "Condition contains details for one aspect of
                              the current state of this API Resource. --- This struct
                              is intended for direct use as an array at the field path
                              .status.conditions.  For example, type FooStatus struct{
                              \    // Represents the observations of a foo's current state.
                              \    // Known .status.conditions.type are: \"Available\",
                              \"Progressing\", and \"Degraded\"     // +patchMergeKey=type
                              \    // +patchStrategy=merge     // +listType=map     //
                              +listMapKey=type     Conditions []metav1.Condition `json:\"conditions,omitempty\"
                              patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`
                              \n     // other fields }"
                            properties:
                              lastTransitionTime:
                                description: lastTransitionTime is the 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: message is a human readable message indicating
                                  details about the transition. This may be an empty string.
                                maxLength: 32768
                                type: string
                              observedGeneration:
                                description: observedGeneration represents the .metadata.generation
                                  that the condition was set based upon. For instance,
                                  if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration
                                  is 9, the condition is out of date with respect to the
                                  current state of the instance.
                                format: int64
                                minimum: 0
                                type: integer
                              reason:
                                description: reason contains a programmatic identifier
                                  indicating the reason for the condition's last transition.
                                  Producers of specific condition types may define expected
                                  values and meanings for this field, and whether the
                                  values are considered a guaranteed API. The value should
                                  be a CamelCase string. This field may not be empty.
                                maxLength: 1024
                                minLength: 1
                                pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
                                type: string
                              status:
                                description: status of the condition, one of True, False,
                                  Unknown.
                                enum:
                                - "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. The regex it matches is
                                  (dns1123SubdomainFmt/)?(qualifiedNameFmt)
                                maxLength: 316
                                pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                                type: string
                            required:
                            - lastTransitionTime
                            - message
                            - reason
                            - status
                            - type
                            type: object
                          type: array
                        generations:
                          description: Generations are used to determine when an item
                            needs to be reconciled or has changed in a way that needs
                            a reaction.
                          items:
                            description: GenerationStatus keeps track of the generation
                              for a given resource so that decisions about forced updates
                              can be made. The definition matches the GenerationStatus
                              defined in github.com/openshift/api/v1
                            properties:
                              group:
                                description: group is the group of the resource that you're
                                  tracking
                                type: string
                              lastGeneration:
                                description: lastGeneration is the last generation of
                                  the resource that controller applies
                                format: int64
                                type: integer
                              name:
                                description: name is the name of the resource that you're
                                  tracking
                                type: string
                              namespace:
                                description: namespace is where the resource that you're
                                  tracking is
                                type: string
                              resource:
                                description: resource is the resource type of the resource
                                  that you're tracking
                                type: string
                              version:
                                description: version is the version of the resource that
                                  you're tracking
                                type: string
                            type: object
                          type: array
                        observedGeneration:
                          description: ObservedGeneration is the last generation change
                            you've dealt with
                          format: int64
                          type: integer
                        relatedResources:
                          description: RelatedResources are used to track the resources
                            that are related to this ClusterManager.
                          items:
                            description: RelatedResourceMeta represents the resource that
                              is managed by an operator
                            properties:
                              group:
                                description: group is the group of the resource that you're
                                  tracking
                                type: string
                              name:
                                description: name is the name of the resource that you're
                                  tracking
                                type: string
                              namespace:
                                description: namespace is where the thing you're tracking
                                  is
                                type: string
                              resource:
                                description: resource is the resource type of the resource
                                  that you're tracking
                                type: string
                              version:
                                description: version is the version of the thing you're
                                  tracking
                                type: string
                            type: object
                          type: array
                      type: object
                  type: object
              served: true
              storage: true
              subresources:
                status: {}
          status:
            acceptedNames:
              kind: ""
              plural: ""
            conditions: []
            storedVersions: []
        type: raw
      - name: cluster-manager-hub
        properties:
          apiVersion: operator.open-cluster-management.io/v1
          kind: ClusterManager
          metadata:
            name: cluster-manager-hub
          spec:
            placementImagePullSpec: quay.io/open-cluster-management/placement
            registrationImagePullSpec: quay.io/open-cluster-management/registration
            workImagePullSpec: quay.io/open-cluster-management/work
        type: raw
      - name: cluster-manager-controller
        properties:
          apiVersion: apps/v1
          kind: Deployment
          metadata:
            labels:
              app: cluster-manager
            name: cluster-manager-controller
            namespace: open-cluster-management
          spec:
            replicas: 1
            selector:
              matchLabels:
                app: cluster-manager
            template:
              metadata:
                labels:
                  app: cluster-manager
              spec:
                affinity:
                  podAntiAffinity:
                    preferredDuringSchedulingIgnoredDuringExecution:
                    - podAffinityTerm:
                        labelSelector:
                          matchExpressions:
                          - key: app
                            operator: In
                            values:
                            - cluster-manager
                        topologyKey: failure-domain.beta.kubernetes.io/zone
                      weight: 70
                    - podAffinityTerm:
                        labelSelector:
                          matchExpressions:
                          - key: app
                            operator: In
                            values:
                            - cluster-manager
                        topologyKey: kubernetes.io/hostname
                      weight: 30
                containers:
                - args:
                  - /registration-operator
                  - hub
                  image: quay.io/open-cluster-management/registration-operator:latest
                  imagePullPolicy: IfNotPresent
                  livenessProbe:
                    httpGet:
                      path: /healthz
                      port: 8443
                      scheme: HTTPS
                    initialDelaySeconds: 2
                    periodSeconds: 10
                  name: registration-operator
                  readinessProbe:
                    httpGet:
                      path: /healthz
                      port: 8443
                      scheme: HTTPS
                    initialDelaySeconds: 2
                  resources:
                    requests:
                      cpu: 10m
                      memory: 128Mi
                  securityContext:
                    allowPrivilegeEscalation: false
                    capabilities:
                      drop:
                      - ALL
                    privileged: false
                    runAsNonRoot: true
                serviceAccountName: cluster-manager-service-account
        type: raw
      workflow:
        steps:
        - name: apply-ns
          properties:
            component: ns-open-cluster-management
          type: apply-component
        - name: apply-resources
          type: apply-remaining
    status:
      rollout:
        batchRollingState: ""
        currentBatch: 0
        lastTargetAppRevision: ""
        rollingState: ""
        upgradedReadyReplicas: 0
        upgradedReplicas: 0
kind: ConfigMap
metadata:
  annotations:
    addons.oam.dev/description: ocm-cluster-manager can deploy an OCM hub cluster
      environment.
    addons.oam.dev/name: ocm-cluster-manager
  labels:
    addons.oam.dev/type: ocm-cluster-manager
  name: ocm-cluster-manager
  namespace: {{.Values.systemDefinitionNamespace}}
