4.2.10 Installing License Service Reporter without Operator Lifecycle Manager (OLM)

Learn how to install License Service Reporter without the Operator Lifecycle Manager (OLM).

4.2.10 Installing License Service Reporter without OLM is supported from version 4.2.10.

Complete the following procedure to install License Service on a system that does not have the Operator Lifecycle Manager (OLM) deployed.

Prerequisites

Complete the installation on a host that meets the following criteria:

See Supported platforms and hardware requirements before you install License Service Reporter to check the installation requirements.

Installation

Complete the following steps to create the required resources.

  1. Export the following variable:

    export LSR_NAMESPACE=ibm-ls-reporter
    

    Note: The ibm-ls-reporter namespace is the default deployment namespace for License Service Reporter. However, you can install License Service Reporter in a custom namespace by replacing ibm-ls-reporter with your custom namespace in the command.

  2. Create the install-license-service-reporter.yaml file with the following content:

apiVersion: v1
kind: Namespace
metadata:
  labels:
    app.kubernetes.io/component: manager
    app.kubernetes.io/created-by: ibm-license-service-reporter-operator
    app.kubernetes.io/instance: ibm-licensing
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/name: namespace
    app.kubernetes.io/part-of: ibm-license-service-reporter-operator
    control-plane: ibm-license-service-reporter-operator
  name: $LSR_NAMESPACE
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.14.0
  name: ibmlicenseservicereporters.operator.ibm.com
