apiVersion: operators.coreos.com/v1alpha1
kind: InstallPlan
metadata:
  creationTimestamp: "2020-09-24T08:07:52Z"
  generateName: install-
  generation: 1
  name: install-7m89p
  namespace: openshift-operators
  ownerReferences:
  - apiVersion: operators.coreos.com/v1alpha1
    blockOwnerDeletion: false
    controller: false
    kind: Subscription
    name: lib-bucket-provisioner
    uid: 4de5b32c-d951-4193-b53b-36648d1e6e23
  resourceVersion: "2408032"
  selfLink: /apis/operators.coreos.com/v1alpha1/namespaces/openshift-operators/installplans/install-7m89p
  uid: a2d1020d-f6f8-41e7-bff5-8fa15eb2e82b
spec:
  approval: Automatic
  approved: true
  clusterServiceVersionNames:
  - lib-bucket-provisioner.v2.0.0
  - ocs-operator.v4.5.0
status:
  catalogSources:
  - community-operators
  - redhat-operators
  conditions:
  - lastTransitionTime: "2020-09-24T08:07:52Z"
    lastUpdateTime: "2020-09-24T08:07:52Z"
    status: "True"
    type: Installed
  phase: Complete
  plan:
  - resolving: lib-bucket-provisioner.v2.0.0
    resource:
      group: operators.coreos.com
      kind: ClusterServiceVersion
      manifest: |
        {"kind":"ClusterServiceVersion","apiVersion":"operators.coreos.com/v1alpha1","metadata":{"name":"lib-bucket-provisioner.v2.0.0","namespace":"openshift-operators","creationTimestamp":null,"annotations":{"alm-examples":"[]","capabilities":"Basic Install","categories":"Storage,Big Data","certified":"false","containerImage":"quay.io/noobaa/pause","createdAt":"2020-07-01T06:28:48Z","description":"Library for the dynamic provisioning of object store buckets to be used by object store providers.","repository":"https://github.com/kube-object-storage/lib-bucket-provisioner","support":"Red Hat"}},"spec":{"install":{"strategy":"deployment","spec":{"deployments":[{"name":"lib-bucket-provisioner","spec":{"replicas":1,"selector":{"matchLabels":{"name":"lib-bucket-provisioner"}},"template":{"metadata":{"creationTimestamp":null,"labels":{"name":"lib-bucket-provisioner"}},"spec":{"containers":[{"name":"lib-bucket-provisioner","image":"quay.io/noobaa/pause","env":[{"name":"WATCH_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}},{"name":"POD_NAME","valueFrom":{"fieldRef":{"fieldPath":"metadata.name"}}},{"name":"OPERATOR_NAME","value":"lib-bucket-provisioner"}],"resources":{"limits":{"cpu":"1","memory":"128Mi"},"requests":{"cpu":"1m","memory":"32Mi"}},"imagePullPolicy":"Always"}],"serviceAccountName":"lib-bucket-provisioner"}},"strategy":{}}}],"permissions":[{"serviceAccountName":"lib-bucket-provisioner","rules":[]}],"clusterPermissions":[{"serviceAccountName":"lib-bucket-provisioner","rules":[{"verbs":["*"],"apiGroups":["objectbucket.io"],"resources":["*"]}]}]}},"version":"2.0.0","maturity":"alpha","customresourcedefinitions":{"required":[{"name":"objectbucketclaims.objectbucket.io","version":"v1alpha1","kind":"ObjectBucketClaim","displayName":"ObjectBucketClaim","description":"Claim a bucket just like claiming a PV. Automate you app bucket provisioning by creating OBC with your app deployment. A secret and configmap (name=claim) will be created with access details for the app pods.","resources":[{"name":"secrets","kind":"Secret","version":"v1"},{"name":"configmaps","kind":"ConfigMap","version":"v1"}]},{"name":"objectbuckets.objectbucket.io","version":"v1alpha1","kind":"ObjectBucket","displayName":"ObjectBucket","description":"Used under-the-hood. Created per ObjectBucketClaim and keeps provisioning information","resources":[{"name":"secrets","kind":"Secret","version":"v1"},{"name":"configmaps","kind":"ConfigMap","version":"v1"}]}]},"apiservicedefinitions":{},"displayName":"lib-bucket-provisioner","description":"### CRD-only Operator\n\nThis operator package is **CRD-only** and the operator is a no-op operator.\n\nInstead, bucket provisioners using this library are using these CRD's and using CSV [required-crds](https://github.com/operator-framework/operator-lifecycle-manager/blob/master/Documentation/design/building-your-csv.md#required-crds) them so that OLM can install it as a dependency.\n\n### Generic Bucket Provisioning\n\nKubernetes natively supports dynamic provisioning for many types of file and block storage, but lacks support for object bucket provisioning.\n\nThis repo is a placeholder for an object store bucket provisioning library, very similar to the Kubernetes [sig-storage-lib-external-provisioner](https://github.com/kubernetes-sigs/sig-storage-lib-external-provisioner/blob/master/controller/controller.go) library.\n\n### Known Provisioners\n- https://github.com/noobaa/noobaa-operator (NooBaa)\n- https://github.com/rook/rook (Rook-Ceph)\n- https://github.com/yard-turkey/aws-s3-provisioner (AWS-S3)\n","keywords":["kubernetes","openshift","object","bucket","storage","cloud","s3"],"maintainers":[{"name":"Jon Cope","email":"jcope@redhat.com"},{"name":"Jeff Vance","email":"jvance@redhat.com"},{"name":"Guy Margalit","email":"gmargali@redhat.com"},{"name":"Danny Zaken","email":"dzaken@redhat.com"},{"name":"Nimrod Becker","email":"nbecker@redhat.com"}],"provider":{"name":"Red Hat"},"links":[{"name":"Github","url":"https://github.com/kube-object-storage/lib-bucket-provisioner"}],"icon":[{"base64data":"[encoded data, 167248 characters]","mediatype":"image/png"}],"installModes":[{"type":"OwnNamespace","supported":true},{"type":"SingleNamespace","supported":true},{"type":"MultiNamespace","supported":true},{"type":"AllNamespaces","supported":true}],"replaces":"lib-bucket-provisioner.v1.0.0"},"status":{}}
      name: lib-bucket-provisioner.v2.0.0
      sourceName: community-operators
      sourceNamespace: openshift-marketplace
      version: v1alpha1
    status: Created
  - resolving: lib-bucket-provisioner.v2.0.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"lib-bucket-provisioner","namespace":"openshift-operators","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"lib-bucket-provisioner.v2.0.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: lib-bucket-provisioner
      sourceName: community-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: lib-bucket-provisioner.v2.0.0
    resource:
      group: rbac.authorization.k8s.io
      kind: Role
      manifest: |
        {"metadata":{"name":"lib-bucket-provisioner.v2.0.0-mm4cv","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"lib-bucket-provisioner.v2.0.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"},"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"lib-bucket-provisioner.v2.0.0","uid":"","controller":false,"blockOwnerDeletion":false}]},"rules":[]}
      name: lib-bucket-provisioner.v2.0.0-mm4cv
      sourceName: community-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: lib-bucket-provisioner.v2.0.0
    resource:
      group: rbac.authorization.k8s.io
      kind: RoleBinding
      manifest: |
        {"metadata":{"name":"lib-bucket-provisioner.v2.0.0-mm4cv-lib-bucket-provisionerbwgzb","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"lib-bucket-provisioner.v2.0.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"},"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"lib-bucket-provisioner.v2.0.0","uid":"","controller":false,"blockOwnerDeletion":false}]},"subjects":[{"kind":"ServiceAccount","name":"lib-bucket-provisioner","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"Role","name":"lib-bucket-provisioner.v2.0.0-mm4cv"}}
      name: lib-bucket-provisioner.v2.0.0-mm4cv-lib-bucket-provisionerbwgzb
      sourceName: community-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: lib-bucket-provisioner.v2.0.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"lib-bucket-provisioner.v2.0.0-9xlk8","creationTimestamp":null,"labels":{"olm.owner":"lib-bucket-provisioner.v2.0.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[{"verbs":["*"],"apiGroups":["objectbucket.io"],"resources":["*"]}]}
      name: lib-bucket-provisioner.v2.0.0-9xlk8
      sourceName: community-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: lib-bucket-provisioner.v2.0.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"lib-bucket-provisioner.v2.0.0-9xlk8-lib-bucket-provisioner7xs99","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"lib-bucket-provisioner.v2.0.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"lib-bucket-provisioner","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"lib-bucket-provisioner.v2.0.0-9xlk8"}}
      name: lib-bucket-provisioner.v2.0.0-9xlk8-lib-bucket-provisioner7xs99
      sourceName: community-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: operators.coreos.com
      kind: ClusterServiceVersion
      manifest: |
        {"kind":"ClusterServiceVersion","apiVersion":"operators.coreos.com/v1alpha1","metadata":{"name":"ocs-operator.v4.5.0","namespace":"openshift-operators","creationTimestamp":null,"annotations":{"alm-examples":"\n[\n    {\n        \"apiVersion\": \"ocs.openshift.io/v1\",\n        \"kind\": \"StorageCluster\",\n        \"metadata\": {\n            \"name\": \"example-storagecluster\",\n            \"namespace\": \"openshift-storage\"\n        },\n        \"spec\": {\n            \"manageNodes\": false,\n            \"monPVCTemplate\": {\n                \"spec\": {\n                    \"accessModes\": [\n                        \"ReadWriteOnce\"\n                    ],\n                    \"resources\": {\n                        \"requests\": {\n                            \"storage\": \"10Gi\"\n                        }\n                    },\n                    \"storageClassName\": \"gp2\"\n                }\n            },\n            \"storageDeviceSets\": [\n                {\n                    \"count\": 3,\n                    \"dataPVCTemplate\": {\n                        \"spec\": {\n                            \"accessModes\": [\n                                \"ReadWriteOnce\"\n                            ],\n                            \"resources\": {\n                                \"requests\": {\n                                    \"storage\": \"1Ti\"\n                                }\n                            },\n                            \"storageClassName\": \"gp2\",\n                            \"volumeMode\": \"Block\"\n                        }\n                    },\n                    \"name\": \"example-deviceset\",\n                    \"placement\": {},\n                    \"portable\": true,\n                    \"resources\": {}\n                }\n            ]\n        }\n    }\n]","capabilities":"Full Lifecycle","categories":"Storage","containerImage":"quay.io/ocs-dev/ocs-operator:4.5.0","createdAt":"2020-09-11 16:03:06","description":"Red Hat OpenShift Container Storage provides hyperconverged storage for applications within an OpenShift cluster.","external.features.ocs.openshift.io/export-script":"JycnCkNvcHlyaWdodCAyMDIwIFRoZSBSb29rIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu\nCgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxp\nY2Vuc2UiKTsKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3\naXRoIHRoZSBMaWNlbnNlLgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK\nCglodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKClVubGVzcyByZXF1\naXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK\nZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT\nIiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVp\ndGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj\nIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhl\nIExpY2Vuc2UuCicnJwoKaW1wb3J0IHN5cwppbXBvcnQganNvbgppbXBvcnQgYXJncGFyc2UKaW1w\nb3J0IHVuaXR0ZXN0CmltcG9ydCByZQppbXBvcnQgcmVxdWVzdHMKZnJvbSBvcyBpbXBvcnQgbGlu\nZXNlcCBhcyBMSU5FU0VQCgojIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCAyLngKdHJ5Ogog\nICAgTW9kdWxlTm90Rm91bmRFcnJvcgpleGNlcHQ6CiAgICBNb2R1bGVOb3RGb3VuZEVycm9yID0g\nSW1wb3J0RXJyb3IKCnRyeToKICAgIGltcG9ydCByYWRvcwpleGNlcHQgTW9kdWxlTm90Rm91bmRF\ncnJvciBhcyBub01vZEVycjoKICAgIHByaW50KCJFcnJvcjogJXNcbkV4aXRpbmcgdGhlIHNjcmlw\ndC4uLiIgJSBub01vZEVycikKICAgIHN5cy5leGl0KDEpCgp0cnk6CiAgICAjIGZvciAyLjcueAog\nICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJy\nb3I6CiAgICAjIGZvciAzLngKICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCgoKY2xhc3MgRXhl\nY3V0aW9uRmFpbHVyZUV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgcGFzcwoKCmNsYXNzIFJhZG9z\nSlNPTjoKICAgIEVYVEVSTkFMX1VTRVJfTkFNRSA9ICJjbGllbnQuaGVhbHRoY2hlY2tlciIKICAg\nIEVNUFRZX09VVFBVVF9MSVNUID0gIkVtcHR5IG91dHB1dCBsaXN0IgoKICAgIEBjbGFzc21ldGhv\nZAogICAgZGVmIGdlbl9hcmdfcGFyc2VyKGNscywgYXJnc190b19wYXJzZT1Ob25lKToKICAgICAg\nICBhcmdQID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogICAgICAgIGFyZ1AuYWRkX2FyZ3Vt\nZW50KCItLXZlcmJvc2UiLCAiLXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0n\nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UpCiAgICAgICAgYXJnUC5hZGRfYXJndW1lbnQoIi0t\nY2VwaC1jb25mIiwgIi1jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQcm92aWRl\nIGEgY2VwaCBjb25mIGZpbGUuIiwgdHlwZT1zdHIpCiAgICAgICAgYXJnUC5hZGRfYXJndW1lbnQo\nIi0tcnVuLWFzLXVzZXIiLCAiLXUiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBy\nb3ZpZGVzIGEgdXNlciBuYW1lIHRvIGNoZWNrIHRoZSBjbHVzdGVyJ3MgaGVhbHRoIHN0YXR1cywg\nbXVzdCBiZSBwcmVmaXhlZCBieSAnY2xpZW50LiciLAogICAgICAgICAgICAgICAgICAgICAgICAg\nIGRlZmF1bHQ9Y2xzLkVYVEVSTkFMX1VTRVJfTkFNRSwgdHlwZT1zdHIpCiAgICAgICAgYXJnUC5h\nZGRfYXJndW1lbnQoIi0tZm9ybWF0IiwgIi10IiwgY2hvaWNlcz1bImpzb24iLCAiYmFzaCJdLAog\nICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J2pzb24nLCBoZWxwPSJQcm92aWRlcyB0\naGUgb3V0cHV0IGZvcm1hdCAoanNvbiB8IGJhc2gpIikKICAgICAgICBhcmdQLmFkZF9hcmd1bWVu\ndCgiLS1jbHVzdGVyLW5hbWUiLCBkZWZhdWx0PSJvcGVuc2hpZnQtc3RvcmFnZSIsCiAgICAgICAg\nICAgICAgICAgICAgICAgICAgaGVscD0iQ2VwaCBjbHVzdGVyIG5hbWUiKQogICAgICAgIGFyZ1Au\nYWRkX2FyZ3VtZW50KCItLW91dHB1dCIsICItbyIsIGRlZmF1bHQ9IiIsCiAgICAgICAgICAgICAg\nICAgICAgICAgICAgaGVscD0iT3V0cHV0IHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIHByb3ZpZGVk\nIGZpbGUiKQogICAgICAgIGFyZ1AuYWRkX2FyZ3VtZW50KCItLWNlcGhmcy1maWxlc3lzdGVtLW5h\nbWUiLCBkZWZhdWx0PSIiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlByb3ZpZGVz\nIHRoZSBuYW1lIG9mIHRoZSBDZXBoIGZpbGVzeXN0ZW0iKQogICAgICAgIGFyZ1AuYWRkX2FyZ3Vt\nZW50KCItLWNlcGhmcy1kYXRhLXBvb2wtbmFtZSIsIGRlZmF1bHQ9IiIsCiAgICAgICAgICAgICAg\nICAgICAgICAgICAgaGVscD0iUHJvdmlkZXMgdGhlIG5hbWUgb2YgdGhlIGNlcGhmcyBkYXRhIHBv\nb2wiKQogICAgICAgIGFyZ1AuYWRkX2FyZ3VtZW50KCItLXJiZC1kYXRhLXBvb2wtbmFtZSIsIGRl\nZmF1bHQ9IiIsIHJlcXVpcmVkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0i\nUHJvdmlkZXMgdGhlIG5hbWUgb2YgdGhlIFJCRCBkYXRhcG9vbCIpCiAgICAgICAgYXJnUC5hZGRf\nYXJndW1lbnQoIi0tbmFtZXNwYWNlIiwgZGVmYXVsdD0iIiwKICAgICAgICAgICAgICAgICAgICAg\nICAgICBoZWxwPSJOYW1lc3BhY2Ugd2hlcmUgQ2VwaENsdXN0ZXIgaXMgcnVubmluZyIpCiAgICAg\nICAgYXJnUC5hZGRfYXJndW1lbnQoIi0tcmd3LXBvb2wtcHJlZml4IiwgZGVmYXVsdD0iZGVmYXVs\ndCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUkdXIFBvb2wgcHJlZml4IikKICAg\nICAgICBhcmdQLmFkZF9hcmd1bWVudCgiLS1yZ3ctZW5kcG9pbnQiLCBkZWZhdWx0PSIiLCByZXF1\naXJlZD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJSYWRvcyBHYXRlV2F5\nIGVuZHBvaW50IChpbiA8SVA+OjxQT1JUPiBmb3JtYXQpIikKICAgICAgICBpZiBhcmdzX3RvX3Bh\ncnNlOgogICAgICAgICAgICBhc3NlcnQgdHlwZShhcmdzX3RvX3BhcnNlKSA9PSBsaXN0LCBcCiAg\nICAgICAgICAgICAgICAiQXJndW1lbnQgdG8gJ2dlbl9hcmdfcGFyc2VyJyBzaG91bGQgYmUgYSBs\naXN0IgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGFyZ3NfdG9fcGFyc2UgPSBzeXMuYXJndlsx\nOl0KICAgICAgICByZXR1cm4gYXJnUC5wYXJzZV9hcmdzKGFyZ3NfdG9fcGFyc2UpCgogICAgZGVm\nIF9pbnZhbGlkX2VuZHBvaW50KHNlbGYsIGVuZHBvaW50X3N0cik6CiAgICAgICAgdHJ5OgogICAg\nICAgICAgICBpcHY0LCBwb3J0ID0gZW5kcG9pbnRfc3RyLnNwbGl0KCc6JykKICAgICAgICBleGNl\ncHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgcmFpc2UgRXhlY3V0aW9uRmFpbHVyZUV4Y2VwdGlv\nbigKICAgICAgICAgICAgICAgICJOb3QgYSBwcm9wZXIgZW5kcG9pbnQ6IHt9LCA8SVA+OjxQT1JU\nPiwgZm9ybWF0IGlzIGV4cGVjdGVkIi5mb3JtYXQoZW5kcG9pbnRfc3RyKSkKICAgICAgICBpcFBh\ncnRzID0gaXB2NC5zcGxpdCgnLicpCiAgICAgICAgaWYgbGVuKGlwUGFydHMpICE9IDQ6CiAgICAg\nICAgICAgIHJhaXNlIEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAi\nTm90IGEgdmFsaWQgSVAgYWRkcmVzczoge30iLmZvcm1hdChpcHY0KSkKICAgICAgICBmb3IgZWFj\naFBhcnQgaW4gaXBQYXJ0czoKICAgICAgICAgICAgaWYgbm90IGVhY2hQYXJ0LmlzZGlnaXQoKToK\nICAgICAgICAgICAgICAgIHJhaXNlIEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24oCiAgICAgICAg\nICAgICAgICAgICAgIklQIGFkZHJlc3MgcGFydHMgc2hvdWxkIGJlIG51bWJlcnM6IHt9Ii5mb3Jt\nYXQoaXB2NCkpCiAgICAgICAgICAgIGludFBhcnQgPSBpbnQoZWFjaFBhcnQpCiAgICAgICAgICAg\nIGlmIGludFBhcnQgPCAwIG9yIGludFBhcnQgPiAyNTQ6CiAgICAgICAgICAgICAgICByYWlzZSBF\neGVjdXRpb25GYWlsdXJlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICJPdXQgb2YgcmFu\nZ2UgSVAgYWRkcmVzc2VzOiB7fSIuZm9ybWF0KGlwdjQpKQogICAgICAgIGlmIG5vdCBwb3J0Lmlz\nZGlnaXQoKToKICAgICAgICAgICAgcmFpc2UgRXhlY3V0aW9uRmFpbHVyZUV4Y2VwdGlvbigiUG9y\ndCBub3QgdmFsaWQ6IHt9Ii5mb3JtYXQocG9ydCkpCiAgICAgICAgaW50UG9ydCA9IGludChwb3J0\nKQogICAgICAgIGlmIGludFBvcnQgPCAxIG9yIGludFBvcnQgPiAyKioxNi0xOgogICAgICAgICAg\nICByYWlzZSBFeGVjdXRpb25GYWlsdXJlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgIk91dCBv\nZiByYW5nZSBwb3J0IG51bWJlcjoge30iLmZvcm1hdChwb3J0KSkKICAgICAgICByZXR1cm4gRmFs\nc2UKCiAgICBkZWYgZW5kcG9pbnRfZGlhbChzZWxmLCBlbmRwb2ludF9zdHIpOgogICAgICAgIHRy\neToKICAgICAgICAgICAgZXAgPSAiaHR0cDovLyIgKyBlbmRwb2ludF9zdHIKICAgICAgICAgICAg\nciA9IHJlcXVlc3RzLmhlYWQoZXApCiAgICAgICAgICAgIHJjID0gci5zdGF0dXNfY29kZQogICAg\nICAgICAgICBpZiByYyAhPSAyMDA6CiAgICAgICAgICAgICAgICByYWlzZSBFeGVjdXRpb25GYWls\ndXJlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICJ3cm9uZyByZXR1cm4gY29kZSB7fSBv\nbiByZ3cgZW5kcG9pbnQgaHR0cCBoZWFkZXIgcmVxdWVzdCIuZm9ybWF0KHJjKSkKICAgICAgICBl\neGNlcHQgcmVxdWVzdHMuQ29ubmVjdGlvbkVycm9yOgogICAgICAgICAgICByYWlzZSBFeGVjdXRp\nb25GYWlsdXJlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgImZhaWxlZCB0byBjb25uZWN0IHRv\nIHJndyBlbmRwb2ludCB7fSIuZm9ybWF0KGVwKSkKCiAgICBkZWYgX19pbml0X18oc2VsZiwgYXJn\nX2xpc3Q9Tm9uZSk6CiAgICAgICAgc2VsZi5vdXRfbWFwID0ge30KICAgICAgICBzZWxmLl9leGNs\ndWRlZF9rZXlzID0gc2V0KCkKICAgICAgICBzZWxmLl9hcmdfcGFyc2VyID0gc2VsZi5nZW5fYXJn\nX3BhcnNlcihhcmdzX3RvX3BhcnNlPWFyZ19saXN0KQogICAgICAgIHNlbGYub3V0cHV0X2ZpbGUg\nPSBzZWxmLl9hcmdfcGFyc2VyLm91dHB1dAogICAgICAgIHNlbGYuY2VwaF9jb25mID0gc2VsZi5f\nYXJnX3BhcnNlci5jZXBoX2NvbmYKICAgICAgICBzZWxmLnJ1bl9hc191c2VyID0gc2VsZi5fYXJn\nX3BhcnNlci5ydW5fYXNfdXNlcgogICAgICAgIGlmIG5vdCBzZWxmLnJ1bl9hc191c2VyOgogICAg\nICAgICAgICBzZWxmLnJ1bl9hc191c2VyID0gc2VsZi5FWFRFUk5BTF9VU0VSX05BTUUKICAgICAg\nICBpZiBzZWxmLmNlcGhfY29uZjoKICAgICAgICAgICAgc2VsZi5jbHVzdGVyID0gcmFkb3MuUmFk\nb3MoY29uZmZpbGU9c2VsZi5jZXBoX2NvbmYpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2Vs\nZi5jbHVzdGVyID0gcmFkb3MuUmFkb3MoKQogICAgICAgICAgICBzZWxmLmNsdXN0ZXIuY29uZl9y\nZWFkX2ZpbGUoKQogICAgICAgIHNlbGYuY2x1c3Rlci5jb25uZWN0KCkKCiAgICBkZWYgc2h1dGRv\nd24oc2VsZik6CiAgICAgICAgaWYgc2VsZi5jbHVzdGVyLnN0YXRlID09ICJjb25uZWN0ZWQiOgog\nICAgICAgICAgICBzZWxmLmNsdXN0ZXIuc2h1dGRvd24oKQoKICAgIGRlZiBnZXRfZnNpZChzZWxm\nKToKICAgICAgICByZXR1cm4gc3RyKHNlbGYuY2x1c3Rlci5nZXRfZnNpZCgpKQoKICAgIGRlZiBf\nY29tbW9uX2NtZF9qc29uX2dlbihzZWxmLCBjbWRfanNvbik6CiAgICAgICAgY21kID0ganNvbi5k\ndW1wcyhjbWRfanNvbiwgc29ydF9rZXlzPVRydWUpCiAgICAgICAgcmV0X3ZhbCwgY21kX291dCwg\nZXJyX21zZyA9IHNlbGYuY2x1c3Rlci5tb25fY29tbWFuZChjbWQsIGInJykKICAgICAgICBpZiBz\nZWxmLl9hcmdfcGFyc2VyLnZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCJDb21tYW5kIElucHV0\nOiB7fSIuZm9ybWF0KGNtZCkpCiAgICAgICAgICAgIHByaW50KCJSZXR1cm4gVmFsOiB7fVxuQ29t\nbWFuZCBPdXRwdXQ6IHt9XG5FcnJvciBNZXNzYWdlOiB7fVxuLS0tLS0tLS0tLVxuIi5mb3JtYXQo\nCiAgICAgICAgICAgICAgICAgIHJldF92YWwsIGNtZF9vdXQsIGVycl9tc2cpKQogICAgICAgIGpz\nb25fb3V0ID0ge30KICAgICAgICBpZiByZXRfdmFsID09IDA6CiAgICAgICAgICAgIGpzb25fb3V0\nID0ganNvbi5sb2FkcyhjbWRfb3V0KQogICAgICAgIHJldHVybiByZXRfdmFsLCBqc29uX291dCwg\nZXJyX21zZwoKICAgIGRlZiBnZXRfY2VwaF9leHRlcm5hbF9tb25fZGF0YShzZWxmKToKICAgICAg\nICBjbWRfanNvbiA9IHsicHJlZml4IjogInF1b3J1bV9zdGF0dXMiLCAiZm9ybWF0IjogImpzb24i\nfQogICAgICAgIHJldF92YWwsIGpzb25fb3V0LCBlcnJfbXNnID0gc2VsZi5fY29tbW9uX2NtZF9q\nc29uX2dlbihjbWRfanNvbikKICAgICAgICAjIGlmIHRoZXJlIGlzIGFuIHVuc3VjY2Vzc2Z1bCBh\ndHRlbXB0LAogICAgICAgIGlmIHJldF92YWwgIT0gMCBvciBsZW4oanNvbl9vdXQpID09IDA6CiAg\nICAgICAgICAgIHJhaXNlIEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24oCiAgICAgICAgICAgICAg\nICAiJ3F1b3J1bV9zdGF0dXMnIGNvbW1hbmQgZmFpbGVkLlxuIiArCiAgICAgICAgICAgICAgICAi\nRXJyb3I6IHt9Ii5mb3JtYXQoZXJyX21zZyBpZiByZXRfdmFsICE9IDAgZWxzZSBzZWxmLkVNUFRZ\nX09VVFBVVF9MSVNUKSkKICAgICAgICBxX2xlYWRlcl9uYW1lID0ganNvbl9vdXRbJ3F1b3J1bV9s\nZWFkZXJfbmFtZSddCiAgICAgICAgcV9sZWFkZXJfZGV0YWlscyA9IHt9CiAgICAgICAgcV9sZWFk\nZXJfbWF0Y2hpbmdfbGlzdCA9IFtsIGZvciBsIGluIGpzb25fb3V0Wydtb25tYXAnXVsnbW9ucydd\nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsWyduYW1lJ10gPT0gcV9sZWFk\nZXJfbmFtZV0KICAgICAgICBpZiBsZW4ocV9sZWFkZXJfbWF0Y2hpbmdfbGlzdCkgPT0gMDoKICAg\nICAgICAgICAgcmFpc2UgRXhlY3V0aW9uRmFpbHVyZUV4Y2VwdGlvbigiTm8gbWF0Y2hpbmcgJ21v\nbicgZGV0YWlscyBmb3VuZCIpCiAgICAgICAgcV9sZWFkZXJfZGV0YWlscyA9IHFfbGVhZGVyX21h\ndGNoaW5nX2xpc3RbMF0KICAgICAgICBpcF9wb3J0ID0gc3RyKHFfbGVhZGVyX2RldGFpbHNbJ3B1\nYmxpY19hZGRyJ10uc3BsaXQoJy8nKVswXSkKICAgICAgICByZXR1cm4gInt9PXt9Ii5mb3JtYXQo\nc3RyKHFfbGVhZGVyX25hbWUpLCBpcF9wb3J0KQoKICAgIGRlZiBjcmVhdGVfY2VwaENTSUtleXJp\nbmdfY2VwaEZTUHJvdmlzaW9uZXIoc2VsZik6CiAgICAgICAgJycnCiAgICAgICAgY29tbWFuZDog\nY2VwaCBhdXRoIGdldC1vci1jcmVhdGUgY2xpZW50LmNzaS1jZXBoZnMtcHJvdmlzaW9uZXIgbW9u\nICdhbGxvdyByJyBtZ3IgJ2FsbG93IHJ3JyBvc2QgJ2FsbG93IHJ3IHRhZyBjZXBoZnMgbWV0YWRh\ndGE9KicKICAgICAgICAnJycKICAgICAgICBjbWRfanNvbiA9IHsicHJlZml4IjogImF1dGggZ2V0\nLW9yLWNyZWF0ZSIsCiAgICAgICAgICAgICAgICAgICAgImVudGl0eSI6ICJjbGllbnQuY3NpLWNl\ncGhmcy1wcm92aXNpb25lciIsCiAgICAgICAgICAgICAgICAgICAgImNhcHMiOiBbIm1vbiIsICJh\nbGxvdyByIiwgIm1nciIsICJhbGxvdyBydyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nIm9zZCIsICJhbGxvdyBydyB0YWcgY2VwaGZzIG1ldGFkYXRhPSoiXSwKICAgICAgICAgICAgICAg\nICAgICAiZm9ybWF0IjogImpzb24ifQogICAgICAgIHJldF92YWwsIGpzb25fb3V0LCBlcnJfbXNn\nID0gc2VsZi5fY29tbW9uX2NtZF9qc29uX2dlbihjbWRfanNvbikKICAgICAgICAjIGlmIHRoZXJl\nIGlzIGFuIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0LAogICAgICAgIGlmIHJldF92YWwgIT0gMCBvciBs\nZW4oanNvbl9vdXQpID09IDA6CiAgICAgICAgICAgIHJhaXNlIEV4ZWN1dGlvbkZhaWx1cmVFeGNl\ncHRpb24oCiAgICAgICAgICAgICAgICAiJ2F1dGggZ2V0LW9yLWNyZWF0ZSBjbGllbnQuY3NpLWNl\ncGhmcy1wcm92aXNpb25lcicgY29tbWFuZCBmYWlsZWQuXG4iICsKICAgICAgICAgICAgICAgICJF\ncnJvcjoge30iLmZvcm1hdChlcnJfbXNnIGlmIHJldF92YWwgIT0gMCBlbHNlIHNlbGYuRU1QVFlf\nT1VUUFVUX0xJU1QpKQogICAgICAgIHJldHVybiBzdHIoanNvbl9vdXRbMF1bJ2tleSddKQoKICAg\nIGRlZiBjcmVhdGVfY2VwaENTSUtleXJpbmdfY2VwaEZTTm9kZShzZWxmKToKICAgICAgICBjbWRf\nanNvbiA9IHsicHJlZml4IjogImF1dGggZ2V0LW9yLWNyZWF0ZSIsCiAgICAgICAgICAgICAgICAg\nICAgImVudGl0eSI6ICJjbGllbnQuY3NpLWNlcGhmcy1ub2RlIiwKICAgICAgICAgICAgICAgICAg\nICAiY2FwcyI6IFsibW9uIiwgImFsbG93IHIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICJtZ3IiLCAiYWxsb3cgcnciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvc2QiLCAi\nYWxsb3cgcncgdGFnIGNlcGhmcyAqPSoiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJt\nZHMiLCAiYWxsb3cgcnciXSwKICAgICAgICAgICAgICAgICAgICAiZm9ybWF0IjogImpzb24ifQog\nICAgICAgIHJldF92YWwsIGpzb25fb3V0LCBlcnJfbXNnID0gc2VsZi5fY29tbW9uX2NtZF9qc29u\nX2dlbihjbWRfanNvbikKICAgICAgICAjIGlmIHRoZXJlIGlzIGFuIHVuc3VjY2Vzc2Z1bCBhdHRl\nbXB0LAogICAgICAgIGlmIHJldF92YWwgIT0gMCBvciBsZW4oanNvbl9vdXQpID09IDA6CiAgICAg\nICAgICAgIHJhaXNlIEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAi\nJ2F1dGggZ2V0LW9yLWNyZWF0ZSBjbGllbnQuY3NpLWNlcGhmcy1ub2RlJyBjb21tYW5kIGZhaWxl\nZC5cbiIgKwogICAgICAgICAgICAgICAgIkVycm9yOiB7fSIuZm9ybWF0KGVycl9tc2cgaWYgcmV0\nX3ZhbCAhPSAwIGVsc2Ugc2VsZi5FTVBUWV9PVVRQVVRfTElTVCkpCiAgICAgICAgcmV0dXJuIHN0\ncihqc29uX291dFswXVsna2V5J10pCgogICAgZGVmIGNyZWF0ZV9jZXBoQ1NJS2V5cmluZ19SQkRQ\ncm92aXNpb25lcihzZWxmKToKICAgICAgICBjbWRfanNvbiA9IHsicHJlZml4IjogImF1dGggZ2V0\nLW9yLWNyZWF0ZSIsCiAgICAgICAgICAgICAgICAgICAgImVudGl0eSI6ICJjbGllbnQuY3NpLXJi\nZC1wcm92aXNpb25lciIsCiAgICAgICAgICAgICAgICAgICAgImNhcHMiOiBbIm1vbiIsICJwcm9m\naWxlIHJiZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1nciIsICJhbGxvdyBydyIs\nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9zZCIsICJwcm9maWxlIHJiZCJdLAogICAg\nICAgICAgICAgICAgICAgICJmb3JtYXQiOiAianNvbiJ9CiAgICAgICAgcmV0X3ZhbCwganNvbl9v\ndXQsIGVycl9tc2cgPSBzZWxmLl9jb21tb25fY21kX2pzb25fZ2VuKGNtZF9qc29uKQogICAgICAg\nICMgaWYgdGhlcmUgaXMgYW4gdW5zdWNjZXNzZnVsIGF0dGVtcHQsCiAgICAgICAgaWYgcmV0X3Zh\nbCAhPSAwIG9yIGxlbihqc29uX291dCkgPT0gMDoKICAgICAgICAgICAgcmFpc2UgRXhlY3V0aW9u\nRmFpbHVyZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICInYXV0aCBnZXQtb3ItY3JlYXRlIGNs\naWVudC5jc2ktcmJkLXByb3Zpc2lvbmVyJyBjb21tYW5kIGZhaWxlZC5cbiIgKwogICAgICAgICAg\nICAgICAgIkVycm9yOiB7fSIuZm9ybWF0KGVycl9tc2cgaWYgcmV0X3ZhbCAhPSAwIGVsc2Ugc2Vs\nZi5FTVBUWV9PVVRQVVRfTElTVCkpCiAgICAgICAgcmV0dXJuIHN0cihqc29uX291dFswXVsna2V5\nJ10pCgogICAgZGVmIGdldF9jZXBoZnNfZGF0YV9wb29sX2RldGFpbHMoc2VsZik6CiAgICAgICAg\nY21kX2pzb24gPSB7InByZWZpeCI6ICJmcyBscyIsICJmb3JtYXQiOiAianNvbiJ9CiAgICAgICAg\ncmV0X3ZhbCwganNvbl9vdXQsIGVycl9tc2cgPSBzZWxmLl9jb21tb25fY21kX2pzb25fZ2VuKGNt\nZF9qc29uKQogICAgICAgICMgaWYgdGhlcmUgaXMgYW4gdW5zdWNjZXNzZnVsIGF0dGVtcHQsIHJl\ncG9ydCBhbiBlcnJvcgogICAgICAgIGlmIHJldF92YWwgIT0gMDoKICAgICAgICAgICAgIyBpZiBm\ncyBhbmQgZGF0YV9wb29sIGFyZ3VtZW50cyBhcmUgbm90IHNldCwgc2lsZW50bHkgcmV0dXJuCiAg\nICAgICAgICAgIGlmIHNlbGYuX2FyZ19wYXJzZXIuY2VwaGZzX2ZpbGVzeXN0ZW1fbmFtZSA9PSAi\nIiBhbmQgc2VsZi5fYXJnX3BhcnNlci5jZXBoZnNfZGF0YV9wb29sX25hbWUgPT0gIiI6CiAgICAg\nICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgIyBpZiB1c2VyIGhhcyBwcm92aWRlZCBhbnkg\nb2YgdGhlCiAgICAgICAgICAgICMgJy0tY2VwaGZzLWZpbGVzeXN0ZW0tbmFtZScgb3IgJy0tY2Vw\naGZzLWRhdGEtcG9vbC1uYW1lJyBhcmd1bWVudHMsCiAgICAgICAgICAgICMgcmFpc2UgYW4gZXhj\nZXB0aW9uIGFzIHdlIGFyZSB1bmFibGUgdG8gdmVyaWZ5IHRoZSBhcmdzCiAgICAgICAgICAgIHJh\naXNlIEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiJ2ZzIGxzJyBj\nZXBoIGNhbGwgZmFpbGVkIHdpdGggZXJyb3I6IHt9Ii5mb3JtYXQoZXJyX21zZykpCgogICAgICAg\nIG1hdGNoaW5nX2pzb25fb3V0ID0ge30KICAgICAgICAjIGlmICctLWNlcGhmcy1maWxlc3lzdGVt\nLW5hbWUnIGFyZ3VtZW50IGlzIHByb3ZpZGVkLAogICAgICAgICMgY2hlY2sgd2hldGhlciB0aGUg\ncHJvdmlkZWQgZmlsZXN5c3RlbS1uYW1lIGV4aXN0cyBvciBub3QKICAgICAgICBpZiBzZWxmLl9h\ncmdfcGFyc2VyLmNlcGhmc19maWxlc3lzdGVtX25hbWU6CiAgICAgICAgICAgICMgZ2V0IHRoZSBt\nYXRjaGluZyBsaXN0CiAgICAgICAgICAgIG1hdGNoaW5nX2pzb25fb3V0X2xpc3QgPSBbbWF0Y2hl\nZCBmb3IgbWF0Y2hlZCBpbiBqc29uX291dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgIGlmIHN0cihtYXRjaGVkWyduYW1lJ10pID09IHNlbGYuX2FyZ19wYXJzZXIuY2VwaGZz\nX2ZpbGVzeXN0ZW1fbmFtZV0KICAgICAgICAgICAgIyB1bmFibGUgdG8gZmluZCBhIG1hdGNoaW5n\nIGZzLW5hbWUsIHJhaXNlIGFuIGVycm9yCiAgICAgICAgICAgIGlmIGxlbihtYXRjaGluZ19qc29u\nX291dF9saXN0KSA9PSAwOgogICAgICAgICAgICAgICAgcmFpc2UgRXhlY3V0aW9uRmFpbHVyZUV4\nY2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAoIkZpbGVzeXN0ZW0gcHJvdmlkZWQsICd7fScs\nICIgKwogICAgICAgICAgICAgICAgICAgICAiaXMgbm90IGZvdW5kIGluIHRoZSBmcy1saXN0OiAn\ne30nIikuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hcmdfcGFyc2VyLmNl\ncGhmc19maWxlc3lzdGVtX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHIoeFsnbmFt\nZSddKSBmb3IgeCBpbiBqc29uX291dF0pKQogICAgICAgICAgICBtYXRjaGluZ19qc29uX291dCA9\nIG1hdGNoaW5nX2pzb25fb3V0X2xpc3RbMF0KICAgICAgICAjIGlmIGNlcGhmcyBmaWxlc3lzdGVt\nIG5hbWUgaXMgbm90IHByb3ZpZGVkLAogICAgICAgICMgdHJ5IHRvIGdldCBhIGRlZmF1bHQgZnMg\nbmFtZSBieSBkb2luZyB0aGUgZm9sbG93aW5nCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBh\nLiBjaGVjayBpZiB0aGVyZSBpcyBvbmx5IG9uZSBmaWxlc3lzdGVtIGlzIHByZXNlbnQKICAgICAg\nICAgICAgaWYgbGVuKGpzb25fb3V0KSA9PSAxOgogICAgICAgICAgICAgICAgbWF0Y2hpbmdfanNv\nbl9vdXQgPSBqc29uX291dFswXQogICAgICAgICAgICAjIGIuIG9yIGVsc2UsIGNoZWNrIGlmIGRh\ndGFfcG9vbCBuYW1lIGlzIHByb3ZpZGVkCiAgICAgICAgICAgIGVsaWYgc2VsZi5fYXJnX3BhcnNl\nci5jZXBoZnNfZGF0YV9wb29sX25hbWU6CiAgICAgICAgICAgICAgICAjIGFuZCBpZiBwcmVzZW50\nLCBjaGVjayB3aGV0aGVyIHRoZXJlIGV4aXN0cyBhIGZzIHdoaWNoIGhhcyB0aGUgZGF0YV9wb29s\nCiAgICAgICAgICAgICAgICBmb3IgZWFjaEogaW4ganNvbl9vdXQ6CiAgICAgICAgICAgICAgICAg\nICAgaWYgc2VsZi5fYXJnX3BhcnNlci5jZXBoZnNfZGF0YV9wb29sX25hbWUgaW4gZWFjaEpbJ2Rh\ndGFfcG9vbHMnXToKICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmdfanNvbl9vdXQgPSBl\nYWNoSgogICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIyBpZiB0\naGVyZSBpcyBubyBtYXRjaGluZyBmcyBleGlzdHMsIHRoYXQgbWVhbnMgcHJvdmlkZWQgZGF0YV9w\nb29sIG5hbWUgaXMgaW52YWxpZAogICAgICAgICAgICAgICAgaWYgbm90IG1hdGNoaW5nX2pzb25f\nb3V0OgogICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24o\nCiAgICAgICAgICAgICAgICAgICAgICAgICJQcm92aWRlZCBkYXRhX3Bvb2wgbmFtZSwge30sIGRv\nZXMgbm90IGV4aXN0cyIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f\nYXJnX3BhcnNlci5jZXBoZnNfZGF0YV9wb29sX25hbWUpKQogICAgICAgICAgICAjIGMuIGlmIG5v\ndGhpbmcgaXMgc2V0IGFuZCBjb3VsZG4ndCBmaW5kIGEgZGVmYXVsdCwKICAgICAgICAgICAgZWxz\nZToKICAgICAgICAgICAgICAgICMganVzdCByZXR1cm4gc2lsZW50bHkKICAgICAgICAgICAgICAg\nIHJldHVybgoKICAgICAgICBpZiBtYXRjaGluZ19qc29uX291dDoKICAgICAgICAgICAgc2VsZi5f\nYXJnX3BhcnNlci5jZXBoZnNfZmlsZXN5c3RlbV9uYW1lID0gc3RyKAogICAgICAgICAgICAgICAg\nbWF0Y2hpbmdfanNvbl9vdXRbJ25hbWUnXSkKCiAgICAgICAgaWYgdHlwZShtYXRjaGluZ19qc29u\nX291dFsnZGF0YV9wb29scyddKSA9PSBsaXN0OgogICAgICAgICAgICAjIGlmIHRoZSB1c2VyIGhh\ncyBhbHJlYWR5IHByb3ZpZGVkIGRhdGEtcG9vbC1uYW1lLAogICAgICAgICAgICAjIHRocm91Z2gg\nLS1jZXBoZnMtZGF0YS1wb29sLW5hbWUKICAgICAgICAgICAgaWYgc2VsZi5fYXJnX3BhcnNlci5j\nZXBoZnNfZGF0YV9wb29sX25hbWU6CiAgICAgICAgICAgICAgICAjIGlmIHRoZSBwcm92aWRlZCBu\nYW1lIGlzIG5vdCBtYXRjaGluZyB3aXRoIHRoZSBvbmUgaW4gdGhlIGxpc3QKICAgICAgICAgICAg\nICAgIGlmIHNlbGYuX2FyZ19wYXJzZXIuY2VwaGZzX2RhdGFfcG9vbF9uYW1lIG5vdCBpbiBtYXRj\naGluZ19qc29uX291dFsnZGF0YV9wb29scyddOgogICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4\nZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICJ7fTogJ3t9\nJywge306IHt9Ii5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvdmlkZWQg\nZGF0YS1wb29sLW5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXJnX3Bh\ncnNlci5jZXBoZnNfZGF0YV9wb29sX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAi\nZG9lc24ndCBtYXRjaCBmcm9tIHRoZSBkYXRhLXBvb2xzJyBsaXN0IiwKICAgICAgICAgICAgICAg\nICAgICAgICAgICAgIFtzdHIoeCkgZm9yIHggaW4gbWF0Y2hpbmdfanNvbl9vdXRbJ2RhdGFfcG9v\nbHMnXV0pKQogICAgICAgICAgICAjIGlmIGRhdGFfcG9vbCBuYW1lIGlzIG5vdCBwcm92aWRlZCwK\nICAgICAgICAgICAgIyB0aGVuIHRyeSB0byBmaW5kIGEgZGVmYXVsdCBkYXRhIHBvb2wgbmFtZQog\nICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIyBpZiBubyBkYXRhX3Bvb2xzIGV4aXN0\nLCBzaWxlbnRseSByZXR1cm4KICAgICAgICAgICAgICAgIGlmIGxlbihtYXRjaGluZ19qc29uX291\ndFsnZGF0YV9wb29scyddKSA9PSAwOgogICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAg\nICAgICAgICAgc2VsZi5fYXJnX3BhcnNlci5jZXBoZnNfZGF0YV9wb29sX25hbWUgPSBzdHIoCiAg\nICAgICAgICAgICAgICAgICAgbWF0Y2hpbmdfanNvbl9vdXRbJ2RhdGFfcG9vbHMnXVswXSkKICAg\nICAgICAgICAgIyBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSAnZGF0YV9wb29scycgZXhpc3Qs\nCiAgICAgICAgICAgICMgdGhlbiB3YXJuIHRoZSB1c2VyIHRoYXQgd2UgYXJlIHVzaW5nIHRoZSBz\nZWxlY3RlZCBuYW1lCiAgICAgICAgICAgIGlmIGxlbihtYXRjaGluZ19qc29uX291dFsnZGF0YV9w\nb29scyddKSA+IDE6CiAgICAgICAgICAgICAgICBwcmludCgie306IHt9XG57fTogJ3t9J1xuIi5m\nb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgIldBUk5JTkc6IE11bHRpcGxlIGRhdGEgcG9vbHMg\nZGV0ZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgIFtzdHIoeCkgZm9yIHggaW4gbWF0Y2hpbmdf\nanNvbl9vdXRbJ2RhdGFfcG9vbHMnXV0sCiAgICAgICAgICAgICAgICAgICAgIlVzaW5nIHRoZSBk\nYXRhLXBvb2wiLAogICAgICAgICAgICAgICAgICAgIHNlbGYuX2FyZ19wYXJzZXIuY2VwaGZzX2Rh\ndGFfcG9vbF9uYW1lKSkKCiAgICBkZWYgY3JlYXRlX2NlcGhDU0lLZXlyaW5nX1JCRE5vZGUoc2Vs\nZik6CiAgICAgICAgY21kX2pzb24gPSB7InByZWZpeCI6ICJhdXRoIGdldC1vci1jcmVhdGUiLAog\nICAgICAgICAgICAgICAgICAgICJlbnRpdHkiOiAiY2xpZW50LmNzaS1yYmQtbm9kZSIsCiAgICAg\nICAgICAgICAgICAgICAgImNhcHMiOiBbIm1vbiIsICJwcm9maWxlIHJiZCIsCiAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgIm9zZCIsICJwcm9maWxlIHJiZCJdLAogICAgICAgICAgICAgICAg\nICAgICJmb3JtYXQiOiAianNvbiJ9CiAgICAgICAgcmV0X3ZhbCwganNvbl9vdXQsIGVycl9tc2cg\nPSBzZWxmLl9jb21tb25fY21kX2pzb25fZ2VuKGNtZF9qc29uKQogICAgICAgICMgaWYgdGhlcmUg\naXMgYW4gdW5zdWNjZXNzZnVsIGF0dGVtcHQsCiAgICAgICAgaWYgcmV0X3ZhbCAhPSAwIG9yIGxl\nbihqc29uX291dCkgPT0gMDoKICAgICAgICAgICAgcmFpc2UgRXhlY3V0aW9uRmFpbHVyZUV4Y2Vw\ndGlvbigKICAgICAgICAgICAgICAgICInYXV0aCBnZXQtb3ItY3JlYXRlIGNsaWVudC5jc2ktcmJk\nLW5vZGUnIGNvbW1hbmQgZmFpbGVkXG4iICsKICAgICAgICAgICAgICAgICJFcnJvcjoge30iLmZv\ncm1hdChlcnJfbXNnIGlmIHJldF92YWwgIT0gMCBlbHNlIHNlbGYuRU1QVFlfT1VUUFVUX0xJU1Qp\nKQogICAgICAgIHJldHVybiBzdHIoanNvbl9vdXRbMF1bJ2tleSddKQoKICAgIGRlZiBjcmVhdGVf\nY2hlY2tlcktleShzZWxmKToKICAgICAgICBjbWRfanNvbiA9IHsicHJlZml4IjogImF1dGggZ2V0\nLW9yLWNyZWF0ZSIsCiAgICAgICAgICAgICAgICAgICAgImVudGl0eSI6IHNlbGYucnVuX2FzX3Vz\nZXIsCiAgICAgICAgICAgICAgICAgICAgImNhcHMiOiBbIm1vbiIsICJhbGxvdyByLCBhbGxvdyBj\nb21tYW5kIHF1b3J1bV9zdGF0dXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvc2Qi\nLCAoImFsbG93IHJ3eCBwb29sPXswfS5yZ3cubWV0YSwgIiArCiAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAiYWxsb3cgciBwb29sPS5yZ3cucm9vdCwgIiArCiAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsb3cgcncgcG9vbD17MH0ucmd3LmNvbnRyb2ws\nICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbG93IHggcG9vbD17\nMH0ucmd3LmJ1Y2tldHMuaW5kZXgiKS5mb3JtYXQoc2VsZi5fYXJnX3BhcnNlci5yZ3dfcG9vbF9w\ncmVmaXgpXSwKICAgICAgICAgICAgICAgICAgICAiZm9ybWF0IjogImpzb24ifQogICAgICAgIHJl\ndF92YWwsIGpzb25fb3V0LCBlcnJfbXNnID0gc2VsZi5fY29tbW9uX2NtZF9qc29uX2dlbihjbWRf\nanNvbikKICAgICAgICAjIGlmIHRoZXJlIGlzIGFuIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0LAogICAg\nICAgIGlmIHJldF92YWwgIT0gMCBvciBsZW4oanNvbl9vdXQpID09IDA6CiAgICAgICAgICAgIHJh\naXNlIEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiJ2F1dGggZ2V0\nLW9yLWNyZWF0ZSB7fScgY29tbWFuZCBmYWlsZWRcbiIuZm9ybWF0KHNlbGYucnVuX2FzX3VzZXIp\nICsKICAgICAgICAgICAgICAgICJFcnJvcjoge30iLmZvcm1hdChlcnJfbXNnIGlmIHJldF92YWwg\nIT0gMCBlbHNlIHNlbGYuRU1QVFlfT1VUUFVUX0xJU1QpKQogICAgICAgIHJldHVybiBzdHIoanNv\nbl9vdXRbMF1bJ2tleSddKQoKICAgIGRlZiBfZ2VuX291dHB1dF9tYXAoc2VsZik6CiAgICAgICAg\naWYgc2VsZi5vdXRfbWFwOgogICAgICAgICAgICByZXR1cm4KICAgICAgICBwb29sc190b192YWxp\nZGF0ZSA9IFtzZWxmLl9hcmdfcGFyc2VyLnJiZF9kYXRhX3Bvb2xfbmFtZV0KICAgICAgICAjIGlm\nIHJnd19lbmRwb2ludCBpcyBwcm92aWRlZCwgdmFsaWRhdGUgaXQKICAgICAgICBpZiBzZWxmLl9h\ncmdfcGFyc2VyLnJnd19lbmRwb2ludDoKICAgICAgICAgICAgc2VsZi5faW52YWxpZF9lbmRwb2lu\ndChzZWxmLl9hcmdfcGFyc2VyLnJnd19lbmRwb2ludCkKICAgICAgICAgICAgc2VsZi5lbmRwb2lu\ndF9kaWFsKHNlbGYuX2FyZ19wYXJzZXIucmd3X2VuZHBvaW50KQogICAgICAgICAgICByZ3dfcG9v\nbF90b192YWxpZGF0ZSA9IFsiezB9LnJndy5tZXRhIi5mb3JtYXQoc2VsZi5fYXJnX3BhcnNlci5y\nZ3dfcG9vbF9wcmVmaXgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLnJn\ndy5yb290IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInswfS5yZ3cuY29u\ndHJvbCIuZm9ybWF0KAogICAgICAgICAgICAgICAgc2VsZi5fYXJnX3BhcnNlci5yZ3dfcG9vbF9w\ncmVmaXgpLAogICAgICAgICAgICAgICAgInswfS5yZ3cubG9nIi5mb3JtYXQoCiAgICAgICAgICAg\nICAgICBzZWxmLl9hcmdfcGFyc2VyLnJnd19wb29sX3ByZWZpeCldCiAgICAgICAgICAgIHBvb2xz\nX3RvX3ZhbGlkYXRlLmV4dGVuZChyZ3dfcG9vbF90b192YWxpZGF0ZSkKICAgICAgICBmb3IgcG9v\nbCBpbiBwb29sc190b192YWxpZGF0ZToKICAgICAgICAgICAgaWYgbm90IHNlbGYuY2x1c3Rlci5w\nb29sX2V4aXN0cyhwb29sKToKICAgICAgICAgICAgICAgIHJhaXNlIEV4ZWN1dGlvbkZhaWx1cmVF\neGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgIlRoZSBwcm92aWRlZCBwb29sIHt9IGRvZXMg\nbm90IGV4aXN0Ii5mb3JtYXQocG9vbCkpCiAgICAgICAgc2VsZi5fZXhjbHVkZWRfa2V5cy5hZGQo\nJ0NMVVNURVJfTkFNRScpCiAgICAgICAgc2VsZi5nZXRfY2VwaGZzX2RhdGFfcG9vbF9kZXRhaWxz\nKCkKICAgICAgICBzZWxmLm91dF9tYXBbJ05BTUVTUEFDRSddID0gc2VsZi5fYXJnX3BhcnNlci5u\nYW1lc3BhY2UKICAgICAgICBzZWxmLm91dF9tYXBbJ0NMVVNURVJfTkFNRSddID0gc2VsZi5fYXJn\nX3BhcnNlci5jbHVzdGVyX25hbWUKICAgICAgICBzZWxmLm91dF9tYXBbJ1JPT0tfRVhURVJOQUxf\nRlNJRCddID0gc2VsZi5nZXRfZnNpZCgpCiAgICAgICAgc2VsZi5vdXRfbWFwWydST09LX0VYVEVS\nTkFMX1VTRVJOQU1FJ10gPSBzZWxmLnJ1bl9hc191c2VyCiAgICAgICAgc2VsZi5vdXRfbWFwWydS\nT09LX0VYVEVSTkFMX0NFUEhfTU9OX0RBVEEnXSA9IHNlbGYuZ2V0X2NlcGhfZXh0ZXJuYWxfbW9u\nX2RhdGEoKQogICAgICAgIHNlbGYub3V0X21hcFsnUk9PS19FWFRFUk5BTF9VU0VSX1NFQ1JFVCdd\nID0gc2VsZi5jcmVhdGVfY2hlY2tlcktleSgpCiAgICAgICAgc2VsZi5vdXRfbWFwWydDU0lfUkJE\nX05PREVfU0VDUkVUX1NFQ1JFVCddID0gc2VsZi5jcmVhdGVfY2VwaENTSUtleXJpbmdfUkJETm9k\nZSgpCiAgICAgICAgc2VsZi5vdXRfbWFwWydDU0lfUkJEX1BST1ZJU0lPTkVSX1NFQ1JFVCddID0g\nc2VsZi5jcmVhdGVfY2VwaENTSUtleXJpbmdfUkJEUHJvdmlzaW9uZXIoKQogICAgICAgIHNlbGYu\nb3V0X21hcFsnQ0VQSEZTX1BPT0xfTkFNRSddID0gc2VsZi5fYXJnX3BhcnNlci5jZXBoZnNfZGF0\nYV9wb29sX25hbWUKICAgICAgICBzZWxmLm91dF9tYXBbJ0NFUEhGU19GU19OQU1FJ10gPSBzZWxm\nLl9hcmdfcGFyc2VyLmNlcGhmc19maWxlc3lzdGVtX25hbWUKICAgICAgICBzZWxmLm91dF9tYXBb\nJ0NTSV9DRVBIRlNfTk9ERV9TRUNSRVQnXSA9ICcnCiAgICAgICAgc2VsZi5vdXRfbWFwWydDU0lf\nQ0VQSEZTX1BST1ZJU0lPTkVSX1NFQ1JFVCddID0gJycKICAgICAgICAjIGNyZWF0ZSBDZXBoRlMg\nbm9kZSBhbmQgcHJvdmlzaW9uZXIga2V5cmluZyBvbmx5IHdoZW4gTURTIGV4aXN0cwogICAgICAg\nIGlmIHNlbGYub3V0X21hcFsnQ0VQSEZTX0ZTX05BTUUnXSBhbmQgc2VsZi5vdXRfbWFwWydDRVBI\nRlNfUE9PTF9OQU1FJ106CiAgICAgICAgICAgIHNlbGYub3V0X21hcFsnQ1NJX0NFUEhGU19OT0RF\nX1NFQ1JFVCddID0gc2VsZi5jcmVhdGVfY2VwaENTSUtleXJpbmdfY2VwaEZTTm9kZSgKICAgICAg\nICAgICAgKQogICAgICAgICAgICBzZWxmLm91dF9tYXBbJ0NTSV9DRVBIRlNfUFJPVklTSU9ORVJf\nU0VDUkVUJ10gPSBzZWxmLmNyZWF0ZV9jZXBoQ1NJS2V5cmluZ19jZXBoRlNQcm92aXNpb25lcigp\nCiAgICAgICAgc2VsZi5vdXRfbWFwWydSR1dfRU5EUE9JTlQnXSA9IHNlbGYuX2FyZ19wYXJzZXIu\ncmd3X2VuZHBvaW50CiAgICAgICAgc2VsZi5vdXRfbWFwWydSQkRfUE9PTF9OQU1FJ10gPSBzZWxm\nLl9hcmdfcGFyc2VyLnJiZF9kYXRhX3Bvb2xfbmFtZQogICAgICAgIHNlbGYub3V0X21hcFsnUkdX\nX1BPT0xfUFJFRklYJ10gPSBzZWxmLl9hcmdfcGFyc2VyLnJnd19wb29sX3ByZWZpeAoKICAgIGRl\nZiBnZW5fc2hlbGxfb3V0KHNlbGYpOgogICAgICAgIHNlbGYuX2dlbl9vdXRwdXRfbWFwKCkKICAg\nICAgICBzaE91dElPID0gU3RyaW5nSU8oKQogICAgICAgIGZvciBrLCB2IGluIHNlbGYub3V0X21h\ncC5pdGVtcygpOgogICAgICAgICAgICBpZiB2IGFuZCBrIG5vdCBpbiBzZWxmLl9leGNsdWRlZF9r\nZXlzOgogICAgICAgICAgICAgICAgc2hPdXRJTy53cml0ZSgnZXhwb3J0IHt9PXt9e30nLmZvcm1h\ndChrLCB2LCBMSU5FU0VQKSkKICAgICAgICBzaE91dCA9IHNoT3V0SU8uZ2V0dmFsdWUoKQogICAg\nICAgIHNoT3V0SU8uY2xvc2UoKQogICAgICAgIHJldHVybiBzaE91dAoKICAgIGRlZiBnZW5fanNv\nbl9vdXQoc2VsZik6CiAgICAgICAgc2VsZi5fZ2VuX291dHB1dF9tYXAoKQogICAgICAgIGpzb25f\nb3V0ID0gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJyb29rLWNlcGgt\nbW9uLWVuZHBvaW50cyIsCiAgICAgICAgICAgICAgICAia2luZCI6ICJDb25maWdNYXAiLAogICAg\nICAgICAgICAgICAgImRhdGEiOiB7CiAgICAgICAgICAgICAgICAgICAgImRhdGEiOiBzZWxmLm91\ndF9tYXBbJ1JPT0tfRVhURVJOQUxfQ0VQSF9NT05fREFUQSddLAogICAgICAgICAgICAgICAgICAg\nICJtYXhNb25JZCI6ICIwIiwKICAgICAgICAgICAgICAgICAgICAibWFwcGluZyI6ICJ7fSIKICAg\nICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAg\nICAgIm5hbWUiOiAicm9vay1jZXBoLW1vbiIsCiAgICAgICAgICAgICAgICAia2luZCI6ICJTZWNy\nZXQiLAogICAgICAgICAgICAgICAgImRhdGEiOiB7CiAgICAgICAgICAgICAgICAgICAgImFkbWlu\nLXNlY3JldCI6ICJhZG1pbi1zZWNyZXQiLAogICAgICAgICAgICAgICAgICAgICJjbHVzdGVyLW5h\nbWUiOiBzZWxmLm91dF9tYXBbJ0NMVVNURVJfTkFNRSddLAogICAgICAgICAgICAgICAgICAgICJm\nc2lkIjogc2VsZi5vdXRfbWFwWydST09LX0VYVEVSTkFMX0ZTSUQnXSwKICAgICAgICAgICAgICAg\nICAgICAibW9uLXNlY3JldCI6ICJtb24tc2VjcmV0IgogICAgICAgICAgICAgICAgfSwKICAgICAg\nICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAicm9vay1jZXBo\nLW9wZXJhdG9yLWNyZWRzIiwKICAgICAgICAgICAgICAgICJraW5kIjogIlNlY3JldCIsCiAgICAg\nICAgICAgICAgICAiZGF0YSI6IHsKICAgICAgICAgICAgICAgICAgICAidXNlcklEIjogc2VsZi5v\ndXRfbWFwWydST09LX0VYVEVSTkFMX1VTRVJOQU1FJ10sCiAgICAgICAgICAgICAgICAgICAgInVz\nZXJLZXkiOiBzZWxmLm91dF9tYXBbJ1JPT0tfRVhURVJOQUxfVVNFUl9TRUNSRVQnXQogICAgICAg\nICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAi\nbmFtZSI6ICJyb29rLWNzaS1yYmQtbm9kZSIsCiAgICAgICAgICAgICAgICAia2luZCI6ICJTZWNy\nZXQiLAogICAgICAgICAgICAgICAgImRhdGEiOiB7CiAgICAgICAgICAgICAgICAgICAgInVzZXJJ\nRCI6ICdjc2ktcmJkLW5vZGUnLAogICAgICAgICAgICAgICAgICAgICJ1c2VyS2V5Ijogc2VsZi5v\ndXRfbWFwWydDU0lfUkJEX05PREVfU0VDUkVUX1NFQ1JFVCddCiAgICAgICAgICAgICAgICB9CiAg\nICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogImNlcGgt\ncmJkIiwKICAgICAgICAgICAgICAgICJraW5kIjogIlN0b3JhZ2VDbGFzcyIsCiAgICAgICAgICAg\nICAgICAiZGF0YSI6IHsKICAgICAgICAgICAgICAgICAgICAicG9vbCI6IHNlbGYub3V0X21hcFsn\nUkJEX1BPT0xfTkFNRSddCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICBd\nCgogICAgICAgICMgaWYgJ0NTSV9SQkRfUFJPVklTSU9ORVJfU0VDUkVUJyBleGlzdHMsIHRoZW4g\nb25seSBhZGQgJ3Jvb2stY3NpLXJiZC1wcm92aXNpb25lcicgU2VjcmV0CiAgICAgICAgaWYgc2Vs\nZi5vdXRfbWFwWydDU0lfUkJEX1BST1ZJU0lPTkVSX1NFQ1JFVCddOgogICAgICAgICAgICBqc29u\nX291dC5hcHBlbmQoewogICAgICAgICAgICAgICAgIm5hbWUiOiAicm9vay1jc2ktcmJkLXByb3Zp\nc2lvbmVyIiwKICAgICAgICAgICAgICAgICJraW5kIjogIlNlY3JldCIsCiAgICAgICAgICAgICAg\nICAiZGF0YSI6IHsKICAgICAgICAgICAgICAgICAgICAidXNlcklEIjogJ2NzaS1yYmQtcHJvdmlz\naW9uZXInLAogICAgICAgICAgICAgICAgICAgICJ1c2VyS2V5Ijogc2VsZi5vdXRfbWFwWydDU0lf\nUkJEX1BST1ZJU0lPTkVSX1NFQ1JFVCddCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9\nKQogICAgICAgICMgaWYgJ0NTSV9DRVBIRlNfUFJPVklTSU9ORVJfU0VDUkVUJyBleGlzdHMsIHRo\nZW4gb25seSBhZGQgJ3Jvb2stY3NpLWNlcGhmcy1wcm92aXNpb25lcicgU2VjcmV0CiAgICAgICAg\naWYgc2VsZi5vdXRfbWFwWydDU0lfQ0VQSEZTX1BST1ZJU0lPTkVSX1NFQ1JFVCddOgogICAgICAg\nICAgICBqc29uX291dC5hcHBlbmQoewogICAgICAgICAgICAgICAgIm5hbWUiOiAicm9vay1jc2kt\nY2VwaGZzLXByb3Zpc2lvbmVyIiwKICAgICAgICAgICAgICAgICJraW5kIjogIlNlY3JldCIsCiAg\nICAgICAgICAgICAgICAiZGF0YSI6IHsKICAgICAgICAgICAgICAgICAgICAiYWRtaW5JRCI6ICdj\nc2ktY2VwaGZzLXByb3Zpc2lvbmVyJywKICAgICAgICAgICAgICAgICAgICAiYWRtaW5LZXkiOiBz\nZWxmLm91dF9tYXBbJ0NTSV9DRVBIRlNfUFJPVklTSU9ORVJfU0VDUkVUJ10KICAgICAgICAgICAg\nICAgIH0sCiAgICAgICAgICAgIH0pCiAgICAgICAgIyBpZiAnQ1NJX0NFUEhGU19OT0RFX1NFQ1JF\nVCcgZXhpc3RzLCB0aGVuIG9ubHkgYWRkICdyb29rLWNzaS1jZXBoZnMtbm9kZScgU2VjcmV0CiAg\nICAgICAgaWYgc2VsZi5vdXRfbWFwWydDU0lfQ0VQSEZTX05PREVfU0VDUkVUJ106CiAgICAgICAg\nICAgIGpzb25fb3V0LmFwcGVuZCh7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJyb29rLWNzaS1j\nZXBoZnMtbm9kZSIsCiAgICAgICAgICAgICAgICAia2luZCI6ICJTZWNyZXQiLAogICAgICAgICAg\nICAgICAgImRhdGEiOiB7CiAgICAgICAgICAgICAgICAgICAgImFkbWluSUQiOiAnY3NpLWNlcGhm\ncy1ub2RlJywKICAgICAgICAgICAgICAgICAgICAiYWRtaW5LZXkiOiBzZWxmLm91dF9tYXBbJ0NT\nSV9DRVBIRlNfTk9ERV9TRUNSRVQnXQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KQog\nICAgICAgICMgaWYgJ0NFUEhGU19GU19OQU1FJyBleGlzdHMsIHRoZW4gb25seSBhZGQgJ2NlcGhm\ncycgU3RvcmFnZUNsYXNzCiAgICAgICAgaWYgc2VsZi5vdXRfbWFwWydDRVBIRlNfRlNfTkFNRSdd\nOgogICAgICAgICAgICBqc29uX291dC5hcHBlbmQoewogICAgICAgICAgICAgICAgIm5hbWUiOiAi\nY2VwaGZzIiwKICAgICAgICAgICAgICAgICJraW5kIjogIlN0b3JhZ2VDbGFzcyIsCiAgICAgICAg\nICAgICAgICAiZGF0YSI6IHsKICAgICAgICAgICAgICAgICAgICAiZnNOYW1lIjogc2VsZi5vdXRf\nbWFwWydDRVBIRlNfRlNfTkFNRSddLAogICAgICAgICAgICAgICAgICAgICJwb29sIjogc2VsZi5v\ndXRfbWFwWydDRVBIRlNfUE9PTF9OQU1FJ10KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg\nfSkKICAgICAgICAjIGlmICdSR1dfRU5EUE9JTlQnIGV4aXN0cywgdGhlbiBvbmx5IGFkZCAnY2Vw\naC1yZ3cnIFN0b3JhZ2VDbGFzcwogICAgICAgIGlmIHNlbGYub3V0X21hcFsnUkdXX0VORFBPSU5U\nJ106CiAgICAgICAgICAgIGpzb25fb3V0LmFwcGVuZCh7CiAgICAgICAgICAgICAgICAibmFtZSI6\nICJjZXBoLXJndyIsCiAgICAgICAgICAgICAgICAia2luZCI6ICJTdG9yYWdlQ2xhc3MiLAogICAg\nICAgICAgICAgICAgImRhdGEiOiB7CiAgICAgICAgICAgICAgICAgICAgImVuZHBvaW50Ijogc2Vs\nZi5vdXRfbWFwWydSR1dfRU5EUE9JTlQnXSwKICAgICAgICAgICAgICAgICAgICAicG9vbFByZWZp\neCI6IHNlbGYub3V0X21hcFsnUkdXX1BPT0xfUFJFRklYJ10KICAgICAgICAgICAgICAgIH0KICAg\nICAgICAgICAgfSkKICAgICAgICByZXR1cm4ganNvbi5kdW1wcyhqc29uX291dCkrTElORVNFUAoK\nICAgIGRlZiBtYWluKHNlbGYpOgogICAgICAgIGdlbmVyYXRlZF9vdXRwdXQgPSAnJwogICAgICAg\nIGlmIHNlbGYuX2FyZ19wYXJzZXIuZm9ybWF0ID09ICdqc29uJzoKICAgICAgICAgICAgZ2VuZXJh\ndGVkX291dHB1dCA9IHNlbGYuZ2VuX2pzb25fb3V0KCkKICAgICAgICBlbGlmIHNlbGYuX2FyZ19w\nYXJzZXIuZm9ybWF0ID09ICdiYXNoJzoKICAgICAgICAgICAgZ2VuZXJhdGVkX291dHB1dCA9IHNl\nbGYuZ2VuX3NoZWxsX291dCgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmFpc2UgRXhlY3V0\naW9uRmFpbHVyZUV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQgZm9ybWF0OiB7fSIuZm9ybWF0KAogICAg\nICAgICAgICAgICAgc2VsZi5fYXJnX3BhcnNlci5mb3JtYXQpKQogICAgICAgIHByaW50KCd7fScu\nZm9ybWF0KGdlbmVyYXRlZF9vdXRwdXQpKQogICAgICAgIGlmIHNlbGYub3V0cHV0X2ZpbGUgYW5k\nIGdlbmVyYXRlZF9vdXRwdXQ6CiAgICAgICAgICAgIGZPdXQgPSBvcGVuKHNlbGYub3V0cHV0X2Zp\nbGUsICd3JykKICAgICAgICAgICAgZk91dC53cml0ZShnZW5lcmF0ZWRfb3V0cHV0KQogICAgICAg\nICAgICBmT3V0LmNsb3NlKCkKCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj\nIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE1BSU4gIyMjIyMjIyMjIyMjIyMjIyMj\nIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwppZiBf\nX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgcmpPYmogPSBSYWRvc0pTT04oKQogICAgdHJ5Ogog\nICAgICAgIHJqT2JqLm1haW4oKQogICAgZXhjZXB0IEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24g\nYXMgZXJyOgogICAgICAgIHByaW50KCJFeGNlY3V0aW9uIEZhaWxlZDoge30iLmZvcm1hdChlcnIp\nKQogICAgZXhjZXB0IEtleUVycm9yIGFzIGtFcnI6CiAgICAgICAgcHJpbnQoIktleUVycm9yOiAl\ncyIsIGtFcnIpCiAgICBleGNlcHQgT1NFcnJvciBhcyBvc0VycjoKICAgICAgICBwcmludCgiRXJy\nb3Igd2hpbGUgdHJ5aW5nIHRvIG91dHB1dCB0aGUgZGF0YToge30iLmZvcm1hdChvc0VycikpCiAg\nICBmaW5hbGx5OgogICAgICAgIHJqT2JqLnNodXRkb3duKCkKCgojIyMjIyMjIyMjIyMjIyMjIyMj\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFRFU1Qg\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj\nIyMjIyMjIyMjIyMjIwojIHRoaXMgaXMgbWFpbmx5IGZvciB0ZXN0aW5nIGFuZCBjb3VsZCBiZSB1\nc2VkIHdoZXJlICdyYWRvcycgaXMgbm90IGF2YWlsYWJsZQpjbGFzcyBEdW1teVJhZG9zKG9iamVj\ndCk6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5yZXR1cm5fdmFsID0gMAog\nICAgICAgIHNlbGYuZXJyX21lc3NhZ2UgPSAnJwogICAgICAgIHNlbGYuc3RhdGUgPSAnY29ubmVj\ndGVkJwogICAgICAgIHNlbGYuY21kX291dHB1dF9tYXAgPSB7fQogICAgICAgIHNlbGYuY21kX25h\nbWVzID0ge30KICAgICAgICBzZWxmLl9pbml0X2NtZF9vdXRwdXRfbWFwKCkKCiAgICBkZWYgX2lu\naXRfY21kX291dHB1dF9tYXAoc2VsZik6CiAgICAgICAgc2VsZi5jbWRfbmFtZXNbJ2ZzIGxzJ10g\nPSAnJyd7ImZvcm1hdCI6ICJqc29uIiwgInByZWZpeCI6ICJmcyBscyJ9JycnCiAgICAgICAgc2Vs\nZi5jbWRfbmFtZXNbJ3F1b3J1bV9zdGF0dXMnXSA9ICcnJ3siZm9ybWF0IjogImpzb24iLCAicHJl\nZml4IjogInF1b3J1bV9zdGF0dXMifScnJwogICAgICAgICMgYWxsIHRoZSBjb21tYW5kcyBhbmQg\ndGhlaXIgb3V0cHV0CiAgICAgICAgc2VsZi5jbWRfb3V0cHV0X21hcFtzZWxmLmNtZF9uYW1lc1sn\nZnMgbHMnXV0gPSBcCiAgICAgICAgICAgICcnJ1t7Im5hbWUiOiJteWZzIiwibWV0YWRhdGFfcG9v\nbCI6Im15ZnMtbWV0YWRhdGEiLCJtZXRhZGF0YV9wb29sX2lkIjoyLCJkYXRhX3Bvb2xfaWRzIjpb\nM10sImRhdGFfcG9vbHMiOlsibXlmcy1kYXRhMCJdfV0nJycKICAgICAgICBzZWxmLmNtZF9vdXRw\ndXRfbWFwW3NlbGYuY21kX25hbWVzWydxdW9ydW1fc3RhdHVzJ11dID0gXAogICAgICAgICAgICAn\nJyd7ImVsZWN0aW9uX2Vwb2NoIjozLCJxdW9ydW0iOlswXSwicXVvcnVtX25hbWVzIjpbImEiXSwi\ncXVvcnVtX2xlYWRlcl9uYW1lIjoiYSIsInF1b3J1bV9hZ2UiOjE0Mzg1LCJmZWF0dXJlcyI6eyJx\ndW9ydW1fY29uIjoiNDU0MDEzODI5MjgzNjY5NjA2MyIsInF1b3J1bV9tb24iOlsia3Jha2VuIiwi\nbHVtaW5vdXMiLCJtaW1pYyIsIm9zZG1hcC1wcnVuZSIsIm5hdXRpbHVzIiwib2N0b3B1cyJdfSwi\nbW9ubWFwIjp7ImVwb2NoIjoxLCJmc2lkIjoiYWY0ZTE2NzMtMGI3Mi00MDJkLTk5MGEtMjJkMjkx\nOWQwZjFjIiwibW9kaWZpZWQiOiIyMDIwLTA1LTA3VDAzOjM2OjM5LjkxODAzNVoiLCJjcmVhdGVk\nIjoiMjAyMC0wNS0wN1QwMzozNjozOS45MTgwMzVaIiwibWluX21vbl9yZWxlYXNlIjoxNSwibWlu\nX21vbl9yZWxlYXNlX25hbWUiOiJvY3RvcHVzIiwiZmVhdHVyZXMiOnsicGVyc2lzdGVudCI6WyJr\ncmFrZW4iLCJsdW1pbm91cyIsIm1pbWljIiwib3NkbWFwLXBydW5lIiwibmF1dGlsdXMiLCJvY3Rv\ncHVzIl0sIm9wdGlvbmFsIjpbXX0sIm1vbnMiOlt7InJhbmsiOjAsIm5hbWUiOiJhIiwicHVibGlj\nX2FkZHJzIjp7ImFkZHJ2ZWMiOlt7InR5cGUiOiJ2MiIsImFkZHIiOiIxMC4xMTAuMjA1LjE3NDoz\nMzAwIiwibm9uY2UiOjB9LHsidHlwZSI6InYxIiwiYWRkciI6IjEwLjExMC4yMDUuMTc0OjY3ODki\nLCJub25jZSI6MH1dfSwiYWRkciI6IjEwLjExMC4yMDUuMTc0OjY3ODkvMCIsInB1YmxpY19hZGRy\nIjoiMTAuMTEwLjIwNS4xNzQ6Njc4OS8wIiwicHJpb3JpdHkiOjAsIndlaWdodCI6MH1dfX0nJycK\nICAgICAgICBzZWxmLmNtZF9vdXRwdXRfbWFwWycnJ3siY2FwcyI6IFsibW9uIiwgImFsbG93IHIs\nIGFsbG93IGNvbW1hbmQgcXVvcnVtX3N0YXR1cyIsICJvc2QiLCAiYWxsb3cgcnd4IHBvb2w9ZGVm\nYXVsdC5yZ3cubWV0YSwgYWxsb3cgciBwb29sPS5yZ3cucm9vdCwgYWxsb3cgcncgcG9vbD1kZWZh\ndWx0LnJndy5jb250cm9sLCBhbGxvdyB4IHBvb2w9ZGVmYXVsdC5yZ3cuYnVja2V0cy5pbmRleCJd\nLCAiZW50aXR5IjogImNsaWVudC5oZWFsdGhjaGVja2VyIiwgImZvcm1hdCI6ICJqc29uIiwgInBy\nZWZpeCI6ICJhdXRoIGdldC1vci1jcmVhdGUifScnJ10gPSBcCiAgICAgICAgICAgICcnJ1t7ImVu\ndGl0eSI6ImNsaWVudC5oZWFsdGhjaGVja2VyIiwia2V5IjoiQVFERmtiTmVmdDViRlJBQVRuZExO\nVVNFS3J1b3p4aVppM2xyZEE9PSIsImNhcHMiOnsibW9uIjoiYWxsb3cgciwgYWxsb3cgY29tbWFu\nZCBxdW9ydW1fc3RhdHVzIiwib3NkIjoiYWxsb3cgcnd4IHBvb2w9ZGVmYXVsdC5yZ3cubWV0YSwg\nYWxsb3cgciBwb29sPS5yZ3cucm9vdCwgYWxsb3cgcncgcG9vbD1kZWZhdWx0LnJndy5jb250cm9s\nLCBhbGxvdyB4IHBvb2w9ZGVmYXVsdC5yZ3cuYnVja2V0cy5pbmRleCJ9fV0nJycKICAgICAgICBz\nZWxmLmNtZF9vdXRwdXRfbWFwWycnJ3siY2FwcyI6IFsibW9uIiwgInByb2ZpbGUgcmJkIiwgIm9z\nZCIsICJwcm9maWxlIHJiZCJdLCAiZW50aXR5IjogImNsaWVudC5jc2ktcmJkLW5vZGUiLCAiZm9y\nbWF0IjogImpzb24iLCAicHJlZml4IjogImF1dGggZ2V0LW9yLWNyZWF0ZSJ9JycnXSA9IFwKICAg\nICAgICAgICAgJycnW3siZW50aXR5IjoiY2xpZW50LmNzaS1yYmQtbm9kZSIsImtleSI6IkFRQk9n\nck5lSGJLMUF4QUF1YllCZVY4UzFVL0dQenE1U1ZlcTZnPT0iLCJjYXBzIjp7Im1vbiI6InByb2Zp\nbGUgcmJkIiwib3NkIjoicHJvZmlsZSByYmQifX1dJycnCiAgICAgICAgc2VsZi5jbWRfb3V0cHV0\nX21hcFsnJyd7ImNhcHMiOiBbIm1vbiIsICJwcm9maWxlIHJiZCIsICJtZ3IiLCAiYWxsb3cgcnci\nLCAib3NkIiwgInByb2ZpbGUgcmJkIl0sICJlbnRpdHkiOiAiY2xpZW50LmNzaS1yYmQtcHJvdmlz\naW9uZXIiLCAiZm9ybWF0IjogImpzb24iLCAicHJlZml4IjogImF1dGggZ2V0LW9yLWNyZWF0ZSJ9\nJycnXSA9IFwKICAgICAgICAgICAgJycnW3siZW50aXR5IjoiY2xpZW50LmNzaS1yYmQtcHJvdmlz\naW9uZXIiLCJrZXkiOiJBUUJOZ3JOZTFnZXlLeEFBOGVrVmlSZEUraHNzNU93ZVlCa3dOZz09Iiwi\nY2FwcyI6eyJtZ3IiOiJhbGxvdyBydyIsIm1vbiI6InByb2ZpbGUgcmJkIiwib3NkIjoicHJvZmls\nZSByYmQifX1dJycnCiAgICAgICAgc2VsZi5jbWRfb3V0cHV0X21hcFsnJyd7ImNhcHMiOiBbIm1v\nbiIsICJhbGxvdyByIiwgIm1nciIsICJhbGxvdyBydyIsICJvc2QiLCAiYWxsb3cgcncgdGFnIGNl\ncGhmcyAqPSoiLCAibWRzIiwgImFsbG93IHJ3Il0sICJlbnRpdHkiOiAiY2xpZW50LmNzaS1jZXBo\nZnMtbm9kZSIsICJmb3JtYXQiOiAianNvbiIsICJwcmVmaXgiOiAiYXV0aCBnZXQtb3ItY3JlYXRl\nIn0nJyddID0gXAogICAgICAgICAgICAnJydbeyJlbnRpdHkiOiJjbGllbnQuY3NpLWNlcGhmcy1u\nb2RlIiwia2V5IjoiQVFCT2dyTmVFTnVuS3hBQVBDbWdFN1I2RzhEY1huYUoxRjMycWc9PSIsImNh\ncHMiOnsibWRzIjoiYWxsb3cgcnciLCJtZ3IiOiJhbGxvdyBydyIsIm1vbiI6ImFsbG93IHIiLCJv\nc2QiOiJhbGxvdyBydyB0YWcgY2VwaGZzICo9KiJ9fV0nJycKICAgICAgICBzZWxmLmNtZF9vdXRw\ndXRfbWFwWycnJ3siY2FwcyI6IFsibW9uIiwgImFsbG93IHIiLCAibWdyIiwgImFsbG93IHJ3Iiwg\nIm9zZCIsICJhbGxvdyBydyB0YWcgY2VwaGZzIG1ldGFkYXRhPSoiXSwgImVudGl0eSI6ICJjbGll\nbnQuY3NpLWNlcGhmcy1wcm92aXNpb25lciIsICJmb3JtYXQiOiAianNvbiIsICJwcmVmaXgiOiAi\nYXV0aCBnZXQtb3ItY3JlYXRlIn0nJyddID0gXAogICAgICAgICAgICAnJydbeyJlbnRpdHkiOiJj\nbGllbnQuY3NpLWNlcGhmcy1wcm92aXNpb25lciIsImtleSI6IkFRQk9nck5lQUZnY0dCQUF2R3FL\nT0FEMEQzeHhtVlkwUjkxMmRnPT0iLCJjYXBzIjp7Im1nciI6ImFsbG93IHJ3IiwibW9uIjoiYWxs\nb3cgciIsIm9zZCI6ImFsbG93IHJ3IHRhZyBjZXBoZnMgbWV0YWRhdGE9KiJ9fV0nJycKCiAgICBk\nZWYgc2h1dGRvd24oc2VsZik6CiAgICAgICAgcGFzcwoKICAgIGRlZiBnZXRfZnNpZChzZWxmKToK\nICAgICAgICByZXR1cm4gJ2FmNGUxNjczLTBiNzItNDAyZC05OTBhLTIyZDI5MTlkMGYxYycKCiAg\nICBkZWYgY29uZl9yZWFkX2ZpbGUoc2VsZik6CiAgICAgICAgcGFzcwoKICAgIGRlZiBjb25uZWN0\nKHNlbGYpOgogICAgICAgIHBhc3MKCiAgICBkZWYgbW9uX2NvbW1hbmQoc2VsZiwgY21kLCBvdXQp\nOgogICAgICAgIGpzb25fY21kID0ganNvbi5sb2FkcyhjbWQpCiAgICAgICAganNvbl9jbWRfc3Ry\nID0ganNvbi5kdW1wcyhqc29uX2NtZCwgc29ydF9rZXlzPVRydWUpCiAgICAgICAgY21kX291dHB1\ndCA9IHNlbGYuY21kX291dHB1dF9tYXBbanNvbl9jbWRfc3RyXQogICAgICAgIHJldHVybiBzZWxm\nLnJldHVybl92YWwsIFwKICAgICAgICAgICAgY21kX291dHB1dCwgXAogICAgICAgICAgICAie30i\nLmZvcm1hdChzZWxmLmVycl9tZXNzYWdlKS5lbmNvZGUoJ3V0Zi04JykKCiAgICBAY2xhc3NtZXRo\nb2QKICAgIGRlZiBSYWRvcyhjb25mZmlsZT1Ob25lKToKICAgICAgICByZXR1cm4gRHVtbXlSYWRv\ncygpCgoKIyBpbm9yZGVyIHRvIHRlc3QgdGhlIHBhY2thZ2UsCiMgY2QgPHNjcmlwdF9kaXJlY3Rv\ncnk+CiMgcHl0aG9uIC1tIHVuaXR0ZXN0IC0tdmVyYm9zZSA8c2NyaXB0X25hbWVfd2l0aG91dF9k\nb3RfcHk+CmNsYXNzIFRlc3RSYWRvc0pTT04odW5pdHRlc3QuVGVzdENhc2UpOgogICAgZGVmIHNl\ndFVwKHNlbGYpOgogICAgICAgIHByaW50KCJ7fSIuZm9ybWF0KCJJIGFtIGluIHNldHVwIikpCiAg\nICAgICAgc2VsZi5yak9iaiA9IFJhZG9zSlNPTihbJy0tcmJkLWRhdGEtcG9vbC1uYW1lPWFiYycs\nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tcmd3LWVuZHBvaW50PTEwLjEwLjIx\nMi4xMjI6OTAwMCcsICctLWZvcm1hdD1qc29uJ10pCiAgICAgICAgIyBmb3IgdGVzdGluZywgd2Ug\nYXJlIHVzaW5nICdEdW1teVJhZG9zJyBvYmplY3QKICAgICAgICBzZWxmLnJqT2JqLmNsdXN0ZXIg\nPSBEdW1teVJhZG9zLlJhZG9zKCkKCiAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgcHJp\nbnQoInt9Ii5mb3JtYXQoIkkgYW0gdGVhcmluZyBkb3duIHRoZSBzZXR1cCIpKQogICAgICAgIHNl\nbGYucmpPYmouc2h1dGRvd24oKQoKICAgIGRlZiB0ZXN0X21ldGhvZF9tYWluX291dHB1dChzZWxm\nKToKICAgICAgICBwcmludCgiSlNPTiBPdXRwdXQiKQogICAgICAgIHNlbGYucmpPYmouX2FyZ19w\nYXJzZXIuZm9ybWF0ID0gImpzb24iCiAgICAgICAgc2VsZi5yak9iai5tYWluKCkKICAgICAgICBw\ncmludCgiXG5cblNoZWxsIE91dHB1dCIpCiAgICAgICAgc2VsZi5yak9iai5fYXJnX3BhcnNlci5m\nb3JtYXQgPSAiYmFzaCIKICAgICAgICBzZWxmLnJqT2JqLm1haW4oKQogICAgICAgIHByaW50KCJc\nblxuTm9uIGNvbXBhdGlibGUgb3V0cHV0ICgtLWFiY2QpIikKICAgICAgICB0cnk6CiAgICAgICAg\nICAgIHNlbGYucmpPYmouX2FyZ19wYXJzZXIuZm9ybWF0ID0gJ2FiY2QnCiAgICAgICAgICAgIHNl\nbGYucmpPYmoubWFpbigpCiAgICAgICAgICAgIHNlbGYuZmFpbCgiRnVuY3Rpb24gc2hvdWxkIGhh\ndmUgdGhyb3duIGFuIEV4Y2VwdGlvbiIpCiAgICAgICAgZXhjZXB0IEV4ZWN1dGlvbkZhaWx1cmVF\neGNlcHRpb24gYXMgZXJyOgogICAgICAgICAgICBwcmludCgiRXhjZXB0aW9uIHRocm93biBzdWNj\nZXNzZnVsbHk6IHt9Ii5mb3JtYXQoZXJyKSkKCiAgICBkZWYgdGVzdF9tZXRob2RfY3JlYXRlX2Nl\ncGhDU0lLZXlyaW5nX2NlcGhGU1Byb3Zpc2lvbmVyKHNlbGYpOgogICAgICAgIGNzaUtleXJpbmcg\nPSBzZWxmLnJqT2JqLmNyZWF0ZV9jZXBoQ1NJS2V5cmluZ19jZXBoRlNQcm92aXNpb25lcigpCiAg\nICAgICAgcHJpbnQoInt9Ii5mb3JtYXQoY3NpS2V5cmluZykpCgogICAgZGVmIHRlc3Rfbm9uX3pl\ncm9fcmV0dXJuX2FuZF9lcnJvcihzZWxmKToKICAgICAgICBzZWxmLnJqT2JqLmNsdXN0ZXIucmV0\ndXJuX3ZhbCA9IDEKICAgICAgICBzZWxmLnJqT2JqLmNsdXN0ZXIuZXJyX21lc3NhZ2UgPSAiRHVt\nbXkgRXJyb3IiCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLnJqT2JqLmNyZWF0ZV9jaGVj\na2VyS2V5KCkKICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgYW4gZXhjZXB0\naW9uLCAnRXhlY3V0aW9uRmFpbHVyZUV4Y2VwdGlvbiciKQogICAgICAgIGV4Y2VwdCBFeGVjdXRp\nb25GYWlsdXJlRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3NmdWxs\neSB0aHJvd24gZXJyb3IuXG5FcnJvcjoge30iLmZvcm1hdChlcnIpKQoKICAgIGRlZiB0ZXN0X211\nbHRpX2ZpbGVzeXN0ZW1fc2NlbmFyaW8oc2VsZik6CiAgICAgICAgY21kX2tleSA9IHNlbGYucmpP\nYmouY2x1c3Rlci5jbWRfbmFtZXNbJ2ZzIGxzJ10KICAgICAgICBjbWRfb3V0ID0gc2VsZi5yak9i\nai5jbHVzdGVyLmNtZF9vdXRwdXRfbWFwW2NtZF9rZXldCiAgICAgICAgY21kX2pzb25fb3V0ID0g\nanNvbi5sb2FkcyhjbWRfb3V0KQogICAgICAgIHNlY29uZF9mc19kZXRhaWxzID0gZGljdChjbWRf\nanNvbl9vdXRbMF0pCiAgICAgICAgc2Vjb25kX2ZzX2RldGFpbHNbJ25hbWUnXSArPSAnLTInCiAg\nICAgICAgY21kX2pzb25fb3V0LmFwcGVuZChzZWNvbmRfZnNfZGV0YWlscykKICAgICAgICBzZWxm\nLnJqT2JqLmNsdXN0ZXIuY21kX291dHB1dF9tYXBbY21kX2tleV0gPSBqc29uLmR1bXBzKGNtZF9q\nc29uX291dCkKICAgICAgICAjIG11bHRpcGxlIGZpbGVzeXN0ZW0gcHJlc2VudCwKICAgICAgICAj\nIGJ1dCBubyBzcGVjaWZpYyAnLS1jZXBoZnMtZmlsZXN5c3RlbS1uYW1lJyBhcmd1bWVudCBwcm92\naWRlZAogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi5yak9iai5nZXRfY2VwaGZzX2RhdGFf\ncG9vbF9kZXRhaWxzKCkKICAgICAgICAgICAgc2VsZi5mYWlsKCJBbiBFeGNlcHRpb24gd2FzIGV4\ncGVjdGVkIHRvIGJlIHRocm93biIpCiAgICAgICAgZXhjZXB0IEV4ZWN1dGlvbkZhaWx1cmVFeGNl\ncHRpb24gYXMgZXJyOgogICAgICAgICAgICBwcmludCgiU3VjY2Vzc2Z1bGx5IHRocm93biBlcnJv\ncjoge30iLmZvcm1hdChlcnIpKQogICAgICAgICMgcGFzcyBhbiBleGlzdGluZyBmaWxlc3lzdGVt\nIG5hbWUKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYucmpPYmouX2FyZ19wYXJzZXIuY2Vw\naGZzX2ZpbGVzeXN0ZW1fbmFtZSA9IHNlY29uZF9mc19kZXRhaWxzWyduYW1lJ10KICAgICAgICAg\nICAgc2VsZi5yak9iai5nZXRfY2VwaGZzX2RhdGFfcG9vbF9kZXRhaWxzKCkKICAgICAgICBleGNl\ncHQgRXhlY3V0aW9uRmFpbHVyZUV4Y2VwdGlvbiBhcyBlcnI6CiAgICAgICAgICAgIHNlbGYuZmFp\nbCgiU2hvdWxkIG5vdCBoYXZlIHRocm93biBlcnJvcjoge30iLmZvcm1hdChlcnIpKQogICAgICAg\nICMgcGFzcyBhIG5vbi1leGlzdGluZyBmaWxlc3lzdGVtIG5hbWUKICAgICAgICB0cnk6CiAgICAg\nICAgICAgIHNlbGYucmpPYmouX2FyZ19wYXJzZXIuY2VwaGZzX2ZpbGVzeXN0ZW1fbmFtZSArPSAi\nLW5vbi1leGlzdGluZy1mcy1uYW1lIgogICAgICAgICAgICBzZWxmLnJqT2JqLmdldF9jZXBoZnNf\nZGF0YV9wb29sX2RldGFpbHMoKQogICAgICAgICAgICBzZWxmLmZhaWwoIkFuIEV4Y2VwdGlvbiB3\nYXMgZXhwZWN0ZWQgdG8gYmUgdGhyb3duIikKICAgICAgICBleGNlcHQgRXhlY3V0aW9uRmFpbHVy\nZUV4Y2VwdGlvbiBhcyBlcnI6CiAgICAgICAgICAgIHByaW50KCJTdWNjZXNzZnVsbHkgdGhyb3du\nIGVycm9yOiB7fSIuZm9ybWF0KGVycikpCiAgICAgICAgIyBlbXB0eSBmaWxlLXN5c3RlbSBhcnJh\neQogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi5yak9iai5jbHVzdGVyLmNtZF9vdXRwdXRf\nbWFwW2NtZF9rZXldID0ganNvbi5kdW1wcyhbXSkKICAgICAgICAgICAgc2VsZi5yak9iai5nZXRf\nY2VwaGZzX2RhdGFfcG9vbF9kZXRhaWxzKCkKICAgICAgICAgICAgc2VsZi5mYWlsKCJBbiBFeGNl\ncHRpb24gd2FzIGV4cGVjdGVkIHRvIGJlIHRocm93biIpCiAgICAgICAgZXhjZXB0IEV4ZWN1dGlv\nbkZhaWx1cmVFeGNlcHRpb24gYXMgZXJyOgogICAgICAgICAgICBwcmludCgiU3VjY2Vzc2Z1bGx5\nIHRocm93biBlcnJvcjoge30iLmZvcm1hdChlcnIpKQoKICAgIGRlZiB0ZXN0X211bHRpX2RhdGFf\ncG9vbF9zY2VuYXJpbyhzZWxmKToKICAgICAgICBjbWRfa2V5ID0gc2VsZi5yak9iai5jbHVzdGVy\nLmNtZF9uYW1lc1snZnMgbHMnXQogICAgICAgIGNtZF9vdXQgPSBzZWxmLnJqT2JqLmNsdXN0ZXIu\nY21kX291dHB1dF9tYXBbY21kX2tleV0KICAgICAgICBjbWRfanNvbl9vdXQgPSBqc29uLmxvYWRz\nKGNtZF9vdXQpCiAgICAgICAgZmlyc3RfZnNfZGV0YWlscyA9IGNtZF9qc29uX291dFswXQogICAg\nICAgIG5ld19kYXRhX3Bvb2xfbmFtZSA9ICdteWZzLWRhdGExJwogICAgICAgIGZpcnN0X2ZzX2Rl\ndGFpbHNbJ2RhdGFfcG9vbHMnXS5hcHBlbmQobmV3X2RhdGFfcG9vbF9uYW1lKQogICAgICAgIHBy\naW50KCJNb2RpZmllZCBKU09OIENtZCBPdXQ6IHt9Ii5mb3JtYXQoY21kX2pzb25fb3V0KSkKICAg\nICAgICBzZWxmLnJqT2JqLl9hcmdfcGFyc2VyLmNlcGhmc19kYXRhX3Bvb2xfbmFtZSA9IG5ld19k\nYXRhX3Bvb2xfbmFtZQogICAgICAgIHNlbGYucmpPYmouY2x1c3Rlci5jbWRfb3V0cHV0X21hcFtj\nbWRfa2V5XSA9IGpzb24uZHVtcHMoY21kX2pzb25fb3V0KQogICAgICAgIHNlbGYucmpPYmouZ2V0\nX2NlcGhmc19kYXRhX3Bvb2xfZGV0YWlscygpCiAgICAgICAgIyB1c2UgYSBub24tZXhpc3Rpbmcg\nZGF0YS1wb29sLW5hbWUKICAgICAgICBiYWRfZGF0YV9wb29sX25hbWUgPSAnbXlmcy1kYXRhMycK\nICAgICAgICBzZWxmLnJqT2JqLl9hcmdfcGFyc2VyLmNlcGhmc19kYXRhX3Bvb2xfbmFtZSA9IGJh\nZF9kYXRhX3Bvb2xfbmFtZQogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi5yak9iai5nZXRf\nY2VwaGZzX2RhdGFfcG9vbF9kZXRhaWxzKCkKICAgICAgICAgICAgc2VsZi5mYWlsKCJBbiBFeGNl\ncHRpb24gd2FzIGV4cGVjdGVkIHRvIGJlIHRocm93biIpCiAgICAgICAgZXhjZXB0IEV4ZWN1dGlv\nbkZhaWx1cmVFeGNlcHRpb24gYXMgZXJyOgogICAgICAgICAgICBwcmludCgiU3VjY2Vzc2Z1bGx5\nIHRocm93biBlcnJvcjoge30iLmZvcm1hdChlcnIpKQogICAgICAgICMgZW1wdHkgZGF0YS1wb29s\nIHNjZW5hcmlvCiAgICAgICAgZmlyc3RfZnNfZGV0YWlsc1snZGF0YV9wb29scyddID0gW10KICAg\nICAgICBzZWxmLnJqT2JqLmNsdXN0ZXIuY21kX291dHB1dF9tYXBbY21kX2tleV0gPSBqc29uLmR1\nbXBzKGNtZF9qc29uX291dCkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYucmpPYmouZ2V0\nX2NlcGhmc19kYXRhX3Bvb2xfZGV0YWlscygpCiAgICAgICAgICAgIHNlbGYuZmFpbCgiQW4gRXhj\nZXB0aW9uIHdhcyBleHBlY3RlZCB0byBiZSB0aHJvd24iKQogICAgICAgIGV4Y2VwdCBFeGVjdXRp\nb25GYWlsdXJlRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3NmdWxs\neSB0aHJvd24gZXJyb3I6IHt9Ii5mb3JtYXQoZXJyKSkKCiAgICBkZWYgdGVzdF92YWxpZF9yZ3df\nZW5kcG9pbnQoc2VsZik6CiAgICAgICAgc2VsZi5yak9iai5faW52YWxpZF9lbmRwb2ludCgiMTAu\nMTAuMjEyLjEzMzo4MDAwIikKICAgICAgICAjIGludmFsaWQgcG9ydAogICAgICAgIHRyeToKICAg\nICAgICAgICAgc2VsZi5yak9iai5faW52YWxpZF9lbmRwb2ludCgiMTAuMTAuMjEyLjEzMzoyMzgw\nMDAiKQogICAgICAgICAgICBzZWxmLmZhaWwoIkFuIEV4Y2VwdGlvbiB3YXMgZXhwZWN0ZWQgdG8g\nYmUgdGhyb3duIikKICAgICAgICBleGNlcHQgRXhlY3V0aW9uRmFpbHVyZUV4Y2VwdGlvbiBhcyBl\ncnI6CiAgICAgICAgICAgIHByaW50KCJTdWNjZXNzZnVsbHkgdGhyb3duIGVycm9yOiB7fSIuZm9y\nbWF0KGVycikpCiAgICAgICAgIyBvdXQgb2YgcmFuZ2UgSVAKICAgICAgICB0cnk6CiAgICAgICAg\nICAgIHNlbGYucmpPYmouX2ludmFsaWRfZW5kcG9pbnQoIjEwLjEwMzMuMjEyLjEzMzo4MDAwIikK\nICAgICAgICAgICAgc2VsZi5mYWlsKCJBbiBFeGNlcHRpb24gd2FzIGV4cGVjdGVkIHRvIGJlIHRo\ncm93biIpCiAgICAgICAgZXhjZXB0IEV4ZWN1dGlvbkZhaWx1cmVFeGNlcHRpb24gYXMgZXJyOgog\nICAgICAgICAgICBwcmludCgiU3VjY2Vzc2Z1bGx5IHRocm93biBlcnJvcjoge30iLmZvcm1hdChl\ncnIpKQogICAgICAgICMgbWFsIGZvcm1hdHRlZCBJUAogICAgICAgIHRyeToKICAgICAgICAgICAg\nc2VsZi5yak9iai5faW52YWxpZF9lbmRwb2ludCgiMTAuMTAzLi4yMTIuMTMzOjgwMDAiKQogICAg\nICAgICAgICBzZWxmLmZhaWwoIkFuIEV4Y2VwdGlvbiB3YXMgZXhwZWN0ZWQgdG8gYmUgdGhyb3du\nIikKICAgICAgICBleGNlcHQgRXhlY3V0aW9uRmFpbHVyZUV4Y2VwdGlvbiBhcyBlcnI6CiAgICAg\nICAgICAgIHByaW50KCJTdWNjZXNzZnVsbHkgdGhyb3duIGVycm9yOiB7fSIuZm9ybWF0KGVycikp\nCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLnJqT2JqLl9pbnZhbGlkX2VuZHBvaW50KCIx\nMC4xMDMuMjEyLjEzMzo6ODAwMCIpCiAgICAgICAgICAgIHNlbGYuZmFpbCgiQW4gRXhjZXB0aW9u\nIHdhcyBleHBlY3RlZCB0byBiZSB0aHJvd24iKQogICAgICAgIGV4Y2VwdCBFeGVjdXRpb25GYWls\ndXJlRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3NmdWxseSB0aHJv\nd24gZXJyb3I6IHt9Ii5mb3JtYXQoZXJyKSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYu\ncmpPYmouX2ludmFsaWRfZW5kcG9pbnQoIjEwLjEwLjEwMy4yMTIuMTMzOjgwMDAiKQogICAgICAg\nICAgICBzZWxmLmZhaWwoIkFuIEV4Y2VwdGlvbiB3YXMgZXhwZWN0ZWQgdG8gYmUgdGhyb3duIikK\nICAgICAgICBleGNlcHQgRXhlY3V0aW9uRmFpbHVyZUV4Y2VwdGlvbiBhcyBlcnI6CiAgICAgICAg\nICAgIHByaW50KCJTdWNjZXNzZnVsbHkgdGhyb3duIGVycm9yOiB7fSIuZm9ybWF0KGVycikpCg==","external.features.ocs.openshift.io/validation":"{\"secrets\":[\"rook-ceph-operator-creds\", \"rook-csi-rbd-node\", \"rook-csi-rbd-provisioner\"], \"configMaps\": [\"rook-ceph-mon-endpoints\", \"rook-ceph-mon\"], \"storageClasses\": [\"ceph-rbd\"]}","features.ocs.openshift.io/enabled":"[\"external\"]","olm.skipRange":"\u003e=4.2.0 \u003c4.5.0","operatorframework.io/cluster-monitoring":"true","operatorframework.io/suggested-namespace":"openshift-storage","operators.operatorframework.io/internal-objects":"[\"cephclusters.ceph.rook.io\", \"cephblockpools.ceph.rook.io\", \"cephobjectstores.ceph.rook.io\", \"cephobjectstoreusers.ceph.rook.io\", \"cephnfses.ceph.rook.io\",\"cephclients.ceph.rook.io\", \"noobaas.noobaa.io\", \"objectbuckets.objectbucket.io\",\"objectbucketclaims.objectbucket.io\",\"ocsinitializations.ocs.openshift.io\", \"storageclusterinitializations.ocs.openshift.io\", \"cephfilesystems.ceph.rook.io\"]","repository":"https://github.com/openshift/ocs-operator","support":"Red Hat"}},"spec":{"install":{"strategy":"deployment","spec":{"deployments":[{"name":"ocs-operator","spec":{"replicas":1,"selector":{"matchLabels":{"name":"ocs-operator"}},"template":{"metadata":{"creationTimestamp":null,"labels":{"name":"ocs-operator"}},"spec":{"containers":[{"name":"ocs-operator","image":"registry.redhat.io/ocs4/ocs-rhel8-operator@sha256:c25588a88c8a1595069c1a76bc845ef55e543017bb6fb1b8f728da94579f8902","command":["ocs-operator"],"ports":[{"name":"metrics","containerPort":60000}],"env":[{"name":"WATCH_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.annotations['olm.targetNamespaces']"}}},{"name":"POD_NAME","valueFrom":{"fieldRef":{"fieldPath":"metadata.name"}}},{"name":"OPERATOR_NAME","value":"ocs-operator"},{"name":"ROOK_CEPH_IMAGE","value":"registry.redhat.io/ocs4/rook-ceph-rhel8-operator@sha256:95b31d3e0bebf4f27b42f25fdde1fd06098ccfc833f20e3b9fe2ca7fb11bc104"},{"name":"CEPH_IMAGE","value":"registry.redhat.io/rhceph/rhceph-4-rhel8@sha256:eafd1acb0ada5d7cf93699056118aca19ed7a22e4938411d307ef94048746cc8"},{"name":"NOOBAA_CORE_IMAGE","value":"registry.redhat.io/ocs4/mcg-core-rhel8@sha256:71757f0e1ac6b4092ff2ceb0e642424e6f99b7824f352d72846ecf88f45a5fe2"},{"name":"NOOBAA_DB_IMAGE","value":"registry.redhat.io/rhscl/mongodb-36-rhel7@sha256:ba74027bb4b244df0b0823ee29aa927d729da33edaa20ebdf51a2430cc6b4e95"}],"resources":{},"readinessProbe":{"exec":{"command":["stat","/tmp/operator-sdk-ready"]},"initialDelaySeconds":4,"periodSeconds":10,"failureThreshold":1},"imagePullPolicy":"Always"}],"serviceAccountName":"ocs-operator","tolerations":[{"key":"node.ocs.openshift.io/storage","operator":"Equal","value":"true","effect":"NoSchedule"}]}},"strategy":{"type":"Recreate"}}},{"name":"rook-ceph-operator","spec":{"replicas":1,"selector":{"matchLabels":{"app":"rook-ceph-operator"}},"template":{"metadata":{"creationTimestamp":null,"labels":{"app":"rook-ceph-operator"}},"spec":{"volumes":[{"name":"rook-config","emptyDir":{}},{"name":"default-config-dir","emptyDir":{}}],"containers":[{"name":"rook-ceph-operator","image":"registry.redhat.io/ocs4/rook-ceph-rhel8-operator@sha256:95b31d3e0bebf4f27b42f25fdde1fd06098ccfc833f20e3b9fe2ca7fb11bc104","args":["ceph","operator"],"env":[{"name":"ROOK_CURRENT_NAMESPACE_ONLY","value":"true"},{"name":"ROOK_ALLOW_MULTIPLE_FILESYSTEMS","value":"false"},{"name":"ROOK_LOG_LEVEL","value":"INFO"},{"name":"ROOK_CEPH_STATUS_CHECK_INTERVAL","value":"60s"},{"name":"ROOK_MON_HEALTHCHECK_INTERVAL","value":"45s"},{"name":"ROOK_MON_OUT_TIMEOUT","value":"600s"},{"name":"ROOK_DISCOVER_DEVICES_INTERVAL","value":"60m"},{"name":"ROOK_HOSTPATH_REQUIRES_PRIVILEGED","value":"true"},{"name":"ROOK_ENABLE_SELINUX_RELABELING","value":"true"},{"name":"ROOK_ENABLE_FSGROUP","value":"true"},{"name":"ROOK_ENABLE_FLEX_DRIVER","value":"false"},{"name":"ROOK_ENABLE_DISCOVERY_DAEMON","value":"false"},{"name":"ROOK_ENABLE_MACHINE_DISRUPTION_BUDGET","value":"false"},{"name":"ROOK_DISABLE_DEVICE_HOTPLUG","value":"true"},{"name":"ROOK_CSI_ALLOW_UNSUPPORTED_VERSION","value":"true"},{"name":"CSI_PROVISIONER_TOLERATIONS","value":"\n- key: node.ocs.openshift.io/storage\n  operator: Equal\n  value: \"true\"\n  effect: NoSchedule"},{"name":"CSI_PLUGIN_TOLERATIONS","value":"\n- key: node.ocs.openshift.io/storage\n  operator: Equal\n  value: \"true\"\n  effect: NoSchedule"},{"name":"NODE_NAME","valueFrom":{"fieldRef":{"fieldPath":"spec.nodeName"}}},{"name":"POD_NAME","valueFrom":{"fieldRef":{"fieldPath":"metadata.name"}}},{"name":"POD_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}},{"name":"CSI_ENABLE_SNAPSHOTTER","value":"false"},{"name":"ROOK_OBC_WATCH_OPERATOR_NAMESPACE","value":"true"},{"name":"ROOK_CSI_CEPH_IMAGE","value":"registry.redhat.io/ocs4/cephcsi-rhel8@sha256:132d85ceeee09136f1f2048bd5f85cbb53e6b697a9f50557d05bb63959386bcd"},{"name":"ROOK_CSI_REGISTRAR_IMAGE","value":"registry.redhat.io/openshift4/ose-csi-driver-registrar@sha256:7a814c6d75c1dd7eb67977cacca379184b54750151dcd9ff698d7852263fbc9f"},{"name":"ROOK_CSI_RESIZER_IMAGE","value":"registry.redhat.io/openshift4/ose-csi-external-resizer-rhel7@sha256:279a12fb2095c7c7f7429135317c53a3f821d6a5a7b89b2f49fc4f84d5cfba42"},{"name":"ROOK_CSI_PROVISIONER_IMAGE","value":"registry.redhat.io/openshift4/ose-csi-external-provisioner-rhel7@sha256:69798ba68baf4d14a755a5f581e54a4c18ca3022d8a7e1e10f651ba2f8a0a597"},{"name":"ROOK_CSI_ATTACHER_IMAGE","value":"registry.redhat.io/openshift4/ose-csi-external-attacher@sha256:db168e03ea39c90691497b4755e231f7ac9bc1a767ed776c02165e2cf509f0b2"}],"resources":{},"volumeMounts":[{"name":"rook-config","mountPath":"/var/lib/rook"},{"name":"default-config-dir","mountPath":"/etc/ceph"}]}],"serviceAccountName":"rook-ceph-system","tolerations":[{"key":"node.ocs.openshift.io/storage","operator":"Equal","value":"true","effect":"NoSchedule"}]}},"strategy":{}}},{"name":"noobaa-operator","spec":{"replicas":1,"selector":{"matchLabels":{"noobaa-operator":"deployment"}},"template":{"metadata":{"creationTimestamp":null,"labels":{"app":"noobaa","noobaa-operator":"deployment"}},"spec":{"containers":[{"name":"noobaa-operator","image":"registry.redhat.io/ocs4/mcg-rhel8-operator@sha256:2cc0c9247ea1f1df0d3c930216d8c4880485033330beddb922c45132ff795169","env":[{"name":"OPERATOR_NAME","value":"noobaa-operator"},{"name":"POD_NAME","valueFrom":{"fieldRef":{"fieldPath":"metadata.name"}}},{"name":"WATCH_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}},{"name":"NOOBAA_CORE_IMAGE","value":"registry.redhat.io/ocs4/mcg-core-rhel8@sha256:71757f0e1ac6b4092ff2ceb0e642424e6f99b7824f352d72846ecf88f45a5fe2"},{"name":"NOOBAA_DB_IMAGE","value":"registry.redhat.io/rhscl/mongodb-36-rhel7@sha256:ba74027bb4b244df0b0823ee29aa927d729da33edaa20ebdf51a2430cc6b4e95"}],"resources":{"limits":{"cpu":"250m","memory":"512Mi"}}}],"serviceAccountName":"noobaa","tolerations":[{"key":"node.ocs.openshift.io/storage","operator":"Equal","value":"true","effect":"NoSchedule"}]}},"strategy":{}}}],"permissions":[{"serviceAccountName":"rook-ceph-system","rules":[{"verbs":["get","list","watch","patch","create","update","delete"],"apiGroups":[""],"resources":["pods","configmaps","services"]},{"verbs":["get","list","watch","create","update","delete"],"apiGroups":["apps","extensions"],"resources":["daemonsets","statefulsets","deployments"]},{"verbs":["get"],"apiGroups":["k8s.cni.cncf.io"],"resources":["network-attachment-definitions"]}]},{"serviceAccountName":"rook-ceph-osd","rules":[{"verbs":["get","list","watch","create","update","delete"],"apiGroups":[""],"resources":["configmaps"]},{"verbs":["get","list","create","update","delete"],"apiGroups":["ceph.rook.io"],"resources":["cephclusters","cephclusters/finalizers"]}]},{"serviceAccountName":"rook-ceph-mgr","rules":[{"verbs":["get","list","watch","delete"],"apiGroups":[""],"resources":["pods","services","pods/log"]},{"verbs":["get","list","watch","create","update","delete"],"apiGroups":["batch"],"resources":["jobs"]},{"verbs":["*"],"apiGroups":["ceph.rook.io"],"resources":["*"]}]},{"serviceAccountName":"rook-csi-cephfs-provisioner-sa","rules":[{"verbs":["get","watch","list","delete","update","create"],"apiGroups":[""],"resources":["endpoints"]},{"verbs":["get","list","create","delete"],"apiGroups":[""],"resources":["configmaps"]},{"verbs":["get","watch","list","delete","update","create"],"apiGroups":["coordination.k8s.io"],"resources":["leases"]}]},{"serviceAccountName":"rook-csi-rbd-provisioner-sa","rules":[{"verbs":["get","watch","list","delete","update","create"],"apiGroups":[""],"resources":["endpoints"]},{"verbs":["get","list","watch","create","delete"],"apiGroups":[""],"resources":["configmaps"]},{"verbs":["get","watch","list","delete","update","create"],"apiGroups":["coordination.k8s.io"],"resources":["leases"]}]},{"serviceAccountName":"rook-ceph-cmd-reporter","rules":[{"verbs":["get","list","watch","create","update","delete"],"apiGroups":[""],"resources":["pods","configmaps"]}]},{"serviceAccountName":"noobaa","rules":[{"verbs":["*"],"apiGroups":["noobaa.io"],"resources":["*","noobaas","backingstores","bucketclasses","noobaas/finalizers","backingstores/finalizers","bucketclasses/finalizers"]},{"verbs":["*"],"apiGroups":[""],"resources":["pods","services","endpoints","persistentvolumeclaims","events","configmaps","secrets","serviceaccounts"]},{"verbs":["*"],"apiGroups":["apps"],"resources":["deployments","daemonsets","replicasets","statefulsets"]},{"verbs":["get","create","update","list","watch"],"apiGroups":["monitoring.coreos.com"],"resources":["servicemonitors","prometheusrules"]},{"verbs":["update"],"apiGroups":[""],"resources":["services/finalizers"]},{"verbs":["update"],"apiGroups":["apps"],"resources":["deployments/finalizers"],"resourceNames":["noobaa-operator"]},{"verbs":["get","create","update","list","watch"],"apiGroups":["cloudcredential.openshift.io"],"resources":["credentialsrequests"]},{"verbs":["get","list","watch"],"apiGroups":["ceph.rook.io"],"resources":["cephobjectstores"]},{"verbs":["get","create","update","list","watch"],"apiGroups":["ceph.rook.io"],"resources":["cephobjectstoreusers"]},{"verbs":["get","create","update","list","watch"],"apiGroups":["route.openshift.io"],"resources":["routes"]},{"verbs":["get","create","update","patch","list","watch"],"apiGroups":["autoscaling"],"resources":["horizontalpodautoscalers"]}]}],"clusterPermissions":[{"serviceAccountName":"ocs-operator","rules":[{"verbs":["get","list","watch","create","update","delete"],"apiGroups":["storage.k8s.io"],"resources":["storageclasses"]},{"verbs":["*"],"apiGroups":[""],"resources":["pods","services","endpoints","persistentvolumeclaims","events","configmaps","secrets","nodes"]},{"verbs":["get"],"apiGroups":[""],"resources":["namespaces"]},{"verbs":["*"],"apiGroups":["apps"],"resources":["deployments","daemonsets","replicasets","statefulsets"]},{"verbs":["get","list","watch","create"],"apiGroups":["monitoring.coreos.com"],"resources":["servicemonitors"]},{"verbs":["*"],"apiGroups":["ocs.openshift.io"],"resources":["*","storageclusters","ocsinitialization","storageclusterinitializations"]},{"verbs":["*"],"apiGroups":["ceph.rook.io"],"resources":["cephclusters","cephblockpools","cephfilesystems","cephobjectstores","cephobjectstoreusers"]},{"verbs":["get","list","watch","create","update","delete"],"apiGroups":["noobaa.io"],"resources":["noobaas"]},{"verbs":["get","create","update"],"apiGroups":["security.openshift.io"],"resources":["securitycontextconstraints"]},{"verbs":["get","create","update"],"apiGroups":["security.openshift.io"],"resources":["securitycontextconstraints"],"resourceNames":["privileged"]},{"verbs":["*"],"apiGroups":["template.openshift.io"],"resources":["templates"]}]},{"serviceAccountName":"rook-ceph-cluster-mgmt","rules":[]},{"serviceAccountName":"rook-ceph-system","rules":[{"verbs":["get","list","watch","patch","create","update","delete"],"apiGroups":["","apps","extensions"],"resources":["secrets","pods","pods/log","services","configmaps","deployments","daemonsets"]}]},{"serviceAccountName":"rook-ceph-global","rules":[]},{"serviceAccountName":"rook-ceph-system","rules":[{"verbs":["get","list","watch"],"apiGroups":[""],"resources":["pods","nodes","nodes/proxy","services"]},{"verbs":["get","list","watch","patch","create","update","delete"],"apiGroups":[""],"resources":["events","persistentvolumes","persistentvolumeclaims","endpoints"]},{"verbs":["get","list","watch"],"apiGroups":["storage.k8s.io"],"resources":["storageclasses"]},{"verbs":["get","list","watch","create","update","delete"],"apiGroups":["batch"],"resources":["jobs"]},{"verbs":["*"],"apiGroups":["ceph.rook.io"],"resources":["*"]},{"verbs":["*"],"apiGroups":["rook.io"],"resources":["*"]},{"verbs":["*"],"apiGroups":["policy","apps","extensions"],"resources":["poddisruptionbudgets","deployments","replicasets"]},{"verbs":["get","list","watch","create","update","delete"],"apiGroups":["healthchecking.openshift.io"],"resources":["machinedisruptionbudgets"]},{"verbs":["get","list","watch","create","update","delete"],"apiGroups":["machine.openshift.io"],"resources":["machines"]},{"verbs":["create"],"apiGroups":["storage.k8s.io"],"resources":["csidrivers"]}]},{"serviceAccountName":"rook-ceph-mgr-cluster","rules":[]},{"serviceAccountName":"rook-ceph-mgr","rules":[{"verbs":["get","list","watch"],"apiGroups":[""],"resources":["configmaps","nodes","nodes/proxy"]},{"verbs":["create","patch","list","get","watch"],"apiGroups":[""],"resources":["events"]}]},{"serviceAccountName":"rook-ceph-system","rules":[{"verbs":["*"],"apiGroups":[""],"resources":["secrets","configmaps"]},{"verbs":["get","list","watch"],"apiGroups":["storage.k8s.io"],"resources":["storageclasses"]},{"verbs":["*"],"apiGroups":["objectbucket.io"],"resources":["*"]}]},{"serviceAccountName":"rook-ceph-osd","rules":[{"verbs":["get","list"],"apiGroups":[""],"resources":["nodes"]}]},{"serviceAccountName":"rook-ceph-mgr-system","rules":[]},{"serviceAccountName":"rook-ceph-mgr","rules":[{"verbs":["get","list","watch"],"apiGroups":[""],"resources":["configmaps"]}]},{"serviceAccountName":"cephfs-csi-nodeplugin","rules":[]},{"serviceAccountName":"rook-csi-cephfs-plugin-sa","rules":[{"verbs":["get","list","update"],"apiGroups":[""],"resources":["nodes"]},{"verbs":["get","list"],"apiGroups":[""],"resources":["namespaces"]},{"verbs":["get","list","watch","update"],"apiGroups":[""],"resources":["persistentvolumes"]},{"verbs":["get","list","watch","update"],"apiGroups":["storage.k8s.io"],"resources":["volumeattachments"]},{"verbs":["get","list"],"apiGroups":[""],"resources":["configmaps"]}]},{"serviceAccountName":"cephfs-external-provisioner-runner","rules":[]},{"serviceAccountName":"rook-csi-cephfs-provisioner-sa","rules":[{"verbs":["get","list"],"apiGroups":[""],"resources":["secrets"]},{"verbs":["get","list","watch","create","delete","update","patch"],"apiGroups":[""],"resources":["persistentvolumes"]},{"verbs":["get","list","watch","update"],"apiGroups":[""],"resources":["persistentvolumeclaims"]},{"verbs":["get","list","watch"],"apiGroups":["storage.k8s.io"],"resources":["storageclasses"]},{"verbs":["list","watch","create","update","patch"],"apiGroups":[""],"resources":["events"]},{"verbs":["get","list","watch","update","patch"],"apiGroups":["storage.k8s.io"],"resources":["volumeattachments"]},{"verbs":["get","list","watch"],"apiGroups":[""],"resources":["nodes"]},{"verbs":["update","patch"],"apiGroups":[""],"resources":["persistentvolumeclaims/status"]}]},{"serviceAccountName":"rbd-csi-nodeplugin","rules":[]},{"serviceAccountName":"rook-csi-rbd-plugin-sa","rules":[{"verbs":["get","list"],"apiGroups":[""],"resources":["secrets"]},{"verbs":["get","list","update"],"apiGroups":[""],"resources":["nodes"]},{"verbs":["get","list"],"apiGroups":[""],"resources":["namespaces"]},{"verbs":["get","list","watch","update"],"apiGroups":[""],"resources":["persistentvolumes"]},{"verbs":["get","list","watch","update"],"apiGroups":["storage.k8s.io"],"resources":["volumeattachments"]},{"verbs":["get","list"],"apiGroups":[""],"resources":["configmaps"]}]},{"serviceAccountName":"rbd-external-provisioner-runner","rules":[]},{"serviceAccountName":"rook-csi-rbd-provisioner-sa","rules":[{"verbs":["get","list"],"apiGroups":[""],"resources":["secrets"]},{"verbs":["get","list","watch","create","delete","update","patch"],"apiGroups":[""],"resources":["persistentvolumes"]},{"verbs":["get","list","watch","update"],"apiGroups":[""],"resources":["persistentvolumeclaims"]},{"verbs":["get","list","watch","update","patch"],"apiGroups":["storage.k8s.io"],"resources":["volumeattachments"]},{"verbs":["get","list","watch"],"apiGroups":[""],"resources":["nodes"]},{"verbs":["get","list","watch"],"apiGroups":["storage.k8s.io"],"resources":["storageclasses"]},{"verbs":["list","watch","create","update","patch"],"apiGroups":[""],"resources":["events"]},{"verbs":["get","list","watch","update"],"apiGroups":["snapshot.storage.k8s.io"],"resources":["volumesnapshots"]},{"verbs":["create","get","list","watch","update","delete"],"apiGroups":["snapshot.storage.k8s.io"],"resources":["volumesnapshotcontents"]},{"verbs":["get","list","watch"],"apiGroups":["snapshot.storage.k8s.io"],"resources":["volumesnapshotclasses"]},{"verbs":["create","list","watch","delete","get","update"],"apiGroups":["apiextensions.k8s.io"],"resources":["customresourcedefinitions"]},{"verbs":["update"],"apiGroups":["snapshot.storage.k8s.io"],"resources":["volumesnapshots/status"]},{"verbs":["update","patch"],"apiGroups":[""],"resources":["persistentvolumeclaims/status"]}]},{"serviceAccountName":"rook-ceph-system","rules":[{"verbs":["use"],"apiGroups":["security.openshift.io"],"resources":["securitycontextconstraints"],"resourceNames":["privileged"]}]},{"serviceAccountName":"noobaa","rules":[{"verbs":["*"],"apiGroups":["noobaa.io"],"resources":["*","noobaas","backingstores","bucketclasses","noobaas/finalizers","backingstores/finalizers","bucketclasses/finalizers"]},{"verbs":["*"],"apiGroups":["objectbucket.io"],"resources":["*"]},{"verbs":["*"],"apiGroups":[""],"resources":["configmaps","secrets","persistentvolumes"]},{"verbs":["get"],"apiGroups":[""],"resources":["namespaces"]},{"verbs":["get","list","watch","create","update"],"apiGroups":["storage.k8s.io"],"resources":["storageclasses"]},{"verbs":["get","list","watch"],"apiGroups":[""],"resources":["nodes"]},{"verbs":["create"],"apiGroups":["authentication.k8s.io"],"resources":["tokenreviews"]},{"verbs":["create"],"apiGroups":["authorization.k8s.io"],"resources":["subjectaccessreviews"]}]}]}},"version":"4.5.0","maturity":"alpha","customresourcedefinitions":{"owned":[{"name":"ocsinitializations.ocs.openshift.io","version":"v1","kind":"OCSInitialization","displayName":"OCS Initialization","description":"OCS Initialization represents the initial data to be created when the OCS operator is installed."},{"name":"storageclusterinitializations.ocs.openshift.io","version":"v1","kind":"StorageClusterInitialization","displayName":"StorageCluster Initialization","description":"StorageCluster Initialization represents a set of tasks the OCS operator wants to implement for every StorageCluster it encounters."},{"name":"storageclusters.ocs.openshift.io","version":"v1","kind":"StorageCluster","displayName":"Storage Cluster","description":"Storage Cluster represents a OpenShift Container Storage Cluster including Ceph Cluster, NooBaa and all the storage and compute resources required.","resources":[{"name":"cephclusters.ceph.rook.io","kind":"CephCluster","version":"v1"},{"name":"noobaas.noobaa.io","kind":"NooBaa","version":"v1alpha1"}]},{"name":"cephclusters.ceph.rook.io","version":"v1","kind":"CephCluster","displayName":"Ceph Cluster","description":"Represents a Ceph cluster."},{"name":"cephblockpools.ceph.rook.io","version":"v1","kind":"CephBlockPool","displayName":"Ceph Block Pool","description":"Represents a Ceph Block Pool."},{"name":"cephobjectstores.ceph.rook.io","version":"v1","kind":"CephObjectStore","displayName":"Ceph Object Store","description":"Represents a Ceph Object Store.","specDescriptors":[{"path":"dataPool.erasureCoded.codingChunks","displayName":"Coding Chunks","description":"Coding Chunks","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:dataPool","urn:alm:descriptor:com.tectonic.ui:number"]},{"path":"dataPool.erasureCoded.dataChunks","displayName":"Data Chunks","description":"Data Chunks","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:dataPool","urn:alm:descriptor:com.tectonic.ui:number"]},{"path":"dataPool.failureDomain","displayName":"failureDomain","description":"failureDomain","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:dataPool","urn:alm:descriptor:com.tectonic.ui:text"]},{"path":"dataPool.replicated.size","displayName":"Size","description":"Size","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:dataPool","urn:alm:descriptor:com.tectonic.ui:number"]},{"path":"gateway.annotations","displayName":"Annotations","description":"Annotations","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:gateway","urn:alm:descriptor:io.kubernetes:annotations"]},{"path":"gateway.instances","displayName":"Instances","description":"Instances","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:gateway","urn:alm:descriptor:com.tectonic.ui:number"]},{"path":"gateway.resources","displayName":"Resources","description":"Resources","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:gateway","urn:alm:descriptor:com.tectonic.ui:resourceRequirements"]},{"path":"gateway.placement","displayName":"placement","description":"placement","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:gateway","urn:alm:descriptor:io.kubernetes:placement"]},{"path":"gateway.securePort","displayName":"securePort","description":"securePort","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:gateway","urn:alm:descriptor:io.kubernetes:securePort"]},{"path":"gateway.sslCertificateRef","displayName":"sslCertificateRef","description":"sslCertificateRef","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:gateway","urn:alm:descriptor:io.kubernetes:sslCertificateRef"]},{"path":"gateway.type","displayName":"Type","description":"Type","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:gateway","urn:alm:descriptor:com.tectonic.ui:text"]},{"path":"metadataPool.erasureCoded.codingChunks","displayName":"Coding Chunks","description":"Coding Chunks","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:metadataPool","urn:alm:descriptor:com.tectonic.ui:number"]},{"path":"metadataPool.erasureCoded.dataChunks","displayName":"Data Chunks","description":"Data Chunks","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:metadataPool","urn:alm:descriptor:com.tectonic.ui:number"]},{"path":"metadataPool.failureDomain","displayName":"failureDomain","description":"failureDomain","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:metadataPool","urn:alm:descriptor:com.tectonic.ui:text"]},{"path":"metadataPool.replicated.size","displayName":"Size","description":"Size","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:metadataPool","urn:alm:descriptor:com.tectonic.ui:number"]}]},{"name":"cephobjectstoreusers.ceph.rook.io","version":"v1","kind":"CephObjectStoreUser","displayName":"Ceph Object Store User","description":"Represents a Ceph Object Store User."},{"name":"cephnfses.ceph.rook.io","version":"v1","kind":"CephNFS","displayName":"Ceph NFS","description":"Represents a cluster of Ceph NFS ganesha gateways."},{"name":"cephclients.ceph.rook.io","version":"v1","kind":"CephClient","displayName":"Ceph Client","description":"Represents a Ceph User."},{"name":"cephfilesystems.ceph.rook.io","version":"v1","kind":"CephFilesystem","displayName":"Ceph Filesystem","description":"Represents a Ceph Filesystem."},{"name":"noobaas.noobaa.io","version":"v1alpha1","kind":"NooBaa","displayName":"NooBaa","description":"A NooBaa system - Create this to start","resources":[{"name":"services","kind":"Service","version":"v1"},{"name":"secrets","kind":"Secret","version":"v1"},{"name":"configmaps","kind":"ConfigMap","version":"v1"},{"name":"statefulsets.apps","kind":"StatefulSet","version":"v1"}],"specDescriptors":[{"path":"image","displayName":"DB Image","description":"DBImage (optional) overrides the default image for the db container.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:text"]},{"path":"dbImage","displayName":"Image","description":"Image (optional) overrides the default image for the server container.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:text"]},{"path":"coreResources","displayName":"Core Resources","description":"CoreResources (optional) overrides the default resource requirements for the server container.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:resourceRequirements"]},{"path":"dbResources","displayName":"DB Resources","description":"DBResources (optional) overrides the default resource requirements for the db container.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:resourceRequirements"]},{"path":"dbVolumeResources","displayName":"Image","description":"DBVolumeResources (optional) overrides the default PVC resource requirements for the database volume. For the time being this field is immutable and can only be set on system creation. This is because volume size updates are only supported for increasing the size, and only if the storage class specifies `allowVolumeExpansion: true`, +immutable.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:resourceRequirements"]},{"path":"dbStorageClass","displayName":"DB StorageClass","description":"DBStorageClass (optional) overrides the default cluster StorageClass for the database volume. For the time being this field is immutable and can only be set on system creation. This affects where the system stores its database which contains system config, buckets, objects meta-data and mapping file parts to storage locations. +immutable.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:text"]},{"path":"pvPoolDefaultStorageClass","displayName":"PV Pool DefaultStorageClass","description":"PVPoolDefaultStorageClass (optional) overrides the default cluster StorageClass for the pv-pool volumes. This affects where the system stores data chunks (encrypted). Updates to this field will only affect new pv-pools, but updates to existing pools are not supported by the operator.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:text"]},{"path":"imagePullSecret","displayName":"Image Pull Secret","description":"ImagePullSecret (optional) sets a pull secret for the system image.","x-descriptors":["urn:alm:descriptor:io.kubernetes:Secret"]}]},{"name":"backingstores.noobaa.io","version":"v1alpha1","kind":"BackingStore","displayName":"Backing Store","description":"Storage target spec such as aws-s3, s3-compatible, ibm-cos, PV's and more. Used in BacketClass to construct data placement policies.","resources":[{"name":"services","kind":"Service","version":"v1"},{"name":"secrets","kind":"Secret","version":"v1"},{"name":"configmaps","kind":"ConfigMap","version":"v1"},{"name":"statefulsets.apps","kind":"StatefulSet","version":"v1"}],"specDescriptors":[{"path":"awsS3.region","displayName":"Region","description":"Region is the AWS region.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:awsS3","urn:alm:descriptor:com.tectonic.ui:text"]},{"path":"awsS3.secret.name","displayName":"Secret","description":"Secret refers to a secret that provides the credentials. The secret should define AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:awsS3","urn:alm:descriptor:io.kubernetes:Secret"]},{"path":"awsS3.sslDisabled","displayName":"SSL Disabled","description":"SSLDisabled allows to disable SSL and use plain http.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:awsS3","urn:alm:descriptor:com.tectonic.ui:booleanSwitch"]},{"path":"awsS3.targetBucket","displayName":"Target Bucket","description":"TargetBucket is the name of the target S3 bucket.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:awsS3","urn:alm:descriptor:com.tectonic.ui:text"]},{"path":"azureBlob.secret.name","displayName":"Secret","description":" Secret refers to a secret that provides the credentials. The secret should define AccountName and AccountKey as provided\nby Azure Blob.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:azureBlob","urn:alm:descriptor:io.kubernetes:Secret"]},{"path":"azureBlob.targetBlobContainer","displayName":"Target Blob Container","description":"TargetBlobContainer is the name of the target Azure Blob container.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:azureBlob","urn:alm:descriptor:com.tectonic.ui:text"]},{"path":"googleCloudStorage.secret.name","displayName":"Secret","description":"Secret refers to a secret that provides the credentials. The secret should define GoogleServiceAccountPrivateKeyJson containing\nthe entire json string as provided by Google.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:googleCloudStorage","urn:alm:descriptor:io.kubernetes:Secret"]},{"path":"googleCloudStorage.targetBucket","displayName":"Target Bucket","description":"TargetBucket is the name of the target S3 bucket.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:googleCloudStorage","urn:alm:descriptor:com.tectonic.ui:text"]},{"path":"pvPool.numVolumes","displayName":"Num Volumes","description":"NumVolumes is the number of volumes to allocate.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:pvPool","urn:alm:descriptor:com.tectonic.ui:number"]},{"path":"pvPool.resources","displayName":"Resources","description":"VolumeResources represents the minimum resources each volume should have.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:pvPool","urn:alm:descriptor:com.tectonic.ui:resourceRequirements"]},{"path":"pvPool.storageClass","displayName":"Storage Class","description":"StorageClass is the name of the storage class to use for the PV's.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:pvPool","urn:alm:descriptor:com.tectonic.ui:text"]},{"path":"s3Compatible.endpoint","displayName":"End Point","description":"Endpoint is the S3 compatible endpoint: http(s)://host:port.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:s3Compatible","urn:alm:descriptor:com.tectonic.ui:text"]},{"path":"s3Compatible.secret.name","displayName":"Secret","description":"Secret refers to a secret that provides the credentials. The secret should define AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:s3Compatible","urn:alm:descriptor:io.kubernetes:Secret"]},{"path":"s3Compatible.signatureVersion","displayName":"Signature Version","description":"SignatureVersion specifies the client signature version to use when signing requests.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:s3Compatible","urn:alm:descriptor:com.tectonic.ui:number"]},{"path":"s3Compatible.targetBucket","displayName":"Target Bucket","description":"TargetBucket is the name of the target S3 bucket.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:s3Compatible","urn:alm:descriptor:com.tectonic.ui:text"]},{"path":"IBMCos.endpoint","displayName":"End Point","description":"Endpoint is the IBM COS endpoint: http(s)://host:port.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:ibmCos","urn:alm:descriptor:com.tectonic.ui:text"]},{"path":"IBMCos.secret.name","displayName":"Secret","description":"Secret refers to a secret that provides the credentials. The secret should define IBM_COS_ACCESS_KEY_ID and IBM_COS_SECRET_ACCESS_KEY.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:ibmCos","urn:alm:descriptor:io.kubernetes:Secret"]},{"path":"IBMCos.signatureVersion","displayName":"Signature Version","description":"SignatureVersion specifies the client signature version to use when signing requests.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:ibmCos","urn:alm:descriptor:com.tectonic.ui:number"]},{"path":"IBMCos.targetBucket","displayName":"Target Bucket","description":"TargetBucket is the name of the target IBM COS bucket.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:ibmCos","urn:alm:descriptor:com.tectonic.ui:text"]}]},{"name":"bucketclasses.noobaa.io","version":"v1alpha1","kind":"BucketClass","displayName":"Bucket Class","description":"Storage policy spec  tiering, mirroring, spreading. Combines BackingStores. Referenced by ObjectBucketClaims.","resources":[{"name":"services","kind":"Service","version":"v1"},{"name":"secrets","kind":"Secret","version":"v1"},{"name":"configmaps","kind":"ConfigMap","version":"v1"},{"name":"statefulsets.apps","kind":"StatefulSet","version":"v1"}],"specDescriptors":[{"path":"placementPolicy.tiers[0].backingStores[0]","displayName":"Backing Stores","description":"BackingStores is an unordered list of backing store names. The meaning of the list depends on the placement.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:placementPolicy","urn:alm:descriptor:com.tectonic.ui:text"]},{"path":"placementPolicy.tiers[0].placement","displayName":"Placement","description":"Placement specifies the type of placement for the tier If empty it should have a single backing store.","x-descriptors":["urn:alm:descriptor:com.tectonic.ui:fieldGroup:placementPolicy","urn:alm:descriptor:com.tectonic.ui:text"]}]},{"name":"objectbucketclaims.objectbucket.io","version":"v1alpha1","kind":"ObjectBucketClaim","displayName":"Object Bucket Claim","description":"Claim a bucket just like claiming a PV. Automate you app bucket provisioning by creating OBC with your app deployment. A secret and configmap (name=claim) will be created with access details for the app pods.","resources":[{"name":"services","kind":"Service","version":"v1"},{"name":"secrets","kind":"Secret","version":"v1"},{"name":"configmaps","kind":"ConfigMap","version":"v1"},{"name":"statefulsets.apps","kind":"StatefulSet","version":"v1"}]},{"name":"objectbuckets.objectbucket.io","version":"v1alpha1","kind":"ObjectBucket","displayName":"Object Bucket","description":"Used under-the-hood. Created per ObjectBucketClaim and keeps provisioning information.","resources":[{"name":"services","kind":"Service","version":"v1"},{"name":"secrets","kind":"Secret","version":"v1"},{"name":"configmaps","kind":"ConfigMap","version":"v1"},{"name":"statefulsets.apps","kind":"StatefulSet","version":"v1"}]}]},"apiservicedefinitions":{},"displayName":"OpenShift Container Storage","description":"\n**Red Hat OpenShift Container Storage** deploys three operators.\n\n### OpenShift Container Storage operator\n\nThe OpenShift Container Storage operator is the primary operator for OpenShift Container Storage. It serves to facilitate the other operators in OpenShift Container Storage by performing administrative tasks outside their scope as well as watching and configuring their CustomResources.\n\n### Rook\n\n[Rook][1] deploys and manages Ceph on OpenShift, which provides block and file storage.\n\n### NooBaa operator\n\nThe NooBaa operator deploys and manages the [NooBaa][2] Multi-Cloud Gateway on OpenShift, which provides object storage.\n\n# Core Capabilities\n\n* **Self-managing service:** No matter which supported storage technologies you choose, OpenShift Container Storage ensures that resources can be deployed and managed automatically.\n\n* **Hyper-scale or hyper-converged:** With OpenShift Container Storage you can either build dedicated storage clusters or hyper-converged clusters where your apps run alongside storage.\n\n* **File, Block, and Object provided by OpenShift Container Storage:** OpenShift Container Storage integrates Ceph with multiple storage presentations including object storage (compatible with S3), block storage, and POSIX-compliant shared file system.\n\n* **Your data, protected:** OpenShift Container Storage efficiently distributes and replicates your data across your cluster to minimize the risk of data loss. With snapshots, cloning, and versioning, no more losing sleep over your data.\n\n* **Elastic storage in your datacenter:** Scale is now possible in your datacenter. Get started with a few terabytes, and easily scale up.\n\n* **Simplified data management:** Easily create hybrid and multi-cloud data storage for your workloads, using a single namespace.\n\n[1]: https://rook.io\n[2]: https://noobaa.io\n","keywords":["storage","rook","ceph","noobaa","block storage","shared filesystem","object storage"],"maintainers":[{"name":"Red Hat Support","email":"ocs-support@redhat.com"}],"provider":{"name":"Red Hat"},"links":[{"name":"Source Code","url":"https://github.com/openshift/ocs-operator"}],"icon":[{"base64data":"PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxOTIgMTQ1Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2UwMDt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPlJlZEhhdC1Mb2dvLUhhdC1Db2xvcjwvdGl0bGU+PHBhdGggZD0iTTE1Ny43Nyw2Mi42MWExNCwxNCwwLDAsMSwuMzEsMy40MmMwLDE0Ljg4LTE4LjEsMTcuNDYtMzAuNjEsMTcuNDZDNzguODMsODMuNDksNDIuNTMsNTMuMjYsNDIuNTMsNDRhNi40Myw2LjQzLDAsMCwxLC4yMi0xLjk0bC0zLjY2LDkuMDZhMTguNDUsMTguNDUsMCwwLDAtMS41MSw3LjMzYzAsMTguMTEsNDEsNDUuNDgsODcuNzQsNDUuNDgsMjAuNjksMCwzNi40My03Ljc2LDM2LjQzLTIxLjc3LDAtMS4wOCwwLTEuOTQtMS43My0xMC4xM1oiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0xMjcuNDcsODMuNDljMTIuNTEsMCwzMC42MS0yLjU4LDMwLjYxLTE3LjQ2YTE0LDE0LDAsMCwwLS4zMS0zLjQybC03LjQ1LTMyLjM2Yy0xLjcyLTcuMTItMy4yMy0xMC4zNS0xNS43My0xNi42QzEyNC44OSw4LjY5LDEwMy43Ni41LDk3LjUxLjUsOTEuNjkuNSw5MCw4LDgzLjA2LDhjLTYuNjgsMC0xMS42NC01LjYtMTcuODktNS42LTYsMC05LjkxLDQuMDktMTIuOTMsMTIuNSwwLDAtOC40MSwyMy43Mi05LjQ5LDI3LjE2QTYuNDMsNi40MywwLDAsMCw0Mi41Myw0NGMwLDkuMjIsMzYuMywzOS40NSw4NC45NCwzOS40NU0xNjAsNzIuMDdjMS43Myw4LjE5LDEuNzMsOS4wNSwxLjczLDEwLjEzLDAsMTQtMTUuNzQsMjEuNzctMzYuNDMsMjEuNzdDNzguNTQsMTA0LDM3LjU4LDc2LjYsMzcuNTgsNTguNDlhMTguNDUsMTguNDUsMCwwLDEsMS41MS03LjMzQzIyLjI3LDUyLC41LDU1LC41LDc0LjIyYzAsMzEuNDgsNzQuNTksNzAuMjgsMTMzLjY1LDcwLjI4LDQ1LjI4LDAsNTYuNy0yMC40OCw1Ni43LTM2LjY1LDAtMTIuNzItMTEtMjcuMTYtMzAuODMtMzUuNzgiLz48L3N2Zz4=","mediatype":"image/svg+xml"}],"installModes":[{"type":"OwnNamespace","supported":true},{"type":"SingleNamespace","supported":true},{"type":"MultiNamespace","supported":false},{"type":"AllNamespaces","supported":false}]},"status":{}}
      name: ocs-operator.v4.5.0
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1alpha1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"name":"backingstores.noobaa.io"},"spec":{"additionalPrinterColumns":[{"JSONPath":".spec.type","description":"Type","name":"Type","type":"string"},{"JSONPath":".status.phase","description":"Phase","name":"Phase","type":"string"},{"JSONPath":".metadata.creationTimestamp","name":"Age","type":"date"}],"group":"noobaa.io","names":{"kind":"BackingStore","listKind":"BackingStoreList","plural":"backingstores","singular":"backingstore"},"scope":"Namespaced","subresources":{"status":{}},"validation":{"openAPIV3Schema":{"description":"BackingStore is the Schema for the backingstores API","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"type":"object"},"spec":{"description":"Specification of the desired behavior of the noobaa BackingStore.","properties":{"awsS3":{"description":"AWSS3Spec specifies a backing store of type aws-s3","properties":{"region":{"description":"Region is the AWS region","type":"string"},"secret":{"description":"Secret refers to a secret that provides the credentials The secret should define AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY","properties":{"name":{"description":"Name is unique within a namespace to reference a secret resource.","type":"string"},"namespace":{"description":"Namespace defines the space within which the secret name must be unique.","type":"string"}},"type":"object"},"sslDisabled":{"description":"SSLDisabled allows to disable SSL and use plain http","type":"boolean"},"targetBucket":{"description":"TargetBucket is the name of the target S3 bucket","type":"string"}},"required":["secret","targetBucket"],"type":"object"},"azureBlob":{"description":"AzureBlob specifies a backing store of type azure-blob","properties":{"secret":{"description":"Secret refers to a secret that provides the credentials The secret should define AccountName and AccountKey as provided by Azure Blob.","properties":{"name":{"description":"Name is unique within a namespace to reference a secret resource.","type":"string"},"namespace":{"description":"Namespace defines the space within which the secret name must be unique.","type":"string"}},"type":"object"},"targetBlobContainer":{"description":"TargetBlobContainer is the name of the target Azure Blob container","type":"string"}},"required":["secret","targetBlobContainer"],"type":"object"},"googleCloudStorage":{"description":"GoogleCloudStorage specifies a backing store of type google-cloud-storage","properties":{"secret":{"description":"Secret refers to a secret that provides the credentials The secret should define GoogleServiceAccountPrivateKeyJson containing the entire json string as provided by Google.","properties":{"name":{"description":"Name is unique within a namespace to reference a secret resource.","type":"string"},"namespace":{"description":"Namespace defines the space within which the secret name must be unique.","type":"string"}},"type":"object"},"targetBucket":{"description":"TargetBucket is the name of the target S3 bucket","type":"string"}},"required":["secret","targetBucket"],"type":"object"},"ibmCos":{"description":"IBMCos specifies a backing store of type ibm-cos","properties":{"endpoint":{"description":"Endpoint is the IBM COS compatible endpoint: http(s)://host:port","type":"string"},"secret":{"description":"Secret refers to a secret that provides the credentials The secret should define IBM_COS_ACCESS_KEY_ID and IBM_COS_SECRET_ACCESS_KEY","properties":{"name":{"description":"Name is unique within a namespace to reference a secret resource.","type":"string"},"namespace":{"description":"Namespace defines the space within which the secret name must be unique.","type":"string"}},"type":"object"},"signatureVersion":{"description":"SignatureVersion specifies the client signature version to use when signing requests.","type":"string"},"targetBucket":{"description":"TargetBucket is the name of the target IBM COS bucket","type":"string"}},"required":["endpoint","secret","targetBucket"],"type":"object"},"pvPool":{"description":"PVPool specifies a backing store of type pv-pool","properties":{"numVolumes":{"description":"NumVolumes is the number of volumes to allocate","type":"integer"},"resources":{"description":"VolumeResources represents the minimum resources each volume should have.","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-compute-resources-container/","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-compute-resources-container/","type":"object"}},"type":"object"},"secret":{"description":"Secret refers to a secret that provides the agent configuration The secret should define AGENT_CONFIG containing agent_configuration from noobaa-core.","properties":{"name":{"description":"Name is unique within a namespace to reference a secret resource.","type":"string"},"namespace":{"description":"Namespace defines the space within which the secret name must be unique.","type":"string"}},"type":"object"},"storageClass":{"description":"StorageClass is the name of the storage class to use for the PV's","type":"string"}},"required":["numVolumes"],"type":"object"},"s3Compatible":{"description":"S3Compatible specifies a backing store of type s3-compatible","properties":{"endpoint":{"description":"Endpoint is the S3 compatible endpoint: http(s)://host:port","type":"string"},"secret":{"description":"Secret refers to a secret that provides the credentials The secret should define AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY","properties":{"name":{"description":"Name is unique within a namespace to reference a secret resource.","type":"string"},"namespace":{"description":"Namespace defines the space within which the secret name must be unique.","type":"string"}},"type":"object"},"signatureVersion":{"description":"SignatureVersion specifies the client signature version to use when signing requests.","type":"string"},"targetBucket":{"description":"TargetBucket is the name of the target S3 bucket","type":"string"}},"required":["endpoint","secret","targetBucket"],"type":"object"},"type":{"description":"Type is an enum of supported types","type":"string"}},"required":["type"],"type":"object"},"status":{"description":"Most recently observed status of the noobaa BackingStore.","properties":{"conditions":{"description":"Conditions is a list of conditions related to operator reconciliation","items":{"description":"Condition represents the state of the operator's reconciliation functionality.","properties":{"lastHeartbeatTime":{"format":"date-time","type":"string"},"lastTransitionTime":{"format":"date-time","type":"string"},"message":{"type":"string"},"reason":{"type":"string"},"status":{"type":"string"},"type":{"description":"ConditionType is the state of the operator's reconciliation functionality.","type":"string"}},"required":["status","type"],"type":"object"},"type":"array"},"mode":{"description":"Mode specifies the updating mode of a BackingStore","properties":{"modeCode":{"description":"ModeCode specifies the updated mode of backingstore","type":"string"},"timeStamp":{"description":"TimeStamp specifies the update time of backingstore new mode","type":"string"}},"type":"object"},"phase":{"description":"Phase is a simple, high-level summary of where the backing store is in its lifecycle","type":"string"},"relatedObjects":{"description":"RelatedObjects is a list of objects related to this operator.","items":{"description":"ObjectReference contains enough information to let you inspect or modify the referred object.","properties":{"apiVersion":{"description":"API version of the referent.","type":"string"},"fieldPath":{"description":"If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.","type":"string"},"kind":{"description":"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"namespace":{"description":"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/","type":"string"},"resourceVersion":{"description":"Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency","type":"string"},"uid":{"description":"UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids","type":"string"}},"type":"object"},"type":"array"}},"type":"object"}},"type":"object"}},"version":"v1alpha1","versions":[{"name":"v1alpha1","served":true,"storage":true}]}}
      name: backingstores.noobaa.io
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"name":"bucketclasses.noobaa.io"},"spec":{"additionalPrinterColumns":[{"JSONPath":".spec.placementPolicy","description":"Placement","name":"Placement","type":"string"},{"JSONPath":".status.phase","description":"Phase","name":"Phase","type":"string"},{"JSONPath":".metadata.creationTimestamp","name":"Age","type":"date"}],"group":"noobaa.io","names":{"kind":"BucketClass","listKind":"BucketClassList","plural":"bucketclasses","singular":"bucketclass"},"scope":"Namespaced","subresources":{"status":{}},"validation":{"openAPIV3Schema":{"description":"BucketClass is the Schema for the bucketclasses API","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata.","type":"object"},"spec":{"description":"Specification of the desired behavior of the noobaa BucketClass.","properties":{"placementPolicy":{"description":"PlacementPolicy specifies the placement policy for the bucket class","properties":{"tiers":{"description":"Tiers is an ordered list of tiers to use. The model is a waterfall - push to first tier by default, and when no more space spill \"cold\" storage to next tier.","items":{"description":"Tier specifies a storage tier","properties":{"backingStores":{"description":"BackingStores is an unordered list of backing store names. The meaning of the list depends on the placement.","items":{"type":"string"},"type":"array"},"placement":{"description":"Placement specifies the type of placement for the tier If empty it should have a single backing store.","enum":["Spread","Mirror"],"type":"string"}},"type":"object"},"type":"array"}},"required":["tiers"],"type":"object"}},"required":["placementPolicy"],"type":"object"},"status":{"description":"Most recently observed status of the noobaa BackingStore.","properties":{"conditions":{"description":"Conditions is a list of conditions related to operator reconciliation","items":{"description":"Condition represents the state of the operator's reconciliation functionality.","properties":{"lastHeartbeatTime":{"format":"date-time","type":"string"},"lastTransitionTime":{"format":"date-time","type":"string"},"message":{"type":"string"},"reason":{"type":"string"},"status":{"type":"string"},"type":{"description":"ConditionType is the state of the operator's reconciliation functionality.","type":"string"}},"required":["status","type"],"type":"object"},"type":"array"},"mode":{"description":"Mode is a simple, high-level summary of where the System is in its lifecycle","type":"string"},"phase":{"description":"Phase is a simple, high-level summary of where the System is in its lifecycle","type":"string"},"relatedObjects":{"description":"RelatedObjects is a list of objects related to this operator.","items":{"description":"ObjectReference contains enough information to let you inspect or modify the referred object.","properties":{"apiVersion":{"description":"API version of the referent.","type":"string"},"fieldPath":{"description":"If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.","type":"string"},"kind":{"description":"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"namespace":{"description":"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/","type":"string"},"resourceVersion":{"description":"Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency","type":"string"},"uid":{"description":"UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids","type":"string"}},"type":"object"},"type":"array"}},"type":"object"}},"type":"object"}},"version":"v1alpha1","versions":[{"name":"v1alpha1","served":true,"storage":true}]}}
      name: bucketclasses.noobaa.io
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"name":"cephblockpools.ceph.rook.io"},"spec":{"group":"ceph.rook.io","names":{"kind":"CephBlockPool","listKind":"CephBlockPoolList","plural":"cephblockpools","singular":"cephblockpool"},"scope":"Namespaced","subresources":{"status":{}},"validation":{"openAPIV3Schema":{"properties":{"spec":{"properties":{"compressionMode":{"enum":["","none","passive","aggressive","force"],"type":"string"},"erasureCoded":{"properties":{"codingChunks":{"maximum":9,"minimum":0,"type":"integer"},"dataChunks":{"maximum":9,"minimum":0,"type":"integer"}}},"failureDomain":{"type":"string"},"parameters":{"type":"object"},"replicated":{"properties":{"requireSafeReplicaSize":{"type":"boolean"},"size":{"maximum":9,"minimum":0,"type":"integer"},"targetSizeRatio":{"type":"number"}}}}}}}},"version":"v1"}}
      name: cephblockpools.ceph.rook.io
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"name":"cephclients.ceph.rook.io"},"spec":{"group":"ceph.rook.io","names":{"kind":"CephClient","listKind":"CephClientList","plural":"cephclients","singular":"cephclient"},"scope":"Namespaced","subresources":{"status":{}},"validation":{"openAPIV3Schema":{"properties":{"spec":{"properties":{"caps":{"type":"object"}}}}}},"version":"v1"}}
      name: cephclients.ceph.rook.io
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"name":"cephclusters.ceph.rook.io"},"spec":{"additionalPrinterColumns":[{"JSONPath":".spec.dataDirHostPath","description":"Directory used on the K8s nodes","name":"DataDirHostPath","type":"string"},{"JSONPath":".spec.mon.count","description":"Number of MONs","name":"MonCount","type":"string"},{"JSONPath":".metadata.creationTimestamp","name":"Age","type":"date"},{"JSONPath":".status.phase","description":"Phase","name":"Phase","type":"string"},{"JSONPath":".status.message","description":"Message","name":"Message","type":"string"},{"JSONPath":".status.ceph.health","description":"Ceph Health","name":"Health","type":"string"}],"group":"ceph.rook.io","names":{"kind":"CephCluster","listKind":"CephClusterList","plural":"cephclusters","singular":"cephcluster"},"scope":"Namespaced","validation":{"openAPIV3Schema":{"properties":{"spec":{"properties":{"annotations":{},"cephVersion":{"properties":{"allowUnsupported":{"type":"boolean"},"image":{"type":"string"}}},"cleanupPolicy":{"properties":{"confirmation":{"pattern":"^$|^yes-really-destroy-data$","type":"string"}}},"continueUpgradeAfterChecksEvenIfNotHealthy":{"type":"boolean"},"dashboard":{"properties":{"enabled":{"type":"boolean"},"port":{"maximum":65535,"minimum":0,"type":"integer"},"ssl":{"type":"boolean"},"urlPrefix":{"type":"string"}}},"dataDirHostPath":{"pattern":"^/(\\S+)","type":"string"},"disruptionManagement":{"properties":{"machineDisruptionBudgetNamespace":{"type":"string"},"manageMachineDisruptionBudgets":{"type":"boolean"},"managePodBudgets":{"type":"boolean"},"osdMaintenanceTimeout":{"type":"integer"}}},"external":{"properties":{"enable":{"type":"boolean"}}},"mgr":{"properties":{"modules":{"items":{"properties":{"enabled":{"type":"boolean"},"name":{"type":"string"}}}}}},"mon":{"properties":{"allowMultiplePerNode":{"type":"boolean"},"count":{"maximum":9,"minimum":0,"type":"integer"},"volumeClaimTemplate":{}}},"monitoring":{"properties":{"enabled":{"type":"boolean"},"rulesNamespace":{"type":"string"}}},"network":{"properties":{"hostNetwork":{"type":"boolean"},"provider":{"type":"string"},"selectors":{}}},"placement":{},"rbdMirroring":{"properties":{"workers":{"type":"integer"}}},"removeOSDsIfOutAndSafeToRemove":{"type":"boolean"},"resources":{},"skipUpgradeChecks":{"type":"boolean"},"storage":{"properties":{"config":{},"deviceFilter":{"type":"string"},"devicePathFilter":{"type":"string"},"disruptionManagement":{"properties":{"machineDisruptionBudgetNamespace":{"type":"string"},"manageMachineDisruptionBudgets":{"type":"boolean"},"managePodBudgets":{"type":"boolean"},"osdMaintenanceTimeout":{"type":"integer"}}},"nodes":{"items":{"properties":{"config":{"properties":{"databaseSizeMB":{"type":"string"},"encryptedDevice":{"pattern":"^(true|false)$","type":"string"},"journalSizeMB":{"type":"string"},"metadataDevice":{"type":"string"},"osdsPerDevice":{"type":"string"},"storeType":{"pattern":"^(bluestore)$","type":"string"},"walSizeMB":{"type":"string"}}},"deviceFilter":{"type":"string"},"devicePathFilter":{"type":"string"},"devices":{"items":{"properties":{"config":{},"name":{"type":"string"}}},"type":"array"},"name":{"type":"string"},"resources":{},"useAllDevices":{"type":"boolean"}}},"type":"array"},"storageClassDeviceSets":{},"useAllDevices":{"type":"boolean"},"useAllNodes":{"type":"boolean"}}}}}}}},"version":"v1"}}
      name: cephclusters.ceph.rook.io
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"name":"cephfilesystems.ceph.rook.io"},"spec":{"additionalPrinterColumns":[{"JSONPath":".spec.metadataServer.activeCount","description":"Number of desired active MDS daemons","name":"ActiveMDS","type":"string"},{"JSONPath":".metadata.creationTimestamp","name":"Age","type":"date"}],"group":"ceph.rook.io","names":{"kind":"CephFilesystem","listKind":"CephFilesystemList","plural":"cephfilesystems","singular":"cephfilesystem"},"scope":"Namespaced","subresources":{"status":{}},"validation":{"openAPIV3Schema":{"properties":{"spec":{"properties":{"dataPools":{"items":{"properties":{"compressionMode":{"enum":["","none","passive","aggressive","force"],"type":"string"},"erasureCoded":{"properties":{"codingChunks":{"maximum":10,"minimum":0,"type":"integer"},"dataChunks":{"maximum":10,"minimum":0,"type":"integer"}}},"failureDomain":{"type":"string"},"replicated":{"properties":{"requireSafeReplicaSize":{"type":"boolean"},"size":{"maximum":10,"minimum":0,"type":"integer"}}}}},"type":"array"},"metadataPool":{"properties":{"compressionMode":{"enum":["","none","passive","aggressive","force"],"type":"string"},"erasureCoded":{"properties":{"codingChunks":{"maximum":10,"minimum":0,"type":"integer"},"dataChunks":{"maximum":10,"minimum":0,"type":"integer"}}},"failureDomain":{"type":"string"},"replicated":{"properties":{"requireSafeReplicaSize":{"type":"boolean"},"size":{"maximum":10,"minimum":0,"type":"integer"}}}}},"metadataServer":{"properties":{"activeCount":{"maximum":10,"minimum":1,"type":"integer"},"activeStandby":{"type":"boolean"},"annotations":{},"placement":{},"resources":{}}},"preservePoolsOnDelete":{"type":"boolean"}}}}}},"version":"v1"}}
      name: cephfilesystems.ceph.rook.io
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"name":"cephnfses.ceph.rook.io"},"spec":{"group":"ceph.rook.io","names":{"kind":"CephNFS","listKind":"CephNFSList","plural":"cephnfses","shortNames":["nfs"],"singular":"cephnfs"},"scope":"Namespaced","subresources":{"status":{}},"validation":{"openAPIV3Schema":{"properties":{"spec":{"properties":{"rados":{"properties":{"namespace":{"type":"string"},"pool":{"type":"string"}}},"server":{"properties":{"active":{"type":"integer"},"annotations":{},"placement":{},"resources":{}}}}}}}},"version":"v1"}}
      name: cephnfses.ceph.rook.io
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"name":"cephobjectstores.ceph.rook.io"},"spec":{"group":"ceph.rook.io","names":{"kind":"CephObjectStore","listKind":"CephObjectStoreList","plural":"cephobjectstores","singular":"cephobjectstore"},"scope":"Namespaced","subresources":{"status":{}},"validation":{"openAPIV3Schema":{"properties":{"spec":{"properties":{"dataPool":{"properties":{"compressionMode":{"enum":["","none","passive","aggressive","force"],"type":"string"},"erasureCoded":{"properties":{"codingChunks":{"type":"integer"},"dataChunks":{"type":"integer"}}},"failureDomain":{"type":"string"},"replicated":{"properties":{"requireSafeReplicaSize":{"type":"boolean"},"size":{"type":"integer"}}}}},"gateway":{"properties":{"annotations":{},"instances":{"type":"integer"},"placement":{},"port":{"maximum":65535,"minimum":1,"type":"integer"},"resources":{},"securePort":{},"sslCertificateRef":{},"type":{"type":"string"}}},"metadataPool":{"properties":{"compressionMode":{"enum":["","none","passive","aggressive","force"],"type":"string"},"erasureCoded":{"properties":{"codingChunks":{"type":"integer"},"dataChunks":{"type":"integer"}}},"failureDomain":{"type":"string"},"replicated":{"properties":{"requireSafeReplicaSize":{"type":"boolean"},"size":{"type":"integer"}}}}},"preservePoolsOnDelete":{"type":"boolean"}}}}}},"version":"v1"}}
      name: cephobjectstores.ceph.rook.io
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"name":"cephobjectstoreusers.ceph.rook.io"},"spec":{"group":"ceph.rook.io","names":{"kind":"CephObjectStoreUser","listKind":"CephObjectStoreUserList","plural":"cephobjectstoreusers","shortNames":["rcou","objectuser"],"singular":"cephobjectstoreuser"},"scope":"Namespaced","subresources":{"status":{}},"version":"v1"}}
      name: cephobjectstoreusers.ceph.rook.io
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: Role
      manifest: |
        {"apiVersion":"rbac.authorization.k8s.io/v1beta1","kind":"Role","metadata":{"name":"noobaa-metrics"},"rules":[{"apiGroups":[""],"resources":["services","endpoints","pods"],"verbs":["get","list","watch"]}]}
      name: noobaa-metrics
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: RoleBinding
      manifest: |
        {"apiVersion":"rbac.authorization.k8s.io/v1beta1","kind":"RoleBinding","metadata":{"name":"noobaa-metrics"},"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"Role","name":"noobaa-metrics"},"subjects":[{"kind":"ServiceAccount","name":"prometheus-k8s","namespace":"openshift-monitoring"}]}
      name: noobaa-metrics
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"name":"noobaas.noobaa.io"},"spec":{"additionalPrinterColumns":[{"JSONPath":".status.services.serviceMgmt.nodePorts","description":"Management Endpoints","name":"Mgmt-Endpoints","type":"string"},{"JSONPath":".status.services.serviceS3.nodePorts","description":"S3 Endpoints","name":"S3-Endpoints","type":"string"},{"JSONPath":".status.actualImage","description":"Actual Image","name":"Image","type":"string"},{"JSONPath":".status.phase","description":"Phase","name":"Phase","type":"string"},{"JSONPath":".metadata.creationTimestamp","name":"Age","type":"date"}],"group":"noobaa.io","names":{"kind":"NooBaa","listKind":"NooBaaList","plural":"noobaas","shortNames":["nb"],"singular":"noobaa"},"scope":"Namespaced","subresources":{"status":{}},"validation":{"openAPIV3Schema":{"description":"NooBaa is the Schema for the NooBaas API","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"type":"object"},"spec":{"description":"Specification of the desired behavior of the noobaa system.","properties":{"affinity":{"description":"Affinity (optional) passed through to noobaa's pods","properties":{"nodeAffinity":{"description":"Describes node affinity scheduling rules for the pod.","properties":{"preferredDuringSchedulingIgnoredDuringExecution":{"description":"The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.","items":{"description":"An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).","properties":{"preference":{"description":"A node selector term, associated with the corresponding weight.","properties":{"matchExpressions":{"description":"A list of node selector requirements by node's labels.","items":{"description":"A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"The label key that the selector applies to.","type":"string"},"operator":{"description":"Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.","type":"string"},"values":{"description":"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchFields":{"description":"A list of node selector requirements by node's fields.","items":{"description":"A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"The label key that the selector applies to.","type":"string"},"operator":{"description":"Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.","type":"string"},"values":{"description":"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"}},"type":"object"},"weight":{"description":"Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.","format":"int32","type":"integer"}},"required":["preference","weight"],"type":"object"},"type":"array"},"requiredDuringSchedulingIgnoredDuringExecution":{"description":"If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.","properties":{"nodeSelectorTerms":{"description":"Required. A list of node selector terms. The terms are ORed.","items":{"description":"A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.","properties":{"matchExpressions":{"description":"A list of node selector requirements by node's labels.","items":{"description":"A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"The label key that the selector applies to.","type":"string"},"operator":{"description":"Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.","type":"string"},"values":{"description":"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchFields":{"description":"A list of node selector requirements by node's fields.","items":{"description":"A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"The label key that the selector applies to.","type":"string"},"operator":{"description":"Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.","type":"string"},"values":{"description":"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"}},"type":"object"},"type":"array"}},"required":["nodeSelectorTerms"],"type":"object"}},"type":"object"},"podAffinity":{"description":"Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).","properties":{"preferredDuringSchedulingIgnoredDuringExecution":{"description":"The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.","items":{"description":"The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)","properties":{"podAffinityTerm":{"description":"Required. A pod affinity term, associated with the corresponding weight.","properties":{"labelSelector":{"description":"A label query over a set of resources, in this case pods.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"namespaces":{"description":"namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"","items":{"type":"string"},"type":"array"},"topologyKey":{"description":"This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.","type":"string"}},"required":["topologyKey"],"type":"object"},"weight":{"description":"weight associated with matching the corresponding podAffinityTerm, in the range 1-100.","format":"int32","type":"integer"}},"required":["podAffinityTerm","weight"],"type":"object"},"type":"array"},"requiredDuringSchedulingIgnoredDuringExecution":{"description":"If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.","items":{"description":"Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running","properties":{"labelSelector":{"description":"A label query over a set of resources, in this case pods.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"namespaces":{"description":"namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"","items":{"type":"string"},"type":"array"},"topologyKey":{"description":"This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.","type":"string"}},"required":["topologyKey"],"type":"object"},"type":"array"}},"type":"object"},"podAntiAffinity":{"description":"Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).","properties":{"preferredDuringSchedulingIgnoredDuringExecution":{"description":"The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.","items":{"description":"The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)","properties":{"podAffinityTerm":{"description":"Required. A pod affinity term, associated with the corresponding weight.","properties":{"labelSelector":{"description":"A label query over a set of resources, in this case pods.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"namespaces":{"description":"namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"","items":{"type":"string"},"type":"array"},"topologyKey":{"description":"This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.","type":"string"}},"required":["topologyKey"],"type":"object"},"weight":{"description":"weight associated with matching the corresponding podAffinityTerm, in the range 1-100.","format":"int32","type":"integer"}},"required":["podAffinityTerm","weight"],"type":"object"},"type":"array"},"requiredDuringSchedulingIgnoredDuringExecution":{"description":"If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.","items":{"description":"Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running","properties":{"labelSelector":{"description":"A label query over a set of resources, in this case pods.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"namespaces":{"description":"namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"","items":{"type":"string"},"type":"array"},"topologyKey":{"description":"This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.","type":"string"}},"required":["topologyKey"],"type":"object"},"type":"array"}},"type":"object"}},"type":"object"},"cleanupPolicy":{"description":"CleanupPolicy (optional) Indicates user's policy for deletion","properties":{"confirmation":{"description":"CleanupConfirmationProperty is a string that specifies cleanup confirmation","type":"string"}},"type":"object"},"coreResources":{"description":"CoreResources (optional) overrides the default resource requirements for the server container","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-compute-resources-container/","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-compute-resources-container/","type":"object"}},"type":"object"},"dbImage":{"description":"DBImage (optional) overrides the default image for the db container","type":"string"},"dbResources":{"description":"DBResources (optional) overrides the default resource requirements for the db container","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-compute-resources-container/","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-compute-resources-container/","type":"object"}},"type":"object"},"dbStorageClass":{"description":"DBStorageClass (optional) overrides the default cluster StorageClass for the database volume. For the time being this field is immutable and can only be set on system creation. This affects where the system stores its database which contains system config, buckets, objects meta-data and mapping file parts to storage locations.","type":"string"},"dbVolumeResources":{"description":"DBVolumeResources (optional) overrides the default PVC resource requirements for the database volume. For the time being this field is immutable and can only be set on system creation. This is because volume size updates are only supported for increasing the size, and only if the storage class specifies `allowVolumeExpansion: true`,","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-compute-resources-container/","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-compute-resources-container/","type":"object"}},"type":"object"},"endpoints":{"description":"Endpoints (optional) sets configuration info for the noobaa endpoint deployment.","properties":{"additionalVirtualHosts":{"description":"AdditionalVirtualHosts (optional) provide a list of additional hostnames (on top of the buildin names defined by the cluster: service name, elb name, route name) to be used as virtual hosts by the the endpoints in the endpoint deployment","items":{"type":"string"},"type":"array"},"maxCount":{"description":"MaxCount, the number of endpoint instances (pods) to be used as the upper bound when autoscaling","format":"int32","type":"integer"},"minCount":{"description":"MinCount, the number of endpoint instances (pods) to be used as the lower bound when autoscaling","format":"int32","type":"integer"},"resources":{"description":"Resources (optional) overrides the default resource requirements for every endpoint pod","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-compute-resources-container/","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-compute-resources-container/","type":"object"}},"type":"object"}},"type":"object"},"image":{"description":"Image (optional) overrides the default image for the server container","type":"string"},"imagePullSecret":{"description":"ImagePullSecret (optional) sets a pull secret for the system image","properties":{"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?","type":"string"}},"type":"object"},"joinSecret":{"description":"JoinSecret (optional) instructs the operator to join another cluster and point to a secret that holds the join information","properties":{"name":{"description":"Name is unique within a namespace to reference a secret resource.","type":"string"},"namespace":{"description":"Namespace defines the space within which the secret name must be unique.","type":"string"}},"type":"object"},"pvPoolDefaultStorageClass":{"description":"PVPoolDefaultStorageClass (optional) overrides the default cluster StorageClass for the pv-pool volumes. This affects where the system stores data chunks (encrypted). Updates to this field will only affect new pv-pools, but updates to existing pools are not supported by the operator.","type":"string"},"region":{"description":"Region (optional) provide a region for the location info of the endpoints in the endpoint deployment","type":"string"},"tolerations":{"description":"Tolerations (optional) passed through to noobaa's pods","items":{"description":"The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.","properties":{"effect":{"description":"Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.","type":"string"},"key":{"description":"Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.","type":"string"},"operator":{"description":"Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.","type":"string"},"tolerationSeconds":{"description":"TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.","format":"int64","type":"integer"},"value":{"description":"Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.","type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"status":{"description":"Most recently observed status of the noobaa system.","properties":{"accounts":{"description":"Accounts reports accounts info for the admin account","properties":{"admin":{"description":"UserStatus is the status info of a user secret","properties":{"secretRef":{"description":"SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace","properties":{"name":{"description":"Name is unique within a namespace to reference a secret resource.","type":"string"},"namespace":{"description":"Namespace defines the space within which the secret name must be unique.","type":"string"}},"type":"object"}},"required":["secretRef"],"type":"object"}},"required":["admin"],"type":"object"},"actualImage":{"description":"ActualImage is set to report which image the operator is using","type":"string"},"conditions":{"description":"Conditions is a list of conditions related to operator reconciliation","items":{"description":"Condition represents the state of the operator's reconciliation functionality.","properties":{"lastHeartbeatTime":{"format":"date-time","type":"string"},"lastTransitionTime":{"format":"date-time","type":"string"},"message":{"type":"string"},"reason":{"type":"string"},"status":{"type":"string"},"type":{"description":"ConditionType is the state of the operator's reconciliation functionality.","type":"string"}},"required":["status","type"],"type":"object"},"type":"array"},"endpoints":{"description":"Endpoints reports the actual number of endpoints in the endpoint deployment and the virtual hosts list used recognized by the endpoints","properties":{"readyCount":{"format":"int32","type":"integer"},"virtualHosts":{"items":{"type":"string"},"type":"array"}},"required":["readyCount","virtualHosts"],"type":"object"},"observedGeneration":{"description":"ObservedGeneration is the most recent generation observed for this noobaa system. It corresponds to the CR generation, which is updated on mutation by the API Server.","format":"int64","type":"integer"},"phase":{"description":"Phase is a simple, high-level summary of where the System is in its lifecycle","type":"string"},"readme":{"description":"Readme is a user readable string with explanations on the system","type":"string"},"relatedObjects":{"description":"RelatedObjects is a list of objects related to this operator.","items":{"description":"ObjectReference contains enough information to let you inspect or modify the referred object.","properties":{"apiVersion":{"description":"API version of the referent.","type":"string"},"fieldPath":{"description":"If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.","type":"string"},"kind":{"description":"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"namespace":{"description":"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/","type":"string"},"resourceVersion":{"description":"Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency","type":"string"},"uid":{"description":"UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids","type":"string"}},"type":"object"},"type":"array"},"services":{"description":"Services reports addresses for the services","properties":{"serviceMgmt":{"description":"ServiceStatus is the status info and network addresses of a service","properties":{"externalDNS":{"description":"ExternalDNS are external public addresses for the service","items":{"type":"string"},"type":"array"},"externalIP":{"description":"ExternalIP are external public addresses for the service LoadBalancerPorts such as AWS ELB provide public address and load balancing for the service IngressPorts are manually created public addresses for the service https://kubernetes.io/docs/concepts/services-networking/service/#external-ips https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer https://kubernetes.io/docs/concepts/services-networking/ingress/","items":{"type":"string"},"type":"array"},"internalDNS":{"description":"InternalDNS are internal addresses of the service inside the cluster","items":{"type":"string"},"type":"array"},"internalIP":{"description":"InternalIP are internal addresses of the service inside the cluster https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types","items":{"type":"string"},"type":"array"},"nodePorts":{"description":"NodePorts are the most basic network available. NodePorts use the networks available on the hosts of kubernetes nodes. This generally works from within a pod, and from the internal network of the nodes, but may fail from public network. https://kubernetes.io/docs/concepts/services-networking/service/#nodeport","items":{"type":"string"},"type":"array"},"podPorts":{"description":"PodPorts are the second most basic network address. Every pod has an IP in the cluster and the pods network is a mesh so the operator running inside a pod in the cluster can use this address. Note: pod IPs are not guaranteed to persist over restarts, so should be rediscovered. Note2: when running the operator outside of the cluster, pod IP is not accessible.","items":{"type":"string"},"type":"array"}},"type":"object"},"serviceS3":{"description":"ServiceStatus is the status info and network addresses of a service","properties":{"externalDNS":{"description":"ExternalDNS are external public addresses for the service","items":{"type":"string"},"type":"array"},"externalIP":{"description":"ExternalIP are external public addresses for the service LoadBalancerPorts such as AWS ELB provide public address and load balancing for the service IngressPorts are manually created public addresses for the service https://kubernetes.io/docs/concepts/services-networking/service/#external-ips https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer https://kubernetes.io/docs/concepts/services-networking/ingress/","items":{"type":"string"},"type":"array"},"internalDNS":{"description":"InternalDNS are internal addresses of the service inside the cluster","items":{"type":"string"},"type":"array"},"internalIP":{"description":"InternalIP are internal addresses of the service inside the cluster https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types","items":{"type":"string"},"type":"array"},"nodePorts":{"description":"NodePorts are the most basic network available. NodePorts use the networks available on the hosts of kubernetes nodes. This generally works from within a pod, and from the internal network of the nodes, but may fail from public network. https://kubernetes.io/docs/concepts/services-networking/service/#nodeport","items":{"type":"string"},"type":"array"},"podPorts":{"description":"PodPorts are the second most basic network address. Every pod has an IP in the cluster and the pods network is a mesh so the operator running inside a pod in the cluster can use this address. Note: pod IPs are not guaranteed to persist over restarts, so should be rediscovered. Note2: when running the operator outside of the cluster, pod IP is not accessible.","items":{"type":"string"},"type":"array"}},"type":"object"}},"required":["serviceMgmt","serviceS3"],"type":"object"}},"type":"object"}},"type":"object"}},"version":"v1alpha1","versions":[{"name":"v1alpha1","served":true,"storage":true}]}}
      name: noobaas.noobaa.io
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"name":"objectbuckets.objectbucket.io"},"spec":{"additionalPrinterColumns":[{"JSONPath":".spec.storageClassName","description":"StorageClass","name":"Storage-Class","type":"string"},{"JSONPath":".spec.claimRef.namespace","description":"ClaimNamespace","name":"Claim-Namespace","type":"string"},{"JSONPath":".spec.claimRef.name","description":"ClaimName","name":"Claim-Name","type":"string"},{"JSONPath":".spec.reclaimPolicy","description":"ReclaimPolicy","name":"Reclaim-Policy","type":"string"},{"JSONPath":".status.phase","description":"Phase","name":"Phase","type":"string"},{"JSONPath":".metadata.creationTimestamp","name":"Age","type":"date"}],"group":"objectbucket.io","names":{"kind":"ObjectBucket","listKind":"ObjectBucketList","plural":"objectbuckets","shortNames":["ob","obs"],"singular":"objectbucket"},"scope":"Cluster","subresources":{"status":{}},"validation":{"openAPIV3Schema":{"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/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/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata.","type":"object"},"spec":{"description":"Specification of the desired behavior of the bucket.","properties":{"additionalState":{"additionalProperties":{"type":"string"},"description":"additionalState gives providers a location to set proprietary config values (tenant, namespace, etc)","type":"object"},"claimRef":{"description":"ObjectReference to ObjectBucketClaim","type":"object"},"endpoint":{"description":"Endpoint contains all connection relevant data that an app may require for accessing the bucket","properties":{"additionalConfig":{"additionalProperties":{"type":"string"},"description":"AdditionalConfig gives providers a location to set proprietary config values (tenant, namespace, etc)","type":"object"},"bucketHost":{"description":"Bucket address hostname","type":"string"},"bucketName":{"description":"Bucket name","type":"string"},"bucketPort":{"description":"Bucket address port","type":"integer"},"region":{"description":"Bucket region","type":"string"},"subRegion":{"description":"Bucket sub-region","type":"string"}},"type":"object"},"reclaimPolicy":{"description":"Describes a policy for end-of-life maintenance of ObjectBucket.","enum":["Delete","Retain","Recycle"],"type":"string"},"storageClassName":{"description":"StorageClass names the StorageClass object representing the desired provisioner and parameters","type":"string"}},"required":["storageClassName"],"type":"object"},"status":{"description":"Most recently observed status of the bucket.","properties":{"phase":{"description":"ObjectBucketStatusPhase is set by the controller to save the state of the provisioning process","enum":["Bound","Released","Failed"],"type":"string"}},"type":"object"}}}},"version":"v1alpha1","versions":[{"name":"v1alpha1","served":true,"storage":true}]}}
      name: objectbuckets.objectbucket.io
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"name":"objectbucketclaims.objectbucket.io"},"spec":{"additionalPrinterColumns":[{"JSONPath":".spec.storageClassName","description":"StorageClass","name":"Storage-Class","type":"string"},{"JSONPath":".status.phase","description":"Phase","name":"Phase","type":"string"},{"JSONPath":".metadata.creationTimestamp","name":"Age","type":"date"}],"group":"objectbucket.io","names":{"kind":"ObjectBucketClaim","listKind":"ObjectBucketClaimList","plural":"objectbucketclaims","shortNames":["obc","obcs"],"singular":"objectbucketclaim"},"scope":"Namespaced","subresources":{"status":{}},"validation":{"openAPIV3Schema":{"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/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/api-conventions.md#types-kinds","type":"string"},"metadata":{"description":"Standard object metadata.","type":"object"},"spec":{"description":"Specification of the desired behavior of the claim.","properties":{"additionalConfig":{"additionalProperties":{"type":"string"},"description":"AdditionalConfig gives providers a location to set proprietary config values (tenant, namespace, etc)","type":"object"},"bucketName":{"description":"BucketName (not recommended) the name of the bucket. Caution! In-store bucket names may collide across namespaces.  If you define the name yourself, try to make it as unique as possible.","type":"string"},"generateBucketName":{"description":"GenerateBucketName (recommended) a prefix for a bucket name to be followed by a hyphen and 5 random characters. Protects against in-store name collisions.","type":"string"},"storageClassName":{"description":"StorageClass names the StorageClass object representing the desired provisioner and parameters","type":"string"}},"required":["storageClassName"],"type":"object"},"status":{"description":"Most recently observed status of the claim.","properties":{"phase":{"description":"ObjectBucketClaimStatusPhase is set by the controller to save the state of the provisioning process","enum":["Pending","Bound","Released","Failed"],"type":"string"}},"type":"object"}}}},"version":"v1alpha1","versions":[{"name":"v1alpha1","served":true,"storage":true}]}}
      name: objectbucketclaims.objectbucket.io
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"name":"ocsinitializations.ocs.openshift.io"},"spec":{"additionalPrinterColumns":[{"JSONPath":".metadata.creationTimestamp","name":"Age","type":"date"},{"JSONPath":".status.phase","description":"Current Phase","name":"Phase","type":"string"},{"JSONPath":".metadata.creationTimestamp","name":"Created At","type":"string"}],"group":"ocs.openshift.io","names":{"kind":"OCSInitialization","listKind":"OCSInitializationList","plural":"ocsinitializations","singular":"ocsinitialization"},"scope":"Namespaced","subresources":{"status":{}},"validation":{"openAPIV3Schema":{"description":"OCSInitialization is the Schema for the ocsinitialization API","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"type":"object"},"spec":{"description":"OCSInitializationSpec defines the desired state of OCSInitialization","properties":{"enableCephTools":{"description":"EnableCephTools toggles on whether or not the ceph tools pod should be deployed. Defaults to false","type":"boolean"}},"type":"object"},"status":{"description":"OCSInitializationStatus defines the observed state of OCSInitialization","properties":{"conditions":{"description":"Conditions describes the state of the OCSInitialization resource.","items":{"description":"Condition represents the state of the operator's reconciliation functionality.","properties":{"lastHeartbeatTime":{"format":"date-time","type":"string"},"lastTransitionTime":{"format":"date-time","type":"string"},"message":{"type":"string"},"reason":{"type":"string"},"status":{"type":"string"},"type":{"description":"ConditionType is the state of the operator's reconciliation functionality.","type":"string"}},"required":["status","type"],"type":"object"},"type":"array"},"errorMessage":{"type":"string"},"phase":{"description":"Phase describes the Phase of OCSInitialization This is used by OLM UI to provide status information to the user","type":"string"},"relatedObjects":{"description":"RelatedObjects is a list of objects created and maintained by this operator. Object references will be added to this list after they have been created AND found in the cluster.","items":{"description":"ObjectReference contains enough information to let you inspect or modify the referred object.","properties":{"apiVersion":{"description":"API version of the referent.","type":"string"},"fieldPath":{"description":"If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.","type":"string"},"kind":{"description":"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"namespace":{"description":"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/","type":"string"},"resourceVersion":{"description":"Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency","type":"string"},"uid":{"description":"UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids","type":"string"}},"type":"object"},"type":"array"},"rookCephOperatorConfigCreated":{"type":"boolean"},"sCCsCreated":{"type":"boolean"}},"type":"object"}},"type":"object"}},"version":"v1","versions":[{"name":"v1","served":true,"storage":true}]}}
      name: ocsinitializations.ocs.openshift.io
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: Role
      manifest: |
        {"apiVersion":"rbac.authorization.k8s.io/v1beta1","kind":"Role","metadata":{"name":"rook-ceph-metrics"},"rules":[{"apiGroups":[""],"resources":["services","endpoints","pods"],"verbs":["get","list","watch"]}]}
      name: rook-ceph-metrics
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: RoleBinding
      manifest: |
        {"apiVersion":"rbac.authorization.k8s.io/v1beta1","kind":"RoleBinding","metadata":{"name":"rook-ceph-metrics"},"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"Role","name":"rook-ceph-metrics"},"subjects":[{"kind":"ServiceAccount","name":"prometheus-k8s","namespace":"openshift-monitoring"}]}
      name: rook-ceph-metrics
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: Role
      manifest: |
        {"apiVersion":"rbac.authorization.k8s.io/v1beta1","kind":"Role","metadata":{"name":"rook-ceph-monitor"},"rules":[{"apiGroups":["monitoring.coreos.com"],"resources":["*"],"verbs":["*"]}]}
      name: rook-ceph-monitor
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: RoleBinding
      manifest: |
        {"apiVersion":"rbac.authorization.k8s.io/v1beta1","kind":"RoleBinding","metadata":{"name":"rook-ceph-monitor"},"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"Role","name":"rook-ceph-monitor"},"subjects":[{"kind":"ServiceAccount","name":"rook-ceph-system","namespace":"openshift-storage"}]}
      name: rook-ceph-monitor
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"name":"storageclusters.ocs.openshift.io"},"spec":{"additionalPrinterColumns":[{"JSONPath":".metadata.creationTimestamp","name":"Age","type":"date"},{"JSONPath":".status.phase","description":"Current Phase","name":"Phase","type":"string"},{"JSONPath":".spec.externalStorage.enable","description":"External Storage Cluster","name":"External","type":"boolean"},{"JSONPath":".metadata.creationTimestamp","name":"Created At","type":"string"},{"JSONPath":".spec.version","description":"Storage Cluster Version","name":"Version","type":"string"}],"group":"ocs.openshift.io","names":{"kind":"StorageCluster","listKind":"StorageClusterList","plural":"storageclusters","singular":"storagecluster"},"scope":"Namespaced","subresources":{"status":{}},"validation":{"openAPIV3Schema":{"description":"StorageCluster is the Schema for the storageclusters API","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"type":"object"},"spec":{"description":"StorageClusterSpec defines the desired state of StorageCluster","properties":{"externalStorage":{"description":"External Storage is optional and defaults to false. When set to true, OCS will connect to an external OCS Storage Cluster instead of provisioning one locally.","properties":{"enable":{"type":"boolean"}},"type":"object"},"hostNetwork":{"description":"HostNetwork defaults to false","type":"boolean"},"instanceType":{"type":"string"},"labelSelector":{"description":"LabelSelector is used to specify custom labels of nodes to run OCS on","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"manageNodes":{"type":"boolean"},"monDataDirHostPath":{"type":"string"},"monPVCTemplate":{"description":"PersistentVolumeClaim is a user's request for and claim to a persistent volume","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":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","type":"object"},"spec":{"description":"Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims","properties":{"accessModes":{"description":"AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1","items":{"type":"string"},"type":"array"},"dataSource":{"description":"This field requires the VolumeSnapshotDataSource alpha feature gate to be enabled and currently VolumeSnapshot is the only supported data source. If the provisioner can support VolumeSnapshot data source, it will create a new volume and data will be restored to the volume at the same time. If the provisioner does not support VolumeSnapshot data source, volume will not be created and the failure will be reported as an event. In the future, we plan to support more data source types and the behavior of the provisioner may change.","properties":{"apiGroup":{"description":"APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.","type":"string"},"kind":{"description":"Kind is the type of resource being referenced","type":"string"},"name":{"description":"Name is the name of resource being referenced","type":"string"}},"required":["kind","name"],"type":"object"},"resources":{"description":"Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources","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-compute-resources-container/","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-compute-resources-container/","type":"object"}},"type":"object"},"selector":{"description":"A label query over volumes to consider for binding.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"storageClassName":{"description":"Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1","type":"string"},"volumeMode":{"description":"volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. This is a beta feature.","type":"string"},"volumeName":{"description":"VolumeName is the binding reference to the PersistentVolume backing this claim.","type":"string"}},"type":"object"},"status":{"description":"Status represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims","properties":{"accessModes":{"description":"AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1","items":{"type":"string"},"type":"array"},"capacity":{"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":"Represents the actual resources of the underlying volume.","type":"object"},"conditions":{"description":"Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.","items":{"description":"PersistentVolumeClaimCondition contails details about state of pvc","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, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports \"ResizeStarted\" that means the underlying persistent volume is being resized.","type":"string"},"status":{"type":"string"},"type":{"description":"PersistentVolumeClaimConditionType is a valid value of PersistentVolumeClaimCondition.Type","type":"string"}},"required":["status","type"],"type":"object"},"type":"array"},"phase":{"description":"Phase represents the current phase of PersistentVolumeClaim.","type":"string"}},"type":"object"}},"type":"object"},"placement":{"additionalProperties":{"properties":{"nodeAffinity":{"description":"Node affinity is a group of node affinity scheduling rules.","properties":{"preferredDuringSchedulingIgnoredDuringExecution":{"description":"The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.","items":{"description":"An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).","properties":{"preference":{"description":"A node selector term, associated with the corresponding weight.","properties":{"matchExpressions":{"description":"A list of node selector requirements by node's labels.","items":{"description":"A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"The label key that the selector applies to.","type":"string"},"operator":{"description":"Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.","type":"string"},"values":{"description":"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchFields":{"description":"A list of node selector requirements by node's fields.","items":{"description":"A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"The label key that the selector applies to.","type":"string"},"operator":{"description":"Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.","type":"string"},"values":{"description":"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"}},"type":"object"},"weight":{"description":"Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.","format":"int32","type":"integer"}},"required":["preference","weight"],"type":"object"},"type":"array"},"requiredDuringSchedulingIgnoredDuringExecution":{"description":"If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.","properties":{"nodeSelectorTerms":{"description":"Required. A list of node selector terms. The terms are ORed.","items":{"description":"A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.","properties":{"matchExpressions":{"description":"A list of node selector requirements by node's labels.","items":{"description":"A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"The label key that the selector applies to.","type":"string"},"operator":{"description":"Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.","type":"string"},"values":{"description":"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchFields":{"description":"A list of node selector requirements by node's fields.","items":{"description":"A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"The label key that the selector applies to.","type":"string"},"operator":{"description":"Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.","type":"string"},"values":{"description":"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"}},"type":"object"},"type":"array"}},"required":["nodeSelectorTerms"],"type":"object"}},"type":"object"},"podAffinity":{"description":"Pod affinity is a group of inter pod affinity scheduling rules.","properties":{"preferredDuringSchedulingIgnoredDuringExecution":{"description":"The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.","items":{"description":"The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)","properties":{"podAffinityTerm":{"description":"Required. A pod affinity term, associated with the corresponding weight.","properties":{"labelSelector":{"description":"A label query over a set of resources, in this case pods.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"namespaces":{"description":"namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"","items":{"type":"string"},"type":"array"},"topologyKey":{"description":"This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.","type":"string"}},"required":["topologyKey"],"type":"object"},"weight":{"description":"weight associated with matching the corresponding podAffinityTerm, in the range 1-100.","format":"int32","type":"integer"}},"required":["podAffinityTerm","weight"],"type":"object"},"type":"array"},"requiredDuringSchedulingIgnoredDuringExecution":{"description":"If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.","items":{"description":"Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running","properties":{"labelSelector":{"description":"A label query over a set of resources, in this case pods.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"namespaces":{"description":"namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"","items":{"type":"string"},"type":"array"},"topologyKey":{"description":"This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.","type":"string"}},"required":["topologyKey"],"type":"object"},"type":"array"}},"type":"object"},"podAntiAffinity":{"description":"Pod anti affinity is a group of inter pod anti affinity scheduling rules.","properties":{"preferredDuringSchedulingIgnoredDuringExecution":{"description":"The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.","items":{"description":"The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)","properties":{"podAffinityTerm":{"description":"Required. A pod affinity term, associated with the corresponding weight.","properties":{"labelSelector":{"description":"A label query over a set of resources, in this case pods.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"namespaces":{"description":"namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"","items":{"type":"string"},"type":"array"},"topologyKey":{"description":"This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.","type":"string"}},"required":["topologyKey"],"type":"object"},"weight":{"description":"weight associated with matching the corresponding podAffinityTerm, in the range 1-100.","format":"int32","type":"integer"}},"required":["podAffinityTerm","weight"],"type":"object"},"type":"array"},"requiredDuringSchedulingIgnoredDuringExecution":{"description":"If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.","items":{"description":"Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running","properties":{"labelSelector":{"description":"A label query over a set of resources, in this case pods.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"namespaces":{"description":"namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"","items":{"type":"string"},"type":"array"},"topologyKey":{"description":"This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.","type":"string"}},"required":["topologyKey"],"type":"object"},"type":"array"}},"type":"object"},"tolerations":{"items":{"description":"The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.","properties":{"effect":{"description":"Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.","type":"string"},"key":{"description":"Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.","type":"string"},"operator":{"description":"Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.","type":"string"},"tolerationSeconds":{"description":"TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.","format":"int64","type":"integer"},"value":{"description":"Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.","type":"string"}},"type":"object"},"type":"array"},"topologySpreadConstraints":{"items":{"description":"TopologySpreadConstraint specifies how to spread matching pods among the given topology.","properties":{"labelSelector":{"description":"LabelSelector is used to find matching pods. Pods that match this label selector are counted to determine the number of pods in their corresponding topology domain.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"maxSkew":{"description":"MaxSkew describes the degree to which pods may be unevenly distributed. It's the maximum permitted difference between the number of matching pods in any two topology domains of a given topology type. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | |   P   |   P   |       | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. It's a required field. Default value is 1 and 0 is not allowed.","format":"int32","type":"integer"},"topologyKey":{"description":"TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.","type":"string"},"whenUnsatisfiable":{"description":"WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it - ScheduleAnyway tells the scheduler to still schedule it It's considered as \"Unsatisfiable\" if and only if placing incoming pod on any topology violates \"MaxSkew\". For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P |   P   |   P   | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.","type":"string"}},"required":["maxSkew","topologyKey","whenUnsatisfiable"],"type":"object"},"type":"array"}},"type":"object"},"description":"Placement is optional and used to specify placements of OCS components explicitly","type":"object"},"resources":{"additionalProperties":{"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-compute-resources-container/","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-compute-resources-container/","type":"object"}},"type":"object"},"description":"Resources follows the conventions of and is mapped to CephCluster.Spec.Resources","type":"object"},"storageDeviceSets":{"items":{"description":"StorageDeviceSet defines a set of storage devices. It configures the StorageClassDeviceSets field in Rook-Ceph.","properties":{"config":{"description":"StorageDeviceSetConfig defines Ceph OSD specific config options for the StorageDeviceSet TODO: Fill in the members when the actual configurable options are defined in rook-ceph","properties":{"tuneSlowDeviceClass":{"description":"TuneSlowDeviceClass tunes the OSD when running on a slow Device Class","type":"boolean"}},"type":"object"},"count":{"description":"Count is the number of devices in each StorageClassDeviceSet","minimum":1,"type":"integer"},"dataPVCTemplate":{"description":"PersistentVolumeClaim is a user's request for and claim to a persistent volume","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":{"description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","type":"object"},"spec":{"description":"Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims","properties":{"accessModes":{"description":"AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1","items":{"type":"string"},"type":"array"},"dataSource":{"description":"This field requires the VolumeSnapshotDataSource alpha feature gate to be enabled and currently VolumeSnapshot is the only supported data source. If the provisioner can support VolumeSnapshot data source, it will create a new volume and data will be restored to the volume at the same time. If the provisioner does not support VolumeSnapshot data source, volume will not be created and the failure will be reported as an event. In the future, we plan to support more data source types and the behavior of the provisioner may change.","properties":{"apiGroup":{"description":"APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.","type":"string"},"kind":{"description":"Kind is the type of resource being referenced","type":"string"},"name":{"description":"Name is the name of resource being referenced","type":"string"}},"required":["kind","name"],"type":"object"},"resources":{"description":"Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources","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-compute-resources-container/","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-compute-resources-container/","type":"object"}},"type":"object"},"selector":{"description":"A label query over volumes to consider for binding.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"storageClassName":{"description":"Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1","type":"string"},"volumeMode":{"description":"volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. This is a beta feature.","type":"string"},"volumeName":{"description":"VolumeName is the binding reference to the PersistentVolume backing this claim.","type":"string"}},"type":"object"},"status":{"description":"Status represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims","properties":{"accessModes":{"description":"AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1","items":{"type":"string"},"type":"array"},"capacity":{"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":"Represents the actual resources of the underlying volume.","type":"object"},"conditions":{"description":"Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.","items":{"description":"PersistentVolumeClaimCondition contails details about state of pvc","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, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports \"ResizeStarted\" that means the underlying persistent volume is being resized.","type":"string"},"status":{"type":"string"},"type":{"description":"PersistentVolumeClaimConditionType is a valid value of PersistentVolumeClaimCondition.Type","type":"string"}},"required":["status","type"],"type":"object"},"type":"array"},"phase":{"description":"Phase represents the current phase of PersistentVolumeClaim.","type":"string"}},"type":"object"}},"type":"object"},"name":{"type":"string"},"placement":{"properties":{"nodeAffinity":{"description":"Node affinity is a group of node affinity scheduling rules.","properties":{"preferredDuringSchedulingIgnoredDuringExecution":{"description":"The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.","items":{"description":"An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).","properties":{"preference":{"description":"A node selector term, associated with the corresponding weight.","properties":{"matchExpressions":{"description":"A list of node selector requirements by node's labels.","items":{"description":"A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"The label key that the selector applies to.","type":"string"},"operator":{"description":"Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.","type":"string"},"values":{"description":"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchFields":{"description":"A list of node selector requirements by node's fields.","items":{"description":"A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"The label key that the selector applies to.","type":"string"},"operator":{"description":"Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.","type":"string"},"values":{"description":"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"}},"type":"object"},"weight":{"description":"Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.","format":"int32","type":"integer"}},"required":["preference","weight"],"type":"object"},"type":"array"},"requiredDuringSchedulingIgnoredDuringExecution":{"description":"If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.","properties":{"nodeSelectorTerms":{"description":"Required. A list of node selector terms. The terms are ORed.","items":{"description":"A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.","properties":{"matchExpressions":{"description":"A list of node selector requirements by node's labels.","items":{"description":"A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"The label key that the selector applies to.","type":"string"},"operator":{"description":"Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.","type":"string"},"values":{"description":"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchFields":{"description":"A list of node selector requirements by node's fields.","items":{"description":"A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"The label key that the selector applies to.","type":"string"},"operator":{"description":"Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.","type":"string"},"values":{"description":"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"}},"type":"object"},"type":"array"}},"required":["nodeSelectorTerms"],"type":"object"}},"type":"object"},"podAffinity":{"description":"Pod affinity is a group of inter pod affinity scheduling rules.","properties":{"preferredDuringSchedulingIgnoredDuringExecution":{"description":"The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.","items":{"description":"The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)","properties":{"podAffinityTerm":{"description":"Required. A pod affinity term, associated with the corresponding weight.","properties":{"labelSelector":{"description":"A label query over a set of resources, in this case pods.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"namespaces":{"description":"namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"","items":{"type":"string"},"type":"array"},"topologyKey":{"description":"This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.","type":"string"}},"required":["topologyKey"],"type":"object"},"weight":{"description":"weight associated with matching the corresponding podAffinityTerm, in the range 1-100.","format":"int32","type":"integer"}},"required":["podAffinityTerm","weight"],"type":"object"},"type":"array"},"requiredDuringSchedulingIgnoredDuringExecution":{"description":"If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.","items":{"description":"Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running","properties":{"labelSelector":{"description":"A label query over a set of resources, in this case pods.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"namespaces":{"description":"namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"","items":{"type":"string"},"type":"array"},"topologyKey":{"description":"This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.","type":"string"}},"required":["topologyKey"],"type":"object"},"type":"array"}},"type":"object"},"podAntiAffinity":{"description":"Pod anti affinity is a group of inter pod anti affinity scheduling rules.","properties":{"preferredDuringSchedulingIgnoredDuringExecution":{"description":"The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.","items":{"description":"The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)","properties":{"podAffinityTerm":{"description":"Required. A pod affinity term, associated with the corresponding weight.","properties":{"labelSelector":{"description":"A label query over a set of resources, in this case pods.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"namespaces":{"description":"namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"","items":{"type":"string"},"type":"array"},"topologyKey":{"description":"This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.","type":"string"}},"required":["topologyKey"],"type":"object"},"weight":{"description":"weight associated with matching the corresponding podAffinityTerm, in the range 1-100.","format":"int32","type":"integer"}},"required":["podAffinityTerm","weight"],"type":"object"},"type":"array"},"requiredDuringSchedulingIgnoredDuringExecution":{"description":"If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.","items":{"description":"Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running","properties":{"labelSelector":{"description":"A label query over a set of resources, in this case pods.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"namespaces":{"description":"namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"","items":{"type":"string"},"type":"array"},"topologyKey":{"description":"This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.","type":"string"}},"required":["topologyKey"],"type":"object"},"type":"array"}},"type":"object"},"tolerations":{"items":{"description":"The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.","properties":{"effect":{"description":"Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.","type":"string"},"key":{"description":"Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.","type":"string"},"operator":{"description":"Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.","type":"string"},"tolerationSeconds":{"description":"TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.","format":"int64","type":"integer"},"value":{"description":"Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.","type":"string"}},"type":"object"},"type":"array"},"topologySpreadConstraints":{"items":{"description":"TopologySpreadConstraint specifies how to spread matching pods among the given topology.","properties":{"labelSelector":{"description":"LabelSelector is used to find matching pods. Pods that match this label selector are counted to determine the number of pods in their corresponding topology domain.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"maxSkew":{"description":"MaxSkew describes the degree to which pods may be unevenly distributed. It's the maximum permitted difference between the number of matching pods in any two topology domains of a given topology type. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | |   P   |   P   |       | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. It's a required field. Default value is 1 and 0 is not allowed.","format":"int32","type":"integer"},"topologyKey":{"description":"TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.","type":"string"},"whenUnsatisfiable":{"description":"WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it - ScheduleAnyway tells the scheduler to still schedule it It's considered as \"Unsatisfiable\" if and only if placing incoming pod on any topology violates \"MaxSkew\". For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P |   P   |   P   | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.","type":"string"}},"required":["maxSkew","topologyKey","whenUnsatisfiable"],"type":"object"},"type":"array"}},"type":"object"},"portable":{"description":"Portable says whether the OSDs in this device set can move between nodes. This is ignored if Placement is not set","type":"boolean"},"replica":{"description":"Replica is the number of StorageClassDeviceSets for this StorageDeviceSet","minimum":1,"type":"integer"},"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-compute-resources-container/","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-compute-resources-container/","type":"object"}},"type":"object"},"topologyKey":{"description":"TopologyKey is the Kubernetes topology label that the StorageClassDeviceSets will be distributed across. Ignored if Placement is set","type":"string"}},"required":["count","dataPVCTemplate","name"],"type":"object"},"type":"array"},"version":{"description":"Version specifies the version of StorageCluster","type":"string"}},"type":"object"},"status":{"description":"StorageClusterStatus defines the observed state of StorageCluster","properties":{"cephBlockPoolsCreated":{"type":"boolean"},"cephFilesystemsCreated":{"type":"boolean"},"cephObjectStoreUsersCreated":{"type":"boolean"},"cephObjectStoresCreated":{"type":"boolean"},"conditions":{"description":"Conditions describes the state of the StorageCluster resource.","items":{"description":"Condition represents the state of the operator's reconciliation functionality.","properties":{"lastHeartbeatTime":{"format":"date-time","type":"string"},"lastTransitionTime":{"format":"date-time","type":"string"},"message":{"type":"string"},"reason":{"type":"string"},"status":{"type":"string"},"type":{"description":"ConditionType is the state of the operator's reconciliation functionality.","type":"string"}},"required":["status","type"],"type":"object"},"type":"array"},"externalSecretFound":{"description":"ExternalSecretFound indicates whether a Secret containing information about an external CephCluster was found or not","type":"boolean"},"failureDomain":{"description":"FailureDomain is the base CRUSH element Ceph will use to distribute its data replicas for the default CephBlockPool","type":"string"},"nodeTopologies":{"description":"NodeTopologies is a list of topology labels on all nodes matching the StorageCluster's placement selector.","properties":{"labels":{"additionalProperties":{"description":"TopologyLabelValues is a list of values for a topology label","items":{"type":"string"},"type":"array"},"description":"Labels is a map of topology label keys (e.g. \"failure-domain.kubernetes.io\") to a set of values for those keys.","nullable":true,"type":"object"}},"type":"object"},"phase":{"description":"Phase describes the Phase of StorageCluster This is used by OLM UI to provide status information to the user","type":"string"},"relatedObjects":{"description":"RelatedObjects is a list of objects created and maintained by this operator. Object references will be added to this list after they have been created AND found in the cluster.","items":{"description":"ObjectReference contains enough information to let you inspect or modify the referred object.","properties":{"apiVersion":{"description":"API version of the referent.","type":"string"},"fieldPath":{"description":"If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.","type":"string"},"kind":{"description":"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"namespace":{"description":"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/","type":"string"},"resourceVersion":{"description":"Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency","type":"string"},"uid":{"description":"UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids","type":"string"}},"type":"object"},"type":"array"},"storageClassesCreated":{"type":"boolean"}},"type":"object"}},"type":"object"}},"version":"v1","versions":[{"name":"v1","served":true,"storage":true}]}}
      name: storageclusters.ocs.openshift.io
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: apiextensions.k8s.io
      kind: CustomResourceDefinition
      manifest: |
        {"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"name":"storageclusterinitializations.ocs.openshift.io"},"spec":{"group":"ocs.openshift.io","names":{"kind":"StorageClusterInitialization","listKind":"StorageClusterInitializationList","plural":"storageclusterinitializations","singular":"storageclusterinitialization"},"scope":"Namespaced","subresources":{"status":{}},"validation":{"openAPIV3Schema":{"description":"StorageClusterInitialization is the Schema for the storageclusterinitializations API","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"type":"object"},"spec":{"description":"StorageClusterInitializationSpec defines the desired state of StorageClusterInitialization","type":"object"},"status":{"description":"StorageClusterInitializationStatus defines the observed state of StorageClusterInitialization","type":"object"}},"type":"object"}},"version":"v1","versions":[{"name":"v1","served":true,"storage":true}]}}
      name: storageclusterinitializations.ocs.openshift.io
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1beta1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"rook-ceph-system","namespace":"openshift-operators","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: rook-ceph-system
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: Role
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-652r4","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"},"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]},"rules":[{"verbs":["get","list","watch","patch","create","update","delete"],"apiGroups":[""],"resources":["pods","configmaps","services"]},{"verbs":["get","list","watch","create","update","delete"],"apiGroups":["apps","extensions"],"resources":["daemonsets","statefulsets","deployments"]},{"verbs":["get"],"apiGroups":["k8s.cni.cncf.io"],"resources":["network-attachment-definitions"]}]}
      name: ocs-operator.v4.5.0-652r4
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: RoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-652r4-rook-ceph-system-n95mb","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"},"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]},"subjects":[{"kind":"ServiceAccount","name":"rook-ceph-system","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"Role","name":"ocs-operator.v4.5.0-652r4"}}
      name: ocs-operator.v4.5.0-652r4-rook-ceph-system-n95mb
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-nnrjf","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[{"verbs":["get","list","watch","patch","create","update","delete"],"apiGroups":["","apps","extensions"],"resources":["secrets","pods","pods/log","services","configmaps","deployments","daemonsets"]}]}
      name: ocs-operator.v4.5.0-nnrjf
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-nnbxp","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[{"verbs":["get","list","watch"],"apiGroups":[""],"resources":["pods","nodes","nodes/proxy","services"]},{"verbs":["get","list","watch","patch","create","update","delete"],"apiGroups":[""],"resources":["events","persistentvolumes","persistentvolumeclaims","endpoints"]},{"verbs":["get","list","watch"],"apiGroups":["storage.k8s.io"],"resources":["storageclasses"]},{"verbs":["get","list","watch","create","update","delete"],"apiGroups":["batch"],"resources":["jobs"]},{"verbs":["*"],"apiGroups":["ceph.rook.io"],"resources":["*"]},{"verbs":["*"],"apiGroups":["rook.io"],"resources":["*"]},{"verbs":["*"],"apiGroups":["policy","apps","extensions"],"resources":["poddisruptionbudgets","deployments","replicasets"]},{"verbs":["get","list","watch","create","update","delete"],"apiGroups":["healthchecking.openshift.io"],"resources":["machinedisruptionbudgets"]},{"verbs":["get","list","watch","create","update","delete"],"apiGroups":["machine.openshift.io"],"resources":["machines"]},{"verbs":["create"],"apiGroups":["storage.k8s.io"],"resources":["csidrivers"]}]}
      name: ocs-operator.v4.5.0-nnbxp
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-dh7r9","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[{"verbs":["*"],"apiGroups":[""],"resources":["secrets","configmaps"]},{"verbs":["get","list","watch"],"apiGroups":["storage.k8s.io"],"resources":["storageclasses"]},{"verbs":["*"],"apiGroups":["objectbucket.io"],"resources":["*"]}]}
      name: ocs-operator.v4.5.0-dh7r9
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-j4sgc","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[{"verbs":["use"],"apiGroups":["security.openshift.io"],"resources":["securitycontextconstraints"],"resourceNames":["privileged"]}]}
      name: ocs-operator.v4.5.0-j4sgc
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-nnrjf-rook-ceph-system-4ww8w","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rook-ceph-system","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-nnrjf"}}
      name: ocs-operator.v4.5.0-nnrjf-rook-ceph-system-4ww8w
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-nnbxp-rook-ceph-system-5rtb2","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rook-ceph-system","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-nnbxp"}}
      name: ocs-operator.v4.5.0-nnbxp-rook-ceph-system-5rtb2
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-dh7r9-rook-ceph-system-6sx6l","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rook-ceph-system","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-dh7r9"}}
      name: ocs-operator.v4.5.0-dh7r9-rook-ceph-system-6sx6l
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-j4sgc-rook-ceph-system-ss7xc","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rook-ceph-system","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-j4sgc"}}
      name: ocs-operator.v4.5.0-j4sgc-rook-ceph-system-ss7xc
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"rook-ceph-osd","namespace":"openshift-operators","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: rook-ceph-osd
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: Role
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-k7j6g","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"},"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]},"rules":[{"verbs":["get","list","watch","create","update","delete"],"apiGroups":[""],"resources":["configmaps"]},{"verbs":["get","list","create","update","delete"],"apiGroups":["ceph.rook.io"],"resources":["cephclusters","cephclusters/finalizers"]}]}
      name: ocs-operator.v4.5.0-k7j6g
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: RoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-k7j6g-rook-ceph-osd-xbdqr","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"},"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]},"subjects":[{"kind":"ServiceAccount","name":"rook-ceph-osd","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"Role","name":"ocs-operator.v4.5.0-k7j6g"}}
      name: ocs-operator.v4.5.0-k7j6g-rook-ceph-osd-xbdqr
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-6scwd","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[{"verbs":["get","list"],"apiGroups":[""],"resources":["nodes"]}]}
      name: ocs-operator.v4.5.0-6scwd
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-6scwd-rook-ceph-osd-6rbtb","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rook-ceph-osd","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-6scwd"}}
      name: ocs-operator.v4.5.0-6scwd-rook-ceph-osd-6rbtb
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"rook-ceph-cmd-reporter","namespace":"openshift-operators","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: rook-ceph-cmd-reporter
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: Role
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-rlncj","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"},"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]},"rules":[{"verbs":["get","list","watch","create","update","delete"],"apiGroups":[""],"resources":["pods","configmaps"]}]}
      name: ocs-operator.v4.5.0-rlncj
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: RoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-rlncj-rook-ceph-cmd-reporter-lznn9","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"},"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]},"subjects":[{"kind":"ServiceAccount","name":"rook-ceph-cmd-reporter","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"Role","name":"ocs-operator.v4.5.0-rlncj"}}
      name: ocs-operator.v4.5.0-rlncj-rook-ceph-cmd-reporter-lznn9
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"ocs-operator","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: ocs-operator
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-pwkr4","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[{"verbs":["get","list","watch","create","update","delete"],"apiGroups":["storage.k8s.io"],"resources":["storageclasses"]},{"verbs":["*"],"apiGroups":[""],"resources":["pods","services","endpoints","persistentvolumeclaims","events","configmaps","secrets","nodes"]},{"verbs":["get"],"apiGroups":[""],"resources":["namespaces"]},{"verbs":["*"],"apiGroups":["apps"],"resources":["deployments","daemonsets","replicasets","statefulsets"]},{"verbs":["get","list","watch","create"],"apiGroups":["monitoring.coreos.com"],"resources":["servicemonitors"]},{"verbs":["*"],"apiGroups":["ocs.openshift.io"],"resources":["*","storageclusters","ocsinitialization","storageclusterinitializations"]},{"verbs":["*"],"apiGroups":["ceph.rook.io"],"resources":["cephclusters","cephblockpools","cephfilesystems","cephobjectstores","cephobjectstoreusers"]},{"verbs":["get","list","watch","create","update","delete"],"apiGroups":["noobaa.io"],"resources":["noobaas"]},{"verbs":["get","create","update"],"apiGroups":["security.openshift.io"],"resources":["securitycontextconstraints"]},{"verbs":["get","create","update"],"apiGroups":["security.openshift.io"],"resources":["securitycontextconstraints"],"resourceNames":["privileged"]},{"verbs":["*"],"apiGroups":["template.openshift.io"],"resources":["templates"]}]}
      name: ocs-operator.v4.5.0-pwkr4
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-pwkr4-ocs-operator-cvfnp","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"ocs-operator","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-pwkr4"}}
      name: ocs-operator.v4.5.0-pwkr4-ocs-operator-cvfnp
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"rook-ceph-cluster-mgmt","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: rook-ceph-cluster-mgmt
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-zx768","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[]}
      name: ocs-operator.v4.5.0-zx768
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-zx768-rook-ceph-cluster-mgmt-4kg46","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rook-ceph-cluster-mgmt","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-zx768"}}
      name: ocs-operator.v4.5.0-zx768-rook-ceph-cluster-mgmt-4kg46
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"rook-ceph-global","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: rook-ceph-global
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-l24tv","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[]}
      name: ocs-operator.v4.5.0-l24tv
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-l24tv-rook-ceph-global-7gqb5","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rook-ceph-global","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-l24tv"}}
      name: ocs-operator.v4.5.0-l24tv-rook-ceph-global-7gqb5
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"rook-ceph-mgr-system","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: rook-ceph-mgr-system
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-gffqh","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[]}
      name: ocs-operator.v4.5.0-gffqh
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-gffqh-rook-ceph-mgr-system-tz4gm","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rook-ceph-mgr-system","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-gffqh"}}
      name: ocs-operator.v4.5.0-gffqh-rook-ceph-mgr-system-tz4gm
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"rbd-csi-nodeplugin","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: rbd-csi-nodeplugin
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-jqnzc","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[]}
      name: ocs-operator.v4.5.0-jqnzc
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-jqnzc-rbd-csi-nodeplugin-c8kdc","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rbd-csi-nodeplugin","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-jqnzc"}}
      name: ocs-operator.v4.5.0-jqnzc-rbd-csi-nodeplugin-c8kdc
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"rook-csi-rbd-plugin-sa","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: rook-csi-rbd-plugin-sa
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-lc4h8","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[{"verbs":["get","list"],"apiGroups":[""],"resources":["secrets"]},{"verbs":["get","list","update"],"apiGroups":[""],"resources":["nodes"]},{"verbs":["get","list"],"apiGroups":[""],"resources":["namespaces"]},{"verbs":["get","list","watch","update"],"apiGroups":[""],"resources":["persistentvolumes"]},{"verbs":["get","list","watch","update"],"apiGroups":["storage.k8s.io"],"resources":["volumeattachments"]},{"verbs":["get","list"],"apiGroups":[""],"resources":["configmaps"]}]}
      name: ocs-operator.v4.5.0-lc4h8
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-lc4h8-rook-csi-rbd-plugin-sa-8k9kn","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rook-csi-rbd-plugin-sa","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-lc4h8"}}
      name: ocs-operator.v4.5.0-lc4h8-rook-csi-rbd-plugin-sa-8k9kn
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"rbd-external-provisioner-runner","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: rbd-external-provisioner-runner
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-wcgbv","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[]}
      name: ocs-operator.v4.5.0-wcgbv
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-wcgbv-rbd-external-provisioner-runner-g9k7k","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rbd-external-provisioner-runner","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-wcgbv"}}
      name: ocs-operator.v4.5.0-wcgbv-rbd-external-provisioner-runner-g9k7k
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"rook-ceph-mgr","namespace":"openshift-operators","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: rook-ceph-mgr
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: Role
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-nnpst","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"},"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]},"rules":[{"verbs":["get","list","watch","delete"],"apiGroups":[""],"resources":["pods","services","pods/log"]},{"verbs":["get","list","watch","create","update","delete"],"apiGroups":["batch"],"resources":["jobs"]},{"verbs":["*"],"apiGroups":["ceph.rook.io"],"resources":["*"]}]}
      name: ocs-operator.v4.5.0-nnpst
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: RoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-nnpst-rook-ceph-mgr-zcsc4","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"},"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]},"subjects":[{"kind":"ServiceAccount","name":"rook-ceph-mgr","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"Role","name":"ocs-operator.v4.5.0-nnpst"}}
      name: ocs-operator.v4.5.0-nnpst-rook-ceph-mgr-zcsc4
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-hn4dr","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[{"verbs":["get","list","watch"],"apiGroups":[""],"resources":["configmaps","nodes","nodes/proxy"]},{"verbs":["create","patch","list","get","watch"],"apiGroups":[""],"resources":["events"]}]}
      name: ocs-operator.v4.5.0-hn4dr
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-sbrg4","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[{"verbs":["get","list","watch"],"apiGroups":[""],"resources":["configmaps"]}]}
      name: ocs-operator.v4.5.0-sbrg4
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-hn4dr-rook-ceph-mgr-cww4g","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rook-ceph-mgr","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-hn4dr"}}
      name: ocs-operator.v4.5.0-hn4dr-rook-ceph-mgr-cww4g
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-sbrg4-rook-ceph-mgr-cvrpn","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rook-ceph-mgr","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-sbrg4"}}
      name: ocs-operator.v4.5.0-sbrg4-rook-ceph-mgr-cvrpn
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"rook-ceph-mgr-cluster","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: rook-ceph-mgr-cluster
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-nl4l9","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[]}
      name: ocs-operator.v4.5.0-nl4l9
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-nl4l9-rook-ceph-mgr-cluster-tjgs7","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rook-ceph-mgr-cluster","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-nl4l9"}}
      name: ocs-operator.v4.5.0-nl4l9-rook-ceph-mgr-cluster-tjgs7
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"rook-csi-cephfs-plugin-sa","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: rook-csi-cephfs-plugin-sa
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-hjw9f","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[{"verbs":["get","list","update"],"apiGroups":[""],"resources":["nodes"]},{"verbs":["get","list"],"apiGroups":[""],"resources":["namespaces"]},{"verbs":["get","list","watch","update"],"apiGroups":[""],"resources":["persistentvolumes"]},{"verbs":["get","list","watch","update"],"apiGroups":["storage.k8s.io"],"resources":["volumeattachments"]},{"verbs":["get","list"],"apiGroups":[""],"resources":["configmaps"]}]}
      name: ocs-operator.v4.5.0-hjw9f
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-hjw9f-rook-csi-cephfs-plugin-sa-d7wwl","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rook-csi-cephfs-plugin-sa","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-hjw9f"}}
      name: ocs-operator.v4.5.0-hjw9f-rook-csi-cephfs-plugin-sa-d7wwl
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"cephfs-external-provisioner-runner","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: cephfs-external-provisioner-runner
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-qw4jp","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[]}
      name: ocs-operator.v4.5.0-qw4jp
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-qw4jp-cephfs-external-provisioner-runnfvmzj","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"cephfs-external-provisioner-runner","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-qw4jp"}}
      name: ocs-operator.v4.5.0-qw4jp-cephfs-external-provisioner-runnfvmzj
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"noobaa","namespace":"openshift-operators","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: noobaa
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: Role
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-qbzcw","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"},"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]},"rules":[{"verbs":["*"],"apiGroups":["noobaa.io"],"resources":["*","noobaas","backingstores","bucketclasses","noobaas/finalizers","backingstores/finalizers","bucketclasses/finalizers"]},{"verbs":["*"],"apiGroups":[""],"resources":["pods","services","endpoints","persistentvolumeclaims","events","configmaps","secrets","serviceaccounts"]},{"verbs":["*"],"apiGroups":["apps"],"resources":["deployments","daemonsets","replicasets","statefulsets"]},{"verbs":["get","create","update","list","watch"],"apiGroups":["monitoring.coreos.com"],"resources":["servicemonitors","prometheusrules"]},{"verbs":["update"],"apiGroups":[""],"resources":["services/finalizers"]},{"verbs":["update"],"apiGroups":["apps"],"resources":["deployments/finalizers"],"resourceNames":["noobaa-operator"]},{"verbs":["get","create","update","list","watch"],"apiGroups":["cloudcredential.openshift.io"],"resources":["credentialsrequests"]},{"verbs":["get","list","watch"],"apiGroups":["ceph.rook.io"],"resources":["cephobjectstores"]},{"verbs":["get","create","update","list","watch"],"apiGroups":["ceph.rook.io"],"resources":["cephobjectstoreusers"]},{"verbs":["get","create","update","list","watch"],"apiGroups":["route.openshift.io"],"resources":["routes"]},{"verbs":["get","create","update","patch","list","watch"],"apiGroups":["autoscaling"],"resources":["horizontalpodautoscalers"]}]}
      name: ocs-operator.v4.5.0-qbzcw
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: RoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-qbzcw-noobaa-jhr47","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"},"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]},"subjects":[{"kind":"ServiceAccount","name":"noobaa","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"Role","name":"ocs-operator.v4.5.0-qbzcw"}}
      name: ocs-operator.v4.5.0-qbzcw-noobaa-jhr47
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-mptdr","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[{"verbs":["*"],"apiGroups":["noobaa.io"],"resources":["*","noobaas","backingstores","bucketclasses","noobaas/finalizers","backingstores/finalizers","bucketclasses/finalizers"]},{"verbs":["*"],"apiGroups":["objectbucket.io"],"resources":["*"]},{"verbs":["*"],"apiGroups":[""],"resources":["configmaps","secrets","persistentvolumes"]},{"verbs":["get"],"apiGroups":[""],"resources":["namespaces"]},{"verbs":["get","list","watch","create","update"],"apiGroups":["storage.k8s.io"],"resources":["storageclasses"]},{"verbs":["get","list","watch"],"apiGroups":[""],"resources":["nodes"]},{"verbs":["create"],"apiGroups":["authentication.k8s.io"],"resources":["tokenreviews"]},{"verbs":["create"],"apiGroups":["authorization.k8s.io"],"resources":["subjectaccessreviews"]}]}
      name: ocs-operator.v4.5.0-mptdr
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-mptdr-noobaa-77p6x","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"noobaa","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-mptdr"}}
      name: ocs-operator.v4.5.0-mptdr-noobaa-77p6x
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"cephfs-csi-nodeplugin","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: cephfs-csi-nodeplugin
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-2bswc","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[]}
      name: ocs-operator.v4.5.0-2bswc
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-2bswc-cephfs-csi-nodeplugin-fngjn","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"cephfs-csi-nodeplugin","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-2bswc"}}
      name: ocs-operator.v4.5.0-2bswc-cephfs-csi-nodeplugin-fngjn
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"rook-csi-cephfs-provisioner-sa","namespace":"openshift-operators","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: rook-csi-cephfs-provisioner-sa
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: Role
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-pc8mk","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"},"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]},"rules":[{"verbs":["get","watch","list","delete","update","create"],"apiGroups":[""],"resources":["endpoints"]},{"verbs":["get","list","create","delete"],"apiGroups":[""],"resources":["configmaps"]},{"verbs":["get","watch","list","delete","update","create"],"apiGroups":["coordination.k8s.io"],"resources":["leases"]}]}
      name: ocs-operator.v4.5.0-pc8mk
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: RoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-pc8mk-rook-csi-cephfs-provisioner-sa-mqvkr","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"},"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]},"subjects":[{"kind":"ServiceAccount","name":"rook-csi-cephfs-provisioner-sa","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"Role","name":"ocs-operator.v4.5.0-pc8mk"}}
      name: ocs-operator.v4.5.0-pc8mk-rook-csi-cephfs-provisioner-sa-mqvkr
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-clpwc","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[{"verbs":["get","list"],"apiGroups":[""],"resources":["secrets"]},{"verbs":["get","list","watch","create","delete","update","patch"],"apiGroups":[""],"resources":["persistentvolumes"]},{"verbs":["get","list","watch","update"],"apiGroups":[""],"resources":["persistentvolumeclaims"]},{"verbs":["get","list","watch"],"apiGroups":["storage.k8s.io"],"resources":["storageclasses"]},{"verbs":["list","watch","create","update","patch"],"apiGroups":[""],"resources":["events"]},{"verbs":["get","list","watch","update","patch"],"apiGroups":["storage.k8s.io"],"resources":["volumeattachments"]},{"verbs":["get","list","watch"],"apiGroups":[""],"resources":["nodes"]},{"verbs":["update","patch"],"apiGroups":[""],"resources":["persistentvolumeclaims/status"]}]}
      name: ocs-operator.v4.5.0-clpwc
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-clpwc-rook-csi-cephfs-provisioner-sa-2p85r","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rook-csi-cephfs-provisioner-sa","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-clpwc"}}
      name: ocs-operator.v4.5.0-clpwc-rook-csi-cephfs-provisioner-sa-2p85r
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: ""
      kind: ServiceAccount
      manifest: |
        {"metadata":{"name":"rook-csi-rbd-provisioner-sa","namespace":"openshift-operators","creationTimestamp":null,"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]}}
      name: rook-csi-rbd-provisioner-sa
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: Role
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-t8clk","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"},"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]},"rules":[{"verbs":["get","watch","list","delete","update","create"],"apiGroups":[""],"resources":["endpoints"]},{"verbs":["get","list","watch","create","delete"],"apiGroups":[""],"resources":["configmaps"]},{"verbs":["get","watch","list","delete","update","create"],"apiGroups":["coordination.k8s.io"],"resources":["leases"]}]}
      name: ocs-operator.v4.5.0-t8clk
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: RoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-t8clk-rook-csi-rbd-provisioner-sa-6dj5z","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"},"ownerReferences":[{"apiVersion":"operators.coreos.com/v1alpha1","kind":"ClusterServiceVersion","name":"ocs-operator.v4.5.0","uid":"","controller":false,"blockOwnerDeletion":false}]},"subjects":[{"kind":"ServiceAccount","name":"rook-csi-rbd-provisioner-sa","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"Role","name":"ocs-operator.v4.5.0-t8clk"}}
      name: ocs-operator.v4.5.0-t8clk-rook-csi-rbd-provisioner-sa-6dj5z
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRole
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-zlbpp","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"rules":[{"verbs":["get","list"],"apiGroups":[""],"resources":["secrets"]},{"verbs":["get","list","watch","create","delete","update","patch"],"apiGroups":[""],"resources":["persistentvolumes"]},{"verbs":["get","list","watch","update"],"apiGroups":[""],"resources":["persistentvolumeclaims"]},{"verbs":["get","list","watch","update","patch"],"apiGroups":["storage.k8s.io"],"resources":["volumeattachments"]},{"verbs":["get","list","watch"],"apiGroups":[""],"resources":["nodes"]},{"verbs":["get","list","watch"],"apiGroups":["storage.k8s.io"],"resources":["storageclasses"]},{"verbs":["list","watch","create","update","patch"],"apiGroups":[""],"resources":["events"]},{"verbs":["get","list","watch","update"],"apiGroups":["snapshot.storage.k8s.io"],"resources":["volumesnapshots"]},{"verbs":["create","get","list","watch","update","delete"],"apiGroups":["snapshot.storage.k8s.io"],"resources":["volumesnapshotcontents"]},{"verbs":["get","list","watch"],"apiGroups":["snapshot.storage.k8s.io"],"resources":["volumesnapshotclasses"]},{"verbs":["create","list","watch","delete","get","update"],"apiGroups":["apiextensions.k8s.io"],"resources":["customresourcedefinitions"]},{"verbs":["update"],"apiGroups":["snapshot.storage.k8s.io"],"resources":["volumesnapshots/status"]},{"verbs":["update","patch"],"apiGroups":[""],"resources":["persistentvolumeclaims/status"]}]}
      name: ocs-operator.v4.5.0-zlbpp
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: rbac.authorization.k8s.io
      kind: ClusterRoleBinding
      manifest: |
        {"metadata":{"name":"ocs-operator.v4.5.0-zlbpp-rook-csi-rbd-provisioner-sa-kdhhn","namespace":"openshift-operators","creationTimestamp":null,"labels":{"olm.owner":"ocs-operator.v4.5.0","olm.owner.kind":"ClusterServiceVersion","olm.owner.namespace":"openshift-operators"}},"subjects":[{"kind":"ServiceAccount","name":"rook-csi-rbd-provisioner-sa","namespace":"openshift-operators"}],"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"ocs-operator.v4.5.0-zlbpp"}}
      name: ocs-operator.v4.5.0-zlbpp-rook-csi-rbd-provisioner-sa-kdhhn
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1
    status: Created
  - resolving: ocs-operator.v4.5.0
    resource:
      group: operators.coreos.com
      kind: Subscription
      manifest: |
        {"metadata":{"name":"ocs-operator-stable-4.5-redhat-operators-openshift-marketplace","namespace":"openshift-operators","creationTimestamp":null},"spec":{"source":"redhat-operators","sourceNamespace":"openshift-marketplace","name":"ocs-operator","channel":"stable-4.5","startingCSV":"ocs-operator.v4.5.0","installPlanApproval":"Automatic","config":{"resources":{}}},"status":{"lastUpdated":null}}
      name: ocs-operator-stable-4.5-redhat-operators-openshift-marketplace
      sourceName: redhat-operators
      sourceNamespace: openshift-marketplace
      version: v1alpha1
    status: Created
