You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by ho...@apache.org on 2021/04/21 16:19:31 UTC

[solr-operator] branch main updated: Various changes needed after testing of the v0.3.0 RC1 (#260)

This is an automated email from the ASF dual-hosted git repository.

houston pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr-operator.git


The following commit(s) were added to refs/heads/main by this push:
     new 7f0f697  Various changes needed after testing of the v0.3.0 RC1 (#260)
7f0f697 is described below

commit 7f0f697b1c8d4ef020ed75912ada88a6a58aa5b9
Author: Houston Putman <ho...@apache.org>
AuthorDate: Wed Apr 21 11:18:36 2021 -0500

    Various changes needed after testing of the v0.3.0 RC1 (#260)
    
    - Add multi-architecture docker images in the release wizard (Resolves #257)
    - The mktemp command is now used in a way that works with BSD and GNU
    - Add licenses to all files in the repo/release
    - Fix setup for systems that are not setup to run go code natively
    - Make smoke test ports different than the default Solr ports (So it won't fail if a random Solr process is running)
    - Fix flakey tests
    - Fixed a bug where the wrong error ref was being returned from verifyTLSSecretConfig causing improper error handling when reconciling TLS config
    
    Co-authored-by: Timothy Potter <th...@gmail.com>
---
 .asf.yaml                                          | 15 ++++++
 .github/workflows/docker.yaml                      | 15 ++++++
 .github/workflows/tests.yaml                       | 15 ++++++
 .gitignore                                         | 14 ++++++
 Makefile                                           | 20 +++++++-
 build/Dockerfile                                   | 12 +++++
 build/build.sh                                     |  1 -
 config/certmanager/certificate.yaml                | 15 ++++++
 config/certmanager/kustomization.yaml              | 15 ++++++
 config/certmanager/kustomizeconfig.yaml            | 17 ++++++-
 config/crd/bases/solr.apache.org_solrbackups.yaml  | 14 ++++++
 config/crd/bases/solr.apache.org_solrclouds.yaml   | 14 ++++++
 .../solr.apache.org_solrprometheusexporters.yaml   | 14 ++++++
 config/crd/kustomization.yaml                      | 15 ++++++
 config/crd/kustomizeconfig.yaml                    | 15 ++++++
 config/crd/patches/cainjection_in_solrbackups.yaml | 15 ++++++
 config/crd/patches/cainjection_in_solrclouds.yaml  | 15 ++++++
 .../cainjection_in_solrprometheusexporters.yaml    | 15 ++++++
 config/crd/patches/webhook_in_solrbackups.yaml     | 15 ++++++
 config/crd/patches/webhook_in_solrclouds.yaml      | 15 ++++++
 .../webhook_in_solrprometheusexporters.yaml        | 15 ++++++
 config/default/kustomization.yaml                  | 15 ++++++
 config/default/manager_auth_proxy_patch.yaml       | 15 ++++++
 .../default/manager_prometheus_metrics_patch.yaml  | 15 ++++++
 config/default/manager_webhook_patch.yaml          | 15 ++++++
 config/default/webhookcainjection_patch.yaml       | 15 ++++++
 config/dependencies/zookeeper_cluster_crd.yaml     | 10 ++++
 config/manager/manager.yaml                        | 15 ++++++
 config/rbac/auth_proxy_role.yaml                   | 15 ++++++
 config/rbac/auth_proxy_role_binding.yaml           | 15 ++++++
 config/rbac/auth_proxy_service.yaml                | 15 ++++++
 config/rbac/kustomization.yaml                     | 15 ++++++
 config/rbac/leader_election_role.yaml              | 15 ++++++
 config/rbac/leader_election_role_binding.yaml      | 15 ++++++
 config/rbac/role.yaml                              | 14 ++++++
 config/rbac/role_binding.yaml                      | 15 ++++++
 config/rbac/service_account.yaml                   | 15 ++++++
 config/webhook/kustomization.yaml                  | 15 ++++++
 config/webhook/kustomizeconfig.yaml                | 15 ++++++
 config/webhook/manifests.yaml                      | 14 ++++++
 config/webhook/service.yaml                        | 14 ++++++
 controllers/solrcloud_controller.go                |  2 +-
 controllers/solrcloud_controller_test.go           |  1 +
 docker_deploy.sh                                   |  4 --
 example/test_solrbackup.yaml                       | 15 ++++++
 example/test_solrcloud.yaml                        | 15 ++++++
 example/test_solrcloud_addressability.yaml         | 15 ++++++
 example/test_solrcloud_private_repo.yaml           | 15 ++++++
 example/test_solrcloud_toleration_example.yaml     | 15 ++++++
 example/test_solrprometheusexporter.yaml           | 15 ++++++
 hack/check_format.sh                               | 15 ++++++
 hack/check_license.sh                              | 35 ++++++++++++++
 hack/config/add_crds_roles_headers.sh              | 35 ++++++++++++++
 hack/{helm => config}/copy_crds_roles_helm.sh      | 17 ++++++-
 hack/headers/header.tpl.txt                        | 16 -------
 hack/headers/header.txt                            | 11 +++++
 hack/install_dependencies.sh                       | 25 +++++++++-
 hack/release/artifacts/build_helm.sh               |  1 +
 hack/release/smoke_test/smoke_test.sh              | 20 ++++++--
 hack/release/smoke_test/test_cluster.sh            | 34 +++++++++-----
 hack/release/smoke_test/test_source.sh             |  2 +-
 hack/release/smoke_test/verify_all.sh              | 20 +++++---
 hack/release/upload/upload_crds.sh                 |  2 +-
 hack/release/upload/upload_helm.sh                 |  2 +-
 hack/release/wizard/releaseWizard.yaml             | 53 ++++++++++++++--------
 hack/test-upgrade.sh                               | 22 ++++++++-
 helm/solr-operator/.helmignore                     | 15 ++++++
 67 files changed, 942 insertions(+), 73 deletions(-)

diff --git a/.asf.yaml b/.asf.yaml
index 6daaefe..8c0e115 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 # https://cwiki.apache.org/confluence/display/INFRA/.asf.yaml+features+for+git+repositories
 
 github:
diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml
index 1c8bcd1..19993ad 100644
--- a/.github/workflows/docker.yaml
+++ b/.github/workflows/docker.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 name: Docker Build
 
 on:
diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml
index b0a6713..16ece48 100644
--- a/.github/workflows/tests.yaml
+++ b/.github/workflows/tests.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 name: Build & Test
 
 on:
diff --git a/.gitignore b/.gitignore
index 10bbcfc..efe19ad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
 
 # Binaries for programs and plugins
 *.exe
diff --git a/Makefile b/Makefile
index 330aa4c..acaa3dc 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 # Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
-CRD_OPTIONS ?= "crd"
+CRD_OPTIONS ?= "crd:trivialVersions=true"
 
 # Image URL to use all building/pushing image targets
 NAME ?= solr-operator
@@ -89,7 +104,8 @@ generate:
 manifests:
 	rm -r config/crd/bases
 	controller-gen $(CRD_OPTIONS) rbac:roleName=solr-operator-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases
-	./hack/helm/copy_crds_roles_helm.sh
+	./hack/config/copy_crds_roles_helm.sh
+	./hack/config/add_crds_roles_headers.sh
 
 # Run go fmt against code
 fmt:
diff --git a/build/Dockerfile b/build/Dockerfile
index 6fc4b5f..d80b746 100644
--- a/build/Dockerfile
+++ b/build/Dockerfile
@@ -1,3 +1,15 @@
+# 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.
+
 # Build the manager binary
 FROM golang:1.16 as builder
 
diff --git a/build/build.sh b/build/build.sh
index b2a5d1c..c35afe6 100755
--- a/build/build.sh
+++ b/build/build.sh
@@ -1,5 +1,4 @@
 #!/bin/bash
-
 # Copyright 2016 The Kubernetes Authors.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/config/certmanager/certificate.yaml b/config/certmanager/certificate.yaml
index 02bdc1b..092ab68 100644
--- a/config/certmanager/certificate.yaml
+++ b/config/certmanager/certificate.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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 following manifests contain a self-signed issuer CR and a certificate CR.
 # More document can be found at https://docs.cert-manager.io
 apiVersion: certmanager.k8s.io/v1alpha1
diff --git a/config/certmanager/kustomization.yaml b/config/certmanager/kustomization.yaml
index bebea5a..af7f093 100644
--- a/config/certmanager/kustomization.yaml
+++ b/config/certmanager/kustomization.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 resources:
 - certificate.yaml
 
diff --git a/config/certmanager/kustomizeconfig.yaml b/config/certmanager/kustomizeconfig.yaml
index 49e0b1e..8611a1b 100644
--- a/config/certmanager/kustomizeconfig.yaml
+++ b/config/certmanager/kustomizeconfig.yaml
@@ -1,4 +1,19 @@
-# This configuration is for teaching kustomize how to update name ref and var substitution 
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+# This configuration is for teaching kustomize how to update name ref and var substitution
 nameReference:
 - kind: Issuer
   group: certmanager.k8s.io
diff --git a/config/crd/bases/solr.apache.org_solrbackups.yaml b/config/crd/bases/solr.apache.org_solrbackups.yaml
index a8de199..dc209c3 100644
--- a/config/crd/bases/solr.apache.org_solrbackups.yaml
+++ b/config/crd/bases/solr.apache.org_solrbackups.yaml
@@ -1,3 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
 
 ---
 apiVersion: apiextensions.k8s.io/v1
diff --git a/config/crd/bases/solr.apache.org_solrclouds.yaml b/config/crd/bases/solr.apache.org_solrclouds.yaml
index 8d8d806..868f536 100644
--- a/config/crd/bases/solr.apache.org_solrclouds.yaml
+++ b/config/crd/bases/solr.apache.org_solrclouds.yaml
@@ -1,3 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
 
 ---
 apiVersion: apiextensions.k8s.io/v1
diff --git a/config/crd/bases/solr.apache.org_solrprometheusexporters.yaml b/config/crd/bases/solr.apache.org_solrprometheusexporters.yaml
index 5b008c9..e12ca1b 100644
--- a/config/crd/bases/solr.apache.org_solrprometheusexporters.yaml
+++ b/config/crd/bases/solr.apache.org_solrprometheusexporters.yaml
@@ -1,3 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
 
 ---
 apiVersion: apiextensions.k8s.io/v1
diff --git a/config/crd/kustomization.yaml b/config/crd/kustomization.yaml
index 435f1e9..e0aed34 100644
--- a/config/crd/kustomization.yaml
+++ b/config/crd/kustomization.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 # This kustomization.yaml is not intended to be run by itself,
 # since it depends on service name and namespace that are out of this kustomize package.
 # It should be run by config/default
diff --git a/config/crd/kustomizeconfig.yaml b/config/crd/kustomizeconfig.yaml
index 6f83d9a..428556d 100644
--- a/config/crd/kustomizeconfig.yaml
+++ b/config/crd/kustomizeconfig.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 # This file is for teaching kustomize how to substitute name and namespace reference in CRD
 nameReference:
 - kind: Service
diff --git a/config/crd/patches/cainjection_in_solrbackups.yaml b/config/crd/patches/cainjection_in_solrbackups.yaml
index 21001e2..265d90b 100644
--- a/config/crd/patches/cainjection_in_solrbackups.yaml
+++ b/config/crd/patches/cainjection_in_solrbackups.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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 following patch adds a directive for certmanager to inject CA into the CRD
 # CRD conversion requires k8s 1.13 or later.
 apiVersion: apiextensions.k8s.io/v1beta1
diff --git a/config/crd/patches/cainjection_in_solrclouds.yaml b/config/crd/patches/cainjection_in_solrclouds.yaml
index 17d52d9..20c7d43 100644
--- a/config/crd/patches/cainjection_in_solrclouds.yaml
+++ b/config/crd/patches/cainjection_in_solrclouds.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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 following patch adds a directive for certmanager to inject CA into the CRD
 # CRD conversion requires k8s 1.13 or later.
 apiVersion: apiextensions.k8s.io/v1beta1
diff --git a/config/crd/patches/cainjection_in_solrprometheusexporters.yaml b/config/crd/patches/cainjection_in_solrprometheusexporters.yaml
index 7371f36..4d6a001 100644
--- a/config/crd/patches/cainjection_in_solrprometheusexporters.yaml
+++ b/config/crd/patches/cainjection_in_solrprometheusexporters.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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 following patch adds a directive for certmanager to inject CA into the CRD
 # CRD conversion requires k8s 1.13 or later.
 apiVersion: apiextensions.k8s.io/v1beta1
diff --git a/config/crd/patches/webhook_in_solrbackups.yaml b/config/crd/patches/webhook_in_solrbackups.yaml
index 2b3580e..cf6eaf4 100644
--- a/config/crd/patches/webhook_in_solrbackups.yaml
+++ b/config/crd/patches/webhook_in_solrbackups.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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 following patch enables conversion webhook for CRD
 # CRD conversion requires k8s 1.13 or later.
 apiVersion: apiextensions.k8s.io/v1beta1
diff --git a/config/crd/patches/webhook_in_solrclouds.yaml b/config/crd/patches/webhook_in_solrclouds.yaml
index bd4d0e4..8d9ee4f 100644
--- a/config/crd/patches/webhook_in_solrclouds.yaml
+++ b/config/crd/patches/webhook_in_solrclouds.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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 following patch enables conversion webhook for CRD
 # CRD conversion requires k8s 1.13 or later.
 apiVersion: apiextensions.k8s.io/v1beta1
diff --git a/config/crd/patches/webhook_in_solrprometheusexporters.yaml b/config/crd/patches/webhook_in_solrprometheusexporters.yaml
index e7ee9f9..3f210db 100644
--- a/config/crd/patches/webhook_in_solrprometheusexporters.yaml
+++ b/config/crd/patches/webhook_in_solrprometheusexporters.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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 following patch enables conversion webhook for CRD
 # CRD conversion requires k8s 1.13 or later.
 apiVersion: apiextensions.k8s.io/v1beta1
diff --git a/config/default/kustomization.yaml b/config/default/kustomization.yaml
index b9abf0b..4ce1eae 100644
--- a/config/default/kustomization.yaml
+++ b/config/default/kustomization.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 # Adds namespace to all resources.
 namespace: default
 
diff --git a/config/default/manager_auth_proxy_patch.yaml b/config/default/manager_auth_proxy_patch.yaml
index 989d698..9d53a61 100644
--- a/config/default/manager_auth_proxy_patch.yaml
+++ b/config/default/manager_auth_proxy_patch.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 # This patch inject a sidecar container which is a HTTP proxy for the controller manager,
 # it performs RBAC authorization against the Kubernetes API using SubjectAccessReviews.
 apiVersion: apps/v1
diff --git a/config/default/manager_prometheus_metrics_patch.yaml b/config/default/manager_prometheus_metrics_patch.yaml
index d777da1..57287cb 100644
--- a/config/default/manager_prometheus_metrics_patch.yaml
+++ b/config/default/manager_prometheus_metrics_patch.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 # This patch enables Prometheus scraping for the manager pod.
 apiVersion: apps/v1
 kind: Deployment
diff --git a/config/default/manager_webhook_patch.yaml b/config/default/manager_webhook_patch.yaml
index e60ee97..39e68ee 100644
--- a/config/default/manager_webhook_patch.yaml
+++ b/config/default/manager_webhook_patch.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 apiVersion: apps/v1
 kind: Deployment
 metadata:
diff --git a/config/default/webhookcainjection_patch.yaml b/config/default/webhookcainjection_patch.yaml
index 5e3e077..c6e7625 100644
--- a/config/default/webhookcainjection_patch.yaml
+++ b/config/default/webhookcainjection_patch.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 # This patch add annotation to admission webhook config and
 # the variables $(CERTIFICATE_NAMESPACE) and $(CERTIFICATE_NAME) will be substituted by kustomize.
 apiVersion: admissionregistration.k8s.io/v1beta1
diff --git a/config/dependencies/zookeeper_cluster_crd.yaml b/config/dependencies/zookeeper_cluster_crd.yaml
index c915ee1..4850a69 100644
--- a/config/dependencies/zookeeper_cluster_crd.yaml
+++ b/config/dependencies/zookeeper_cluster_crd.yaml
@@ -1,3 +1,13 @@
+# Copyright (c) 2018 Dell Inc., or its subsidiaries. All Rights Reserved.
+#
+# 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
+#
+# Find source at: https://github.com/pravega/zookeeper-operator
+
 apiVersion: apiextensions.k8s.io/v1beta1
 kind: CustomResourceDefinition
 metadata:
diff --git a/config/manager/manager.yaml b/config/manager/manager.yaml
index 4031f95..be51fe2 100644
--- a/config/manager/manager.yaml
+++ b/config/manager/manager.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 ---
 apiVersion: apps/v1
 kind: Deployment
diff --git a/config/rbac/auth_proxy_role.yaml b/config/rbac/auth_proxy_role.yaml
index 618f5e4..e6101d9 100644
--- a/config/rbac/auth_proxy_role.yaml
+++ b/config/rbac/auth_proxy_role.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
 metadata:
diff --git a/config/rbac/auth_proxy_role_binding.yaml b/config/rbac/auth_proxy_role_binding.yaml
index 48ed1e4..af4dd5b 100644
--- a/config/rbac/auth_proxy_role_binding.yaml
+++ b/config/rbac/auth_proxy_role_binding.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
diff --git a/config/rbac/auth_proxy_service.yaml b/config/rbac/auth_proxy_service.yaml
index d61e546..5d55eea 100644
--- a/config/rbac/auth_proxy_service.yaml
+++ b/config/rbac/auth_proxy_service.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 apiVersion: v1
 kind: Service
 metadata:
diff --git a/config/rbac/kustomization.yaml b/config/rbac/kustomization.yaml
index cabf51f..e6fcde4 100644
--- a/config/rbac/kustomization.yaml
+++ b/config/rbac/kustomization.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 resources:
 - service_account.yaml
 - role.yaml
diff --git a/config/rbac/leader_election_role.yaml b/config/rbac/leader_election_role.yaml
index eaa7915..4c63d18 100644
--- a/config/rbac/leader_election_role.yaml
+++ b/config/rbac/leader_election_role.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 # permissions to do leader election.
 apiVersion: rbac.authorization.k8s.io/v1
 kind: Role
diff --git a/config/rbac/leader_election_role_binding.yaml b/config/rbac/leader_election_role_binding.yaml
index ca721ad..ca40a71 100644
--- a/config/rbac/leader_election_role_binding.yaml
+++ b/config/rbac/leader_election_role_binding.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 apiVersion: rbac.authorization.k8s.io/v1
 kind: RoleBinding
 metadata:
diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml
index 2b307ac..a038fc9 100644
--- a/config/rbac/role.yaml
+++ b/config/rbac/role.yaml
@@ -1,3 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
 
 ---
 apiVersion: rbac.authorization.k8s.io/v1
diff --git a/config/rbac/role_binding.yaml b/config/rbac/role_binding.yaml
index a9371a4..616a5b4 100644
--- a/config/rbac/role_binding.yaml
+++ b/config/rbac/role_binding.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
diff --git a/config/rbac/service_account.yaml b/config/rbac/service_account.yaml
index b4da921..1f0554a 100644
--- a/config/rbac/service_account.yaml
+++ b/config/rbac/service_account.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 apiVersion: v1
 kind: ServiceAccount
 metadata:
diff --git a/config/webhook/kustomization.yaml b/config/webhook/kustomization.yaml
index 9cf2613..dc29f05 100644
--- a/config/webhook/kustomization.yaml
+++ b/config/webhook/kustomization.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 resources:
 - manifests.yaml
 - service.yaml
diff --git a/config/webhook/kustomizeconfig.yaml b/config/webhook/kustomizeconfig.yaml
index 25e21e3..55b3851 100644
--- a/config/webhook/kustomizeconfig.yaml
+++ b/config/webhook/kustomizeconfig.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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 following config is for teaching kustomize where to look at when substituting vars.
 # It requires kustomize v2.1.0 or newer to work properly.
 nameReference:
diff --git a/config/webhook/manifests.yaml b/config/webhook/manifests.yaml
index e69de29..ae1e83e 100644
--- a/config/webhook/manifests.yaml
+++ b/config/webhook/manifests.yaml
@@ -0,0 +1,14 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
diff --git a/config/webhook/service.yaml b/config/webhook/service.yaml
index 31e0f82..4d9e502 100644
--- a/config/webhook/service.yaml
+++ b/config/webhook/service.yaml
@@ -1,3 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
 
 apiVersion: v1
 kind: Service
diff --git a/controllers/solrcloud_controller.go b/controllers/solrcloud_controller.go
index 851a99a..f625b9c 100644
--- a/controllers/solrcloud_controller.go
+++ b/controllers/solrcloud_controller.go
@@ -1009,7 +1009,7 @@ func (r *SolrCloudReconciler) verifyTLSSecretConfig(secretName string, secretNam
 		keyStorePasswordSecret := &corev1.Secret{}
 		err := r.Get(ctx, types.NamespacedName{Name: passwordSecret.Name, Namespace: foundTLSSecret.Namespace}, keyStorePasswordSecret)
 		if err != nil {
-			return nil, lookupErr
+			return nil, err
 		}
 
 		// we found the keystore secret, but does it have the key we expect?
diff --git a/controllers/solrcloud_controller_test.go b/controllers/solrcloud_controller_test.go
index b89215a..21eabfc 100644
--- a/controllers/solrcloud_controller_test.go
+++ b/controllers/solrcloud_controller_test.go
@@ -108,6 +108,7 @@ func TestCloudReconcile(t *testing.T) {
 	defer testClient.Delete(context.TODO(), instance)
 	g.Eventually(requests, timeout).Should(gomega.Receive(gomega.Equal(expectedCloudRequest)))
 	g.Eventually(requests, timeout).Should(gomega.Receive(gomega.Equal(expectedCloudRequest)))
+	g.Eventually(requests, timeout).Should(gomega.Receive(gomega.Equal(expectedCloudRequest)))
 
 	// Update the status of the SolrCloud
 	g.Eventually(func() error { return testClient.Get(context.TODO(), expectedCloudRequest.NamespacedName, instance) }, timeout).Should(gomega.Succeed())
diff --git a/docker_deploy.sh b/docker_deploy.sh
deleted file mode 100755
index 8bc2125..0000000
--- a/docker_deploy.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD" \
-    && make docker-push
\ No newline at end of file
diff --git a/example/test_solrbackup.yaml b/example/test_solrbackup.yaml
index 19937bc..fc583c0 100644
--- a/example/test_solrbackup.yaml
+++ b/example/test_solrbackup.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 apiVersion: solr.apache.org/v1beta1
 kind: SolrBackup
 metadata:
diff --git a/example/test_solrcloud.yaml b/example/test_solrcloud.yaml
index b3c5f9d..9fdf64b 100644
--- a/example/test_solrcloud.yaml
+++ b/example/test_solrcloud.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 apiVersion: solr.apache.org/v1beta1
 kind: SolrCloud
 metadata:
diff --git a/example/test_solrcloud_addressability.yaml b/example/test_solrcloud_addressability.yaml
index eee76ce..51193b6 100644
--- a/example/test_solrcloud_addressability.yaml
+++ b/example/test_solrcloud_addressability.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 apiVersion: solr.apache.org/v1beta1
 kind: SolrCloud
 metadata:
diff --git a/example/test_solrcloud_private_repo.yaml b/example/test_solrcloud_private_repo.yaml
index d05a0d1..2a26f9d 100644
--- a/example/test_solrcloud_private_repo.yaml
+++ b/example/test_solrcloud_private_repo.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 apiVersion: solr.apache.org/v1beta1
 kind: SolrCloud
 metadata:
diff --git a/example/test_solrcloud_toleration_example.yaml b/example/test_solrcloud_toleration_example.yaml
index 3d893d4..f94e4aa 100644
--- a/example/test_solrcloud_toleration_example.yaml
+++ b/example/test_solrcloud_toleration_example.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 apiVersion: solr.apache.org/v1beta1
 kind: SolrCloud
 metadata:
diff --git a/example/test_solrprometheusexporter.yaml b/example/test_solrprometheusexporter.yaml
index 81a2653..04ddcd2 100644
--- a/example/test_solrprometheusexporter.yaml
+++ b/example/test_solrprometheusexporter.yaml
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 apiVersion: solr.apache.org/v1beta1
 kind: SolrPrometheusExporter
 metadata:
diff --git a/hack/check_format.sh b/hack/check_format.sh
index c1ac767..0442ca9 100755
--- a/hack/check_format.sh
+++ b/hack/check_format.sh
@@ -1,4 +1,19 @@
 #!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 # exit immediately when a command fails
 set -e
 # only exit with zero if all commands of the pipeline exit successfully
diff --git a/hack/check_license.sh b/hack/check_license.sh
index e0d74b7..45b3d93 100755
--- a/hack/check_license.sh
+++ b/hack/check_license.sh
@@ -1,4 +1,19 @@
 #!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 # exit immediately when a command fails
 set -e
 # only exit with zero if all commands of the pipeline exit successfully
@@ -15,3 +30,23 @@ if [ -n "${licRes}" ]; then
 	echo -e "license header checking failed:\\n${licRes}"
 	exit 255
 fi
+
+licRes=$(
+    find . -type f -iname '*.yaml' -not -regex '.*/config/manager/kustomization.yaml' -not -regex '.*/generated-check/.*' -not -name '*zookeeper*' ! -exec \
+         sh -c 'head -n5 $1 | grep -Eq "(Licensed to the Apache Software Foundation)" || echo -e  $1' {} {} \;
+)
+
+if [ -n "${licRes}" ]; then
+	echo -e "license header checking failed:\\n${licRes}"
+	exit 255
+fi
+
+licRes=$(
+    find . -type f -iname '*.sh' -not -name 'build.sh' ! -exec \
+         sh -c 'head -n5 $1 | grep -Eq "(Licensed to the Apache Software Foundation)" || echo -e  $1' {} {} \;
+)
+
+if [ -n "${licRes}" ]; then
+	echo -e "license header checking failed:\\n${licRes}"
+	exit 255
+fi
diff --git a/hack/config/add_crds_roles_headers.sh b/hack/config/add_crds_roles_headers.sh
new file mode 100755
index 0000000..1c3b110
--- /dev/null
+++ b/hack/config/add_crds_roles_headers.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+# exit immediately when a command fails
+set -e
+# only exit with zero if all commands of the pipeline exit successfully
+set -o pipefail
+# error on unset variables
+set -u
+
+echo "Copying CRDs and Role to helm repo"
+
+files=(config/crd/bases/* config/rbac/role.yaml)
+
+# Copy and package CRDs
+for file in "${files[@]}"; do
+  {
+    cat hack/headers/header.yaml.txt
+    printf "\n"
+    cat "${file}"
+  } > "${file}.tmp" && mv "${file}.tmp" "${file}"
+done
diff --git a/hack/helm/copy_crds_roles_helm.sh b/hack/config/copy_crds_roles_helm.sh
similarity index 57%
rename from hack/helm/copy_crds_roles_helm.sh
rename to hack/config/copy_crds_roles_helm.sh
index 3c3f0b2..c3eac01 100755
--- a/hack/helm/copy_crds_roles_helm.sh
+++ b/hack/config/copy_crds_roles_helm.sh
@@ -1,4 +1,19 @@
 #!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 # exit immediately when a command fails
 set -e
 # only exit with zero if all commands of the pipeline exit successfully
@@ -28,4 +43,4 @@ echo "Copying CRDs and Role to helm repo"
     | sed -E 's/^kind: ClusterRole$/kind: {{ include "solr-operator\.roleType" \$ }}/' \
     | sed -E 's/name: solr-operator-role$/name: {{ include "solr-operator\.fullname" \$ }}-role/'
   printf '\n{{- end }}\n{{- end }}\n'
-} > helm/solr-operator/templates/role.yaml
\ No newline at end of file
+} > helm/solr-operator/templates/role.yaml
diff --git a/hack/headers/header.tpl.txt b/hack/headers/header.tpl.txt
deleted file mode 100644
index 6172678..0000000
--- a/hack/headers/header.tpl.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-{{/*
-   * Licensed to the Apache Software Foundation (ASF) under one or more
-   * contributor license agreements.  See the NOTICE file distributed with
-   * this work for additional information regarding copyright ownership.
-   * The ASF licenses this file to You 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.
-   */}}
\ No newline at end of file
diff --git a/hack/headers/header.txt b/hack/headers/header.txt
new file mode 100644
index 0000000..07d2fa4
--- /dev/null
+++ b/hack/headers/header.txt
@@ -0,0 +1,11 @@
+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.
\ No newline at end of file
diff --git a/hack/install_dependencies.sh b/hack/install_dependencies.sh
index 0e2392b..f2377b4 100755
--- a/hack/install_dependencies.sh
+++ b/hack/install_dependencies.sh
@@ -1,4 +1,18 @@
 #!/bin/bash
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
 
 set -o errexit
 set -o nounset
@@ -10,8 +24,15 @@ controller_gen_version=v0.5.0
 os=$(go env GOOS)
 arch=$(go env GOARCH)
 
+printf "\n\nThis script may require elevated privileges. Be ready to enter your password for installation.\n\n"
+
 # Install go modules 
 GO111MODULE=on go mod tidy
+# Add GOBIN to PATH
+if [[ -z "${GOBIN:-}" ]]; then
+  export GOBIN="$(cd ${GOPATH:-~/go}/bin && pwd)"
+fi
+export PATH="${PATH}:${GOBIN}"
 
 #Install Kustomize
 if ! (which kustomize); then
@@ -54,4 +75,6 @@ elif ! (controller-gen --version | grep "Version: ${controller_gen_version}"); t
   echo "Installed controller-gen at $(which controller-gen), version: $(controller-gen --version)"
 else
   echo "controller-gen already installed at $(which controller-gen), version: $(controller-gen --version)"
-fi
\ No newline at end of file
+fi
+
+echo "Make sure to add \$GOBIN or \${GOPATH}/bin to your \$PATH"
diff --git a/hack/release/artifacts/build_helm.sh b/hack/release/artifacts/build_helm.sh
index b49283a..536744e 100755
--- a/hack/release/artifacts/build_helm.sh
+++ b/hack/release/artifacts/build_helm.sh
@@ -84,6 +84,7 @@ if [[ -n "${APACHE_ID:-}" ]]; then
   fi
 
   SIGNING_INFO=(--sign --key "${APACHE_ID}@apache.org" --keyring "${SECURE_RING_FILE}")
+  printf "\n\nPackaging and signing helm chart. Please provide the passphrase for your GPG key when prompted below.\nThe prompt may be subtle, but look at the cursor.\n"
 fi
 
 helm package -u helm/* --app-version "${VERSION}" --version "${VERSION#v}" -d "${HELM_RELEASE_DIR}" "${SIGNING_INFO[@]}"
diff --git a/hack/release/smoke_test/smoke_test.sh b/hack/release/smoke_test/smoke_test.sh
index 119eb4c..949f0fa 100755
--- a/hack/release/smoke_test/smoke_test.sh
+++ b/hack/release/smoke_test/smoke_test.sh
@@ -23,7 +23,7 @@ set -u
 
 show_help() {
 cat << EOF
-Usage: ./hack/release/smoke_test/smoke_test.sh [-h] [-i IMAGE] [-s GIT_SHA] -v VERSION -l LOCATION
+Usage: ./hack/release/smoke_test/smoke_test.sh [-h] [-i IMAGE] [-s GIT_SHA] -v VERSION -l LOCATION -g GPG_KEY
 
 Smoke test the Solr Operator release artifacts.
 
@@ -32,11 +32,12 @@ Smoke test the Solr Operator release artifacts.
     -i  Solr Operator Docker image to use  (Optional, defaults to apache/solr-operator:<version>)
     -s  GitSHA of the last commit for this version of Solr (Optional, check will not happen if not provided)
     -l  Base location of the staged artifacts. Can be a URL or relative or absolute file path.
+    -g  GPG Key (fingerprint) used to sign the artifacts
 EOF
 }
 
 OPTIND=1
-while getopts hv:i:l:s: opt; do
+while getopts hv:i:l:s:g: opt; do
     case $opt in
         h)
             show_help
@@ -50,6 +51,8 @@ while getopts hv:i:l:s: opt; do
             ;;
         l)  LOCATION=$OPTARG
             ;;
+        g)  GPG_KEY=$OPTARG
+            ;;
         *)
             show_help >&2
             exit 1
@@ -67,6 +70,9 @@ fi
 if [[ -z "${LOCATION:-}" ]]; then
   echo "Specify an base artifact location -l, or through the LOCATION env var" >&2 && exit 1
 fi
+if [[ -z "${GPG_KEY:-}" ]]; then
+  echo "Specify a gpg key fingerprint through -g, or through the GPG_KEY env var" >&2 && exit 1
+fi
 
 PULL_PASS_THROUGH=""
 # If LOCATION is a URL, we want to pull the Docker image
@@ -79,9 +85,15 @@ if [[ -n "${GIT_SHA:-}" ]]; then
   GIT_SHA_PASS_THROUGH=(-s "${GIT_SHA}")
 fi
 
-./hack/release/smoke_test/verify_all.sh -v "${VERSION}" -l "${LOCATION}"
+# Add GOBIN to PATH
+if [[ -z "${GOBIN:-}" ]]; then
+  export GOBIN="$(cd ${GOPATH:-~/go}/bin && pwd)"
+fi
+export PATH="${PATH}:${GOBIN}"
+
+./hack/release/smoke_test/verify_all.sh -v "${VERSION}" -l "${LOCATION}" -g "${GPG_KEY}"
 ./hack/release/smoke_test/verify_docker.sh -v "${VERSION}" -i "${IMAGE}" "${GIT_SHA_PASS_THROUGH[@]}" "${PULL_PASS_THROUGH}"
 ./hack/release/smoke_test/test_source.sh -v "${VERSION}" -l "${LOCATION}"
-./hack/release/smoke_test/test_cluster.sh -v "${VERSION}" -i "${IMAGE}" -l "${LOCATION}"
+./hack/release/smoke_test/test_cluster.sh -v "${VERSION}" -i "${IMAGE}" -l "${LOCATION}" -g "${GPG_KEY}"
 
 printf "\n\n********************\nSuccessfully smoke tested the Solr Operator %s!\n" "${VERSION}"
diff --git a/hack/release/smoke_test/test_cluster.sh b/hack/release/smoke_test/test_cluster.sh
index b9e3fd0..71fd31c 100755
--- a/hack/release/smoke_test/test_cluster.sh
+++ b/hack/release/smoke_test/test_cluster.sh
@@ -23,7 +23,7 @@ set -u
 
 show_help() {
 cat << EOF
-Usage: ./hack/release/smoke_test/test_cluster.sh [-h] [-i IMAGE] -v VERSION -l LOCATION
+Usage: ./hack/release/smoke_test/test_cluster.sh [-h] [-i IMAGE] -v VERSION -l LOCATION -g GPG_KEY
 
 Test the release candidate in a Kind cluster
 
@@ -31,11 +31,12 @@ Test the release candidate in a Kind cluster
     -v  Version of the Solr Operator
     -i  Solr Operator docker image to use  (Optional, defaults to apache/solr-operator:<version>)
     -l  Base location of the staged artifacts. Can be a URL or relative or absolute file path.
+    -g  GPG Key (fingerprint) used to sign the artifacts
 EOF
 }
 
 OPTIND=1
-while getopts hv:i:l: opt; do
+while getopts hv:i:l:g: opt; do
     case $opt in
         h)
             show_help
@@ -47,6 +48,8 @@ while getopts hv:i:l: opt; do
             ;;
         l)  LOCATION=$OPTARG
             ;;
+        g)  GPG_KEY=$OPTARG
+            ;;
         *)
             show_help >&2
             exit 1
@@ -64,6 +67,9 @@ fi
 if [[ -z "${LOCATION:-}" ]]; then
   echo "Specify an base artifact location -l, or through the LOCATION env var" >&2 && exit 1
 fi
+if [[ -z "${GPG_KEY:-}" ]]; then
+  echo "Specify a gpg key fingerprint through -g, or through the GPG_KEY env var" >&2 && exit 1
+fi
 
 # If LOCATION is not a URL, then get the absolute path
 if ! (echo "${LOCATION}" | grep "http"); then
@@ -100,8 +106,13 @@ kind create cluster --name "${CLUSTER_NAME}"
 # Load the docker image into the cluster
 kind load docker-image --name "${CLUSTER_NAME}" "${IMAGE}"
 
-# First generate the temporary public key ring
-gpg --export >~/.gnupg/pubring.gpg
+echo "Import Solr Keys"
+curl -sL0 "https://dist.apache.org/repos/dist/release/solr/KEYS" | gpg --import --quiet
+
+# First generate the old-style public key ring, if it doesn't already exist and contain the information we want
+if ! (gpg --no-default-keyring --keyring=~/.gnupg/pubring.gpg --list-keys "${GPG_KEY}"); then
+  gpg --export >~/.gnupg/pubring.gpg
+fi
 
 # Install the Solr Operator
 kubectl create -f "${LOCATION}/crds/all-with-dependencies.yaml" || kubectl replace -f "${LOCATION}/crds/all-with-dependencies.yaml"
@@ -141,17 +152,17 @@ printf '\nWait for all 3 Solr nodes to become ready.\n\n'
 grep -q "3              3       3            3" <(exec kubectl get solrcloud example -w); kill $!
 
 # Expose the common Solr service to localhost
-kubectl port-forward service/example-solrcloud-common 8983:80 || true &
+kubectl port-forward service/example-solrcloud-common 18983:80 || true &
 sleep 2
 
 printf "\nCheck the admin URL to make sure it works\n"
-curl --silent "http://localhost:8983/solr/admin/info/system" | grep '"status":0' > /dev/null
+curl --silent "http://localhost:18983/solr/admin/info/system" | grep '"status":0' > /dev/null
 
 printf "\nCreating a test collection\n"
-curl --silent "http://localhost:8983/solr/admin/collections?action=CREATE&name=smoke-test&replicationFactor=2&numShards=1" | grep '"status":0' > /dev/null
+curl --silent "http://localhost:18983/solr/admin/collections?action=CREATE&name=smoke-test&replicationFactor=2&numShards=1" | grep '"status":0' > /dev/null
 
 printf "\nQuery the test collection, test for 0 docs\n"
-curl --silent "http://localhost:8983/solr/smoke-test/select" | grep '\"numFound\":0' > /dev/null
+curl --silent "http://localhost:18983/solr/smoke-test/select" | grep '\"numFound\":0' > /dev/null
 
 printf "\nCreate a Solr Prometheus Exporter to expose metrics for the Solr Cloud\n"
 cat <<EOF | kubectl apply -f -
@@ -173,18 +184,17 @@ sleep 5
 kubectl rollout status deployment/example-solr-metrics
 
 # Expose the Solr Prometheus Exporter service to localhost
-kubectl port-forward service/example-solr-metrics 8984:80 || true &
+kubectl port-forward service/example-solr-metrics 18984:80 || true &
 sleep 15
 
-printf "\nQuery the prometheus exporter, test for 'http://example-solrcloud-0.example-solrcloud-headless.default:8983/solr' URL being scraped.\n"
-curl --silent "http://localhost:8984/metrics" | grep 'http://example-solrcloud-.*.example-solrcloud-headless.default:8983/solr' > /dev/null
+printf "\nQuery the prometheus exporter, test for 'http://example-solrcloud-*.example-solrcloud-headless.default:8983/solr' (internal) URL being scraped.\n"
+curl --silent "http://localhost:18984/metrics" | grep 'http://example-solrcloud-.*.example-solrcloud-headless.default:8983/solr' > /dev/null
 
 # If LOCATION is a URL, then remove the helm repo at the end
 if (echo "${LOCATION}" | grep "http"); then
   helm repo remove "apache-solr-test-${VERSION}"
 fi
 
-
 echo "Delete test Kind Kubernetes cluster."
 kind delete clusters "${CLUSTER_NAME}"
 
diff --git a/hack/release/smoke_test/test_source.sh b/hack/release/smoke_test/test_source.sh
index 836d31e..3e870f1 100755
--- a/hack/release/smoke_test/test_source.sh
+++ b/hack/release/smoke_test/test_source.sh
@@ -59,7 +59,7 @@ if [[ -z "${LOCATION:-}" ]]; then
   echo "Specify an base artifact location -l, or through the LOCATION env var" >&2 && exit 1
 fi
 
-TMP_DIR=$(mktemp -d --tmpdir "solr-operator-smoke-test-source-XXXXXXXX")
+TMP_DIR=$(mktemp -d "${TMPDIR:-/tmp}/solr-operator-smoke-test-source-XXXXXXXX")
 
 # If LOCATION is not a URL, then get the absolute path
 if ! (echo "${LOCATION}" | grep "http"); then
diff --git a/hack/release/smoke_test/verify_all.sh b/hack/release/smoke_test/verify_all.sh
index 21a6ff0..264bf2b 100755
--- a/hack/release/smoke_test/verify_all.sh
+++ b/hack/release/smoke_test/verify_all.sh
@@ -23,7 +23,7 @@ set -u
 
 show_help() {
 cat << EOF
-Usage: ./hack/release/smoke_test/verify_all.sh [-h] -v VERSION -l LOCATION
+Usage: ./hack/release/smoke_test/verify_all.sh [-h] -v VERSION -l LOCATION -g GPG_KEY
 
 Verify checksums and signatures of all release artifacts.
 Check that the docker image contains the necessary LICENSE and NOTICE.
@@ -31,11 +31,12 @@ Check that the docker image contains the necessary LICENSE and NOTICE.
     -h  Display this help and exit
     -v  Version of the Solr Operator
     -l  Base location of the staged artifacts. Can be a URL or relative or absolute file path.
+    -g  GPG Key (fingerprint) used to sign the artifacts
 EOF
 }
 
 OPTIND=1
-while getopts hv:l: opt; do
+while getopts hv:l:g: opt; do
     case $opt in
         h)
             show_help
@@ -45,6 +46,8 @@ while getopts hv:l: opt; do
             ;;
         l)  LOCATION=$OPTARG
             ;;
+        g)  GPG_KEY=$OPTARG
+            ;;
         *)
             show_help >&2
             exit 1
@@ -57,10 +60,13 @@ if [[ -z "${VERSION:-}" ]]; then
   echo "Specify a project version through -v, or through the VERSION env var" >&2 && exit 1
 fi
 if [[ -z "${LOCATION:-}" ]]; then
-  echo "Specify an base artifact location -l, or through the LOCATION env var" >&2 && exit 1
+  echo "Specify an base artifact location through -l, or through the LOCATION env var" >&2 && exit 1
+fi
+if [[ -z "${GPG_KEY:-}" ]]; then
+  echo "Specify a gpg key fingerprint through -g, or through the GPG_KEY env var" >&2 && exit 1
 fi
 
-TMP_DIR=$(mktemp -d --tmpdir "solr-operator-smoke-test-source-XXXXXX")
+TMP_DIR=$(mktemp -d "${TMPDIR:-/tmp}/solr-operator-smoke-verify-XXXXXX")
 
 # If LOCATION is not a URL, then get the absolute path
 if ! (echo "${LOCATION}" | grep "http"); then
@@ -70,8 +76,10 @@ fi
 echo "Import Solr Keys"
 curl -sL0 "https://dist.apache.org/repos/dist/release/solr/KEYS" | gpg --import --quiet
 
-# First generate the temporary public key ring
-gpg --export >~/.gnupg/pubring.gpg
+# First generate the old-style public key ring, if it doesn't already exist and contain the information we want
+if ! (gpg --no-default-keyring --keyring=~/.gnupg/pubring.gpg --list-keys "${GPG_KEY}"); then
+  gpg --export >~/.gnupg/pubring.gpg
+fi
 
 echo "Download all artifacts and verify signatures"
 # Do all logic in temporary directory
diff --git a/hack/release/upload/upload_crds.sh b/hack/release/upload/upload_crds.sh
index 71ba06b..fd7853f 100755
--- a/hack/release/upload/upload_crds.sh
+++ b/hack/release/upload/upload_crds.sh
@@ -88,7 +88,7 @@ echo "Pulling CRDs from the staged url and uploading to release location ${CRDS_
     APACHE_PASSWORD=""
   fi
 
-  TMP_DIR=$(mktemp -d --tmpdir "solr-operator-release-crds-XXXXXXXX")
+  TMP_DIR=$(mktemp -d "${TMPDIR:-/tmp}/solr-operator-release-crds-XXXXXXXX")
 
   # Do all logic in temporary directory
   (
diff --git a/hack/release/upload/upload_helm.sh b/hack/release/upload/upload_helm.sh
index e194b5a..a462403 100755
--- a/hack/release/upload/upload_helm.sh
+++ b/hack/release/upload/upload_helm.sh
@@ -87,7 +87,7 @@ echo "Pulling Helm chart from the staged url and uploading to release Helm repo.
     APACHE_PASSWORD=""
   fi
 
-  TMP_DIR=$(mktemp -d --tmpdir "solr-operator-release-helm-XXXXXXXX")
+  TMP_DIR=$(mktemp -d "${TMPDIR:-/tmp}/solr-operator-release-helm-XXXXXXXX")
 
   # Do all logic in temporary directory
   (
diff --git a/hack/release/wizard/releaseWizard.yaml b/hack/release/wizard/releaseWizard.yaml
index 0a7dd54..cfdb8a4 100644
--- a/hack/release/wizard/releaseWizard.yaml
+++ b/hack/release/wizard/releaseWizard.yaml
@@ -71,7 +71,7 @@ templates:
     -1  {{ minus }}
 
     {% if not passed %}
-    Reason for fail is {{ reason }}.
+    Reason for failing is {{ reason }}.
     
     {% endif %}
     This vote has {% if passed %}PASSED{% else %}FAILED{% endif %} 
@@ -89,7 +89,7 @@ templates:
 
     This release contains numerous bug fixes, optimizations, and improvements, some of which are highlighted below. The release is available for immediate download at:
 
-      <https://spolr.apache.org/operator/downloads.html>
+      <https://solr.apache.org/operator/downloads.html>
 
   announce_solr_operator_mail: |
     The template below can be used to announce the Solr Operator release to the
@@ -592,7 +592,7 @@ groups:
   description: |-
     If after the last day of the feature freeze phase no blocking issues are
     in Github with "Milestone" {{ release_version }}, then it's time to build the
-    release artifacts, run the smoke tester and stage the RC in svn
+    release artifacts, run the smoke tester and stage the RC in svn.
   depends:
   - test
   - prerequisites
@@ -653,6 +653,10 @@ groups:
       Therefore any local commits or unstaged changes you might have in the release wizard checkout will be lost.
       If you want to test with local changes, either change the git repo you are using in the release wizard
       or uncomment the command to remove local changes below.
+
+      You will need to enter your GPG Key Passphrase multiple times, so be ready for that.
+      This includes a prompt that will likely not spinup a separate window.
+      If the script pauses for a long time and has a key in the prompt, please enter your passphrase.
     depends:
       - run_tests
       - helm_change_log
@@ -730,22 +734,24 @@ groups:
       commands_text: Here we'll smoke test the release by 'downloading' the artifacts, running the tests, validating GPG signatures etc.
       commands:
       - !Command
-        cmd: ./hack/release/smoke_test/smoke_test.sh -v "{{ release_version }}" -s "{{ build_rc.git_sha | default("<git_sha>", True) }}" -i "{{ docker_image }}" -l "{{ dist_path }}"
+        cmd: ./hack/release/smoke_test/smoke_test.sh -v "{{ release_version }}" -s "{{ build_rc.git_sha | default("<git_sha>", True) }}" -i "{{ docker_image }}" -l "{{ dist_path }}" -g "{{ gpg_key | default("<gpg_key_id>", True) }}"
         logfile: smoketest.log
         tee: true
-        stdout: true
   - !Todo
     id: upload_rc_docker_image
-    title: Upload RC Docker image
+    title: Build multi-arch RC Docker image & Upload
     depends: smoke_tester
     vars:
       docker_image: 'apache/solr-operator:{{ release_version }}-rc{{ rc_number }}'
     commands: !Commands
       root_folder: '{{ git_checkout_folder }}'
-      commands_text: Upload the docker image to DockerHub
+      commands_text: Build a multi-architecture docker image and upload to DockerHub
       commands:
         - !Command
-          cmd: docker push "{{ docker_image }}"
+          cmd: docker buildx create --use
+          tee: true
+        - !Command
+          cmd: docker buildx build --pull --push --platform "linux/amd64,linux/arm64" --build-arg GIT_SHA={{ build_rc.git_sha | default("<git_sha>", True) }} . --tag {{ docker_image }} -f ./build/Dockerfile
           logfile: rc_docker_upload.log
   - !Todo
     id: import_svn
@@ -779,7 +785,7 @@ groups:
       commands_text: Here we'll verify that the staged artifacts are downloadable and hash/signatures match.
       commands:
       - !Command
-        cmd: ./hack/release/smoke_test/smoke_test.sh -v "{{ release_version }}" -s "{{ build_rc.git_sha | default("<git_sha>", True) }}" -i "{{ docker_image }}" -l "{{ dist_url }}"
+        cmd: ./hack/release/smoke_test/smoke_test.sh -v "{{ release_version }}" -s "{{ build_rc.git_sha | default("<git_sha>", True) }}" -i "{{ docker_image }}" -l "{{ dist_url }}" -g "{{ gpg_key | default("<gpg_key_id>", True) }}"
         logfile: smoketest_staged.log
 - !TodoGroup
   id: voting
@@ -820,13 +826,18 @@ groups:
       The RC Helm repo can be added with:
         helm repo add solr-operator-rc https://dist.apache.org/repos/dist/dev/solr/solr-operator/{{ build_rc.rc_folder | default("<rc_folder>", True) }}/helm-charts
 
-      You can install the RC Solr Operator and CRDs with:
-        kubectl create -f https://dist.apache.org/repos/dist/dev/solr/solr-operator/{{ build_rc.rc_folder | default("<rc_folder>", True) }}/crds/all-with-dependencies.yaml
+      You can install the RC Solr Operator and Solr CRDs with:
+        curl -sL0 "https://dist.apache.org/repos/dist/release/solr/KEYS" | gpg --import --quiet
+        # This will export your public keys into a format that helm can understand.
+        # Skip verification by removing "--verify" in the helm command below.
+        if ! (gpg --no-default-keyring --keyring=~/.gnupg/pubring.gpg --list-keys "{{ gpg_key | default("<gpg_key_id>", True) }}"); then gpg --export >~/.gnupg/pubring.gpg; fi
+        kubectl create -f https://dist.apache.org/repos/dist/dev/solr/solr-operator/{{ build_rc.rc_folder | default("<rc_folder>", True) }}/crds/all-with-dependencies.yaml || \
+          kubectl replace -f https://dist.apache.org/repos/dist/dev/solr/solr-operator/{{ build_rc.rc_folder | default("<rc_folder>", True) }}/crds/all-with-dependencies.yaml
         helm install --verify solr-operator solr-operator-rc/solr-operator --set image.tag={{ release_version }}-rc{{ rc_number }}
 
-      You can run the full smoke tester directly with this command:
+      You can run the full smoke tester directly with this command: (First checkout the {{ release_branch }} branch of the solr-operator)
 
-      ./hack/release/smoke_test/smoke_test.sh -v "{{ release_version }}" -s "{{ build_rc.git_sha | default("<git_sha>", True) }}" -i "apache/solr-operator:{{ release_version }}-rc{{ rc_number }}" \
+      ./hack/release/smoke_test/smoke_test.sh -v "{{ release_version }}" -s "{{ build_rc.git_sha | default("<git_sha>", True) }}" -i "apache/solr-operator:{{ release_version }}-rc{{ rc_number }}" -g "{{ gpg_key | default("<gpg_key_id>", True) }}" \
           -l 'https://dist.apache.org/repos/dist/dev/solr/solr-operator/{{ build_rc.rc_folder | default("<rc_folder>", True) }}'
 
       Make sure you have the following installed before running the smoke test:
@@ -838,6 +849,7 @@ groups:
         - Kustomize (v4.0.0+) This will be installed for you, but NOT upgraded if a lower version is already installed.
         - yq
         - jq
+        - coreutils (if using Mac OS)
 
       The vote will be open for at least 72 hours i.e. until {{ vote_close }}.
 
@@ -1060,7 +1072,8 @@ groups:
           tee: true
   - !Todo
     id: publish_docker_image
-    title: Publish the staged Docker image
+    title: Publish the final release Docker image
+    depends: tag_release
     vars:
       rc_tag: '{{ release_version }}-rc{{ rc_number }}'
     commands: !Commands
@@ -1069,16 +1082,16 @@ groups:
       commands_text: This will pull the RC Docker image, tag it as a release, and push the release image to DockerHub.
       commands:
         - !Command
-          cmd: docker pull "apache/solr-operator:{{ rc_tag }}"
-          logfile: docker_pull.log
+          cmd: git checkout {{ release_version }}
           tee: true
         - !Command
-          cmd: docker tag "apache/solr-operator:{{ rc_tag }}" "apache/solr-operator:{{ release_version }}"
+          cmd: git clean -df && git checkout -- .
+          comment: Make sure checkout is clean and up to date
+          logfile: git_clean.log
           tee: true
         - !Command
-          cmd: docker push "apache/solr-operator:{{ release_version }}"
-          logfile: docker_push.log
-          tee: true
+          cmd: docker buildx build --pull --push --platform "linux/amd64,linux/arm64" --build-arg GIT_SHA={{ build_rc.git_sha | default("<git_sha>", True) }} . --tag apache/solr-operator:{{ release_version }} -f ./build/Dockerfile
+          logfile: docker_upload.log
   - !Todo
     id: check_mirroring
     title: Check state of mirroring so far
diff --git a/hack/test-upgrade.sh b/hack/test-upgrade.sh
index 0be9da3..da08d7a 100755
--- a/hack/test-upgrade.sh
+++ b/hack/test-upgrade.sh
@@ -1,7 +1,27 @@
 #!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+# ********   WARNING   ******
+# Only run this script on a clean testing cluster. It will test the upgrade from v0.2.8 -> v0.3.0
+# ***************************
 
 # Clear your kube environment
-kubectl delete crds --all; kubectl delete pvc --all; helm delete solr-operator apache
+kubectl delete crds zookeeperclusters.zookeeper.pravega.io solrbackups.solr.apache.org solrclouds.solr.apache.org solrprometheusexporters.solr.apache.org \
+    solrclouds.solr.bloomberg.com solrprometheusexporters.solr.bloomberg.com solrbackups.solr.bloomberg.com solrcollections.solr.bloomberg.com solrcollectionaliases.solr.bloomberg.com; \
+    kubectl delete pvc --all; helm delete solr-operator apache
 helm ls -a --all-namespaces | awk 'NR > 1 { print  "-n "$2, $1}' | xargs -L1 helm delete
 
 helm repo add apache-solr https://solr.apache.org/charts && helm repo update
diff --git a/helm/solr-operator/.helmignore b/helm/solr-operator/.helmignore
index fbe01f8..c975369 100644
--- a/helm/solr-operator/.helmignore
+++ b/helm/solr-operator/.helmignore
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
 # Patterns to ignore when building packages.
 # This supports shell glob matching, relative path matching, and
 # negation (prefixed with !). Only one pattern per line.