spec:
  group: operator.ibm.com
  names:
    kind: IBMLicenseServiceReporter
    listKind: IBMLicenseServiceReporterList
    plural: ibmlicenseservicereporters
    singular: ibmlicenseservicereporter
  scope: Namespaced
  versions:
    - name: v1alpha1
      schema:
        openAPIV3Schema:
          description: |-
            IBM License Service Reporter is a singleton which may be used in a single or multi-cluster environment. It aggregates data pushed from IBM License Services, deployed on clusters and from ILMT.


            Documentation: https://ibm.biz/lsvc-rprtr.


            License: Please refer to the IBM Terms website (ibm.biz/lsvc-lic) to find the license terms for the particular IBM product for which you are deploying this component.


            IBM License Service Reporter is a free, optionally installed add-on  one of services of Cloud Pak Foundational Services. Thanks to the IBM License Service Reporter customer can:


            - see IBM software deployments on a single dashboard, verify and maintain license compliance and avoid audit infractions,


            - see historical data on IBM software deployments to support making informed decisions for future purchases,


            - see details of software deployments, including source (ILMT for VMs, License Service for containers), cluster and quantities of licenses deployed,


            - identify which software deployments are VMs vs. containers and can use this information to evaluate workloads for modernization.
          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: IBMLicenseServiceReporterSpec defines the desired state of IBMLicenseServiceReporter
              properties:
                annotations:
                  additionalProperties:
                    type: string
                  description: Annotations to be copied into all relevant resources
                  type: object
                apiSecretToken:
                  description: Secret name used to store application token, either one that exists, or one that will be created
                  type: string
                authContainer:
                  description: Authentication Image Settings
                  properties:
                    imageName:
                      description: IBM License Service Reporter docker Image Name, will override default value and disable image env value in operator deployment
                      type: string
                    imagePullPolicy:
                      description: PullPolicy describes a policy for if/when to pull a container image
                      enum:
                        - Always
                        - IfNotPresent
                        - Never
                      type: string
                    imageRegistry:
                      description: IBM License Service Reporter docker Image Registry, will override default value and disable image env value in operator deployment
                      type: string
                    imageTagPostfix:
                      description: IBM License Service Reporter docker Image Tag or Digest, will override default value and disable image env value in operator deployment
                      type: string
                    resources:
                      description: ResourceRequirements describes the compute resource requirements.
                      properties:
                        limits:
                          additionalProperties:
                            anyOf:
                              - type: integer
                              - type: string
                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                            x-kubernetes-int-or-string: true
                          description: |-
                            Limits describes the maximum amount of compute resources allowed.
                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                          type: object
                        requests:
                          additionalProperties:
                            anyOf:
                              - type: integer
                              - type: string
                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                            x-kubernetes-int-or-string: true
                          description: |-
                            Requests describes the minimum amount of compute resources required.
                            If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
                            otherwise to an implementation-defined value.
                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                          type: object
                      type: object
                  type: object
                authentication:
                  description: License Service Reporter oauth2-proxy configuration
                  properties:
                    oauth:
                      properties:
                        enabled:
                          type: boolean
                        parameters:
                          items:
                            type: string
                          type: array
                      type: object
                    useradmin:
                      properties:
                        enabled:
                          default: true
                          type: boolean
                      type: object
                  type: object
                capacity:
                  anyOf:
                    - type: integer
                    - type: string
                  description: Persistent Volume Claim Capacity
                  pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                  x-kubernetes-int-or-string: true
                databaseContainer:
                  description: Database Settings
                  properties:
                    imageName:
                      description: IBM License Service Reporter docker Image Name, will override default value and disable image env value in operator deployment
                      type: string
                    imagePullPolicy:
                      description: PullPolicy describes a policy for if/when to pull a container image
                      enum:
                        - Always
                        - IfNotPresent
                        - Never
                      type: string
                    imageRegistry:
                      description: IBM License Service Reporter docker Image Registry, will override default value and disable image env value in operator deployment
                      type: string
                    imageTagPostfix:
                      description: IBM License Service Reporter docker Image Tag or Digest, will override default value and disable image env value in operator deployment
                      type: string
                    resources:
                      description: ResourceRequirements describes the compute resource requirements.
                      properties:
                        limits:
                          additionalProperties:
                            anyOf:
                              - type: integer
                              - type: string
                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                            x-kubernetes-int-or-string: true
                          description: |-
                            Limits describes the maximum amount of compute resources allowed.
                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                          type: object
                        requests:
                          additionalProperties:
                            anyOf:
                              - type: integer
                              - type: string
                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                            x-kubernetes-int-or-string: true
                          description: |-
                            Requests describes the minimum amount of compute resources required.
                            If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
                            otherwise to an implementation-defined value.
                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                          type: object
                      type: object
                  type: object
                enableWorkloadsProcessing:
                  description: Enable workloads-related processing and reportering in the License Service Reporter
                  type: boolean
                envVariable:
                  additionalProperties:
                    type: string
                  description: Environment variable setting
                  type: object
                httpsCertsSource:
                  description: 'options: self-signed or custom'
                  enum:
                    - self-signed
                    - custom
                    - ocp
                  type: string
                imagePullSecrets:
                  description: Array of pull secrets which should include existing at InstanceNamespace secret to allow pulling IBM License Service Reporter image
                  items:
                    type: string
                  type: array
                ingressEnabled:
                  description: Information whether to create the Ingress automatically by the operator to expose the IBM License Service Reporter Console and API (not needed if Routes creation is enabled, disable if you want to create Ingresses manually)
                  type: boolean
                ingressOptions:
                  description: If ingress is enabled, you can set its parameters
                  properties:
                    apiOptions:
                      description: Options specific to API Ingress
                      properties:
                        annotations:
                          additionalProperties:
                            type: string
                          description: Additional annotations that should include r.g. ingress class if using non-default ingress controller
                          type: object
                        path:
                          description: Endpoint under which the application will be available e.g. if you specify this path as /ibm-license-service-reporter-api then the application will be available under https://<hostname>:<port>/ibm-license-service-reporter-api
                          type: string
                        tls:
                          description: TLS options to enable secure connection
                          items:
                            description: IngressTLS describes the transport layer security associated with an Ingress.
                            properties:
                              hosts:
                                description: |-
                                  Hosts are a list of hosts included in the TLS certificate. The values in
                                  this list must match the name/s used in the tlsSecret. Defaults to the
                                  wildcard host setting for the loadbalancer controller fulfilling this
                                  Ingress, if left unspecified.
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: atomic
                              secretName:
                                description: |-
                                  SecretName is the name of the secret used to terminate TLS traffic on
                                  port 443. Field is left optional to allow TLS routing based on SNI
                                  hostname alone. If the SNI host in a listener conflicts with the "Host"
                                  header field used by an IngressRule, the SNI host is used for termination
                                  and value of the Host header is used for routing.
                                type: string
                            type: object
                          type: array
                      type: object
                    commonOptions:
                      description: Options common to both API and Console Ingresses
                      properties:
                        host:
                          description: If you use non-default host include it here
                          type: string
                        ingressClassName:
                          description: IngressClassName defines ingress class name option to be passed to the ingress spec field
                          type: string
                      type: object
                    consoleOptions:
                      description: Options specific to Console Ingress
                      properties:
                        annotations:
                          additionalProperties:
                            type: string
                          description: Additional annotations that should include r.g. ingress class if using non-default ingress controller
                          type: object
                        path:
                          description: Endpoint under which the application will be available e.g. if you specify this path as /ibm-license-service-reporter-api then the application will be available under https://<hostname>:<port>/ibm-license-service-reporter-api
                          type: string
                        tls:
                          description: TLS options to enable secure connection
                          items:
                            description: IngressTLS describes the transport layer security associated with an Ingress.
                            properties:
                              hosts:
                                description: |-
                                  Hosts are a list of hosts included in the TLS certificate. The values in
                                  this list must match the name/s used in the tlsSecret. Defaults to the
                                  wildcard host setting for the loadbalancer controller fulfilling this
                                  Ingress, if left unspecified.
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: atomic
                              secretName:
                                description: |-
                                  SecretName is the name of the secret used to terminate TLS traffic on
                                  port 443. Field is left optional to allow TLS routing based on SNI
                                  hostname alone. If the SNI host in a listener conflicts with the "Host"
                                  header field used by an IngressRule, the SNI host is used for termination
                                  and value of the Host header is used for routing.
                                type: string
                            type: object
                          type: array
                      type: object
                  type: object
                labels:
                  additionalProperties:
                    type: string
                  description: Labels to be copied into all relevant resources
                  type: object
                license:
                  description: IBM License Service Reporter license acceptance.
                  properties:
                    accept:
                      description: 'By installing the IBM License Service Reporter, you accept the license terms for the particular IBM product for which you are deploying this component: ibm.biz/lsvc-lic.'
                      type: boolean
                      x-kubernetes-validations:
                        - message: 'Please accept license terms of this component (ibm.biz/lsvc-lic) by setting a field spec.license.accept: true'
                          rule: self == true
                  required:
                    - accept
                  type: object
                logLevel:
                  description: 'Should application pod show additional information, options: DEBUG, INFO, VERBOSE'
                  enum:
                    - DEBUG
                    - INFO
                    - VERBOSE
                  type: string
                receiverContainer:
                  description: Receiver Settings
                  properties:
                    imageName:
                      description: IBM License Service Reporter docker Image Name, will override default value and disable image env value in operator deployment
                      type: string
                    imagePullPolicy:
                      description: PullPolicy describes a policy for if/when to pull a container image
                      enum:
                        - Always
                        - IfNotPresent
                        - Never
                      type: string
                    imageRegistry:
                      description: IBM License Service Reporter docker Image Registry, will override default value and disable image env value in operator deployment
                      type: string
                    imageTagPostfix:
                      description: IBM License Service Reporter docker Image Tag or Digest, will override default value and disable image env value in operator deployment
                      type: string
                    resources:
                      description: ResourceRequirements describes the compute resource requirements.
                      properties:
                        limits:
                          additionalProperties:
                            anyOf:
                              - type: integer
                              - type: string
                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                            x-kubernetes-int-or-string: true
                          description: |-
                            Limits describes the maximum amount of compute resources allowed.
                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                          type: object
                        requests:
                          additionalProperties:
                            anyOf:
                              - type: integer
                              - type: string
                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                            x-kubernetes-int-or-string: true
                          description: |-
                            Requests describes the minimum amount of compute resources required.
                            If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
                            otherwise to an implementation-defined value.
                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                          type: object
                      type: object
                  type: object
                reporterUIContainer:
                  description: Receiver Settings
                  properties:
                    imageName:
                      description: IBM License Service Reporter docker Image Name, will override default value and disable image env value in operator deployment
                      type: string
                    imagePullPolicy:
                      description: PullPolicy describes a policy for if/when to pull a container image
                      enum:
                        - Always
                        - IfNotPresent
                        - Never
                      type: string
                    imageRegistry:
                      description: IBM License Service Reporter docker Image Registry, will override default value and disable image env value in operator deployment
                      type: string
                    imageTagPostfix:
                      description: IBM License Service Reporter docker Image Tag or Digest, will override default value and disable image env value in operator deployment
                      type: string
                    resources:
                      description: ResourceRequirements describes the compute resource requirements.
                      properties:
                        limits:
                          additionalProperties:
                            anyOf:
                              - type: integer
                              - type: string
                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                            x-kubernetes-int-or-string: true
                          description: |-
                            Limits describes the maximum amount of compute resources allowed.
                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                          type: object
                        requests:
                          additionalProperties:
                            anyOf:
                              - type: integer
                              - type: string
                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                            x-kubernetes-int-or-string: true
                          description: |-
                            Requests describes the minimum amount of compute resources required.
                            If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
                            otherwise to an implementation-defined value.
                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                          type: object
                      type: object
                  type: object
                routeEnabled:
                  description: Information whether to create the Routes automatically by the operator (available only on OpenShift) to expose the IBM License Service Reporter Console and API
                  type: boolean
                routeOptions:
                  description: Route parameters
                  properties:
                    tls:
                      description: TLSConfig defines config used to secure a route and provide termination
                      properties:
                        caCertificate:
                          description: caCertificate provides the cert authority certificate contents
                          type: string
                        certificate:
                          description: |-
                            certificate provides certificate contents. This should be a single serving certificate, not a certificate
                            chain. Do not include a CA certificate.
                          type: string
                        destinationCACertificate:
                          description: |-
                            destinationCACertificate provides the contents of the ca certificate of the final destination.  When using reencrypt
                            termination this file should be provided in order to have routers use it for health checks on the secure connection.
                            If this field is not specified, the router may provide its own destination CA and perform hostname validation using
                            the short service name (service.namespace.svc), which allows infrastructure generated certificates to automatically
                            verify.
                          type: string
                        insecureEdgeTerminationPolicy:
                          description: |-
                            insecureEdgeTerminationPolicy indicates the desired behavior for insecure connections to a route. While
                            each router may make its own decisions on which ports to expose, this is normally port 80.


                            * Allow - traffic is sent to the server on the insecure port (default)
                            * Disable - no traffic is allowed on the insecure port.
                            * Redirect - clients are redirected to the secure port.
                          type: string
                        key:
                          description: key provides key file contents
                          type: string
                        termination:
                          description: |-
                            termination indicates termination type.


                            * edge - TLS termination is done by the router and http is used to communicate with the backend (default)
                            * passthrough - Traffic is sent straight to the destination without the router providing TLS termination
                            * reencrypt - TLS termination is done by the router and https is used to communicate with the backend
                          type: string
                      required:
                        - termination
                      type: object
                  type: object
                storageClass:
                  description: Storage class used by database to provide persistency
                  type: string
                version:
                  description: Version
                  type: string
              required:
                - license
              type: object
              x-kubernetes-preserve-unknown-fields: true
            status:
              description: IBMLicenseServiceReporterStatus defines the observed state of IBMLicenseServiceReporter
              properties:
                LicenseServiceReporterPods:
                  description: |-
                    Important: Run "operator-sdk generate k8s" to regenerate code after modifying this file
                    Add custom validation using kubebuilder tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html
                  items:
                    description: |-
                      PodStatus represents information about the status of a pod. Status may trail the actual
                      state of a system, especially if the node that hosts the pod cannot contact the control
                      plane.
                    properties:
                      conditions:
                        description: |-
                          Current service state of pod.
                          More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
                        items:
                          description: PodCondition contains details for the current condition of this pod.
                          properties:
                            lastProbeTime:
                              description: Last time we probed the condition.
                              format: date-time
                              type: string
                            lastTransitionTime:
                              description: Last time the condition transitioned from one status to another.
                              format: date-time
                              type: string
                            message:
                              description: Human-readable message indicating details about last transition.
                              type: string
                            reason:
                              description: Unique, one-word, CamelCase reason for the condition's last transition.
                              type: string
                            status:
                              description: |-
                                Status is the status of the condition.
                                Can be True, False, Unknown.
                                More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
                              type: string
                            type:
                              description: |-
                                Type is the type of the condition.
                                More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
                              type: string
                          required:
                            - status
                            - type
                          type: object
                        type: array
                      containerStatuses:
                        description: |-
                          The list has one entry per container in the manifest.
                          More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
                        items:
                          description: ContainerStatus contains details for the current status of this container.
                          properties:
                            containerID:
                              description: Container's ID in the format '<type>://<container_id>'.
                              type: string
                            image:
                              description: |-
                                The image the container is running.
                                More info: https://kubernetes.io/docs/concepts/containers/images.
                              type: string
                            imageID:
                              description: ImageID of the container's image.
                              type: string
                            lastState:
                              description: Details about the container's last termination condition.
                              properties:
                                running:
                                  description: Details about a running container
                                  properties:
                                    startedAt:
                                      description: Time at which the container was last (re-)started
                                      format: date-time
                                      type: string
                                  type: object
                                terminated:
                                  description: Details about a terminated container
                                  properties:
                                    containerID:
                                      description: Container's ID in the format '<type>://<container_id>'
                                      type: string
                                    exitCode:
                                      description: Exit status from the last termination of the container
                                      format: int32
                                      type: integer
                                    finishedAt:
                                      description: Time at which the container last terminated
                                      format: date-time
                                      type: string
                                    message:
                                      description: Message regarding the last termination of the container
                                      type: string
                                    reason:
                                      description: (brief) reason from the last termination of the container
                                      type: string
                                    signal:
                                      description: Signal from the last termination of the container
                                      format: int32
                                      type: integer
                                    startedAt:
                                      description: Time at which previous execution of the container started
                                      format: date-time
                                      type: string
                                  required:
                                    - exitCode
                                  type: object
                                waiting:
                                  description: Details about a waiting container
                                  properties:
                                    message:
                                      description: Message regarding why the container is not yet running.
                                      type: string
                                    reason:
                                      description: (brief) reason the container is not yet running.
                                      type: string
                                  type: object
                              type: object
                            name:
                              description: |-
                                This must be a DNS_LABEL. Each container in a pod must have a unique name.
                                Cannot be updated.
                              type: string
                            ready:
                              description: Specifies whether the container has passed its readiness probe.
                              type: boolean
                            restartCount:
                              description: The number of times the container has been restarted.
                              format: int32
                              type: integer
                            started:
                              description: |-
                                Specifies whether the container has passed its startup probe.
                                Initialized as false, becomes true after startupProbe is considered successful.
                                Resets to false when the container is restarted, or if kubelet loses state temporarily.
                                Is always true when no startupProbe is defined.
                              type: boolean
                            state:
                              description: Details about the container's current condition.
                              properties:
                                running:
                                  description: Details about a running container
                                  properties:
                                    startedAt:
                                      description: Time at which the container was last (re-)started
                                      format: date-time
                                      type: string
                                  type: object
                                terminated:
                                  description: Details about a terminated container
                                  properties:
                                    containerID:
                                      description: Container's ID in the format '<type>://<container_id>'
                                      type: string
                                    exitCode:
                                      description: Exit status from the last termination of the container
                                      format: int32
                                      type: integer
                                    finishedAt:
                                      description: Time at which the container last terminated
                                      format: date-time
                                      type: string
                                    message:
                                      description: Message regarding the last termination of the container
                                      type: string
                                    reason:
                                      description: (brief) reason from the last termination of the container
                                      type: string
                                    signal:
                                      description: Signal from the last termination of the container
                                      format: int32
                                      type: integer
                                    startedAt:
                                      description: Time at which previous execution of the container started
                                      format: date-time
                                      type: string
                                  required:
                                    - exitCode
                                  type: object
                                waiting:
                                  description: Details about a waiting container
                                  properties:
                                    message:
                                      description: Message regarding why the container is not yet running.
                                      type: string
                                    reason:
                                      description: (brief) reason the container is not yet running.
                                      type: string
                                  type: object
                              type: object
                          required:
                            - image
                            - imageID
                            - name
                            - ready
                            - restartCount
                          type: object
                        type: array
                      ephemeralContainerStatuses:
                        description: Status for any ephemeral containers that have run in this pod.
                        items:
                          description: ContainerStatus contains details for the current status of this container.
                          properties:
                            containerID:
                              description: Container's ID in the format '<type>://<container_id>'.
                              type: string
                            image:
                              description: |-
                                The image the container is running.
                                More info: https://kubernetes.io/docs/concepts/containers/images.
                              type: string
                            imageID:
                              description: ImageID of the container's image.
                              type: string
                            lastState:
                              description: Details about the container's last termination condition.
                              properties:
                                running:
                                  description: Details about a running container
                                  properties:
                                    startedAt:
                                      description: Time at which the container was last (re-)started
                                      format: date-time
                                      type: string
                                  type: object
                                terminated:
                                  description: Details about a terminated container
                                  properties:
                                    containerID:
                                      description: Container's ID in the format '<type>://<container_id>'
                                      type: string
                                    exitCode:
                                      description: Exit status from the last termination of the container
                                      format: int32
                                      type: integer
                                    finishedAt:
                                      description: Time at which the container last terminated
                                      format: date-time
                                      type: string
                                    message:
                                      description: Message regarding the last termination of the container
                                      type: string
                                    reason:
                                      description: (brief) reason from the last termination of the container
                                      type: string
                                    signal:
                                      description: Signal from the last termination of the container
                                      format: int32
                                      type: integer
                                    startedAt:
                                      description: Time at which previous execution of the container started
                                      format: date-time
                                      type: string
                                  required:
                                    - exitCode
                                  type: object
                                waiting:
                                  description: Details about a waiting container
                                  properties:
                                    message:
                                      description: Message regarding why the container is not yet running.
                                      type: string
                                    reason:
                                      description: (brief) reason the container is not yet running.
                                      type: string
                                  type: object
                              type: object
                            name:
                              description: |-
                                This must be a DNS_LABEL. Each container in a pod must have a unique name.
                                Cannot be updated.
                              type: string
                            ready:
                              description: Specifies whether the container has passed its readiness probe.
                              type: boolean
                            restartCount:
                              description: The number of times the container has been restarted.
                              format: int32
                              type: integer
                            started:
                              description: |-
                                Specifies whether the container has passed its startup probe.
                                Initialized as false, becomes true after startupProbe is considered successful.
                                Resets to false when the container is restarted, or if kubelet loses state temporarily.
                                Is always true when no startupProbe is defined.
                              type: boolean
                            state:
                              description: Details about the container's current condition.
                              properties:
                                running:
                                  description: Details about a running container
                                  properties:
                                    startedAt:
                                      description: Time at which the container was last (re-)started
                                      format: date-time
                                      type: string
                                  type: object
                                terminated:
                                  description: Details about a terminated container
                                  properties:
                                    containerID:
                                      description: Container's ID in the format '<type>://<container_id>'
                                      type: string
                                    exitCode:
                                      description: Exit status from the last termination of the container
                                      format: int32
                                      type: integer
                                    finishedAt:
                                      description: Time at which the container last terminated
                                      format: date-time
                                      type: string
                                    message:
                                      description: Message regarding the last termination of the container
                                      type: string
                                    reason:
                                      description: (brief) reason from the last termination of the container
                                      type: string
                                    signal:
                                      description: Signal from the last termination of the container
                                      format: int32
                                      type: integer
                                    startedAt:
                                      description: Time at which previous execution of the container started
                                      format: date-time
                                      type: string
                                  required:
                                    - exitCode
                                  type: object
                                waiting:
                                  description: Details about a waiting container
                                  properties:
                                    message:
                                      description: Message regarding why the container is not yet running.
                                      type: string
                                    reason:
                                      description: (brief) reason the container is not yet running.
                                      type: string
                                  type: object
                              type: object
                          required:
                            - image
                            - imageID
                            - name
                            - ready
                            - restartCount
                          type: object
                        type: array
                      hostIP:
                        description: IP address of the host to which the pod is assigned. Empty if not yet scheduled.
                        type: string
                      initContainerStatuses:
                        description: |-
                          The list has one entry per init container in the manifest. The most recent successful
                          init container will have ready = true, the most recently started container will have
                          startTime set.
                          More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
                        items:
                          description: ContainerStatus contains details for the current status of this container.
                          properties:
                            containerID:
                              description: Container's ID in the format '<type>://<container_id>'.
                              type: string
                            image:
                              description: |-
                                The image the container is running.
                                More info: https://kubernetes.io/docs/concepts/containers/images.
                              type: string
                            imageID:
                              description: ImageID of the container's image.
                              type: string
                            lastState:
                              description: Details about the container's last termination condition.
                              properties:
                                running:
                                  description: Details about a running container
                                  properties:
                                    startedAt:
                                      description: Time at which the container was last (re-)started
                                      format: date-time
                                      type: string
                                  type: object
                                terminated:
                                  description: Details about a terminated container
                                  properties:
                                    containerID:
                                      description: Container's ID in the format '<type>://<container_id>'
                                      type: string
                                    exitCode:
                                      description: Exit status from the last termination of the container
                                      format: int32
                                      type: integer
                                    finishedAt:
                                      description: Time at which the container last terminated
                                      format: date-time
                                      type: string
                                    message:
                                      description: Message regarding the last termination of the container
                                      type: string
                                    reason:
                                      description: (brief) reason from the last termination of the container
                                      type: string
                                    signal:
                                      description: Signal from the last termination of the container
                                      format: int32
                                      type: integer
                                    startedAt:
                                      description: Time at which previous execution of the container started
                                      format: date-time
                                      type: string
                                  required:
                                    - exitCode
                                  type: object
                                waiting:
                                  description: Details about a waiting container
                                  properties:
                                    message:
                                      description: Message regarding why the container is not yet running.
                                      type: string
                                    reason:
                                      description: (brief) reason the container is not yet running.
                                      type: string
                                  type: object
                              type: object
                            name:
                              description: |-
                                This must be a DNS_LABEL. Each container in a pod must have a unique name.
                                Cannot be updated.
                              type: string
                            ready:
                              description: Specifies whether the container has passed its readiness probe.
                              type: boolean
                            restartCount:
                              description: The number of times the container has been restarted.
                              format: int32
                              type: integer
                            started:
                              description: |-
                                Specifies whether the container has passed its startup probe.
                                Initialized as false, becomes true after startupProbe is considered successful.
                                Resets to false when the container is restarted, or if kubelet loses state temporarily.
                                Is always true when no startupProbe is defined.
                              type: boolean
                            state:
                              description: Details about the container's current condition.
                              properties:
                                running:
                                  description: Details about a running container
                                  properties:
                                    startedAt:
                                      description: Time at which the container was last (re-)started
                                      format: date-time
                                      type: string
                                  type: object
                                terminated:
                                  description: Details about a terminated container
                                  properties:
                                    containerID:
                                      description: Container's ID in the format '<type>://<container_id>'
                                      type: string
                                    exitCode:
                                      description: Exit status from the last termination of the container
                                      format: int32
                                      type: integer
                                    finishedAt:
                                      description: Time at which the container last terminated
                                      format: date-time
                                      type: string
                                    message:
                                      description: Message regarding the last termination of the container
                                      type: string
                                    reason:
                                      description: (brief) reason from the last termination of the container
                                      type: string
                                    signal:
                                      description: Signal from the last termination of the container
                                      format: int32
                                      type: integer
                                    startedAt:
                                      description: Time at which previous execution of the container started
                                      format: date-time
                                      type: string
                                  required:
                                    - exitCode
                                  type: object
                                waiting:
                                  description: Details about a waiting container
                                  properties:
                                    message:
                                      description: Message regarding why the container is not yet running.
                                      type: string
                                    reason:
                                      description: (brief) reason the container is not yet running.
                                      type: string
                                  type: object
                              type: object
                          required:
                            - image
                            - imageID
                            - name
                            - ready
                            - restartCount
                          type: object
                        type: array
                      message:
                        description: A human readable message indicating details about why the pod is in this condition.
                        type: string
                      nominatedNodeName:
                        description: |-
                          nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be
                          scheduled right away as preemption victims receive their graceful termination periods.
                          This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide
                          to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to
                          give the resources on this node to a higher priority pod that is created after preemption.
                          As a result, this field may be different than PodSpec.nodeName when the pod is
                          scheduled.
                        type: string
                      phase:
                        description: |-
                          The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle.
                          The conditions array, the reason and message fields, and the individual container status
                          arrays contain more detail about the pod's status.
                          There are five possible phase values:


                          Pending: The pod has been accepted by the Kubernetes system, but one or more of the
                          container images has not been created. This includes time before being scheduled as
                          well as time spent downloading images over the network, which could take a while.
                          Running: The pod has been bound to a node, and all of the containers have been created.
                          At least one container is still running, or is in the process of starting or restarting.
                          Succeeded: All containers in the pod have terminated in success, and will not be restarted.
                          Failed: All containers in the pod have terminated, and at least one container has
                          terminated in failure. The container either exited with non-zero status or was terminated
                          by the system.
                          Unknown: For some reason the state of the pod could not be obtained, typically due to an
                          error in communicating with the host of the pod.


                          More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase
                        type: string
                      podIP:
                        description: |-
                          IP address allocated to the pod. Routable at least within the cluster.
                          Empty if not yet allocated.
                        type: string
                      podIPs:
                        description: |-
                          podIPs holds the IP addresses allocated to the pod. If this field is specified, the 0th entry must
                          match the podIP field. Pods may be allocated at most 1 value for each of IPv4 and IPv6. This list
                          is empty if no IPs have been allocated yet.
                        items:
                          description: "IP address information for entries in the (plural) PodIPs field.\nEach entry includes:\n\n\n\tIP: An IP address allocated to the pod. Routable at least within the cluster."
                          properties:
                            ip:
                              description: ip is an IP address (IPv4 or IPv6) assigned to the pod
                              type: string
                          type: object
                        type: array
                      qosClass:
                        description: |-
                          The Quality of Service (QOS) classification assigned to the pod based on resource requirements
                          See PodQOSClass type for available QOS classes
                          More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md
                        type: string
                      reason:
                        description: |-
                          A brief CamelCase message indicating details about why the pod is in this state.
                          e.g. 'Evicted'
                        type: string
                      startTime:
                        description: |-
                          RFC 3339 date and time at which the object was acknowledged by the Kubelet.
                          This is before the Kubelet pulled the container image(s) for the pod.
                        format: date-time
                        type: string
                    type: object
                  type: array
                LicensingReporterPods:
                  description: Property for compatibility with LicenseService LTSR
                  items:
                    description: |-
                      PodStatus represents information about the status of a pod. Status may trail the actual
                      state of a system, especially if the node that hosts the pod cannot contact the control
                      plane.
                    properties:
                      conditions:
                        description: |-
                          Current service state of pod.
                          More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
                        items:
                          description: PodCondition contains details for the current condition of this pod.
                          properties:
                            lastProbeTime:
                              description: Last time we probed the condition.
                              format: date-time
                              type: string
                            lastTransitionTime:
                              description: Last time the condition transitioned from one status to another.
                              format: date-time
                              type: string
                            message:
                              description: Human-readable message indicating details about last transition.
                              type: string
                            reason:
                              description: Unique, one-word, CamelCase reason for the condition's last transition.
                              type: string
                            status:
                              description: |-
                                Status is the status of the condition.
                                Can be True, False, Unknown.
                                More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
                              type: string
                            type:
                              description: |-
                                Type is the type of the condition.
                                More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
                              type: string
                          required:
                            - status
                            - type
                          type: object
                        type: array
                      containerStatuses:
                        description: |-
                          The list has one entry per container in the manifest.
                          More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
                        items:
                          description: ContainerStatus contains details for the current status of this container.
                          properties:
                            containerID:
                              description: Container's ID in the format '<type>://<container_id>'.
                              type: string
                            image:
                              description: |-
                                The image the container is running.
                                More info: https://kubernetes.io/docs/concepts/containers/images.
                              type: string
                            imageID:
                              description: ImageID of the container's image.
                              type: string
                            lastState:
                              description: Details about the container's last termination condition.
                              properties:
                                running:
                                  description: Details about a running container
                                  properties:
                                    startedAt:
                                      description: Time at which the container was last (re-)started
                                      format: date-time
                                      type: string
                                  type: object
                                terminated:
                                  description: Details about a terminated container
                                  properties:
                                    containerID:
                                      description: Container's ID in the format '<type>://<container_id>'
                                      type: string
                                    exitCode:
                                      description: Exit status from the last termination of the container
                                      format: int32
                                      type: integer
                                    finishedAt:
                                      description: Time at which the container last terminated
                                      format: date-time
                                      type: string
                                    message:
                                      description: Message regarding the last termination of the container
                                      type: string
                                    reason:
                                      description: (brief) reason from the last termination of the container
                                      type: string
                                    signal:
                                      description: Signal from the last termination of the container
                                      format: int32
                                      type: integer
                                    startedAt:
                                      description: Time at which previous execution of the container started
                                      format: date-time
                                      type: string
                                  required:
                                    - exitCode
                                  type: object
                                waiting:
                                  description: Details about a waiting container
                                  properties:
                                    message:
                                      description: Message regarding why the container is not yet running.
                                      type: string
                                    reason:
                                      description: (brief) reason the container is not yet running.
                                      type: string
                                  type: object
                              type: object
                            name:
                              description: |-
                                This must be a DNS_LABEL. Each container in a pod must have a unique name.
                                Cannot be updated.
                              type: string
                            ready:
                              description: Specifies whether the container has passed its readiness probe.
                              type: boolean
                            restartCount:
                              description: The number of times the container has been restarted.
                              format: int32
                              type: integer
                            started:
                              description: |-
                                Specifies whether the container has passed its startup probe.
                                Initialized as false, becomes true after startupProbe is considered successful.
                                Resets to false when the container is restarted, or if kubelet loses state temporarily.
                                Is always true when no startupProbe is defined.
                              type: boolean
                            state:
                              description: Details about the container's current condition.
                              properties:
                                running:
                                  description: Details about a running container
                                  properties:
                                    startedAt:
                                      description: Time at which the container was last (re-)started
                                      format: date-time
                                      type: string
                                  type: object
                                terminated:
                                  description: Details about a terminated container
                                  properties:
                                    containerID:
                                      description: Container's ID in the format '<type>://<container_id>'
                                      type: string
                                    exitCode:
                                      description: Exit status from the last termination of the container
                                      format: int32
                                      type: integer
                                    finishedAt:
                                      description: Time at which the container last terminated
                                      format: date-time
                                      type: string
                                    message:
                                      description: Message regarding the last termination of the container
                                      type: string
                                    reason:
                                      description: (brief) reason from the last termination of the container
                                      type: string
                                    signal:
                                      description: Signal from the last termination of the container
                                      format: int32
                                      type: integer
                                    startedAt:
                                      description: Time at which previous execution of the container started
                                      format: date-time
                                      type: string
                                  required:
                                    - exitCode
                                  type: object
                                waiting:
                                  description: Details about a waiting container
                                  properties:
                                    message:
                                      description: Message regarding why the container is not yet running.
                                      type: string
                                    reason:
                                      description: (brief) reason the container is not yet running.
                                      type: string
                                  type: object
                              type: object
                          required:
                            - image
                            - imageID
                            - name
                            - ready
                            - restartCount
                          type: object
                        type: array
                      ephemeralContainerStatuses:
                        description: Status for any ephemeral containers that have run in this pod.
                        items:
                          description: ContainerStatus contains details for the current status of this container.
                          properties:
                            containerID:
                              description: Container's ID in the format '<type>://<container_id>'.
                              type: string
                            image:
                              description: |-
                                The image the container is running.
                                More info: https://kubernetes.io/docs/concepts/containers/images.
                              type: string
                            imageID:
                              description: ImageID of the container's image.
                              type: string
                            lastState:
                              description: Details about the container's last termination condition.
                              properties:
                                running:
                                  description: Details about a running container
                                  properties:
                                    startedAt:
                                      description: Time at which the container was last (re-)started
                                      format: date-time
                                      type: string
                                  type: object
                                terminated:
                                  description: Details about a terminated container
                                  properties:
                                    containerID:
                                      description: Container's ID in the format '<type>://<container_id>'
                                      type: string
                                    exitCode:
                                      description: Exit status from the last termination of the container
                                      format: int32
                                      type: integer
                                    finishedAt:
                                      description: Time at which the container last terminated
                                      format: date-time
                                      type: string
                                    message:
                                      description: Message regarding the last termination of the container
                                      type: string
                                    reason:
                                      description: (brief) reason from the last termination of the container
                                      type: string
                                    signal:
                                      description: Signal from the last termination of the container
                                      format: int32
                                      type: integer
                                    startedAt:
                                      description: Time at which previous execution of the container started
                                      format: date-time
                                      type: string
                                  required:
                                    - exitCode
                                  type: object
                                waiting:
                                  description: Details about a waiting container
                                  properties:
                                    message:
                                      description: Message regarding why the container is not yet running.
                                      type: string
                                    reason:
                                      description: (brief) reason the container is not yet running.
                                      type: string
                                  type: object
                              type: object
                            name:
                              description: |-
                                This must be a DNS_LABEL. Each container in a pod must have a unique name.
                                Cannot be updated.
                              type: string
                            ready:
                              description: Specifies whether the container has passed its readiness probe.
                              type: boolean
                            restartCount:
                              description: The number of times the container has been restarted.
                              format: int32
                              type: integer
                            started:
                              description: |-
                                Specifies whether the container has passed its startup probe.
                                Initialized as false, becomes true after startupProbe is considered successful.
                                Resets to false when the container is restarted, or if kubelet loses state temporarily.
                                Is always true when no startupProbe is defined.
                              type: boolean
                            state:
                              description: Details about the container's current condition.
                              properties:
                                running:
                                  description: Details about a running container
                                  properties:
                                    startedAt:
                                      description: Time at which the container was last (re-)started
                                      format: date-time
                                      type: string
                                  type: object
                                terminated:
                                  description: Details about a terminated container
                                  properties:
                                    containerID:
                                      description: Container's ID in the format '<type>://<container_id>'
                                      type: string
                                    exitCode:
                                      description: Exit status from the last termination of the container
                                      format: int32
                                      type: integer
                                    finishedAt:
                                      description: Time at which the container last terminated
                                      format: date-time
                                      type: string
                                    message:
                                      description: Message regarding the last termination of the container
                                      type: string
                                    reason:
                                      description: (brief) reason from the last termination of the container
                                      type: string
                                    signal:
                                      description: Signal from the last termination of the container
                                      format: int32
                                      type: integer
                                    startedAt:
                                      description: Time at which previous execution of the container started
                                      format: date-time
                                      type: string
                                  required:
                                    - exitCode
                                  type: object
                                waiting:
                                  description: Details about a waiting container
                                  properties:
                                    message:
                                      description: Message regarding why the container is not yet running.
                                      type: string
                                    reason:
                                      description: (brief) reason the container is not yet running.
                                      type: string
                                  type: object
                              type: object
                          required:
                            - image
                            - imageID
                            - name
                            - ready
                            - restartCount
                          type: object
                        type: array
                      hostIP:
                        description: IP address of the host to which the pod is assigned. Empty if not yet scheduled.
                        type: string
                      initContainerStatuses:
                        description: |-
                          The list has one entry per init container in the manifest. The most recent successful
                          init container will have ready = true, the most recently started container will have
                          startTime set.
                          More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
                        items:
                          description: ContainerStatus contains details for the current status of this container.
                          properties:
                            containerID:
                              description: Container's ID in the format '<type>://<container_id>'.
                              type: string
                            image:
                              description: |-
                                The image the container is running.
                                More info: https://kubernetes.io/docs/concepts/containers/images.
                              type: string
                            imageID:
                              description: ImageID of the container's image.
                              type: string
                            lastState:
                              description: Details about the container's last termination condition.
                              properties:
                                running:
                                  description: Details about a running container
                                  properties:
                                    startedAt:
                                      description: Time at which the container was last (re-)started
                                      format: date-time
                                      type: string
                                  type: object
                                terminated:
                                  description: Details about a terminated container
                                  properties:
                                    containerID:
                                      description: Container's ID in the format '<type>://<container_id>'
                                      type: string
                                    exitCode:
                                      description: Exit status from the last termination of the container
                                      format: int32
                                      type: integer
                                    finishedAt:
                                      description: Time at which the container last terminated
                                      format: date-time
                                      type: string
                                    message:
                                      description: Message regarding the last termination of the container
                                      type: string
                                    reason:
                                      description: (brief) reason from the last termination of the container
                                      type: string
                                    signal:
                                      description: Signal from the last termination of the container
                                      format: int32
                                      type: integer
                                    startedAt:
                                      description: Time at which previous execution of the container started
                                      format: date-time
                                      type: string
                                  required:
                                    - exitCode
                                  type: object
                                waiting:
                                  description: Details about a waiting container
                                  properties:
                                    message:
                                      description: Message regarding why the container is not yet running.
                                      type: string
                                    reason:
                                      description: (brief) reason the container is not yet running.
                                      type: string
                                  type: object
                              type: object
                            name:
                              description: |-
                                This must be a DNS_LABEL. Each container in a pod must have a unique name.
                                Cannot be updated.
                              type: string
                            ready:
                              description: Specifies whether the container has passed its readiness probe.
                              type: boolean
                            restartCount:
                              description: The number of times the container has been restarted.
                              format: int32
                              type: integer
                            started:
                              description: |-
                                Specifies whether the container has passed its startup probe.
                                Initialized as false, becomes true after startupProbe is considered successful.
                                Resets to false when the container is restarted, or if kubelet loses state temporarily.
                                Is always true when no startupProbe is defined.
                              type: boolean
                            state:
                              description: Details about the container's current condition.
                              properties:
                                running:
                                  description: Details about a running container
                                  properties:
                                    startedAt:
                                      description: Time at which the container was last (re-)started
                                      format: date-time
                                      type: string
                                  type: object
                                terminated:
                                  description: Details about a terminated container
                                  properties:
                                    containerID:
                                      description: Container's ID in the format '<type>://<container_id>'
                                      type: string
                                    exitCode:
                                      description: Exit status from the last termination of the container
                                      format: int32
                                      type: integer
                                    finishedAt:
                                      description: Time at which the container last terminated
                                      format: date-time
                                      type: string
                                    message:
                                      description: Message regarding the last termination of the container
                                      type: string
                                    reason:
                                      description: (brief) reason from the last termination of the container
                                      type: string
                                    signal:
                                      description: Signal from the last termination of the container
                                      format: int32
                                      type: integer
                                    startedAt:
                                      description: Time at which previous execution of the container started
                                      format: date-time
                                      type: string
                                  required:
                                    - exitCode
                                  type: object
                                waiting:
                                  description: Details about a waiting container
                                  properties:
                                    message:
                                      description: Message regarding why the container is not yet running.
                                      type: string
                                    reason:
                                      description: (brief) reason the container is not yet running.
                                      type: string
                                  type: object
                              type: object
                          required:
                            - image
                            - imageID
                            - name
                            - ready
                            - restartCount
                          type: object
                        type: array
                      message:
                        description: A human readable message indicating details about why the pod is in this condition.
                        type: string
                      nominatedNodeName:
                        description: |-
                          nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be
                          scheduled right away as preemption victims receive their graceful termination periods.
                          This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide
                          to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to
                          give the resources on this node to a higher priority pod that is created after preemption.
                          As a result, this field may be different than PodSpec.nodeName when the pod is
                          scheduled.
                        type: string
                      phase:
                        description: |-
                          The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle.
                          The conditions array, the reason and message fields, and the individual container status
                          arrays contain more detail about the pod's status.
                          There are five possible phase values:


                          Pending: The pod has been accepted by the Kubernetes system, but one or more of the
                          container images has not been created. This includes time before being scheduled as
                          well as time spent downloading images over the network, which could take a while.
                          Running: The pod has been bound to a node, and all of the containers have been created.
                          At least one container is still running, or is in the process of starting or restarting.
                          Succeeded: All containers in the pod have terminated in success, and will not be restarted.
                          Failed: All containers in the pod have terminated, and at least one container has
                          terminated in failure. The container either exited with non-zero status or was terminated
                          by the system.
                          Unknown: For some reason the state of the pod could not be obtained, typically due to an
                          error in communicating with the host of the pod.


                          More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase
                        type: string
                      podIP:
                        description: |-
                          IP address allocated to the pod. Routable at least within the cluster.
                          Empty if not yet allocated.
                        type: string
                      podIPs:
                        description: |-
                          podIPs holds the IP addresses allocated to the pod. If this field is specified, the 0th entry must
                          match the podIP field. Pods may be allocated at most 1 value for each of IPv4 and IPv6. This list
                          is empty if no IPs have been allocated yet.
                        items:
                          description: "IP address information for entries in the (plural) PodIPs field.\nEach entry includes:\n\n\n\tIP: An IP address allocated to the pod. Routable at least within the cluster."
                          properties:
                            ip:
                              description: ip is an IP address (IPv4 or IPv6) assigned to the pod
                              type: string
                          type: object
                        type: array
                      qosClass:
                        description: |-
                          The Quality of Service (QOS) classification assigned to the pod based on resource requirements
                          See PodQOSClass type for available QOS classes
                          More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md
                        type: string
                      reason:
                        description: |-
                          A brief CamelCase message indicating details about why the pod is in this state.
                          e.g. 'Evicted'
                        type: string
                      startTime:
                        description: |-
                          RFC 3339 date and time at which the object was acknowledged by the Kubelet.
                          This is before the Kubelet pulled the container image(s) for the pod.
                        format: date-time
                        type: string
                    type: object
                  type: array
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {}
---
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/component: rbac
    app.kubernetes.io/created-by: ibm-license-service-reporter-operator
    app.kubernetes.io/instance: ibm-license-service-reporter
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/name: serviceaccount
    app.kubernetes.io/part-of: ibm-license-service-reporter-operator
  name: ibm-license-service-reporter
  namespace: $LSR_NAMESPACE
