Merge branch 'main' into build-hybrid-image
|
@ -16,7 +16,7 @@ jobs:
|
||||||
- name: Make ci
|
- name: Make ci
|
||||||
run: make ci
|
run: make ci
|
||||||
- name: Upload test coverage
|
- name: Upload test coverage
|
||||||
uses: codecov/codecov-action@v4
|
uses: codecov/codecov-action@v5
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
files: coverage.out
|
files: coverage.out
|
||||||
|
|
|
@ -47,7 +47,7 @@ jobs:
|
||||||
- name: Test
|
- name: Test
|
||||||
run: make test
|
run: make test
|
||||||
- name: Upload test coverage
|
- name: Upload test coverage
|
||||||
uses: codecov/codecov-action@v4
|
uses: codecov/codecov-action@v5
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
files: coverage.out
|
files: coverage.out
|
||||||
|
@ -68,24 +68,4 @@ jobs:
|
||||||
|
|
||||||
# Build and push Velero image to docker registry
|
# Build and push Velero image to docker registry
|
||||||
docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }}
|
docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }}
|
||||||
VERSION=$(./hack/docker-push.sh | grep 'VERSION:' | awk -F: '{print $2}' | xargs)
|
./hack/docker-push.sh
|
||||||
|
|
||||||
# Upload Velero image package to GCS
|
|
||||||
source hack/ci/build_util.sh
|
|
||||||
BIN=velero
|
|
||||||
RESTORE_HELPER_BIN=velero-restore-helper
|
|
||||||
GCS_BUCKET=velero-builds
|
|
||||||
VELERO_IMAGE=${BIN}-${VERSION}
|
|
||||||
VELERO_RESTORE_HELPER_IMAGE=${RESTORE_HELPER_BIN}-${VERSION}
|
|
||||||
VELERO_IMAGE_FILE=${VELERO_IMAGE}.tar.gz
|
|
||||||
VELERO_RESTORE_HELPER_IMAGE_FILE=${VELERO_RESTORE_HELPER_IMAGE}.tar.gz
|
|
||||||
VELERO_IMAGE_BACKUP_FILE=${VELERO_IMAGE}-'build.'${GITHUB_RUN_NUMBER}.tar.gz
|
|
||||||
VELERO_RESTORE_HELPER_IMAGE_BACKUP_FILE=${VELERO_RESTORE_HELPER_IMAGE}-'build.'${GITHUB_RUN_NUMBER}.tar.gz
|
|
||||||
|
|
||||||
cp ${VELERO_IMAGE_FILE} ${VELERO_IMAGE_BACKUP_FILE}
|
|
||||||
cp ${VELERO_RESTORE_HELPER_IMAGE_FILE} ${VELERO_RESTORE_HELPER_IMAGE_BACKUP_FILE}
|
|
||||||
|
|
||||||
uploader ${VELERO_IMAGE_FILE} ${GCS_BUCKET}
|
|
||||||
uploader ${VELERO_RESTORE_HELPER_IMAGE_FILE} ${GCS_BUCKET}
|
|
||||||
uploader ${VELERO_IMAGE_BACKUP_FILE} ${GCS_BUCKET}
|
|
||||||
uploader ${VELERO_RESTORE_HELPER_IMAGE_BACKUP_FILE} ${GCS_BUCKET}
|
|
||||||
|
|
6
Makefile
|
@ -239,12 +239,6 @@ container-windows:
|
||||||
-f $(VELERO_DOCKERFILE) .
|
-f $(VELERO_DOCKERFILE) .
|
||||||
|
|
||||||
@echo "container: $(IMAGE):$(VERSION)"
|
@echo "container: $(IMAGE):$(VERSION)"
|
||||||
ifeq ($(BUILDX_OUTPUT_TYPE)_$(REGISTRY), registry_velero)
|
|
||||||
docker pull $(IMAGE):$(VERSION)
|
|
||||||
rm -f $(BIN)-$(VERSION).tar
|
|
||||||
docker save $(IMAGE):$(VERSION) -o $(BIN)-$(VERSION).tar
|
|
||||||
gzip -f $(BIN)-$(VERSION).tar
|
|
||||||
endif
|
|
||||||
|
|
||||||
SKIP_TESTS ?=
|
SKIP_TESTS ?=
|
||||||
test: build-dirs
|
test: build-dirs
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Add Backup warning for inclusion of NS managed by ArgoCD
|
|
@ -1,9 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
set -x
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
function uploader {
|
|
||||||
gsutil cp $1 gs://$2/$1
|
|
||||||
gsutil -D setacl public-read gs://$2/$1 &> /dev/null
|
|
||||||
}
|
|
|
@ -30,6 +30,7 @@ import (
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
corev1api "k8s.io/api/core/v1"
|
||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
"k8s.io/apimachinery/pkg/api/meta"
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
@ -71,6 +72,9 @@ const BackupVersion = 1
|
||||||
// BackupFormatVersion is the current backup version for Velero, including major, minor, and patch.
|
// BackupFormatVersion is the current backup version for Velero, including major, minor, and patch.
|
||||||
const BackupFormatVersion = "1.1.0"
|
const BackupFormatVersion = "1.1.0"
|
||||||
|
|
||||||
|
// ArgoCD managed by namespace label key
|
||||||
|
const ArgoCDManagedByNamespaceLabel = "argocd.argoproj.io/managed-by"
|
||||||
|
|
||||||
// Backupper performs backups.
|
// Backupper performs backups.
|
||||||
type Backupper interface {
|
type Backupper interface {
|
||||||
// Backup takes a backup using the specification in the velerov1api.Backup and writes backup and log data
|
// Backup takes a backup using the specification in the velerov1api.Backup and writes backup and log data
|
||||||
|
@ -244,6 +248,18 @@ func (kb *kubernetesBackupper) BackupWithResolvers(
|
||||||
log.Infof("Including namespaces: %s", backupRequest.NamespaceIncludesExcludes.IncludesString())
|
log.Infof("Including namespaces: %s", backupRequest.NamespaceIncludesExcludes.IncludesString())
|
||||||
log.Infof("Excluding namespaces: %s", backupRequest.NamespaceIncludesExcludes.ExcludesString())
|
log.Infof("Excluding namespaces: %s", backupRequest.NamespaceIncludesExcludes.ExcludesString())
|
||||||
|
|
||||||
|
// check if there are any namespaces included in the backup which are managed by argoCD
|
||||||
|
// We will check for the existence of a ArgoCD label in the includedNamespaces and add a warning
|
||||||
|
// so that users are at least aware about the existence of argoCD managed ns in their backup
|
||||||
|
// Related Issue: https://github.com/vmware-tanzu/velero/issues/7905
|
||||||
|
if len(backupRequest.Spec.IncludedNamespaces) > 0 {
|
||||||
|
nsManagedByArgoCD := getNamespacesManagedByArgoCD(kb.kbClient, backupRequest.Spec.IncludedNamespaces, log)
|
||||||
|
|
||||||
|
if len(nsManagedByArgoCD) > 0 {
|
||||||
|
log.Warnf("backup operation may encounter complications and potentially produce undesirable results due to the inclusion of namespaces %v managed by ArgoCD in the backup.", nsManagedByArgoCD)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if collections.UseOldResourceFilters(backupRequest.Spec) {
|
if collections.UseOldResourceFilters(backupRequest.Spec) {
|
||||||
backupRequest.ResourceIncludesExcludes = collections.GetGlobalResourceIncludesExcludes(kb.discoveryHelper, log,
|
backupRequest.ResourceIncludesExcludes = collections.GetGlobalResourceIncludesExcludes(kb.discoveryHelper, log,
|
||||||
backupRequest.Spec.IncludedResources,
|
backupRequest.Spec.IncludedResources,
|
||||||
|
@ -1107,3 +1123,26 @@ func putVolumeInfos(
|
||||||
|
|
||||||
return backupStore.PutBackupVolumeInfos(backupName, backupVolumeInfoBuf)
|
return backupStore.PutBackupVolumeInfos(backupName, backupVolumeInfoBuf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getNamespacesManagedByArgoCD(kbClient kbclient.Client, includedNamespaces []string, log logrus.FieldLogger) []string {
|
||||||
|
var nsManagedByArgoCD []string
|
||||||
|
|
||||||
|
for _, nsName := range includedNamespaces {
|
||||||
|
ns := corev1api.Namespace{}
|
||||||
|
if err := kbClient.Get(context.Background(), kbclient.ObjectKey{Name: nsName}, &ns); err != nil {
|
||||||
|
// check for only those ns that exist and are included in backup
|
||||||
|
// here we ignore cases like "" or "*" specified under includedNamespaces
|
||||||
|
if apierrors.IsNotFound(err) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
log.WithError(err).Errorf("error getting namespace %s", nsName)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
nsLabels := ns.GetLabels()
|
||||||
|
if len(nsLabels[ArgoCDManagedByNamespaceLabel]) > 0 {
|
||||||
|
nsManagedByArgoCD = append(nsManagedByArgoCD, nsName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nsManagedByArgoCD
|
||||||
|
}
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
---
|
|
||||||
first_name: Dave
|
|
||||||
last_name: Smith-Uchida
|
|
||||||
image: /img/contributors/dave.png
|
|
||||||
github_handle: dsu-igeek
|
|
||||||
---
|
|
||||||
Architect
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
first_name: Abigail
|
|
||||||
last_name: McCarthy
|
|
||||||
image: /img/contributors/abigail-mccarthy.png
|
|
||||||
github_handle: a-mccarthy
|
|
||||||
---
|
|
||||||
Technical Writer
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
first_name: Orlin
|
|
||||||
last_name: Vasilev
|
|
||||||
image: /img/contributors/orlin-vasilev.png
|
|
||||||
github_handle: OrlinVasilev
|
|
||||||
---
|
|
||||||
Community Manager
|
|
Before Width: | Height: | Size: 389 KiB |
Before Width: | Height: | Size: 205 KiB |
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 224 KiB |
Before Width: | Height: | Size: 296 KiB |
Before Width: | Height: | Size: 631 KiB |
Before Width: | Height: | Size: 212 KiB |
Before Width: | Height: | Size: 227 KiB |