==============================================================
 Apache Solr Operator
 Copyright 2006-2021 The Apache Software Foundation
==============================================================

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

Includes software from other Apache Software Foundation projects.

This includes code provided by Bloomberg Finance LP as a Software Grant
to The ASF.
=========================================================================
==  Solr Operator Bloomberg Notice                                     ==
=========================================================================
Copyright 2019 Bloomberg Finance LP.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

The Solr Operator project is built using Kubebuilder, which is Apache 2.0 licensed.
    https://github.com/kubernetes-sigs/kubebuilder

The reconcileStorageFinalizer login in
    controllers/solrcloud_controller.go
was influenced by the same logic in the Zookeeper Operator, which is Apache 2.0 licensed.
    https://github.com/pravega/zookeeper-operator/blob/v0.2.9/pkg/controller/zookeepercluster/zookeepercluster_controller.go#L629)
Copyright (c) 2020 Dell Inc., or its subsidiaries. All Rights Reserved.

The Zookeeper Operator is used as an optional dependency, however the ZookeeperCluster CRD is used within the repository.
    config/dependencies/zookeeper_cluster_crd.yaml
The API code was also copied to the following directory
    controllers/zk_api
This was taken from https://github.com/pravega/zookeeper-operator (version v0.2.14)