---
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/component: rbac
    app.kubernetes.io/created-by: ibm-license-service-reporter-operator
    app.kubernetes.io/instance: ibm-license-service-reporter-operator
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/name: serviceaccount
    app.kubernetes.io/part-of: ibm-license-service-reporter-operator
  name: ibm-license-service-reporter-operator
  namespace: $LSR_NAMESPACE
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  creationTimestamp: null
  name: ibm-license-service-reporter
  namespace: $LSR_NAMESPACE
rules:
  - apiGroups:
      - ""
    resources:
      - configmaps
    verbs:
      - create
      - get
      - list
      - update
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  labels:
    app.kubernetes.io/component: rbac
    app.kubernetes.io/created-by: ibm-license-service-reporter-operator
    app.kubernetes.io/instance: leader-election-role
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/name: role
    app.kubernetes.io/part-of: ibm-license-service-reporter-operator
  name: leader-election-role
  namespace: $LSR_NAMESPACE
rules:
  - apiGroups:
      - ""
    resources:
      - configmaps
    verbs:
      - get
      - list
      - watch
      - create
      - update
      - patch
      - delete
  - apiGroups:
      - coordination.k8s.io
    resources:
      - leases
    verbs:
      - get
      - list
      - watch
      - create
      - update
      - patch
      - delete
  - apiGroups:
      - ""
    resources:
      - events
    verbs:
      - create
      - patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: manager-role
  namespace: $LSR_NAMESPACE
rules:
  - apiGroups:
      - ""
    resources:
      - configmaps
      - endpoints
      - namespaces
      - persistentvolumeclaims
      - secrets
      - serviceaccounts
      - services
      - services/finalizers
    verbs:
      - create
      - delete
      - get
      - list
      - patch
      - update
      - watch
  - apiGroups:
      - ""
    resources:
      - events
    verbs:
      - create
      - patch
  - apiGroups:
      - ""
    resources:
      - pods
    verbs:
      - delete
      - list
      - watch
  - apiGroups:
      - apps
    resources:
      - daemonsets
      - deployments
      - replicasets
      - statefulsets
    verbs:
      - create
      - delete
      - get
      - list
      - patch
      - update
      - watch
  - apiGroups:
      - networking.k8s.io
    resources:
      - ingresses
    verbs:
      - create
      - delete
      - get
      - list
      - patch
      - update
      - watch
  - apiGroups:
      - route.openshift.io
    resources:
      - routes
      - routes/custom-host
    verbs:
      - create
      - delete
      - get
      - list
      - patch
      - update
      - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: manager-role
rules:
  - apiGroups:
      - operator.ibm.com
    resources:
      - ibmlicenseservicereporters
      - ibmlicenseservicereporters/finalizers
      - ibmlicenseservicereporters/status
    verbs:
      - create
      - delete
      - get
      - list
      - patch
      - update
      - watch
  - apiGroups:
      - operator.openshift.io
    resources:
      - servicecas
    verbs:
      - list
  - apiGroups:
      - storage.k8s.io
    resources:
      - storageclasses
    verbs:
      - get
      - list
      - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  labels:
    app.kubernetes.io/component: rbac
    app.kubernetes.io/created-by: ibm-license-service-reporter-operator
    app.kubernetes.io/instance: ibm-license-service-reporter
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/name: rolebinding
    app.kubernetes.io/part-of: ibm-license-service-reporter-operator
  name: ibm-license-service-reporter
  namespace: $LSR_NAMESPACE
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: ibm-license-service-reporter
subjects:
  - kind: ServiceAccount
    name: ibm-license-service-reporter
    namespace: $LSR_NAMESPACE
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  labels:
    app.kubernetes.io/component: rbac
    app.kubernetes.io/created-by: ibm-license-service-reporter-operator
    app.kubernetes.io/instance: leader-election-rolebinding
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/name: rolebinding
    app.kubernetes.io/part-of: ibm-license-service-reporter-operator
  name: leader-election-rolebinding
  namespace: $LSR_NAMESPACE
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: leader-election-role
subjects:
  - kind: ServiceAccount
    name: ibm-license-service-reporter-operator
    namespace: $LSR_NAMESPACE
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  labels:
    app.kubernetes.io/component: rbac
    app.kubernetes.io/created-by: ibm-license-service-reporter-operator
    app.kubernetes.io/instance: manager-rolebinding
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/name: rolebinding
    app.kubernetes.io/part-of: ibm-license-service-reporter-operator
  name: manager-rolebinding
  namespace: $LSR_NAMESPACE
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: manager-role
subjects:
  - kind: ServiceAccount
    name: ibm-license-service-reporter-operator
    namespace: $LSR_NAMESPACE
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    app.kubernetes.io/component: rbac
    app.kubernetes.io/created-by: ibm-license-service-reporter-operator
    app.kubernetes.io/instance: manager-rolebinding
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/name: clusterrolebinding
    app.kubernetes.io/part-of: ibm-license-service-reporter-operator
  name: manager-rolebinding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: manager-role
subjects:
  - kind: ServiceAccount
    name: ibm-license-service-reporter-operator
    namespace: $LSR_NAMESPACE
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/component: manager
    app.kubernetes.io/created-by: ibm-license-service-reporter-operator
    app.kubernetes.io/instance: ibm-license-service-reporter-operator
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/name: deployment
    app.kubernetes.io/part-of: ibm-license-service-reporter-operator
    control-plane: ibm-license-service-reporter-operator
  name: ibm-license-service-reporter-operator
  namespace: $LSR_NAMESPACE
spec:
  replicas: 1
  selector:
    matchLabels:
      control-plane: ibm-license-service-reporter-operator
  template:
    metadata:
      annotations:
        kubectl.kubernetes.io/default-container: ibm-license-service-reporter-operator
        productID: 068a62892a1e4db39641342e592daa25
        productMetric: FREE
        productName: IBM Cloud Platform Common Services
      labels:
        app.kubernetes.io/instance: ibm-license-service-reporter-operator
        app.kubernetes.io/managed-by: ibm-license-service-reporter-operator
        app.kubernetes.io/name: ibm-license-service-reporter
        control-plane: ibm-license-service-reporter-operator
        name: ibm-license-service-reporter-operator
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: kubernetes.io/arch
                    operator: In
                    values:
                      - amd64
                  - key: kubernetes.io/os
                    operator: In
                    values:
                      - linux
      containers:
        - args:
            - --leader-elect
          command:
            - ibm-license-service-reporter-operator
          env:
            - name: IBM_POSTGRESQL_IMAGE
              value: icr.io/cpopen/cpfs/ibm-postgresql:4.2.10
            - name: IBM_LICENSE_SERVICE_REPORTER_IMAGE
              value: icr.io/cpopen/cpfs/ibm-license-service-reporter:4.2.10
            - name: IBM_LICENSE_SERVICE_REPORTER_UI_IMAGE
              value: icr.io/cpopen/cpfs/ibm-license-service-reporter-ui:4.2.10
            - name: IBM_LICENSE_SERVICE_REPORTER_AUTH_IMAGE
              value: icr.io/cpopen/cpfs/ibm-license-service-reporter-oauth2-proxy:4.2.10
            - name: WATCH_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.annotations['olm.targetNamespaces']
            - name: OPERATOR_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: OPERATOR_NAME
              value: ibm-license-service-reporter-operator
            - name: SA_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.serviceAccountName
          image: icr.io/cpopen/ibm-license-service-reporter-operator:4.2.10
          imagePullPolicy: IfNotPresent
          livenessProbe:
            httpGet:
              path: /healthz
              port: 8081
            initialDelaySeconds: 15
            periodSeconds: 20
          name: ibm-license-service-reporter-operator
          readinessProbe:
            httpGet:
              path: /readyz
              port: 8081
            initialDelaySeconds: 5
            periodSeconds: 10
          resources:
            limits:
              cpu: 10m
              ephemeral-storage: 500Mi
              memory: 64Mi
            requests:
              cpu: 10m
              ephemeral-storage: 256Mi
              memory: 64Mi
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop:
                - ALL
            privileged: false
            readOnlyRootFilesystem: true
            runAsNonRoot: true
            seccompProfile:
              type: RuntimeDefault
      serviceAccountName: ibm-license-service-reporter-operator
  1. Apply the install-license-service-reporter.yaml file on the cluster by running the following command:

    envsubst < install-license-service-reporter.yaml | kubectl apply -f -
    
  2. Verify if the License Service Reporter pod is successfully created with the following command:

     kubectl -n ${LSR_NAMESPACE} get pods
    

    An example of the response:

     NAME                                                            READY   STATUS    RESTARTS   AGE
     ibm-license-service-reporter-operator-6bc65f99f9-dmrmk          1/1     Running   0          4m50s
    
  3. Create the License Service Reporter instance.

    1. Create the license-reporter.yaml file with the following definition:

      apiVersion: operator.ibm.com/v1alpha1
      kind: IBMLicenseServiceReporter
      metadata:
        name: ibm-lsr-instance
        namespace: ${LSR_NAMESPACE}
        labels:
          app.kubernetes.io/created-by: ibm-license-service-reporter-operator
          app.kubernetes.io/instance: ibmlicenseservicereporter-instance
          app.kubernetes.io/name: ibmlicenseservicereporter
          app.kubernetes.io/part-of: ibm-license-service-reporter-operator
      spec:
        license:
          accept: true
        authentication:
          useradmin:
            enabled: true
      

      Note: License Service Reporter uses the default storage class. To use a different storage class, add and define the 'storageClass' parameter in the spec section of the license-reporter.yaml. For example:

      spec:
        storageClass: storage-class-internal
      
    2. Run the following command to apply the license-reporter.yaml on the cluster:

      envsubst < license-reporter.yaml | kubectl apply -f -
      
  4. Configure ingress.

  5. Automatic configuration

    1. Get the nginx Ingress controller, for example from https://kubernetes.github.io/ingress-nginx/deploy.

      Note: If you already have Ingress controller on the cluster, you do not need another one.

    2. Run the following command:

      Note: The command assumes that your License Service Reporter instance has a default name. If your License Service Reporter instance has a custom name, check the name of the instance with the following command: kubectl get IBMLicenseServiceReporter -n ${LSR_NAMESPACE}.

      kubectl get IBMLicenseServiceReporter -n ${LSR_NAMESPACE} ibm-lsr-instance -o yaml > license-service-reporter-ingress.yaml
      
    3. Edit the license-service-reporter-ingress.yaml file. Make sure that ingressEnabled is set to true and that ingressOptions section contains the appropriate values that depend on your preferred configuration.

      The following table lists the ingress parameters in the ingressOptions section.

      |Parameter| Description| Example| |---|---|---| | ingressClassName| Specify the Ingress class. | nginx | | host| Specify the host. |www.example.com| | apiOptions| Specify the details of the License Service Reporter API Ingress under this section.|n/a| | consoleOptions|Specify the details of the License Service Reporter UI Ingress under this section.| n/a| | annotations| Specify annotations for the Ingress.|nginx.ingress.kubernetes.io/backend-protocol: HTTPS| | path| Provide the path to License Service Reporter UI or License Service Reporter API. The path for the UI must be set in such way that the root of the application is available under /license-service-reporter endpoint.| /license-service-reporter-api| | tls| Provide your secure connection configuration. | |

      For more information, see Ingress in Kubernetes documentation.

      The following is an example of the license-service-reporter-ingress.yaml file:

      apiVersion: operator.ibm.com/v1alpha1
      kind: IBMLicenseServiceReporter
      metadata:
        name: ibm-lsr-instance
        namespace: $LSR_NAMESPACE
      spec:
        license:
          accept: true
        authentication:
          useradmin:
            enabled: true
        ingressEnabled: true
        ingressOptions:
          commonOptions:
            ingressClassName: nginx
            host: www.example.com
          apiOptions:
            annotations:
              Specify the details of the License Service Reporter API Ingress under this section.
              nginx.ingress.kubernetes.io/rewrite-target: "/$2"
            path: /license-service-reporter-api(/|$)(.*)
            tls:
            - hosts:
              - www.example.com
            secretName: api-secret-tls
          consoleOptions:
            annotations:
              nginx.ingress.kubernetes.io/backend-protocol: HTTPS
              nginx.ingress.kubernetes.io/rewrite-target: "/license-service-reporter$1$2"
            path: /license-service-reporter(/|$)(.*)
            tls:
            - hosts:
              - www.example.com
            secretName: console-secret-tls
      

      The following is an example for Ingress configuration for Amazon Elastic Kubernetes Service (EKS):

      Note: To retrieve the host for the EKS Ingress, run the following command: export subdomain=$(kubectl get svc ingress-nginx-controller -n ingress-nginx -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')

      apiVersion: operator.ibm.com/v1alpha1
      kind: IBMLicenseServiceReporter
      metadata:
        name: ibm-lsr-instance
        namespace: ${LSR_NAMESPACE}
        labels:
          app.kubernetes.io/created-by: ibm-license-service-reporter-operator
          app.kubernetes.io/instance: ibmlicenseservicereporter-instance
          app.kubernetes.io/name: ibmlicenseservicereporter
          app.kubernetes.io/part-of: ibm-license-service-reporter-operator
      spec:
        license:
          accept: true
        authentication:
          useradmin:
            enabled: true
        ingressEnabled: true
        ingressOptions:
          commonOptions:
            ingressClassName: nginx
            host: $subdomain
          apiOptions:
            annotations:
              nginx.ingress.kubernetes.io/backend-protocol: HTTPS
              nginx.ingress.kubernetes.io/rewrite-target: "/$2"
            path: /license-service-reporter-api(/|$)(.*)
            tls:
            - hosts:
              - $subdomain
            secretName: testsecret-tls
          consoleOptions:
            annotations:
              nginx.ingress.kubernetes.io/backend-protocol: HTTPS
              nginx.ingress.kubernetes.io/rewrite-target: "/license-service-reporter$1$2"
            path: /license-service-reporter(/|$)(.*)
      
    4. Run the following command to apply the license-service-reporter-ingress.yaml file with Ingress configuration on the cluster:

      envsubst < license-service-reporter-ingress.yaml | kubectl apply -f -
      
  6. Manual configuration

    To manually configure Ingress, complete the following steps:

    1. Create the license-service-reporter-ingress.yaml file :

      kubectl get IBMLicenseServiceReporter -n ${LSR_NAMESPACE} ibm-lsr-instance -o yaml > license-service-reporter-ingress.yaml
      
    2. Disable automatic creation of Ingress in the IBMLicenseServiceReporter instance. Set the ingressEnabled parameter to false. Then, you to create a custom Ingress.

      spec:
      ...
        ingressEnabled: false
      ...
      
    3. Create the license-service-reporter-manual-ingress.yaml file with Ingress for License Service Reporter UI and License Service Reporter API.

      Note: The name of the License Service Reporter UI Ingress must be set to: ibm-license-service-reporter-console-ingress. The path for the UI must be set in such way that the root of the application is available under /license-service-reporter endpoint.

      The following is an example of the license-service-reporter-manual-ingress.yaml file that defines the License Service Reporter UI and the License Service Reporter API Ingress:

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        annotations:
          nginx.ingress.kubernetes.io/backend-protocol: HTTPS
          nginx.ingress.kubernetes.io/rewrite-target: "/$2"
        name: ibm-license-service-reporter-api-ingress
        namespace: $LSR_NAMESPACE
      spec:
        ingressClassName: nginx
        rules:
        - host: $subdomain
          http:
            paths:
            - backend:
                service:
                  name: ibm-license-service-reporter
                  port:
                    number: 8080
              path: /license-service-reporter-api(/|$)(.*)
              pathType: ImplementationSpecific
      ---
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        annotations:
          nginx.ingress.kubernetes.io/backend-protocol: HTTPS
          nginx.ingress.kubernetes.io/rewrite-target: "/license-service-reporter$1$2"
        name: ibm-license-service-reporter-console-ingress
        namespace: $LSR_NAMESPACE
      spec:
        ingressClassName: nginx
        rules:
        - host: $subdomain
          http:
           paths:
            - backend:
                service:
                  name: ibm-license-service-reporter
                  port:
                    number: 8888
              path: /license-service-reporter(/|$)(.*)
              pathType: ImplementationSpecific
      
    4. Run the following command to apply the license-service-reporter-manual-ingress.yaml file with Ingress configuration on the cluster:

      envsubst < license-service-reporter-manual-ingress.yaml | kubectl apply -f -
      

Verification

  1. Verify whether the License Service Reporter UI and the License Service Reporter API Ingresses are available under the endpoints that are specified in the Ingress configuration.

    Run the following command to check whether the Ingresses are properly configured:

    kubectl get ingress -n ${LSR_NAMESPACE} -o yaml
    

    In the response, you get information about Ingresses that you configured for License Service Reporter. Look at the spec.rules.host section to check the configuration. You should see two spec.rules.host sections, one for each Ingresse that you configured.

  2. Run the following command to check whether the License Service Reporter pods are running:

    kubectl -n ${LSR_NAMESPACE} get pods
    

    An example of the response:

    NAME                                                            READY   STATUS    RESTARTS   AGE
    ibm-license-service-reporter-operator-6bc65f99f9-dmrmk          1/1     Running   0          4m50s
    ibm-license-service-reporter-instance-5544795988-jrxqx          1/1     Running   0          2m50s