mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Merge pull request #41049 from copejon/pv-provision-in-unmanaged-zone
Automatic merge from submit-queue (batch tested with PRs 41134, 41410, 40177, 41049, 41313) PV E2E: dynamically provisioned volume should not create in unmanaged zone **What this PR does / why we need it**: Adds e2e test to that attempts to provision a volume in an unmanaged zone and fails on success. This is to catch regressions of #31948. cc @jeffvance ```release-note NONE ```
This commit is contained in:
		@@ -22,6 +22,7 @@ import (
 | 
				
			|||||||
	"k8s.io/apimachinery/pkg/api/resource"
 | 
						"k8s.io/apimachinery/pkg/api/resource"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
						"k8s.io/apimachinery/pkg/runtime/schema"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/util/sets"
 | 
				
			||||||
	"k8s.io/apiserver/pkg/authentication/serviceaccount"
 | 
						"k8s.io/apiserver/pkg/authentication/serviceaccount"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/v1"
 | 
						"k8s.io/kubernetes/pkg/api/v1"
 | 
				
			||||||
	rbacv1beta1 "k8s.io/kubernetes/pkg/apis/rbac/v1beta1"
 | 
						rbacv1beta1 "k8s.io/kubernetes/pkg/apis/rbac/v1beta1"
 | 
				
			||||||
@@ -131,6 +132,58 @@ var _ = framework.KubeDescribe("Dynamic provisioning", func() {
 | 
				
			|||||||
				testDynamicProvisioning(c, claim, "2Gi")
 | 
									testDynamicProvisioning(c, claim, "2Gi")
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// NOTE: Slow!  The test will wait up to 5 minutes (framework.ClaimProvisionTimeout) when there is
 | 
				
			||||||
 | 
							// no regression.
 | 
				
			||||||
 | 
							It("should not provision a volume in an unmanaged GCE zone. [Slow]", func() {
 | 
				
			||||||
 | 
								framework.SkipUnlessProviderIs("gce", "gke")
 | 
				
			||||||
 | 
								var suffix string = "unmananged"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								By("Discovering an unmanaged zone")
 | 
				
			||||||
 | 
								allZones := sets.NewString()     // all zones in the project
 | 
				
			||||||
 | 
								managedZones := sets.NewString() // subset of allZones
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								gceCloud, err := getGCECloud()
 | 
				
			||||||
 | 
								Expect(err).NotTo(HaveOccurred())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Get all k8s managed zones
 | 
				
			||||||
 | 
								managedZones, err = gceCloud.GetAllZones()
 | 
				
			||||||
 | 
								Expect(err).NotTo(HaveOccurred())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Get a list of all zones in the project
 | 
				
			||||||
 | 
								zones, err := gceCloud.GetComputeService().Zones.List(framework.TestContext.CloudConfig.ProjectID).Do()
 | 
				
			||||||
 | 
								for _, z := range zones.Items {
 | 
				
			||||||
 | 
									allZones.Insert(z.Name)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Get the subset of zones not managed by k8s
 | 
				
			||||||
 | 
								var unmanagedZone string
 | 
				
			||||||
 | 
								var popped bool
 | 
				
			||||||
 | 
								unmanagedZones := allZones.Difference(managedZones)
 | 
				
			||||||
 | 
								// And select one of them at random.
 | 
				
			||||||
 | 
								if unmanagedZone, popped = unmanagedZones.PopAny(); !popped {
 | 
				
			||||||
 | 
									framework.Skipf("No unmanaged zones found.")
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								By("Creating a StorageClass for the unmanaged zone")
 | 
				
			||||||
 | 
								sc := newStorageClass("kubernetes.io/gce-pd", suffix)
 | 
				
			||||||
 | 
								// Set an unmanaged zone.
 | 
				
			||||||
 | 
								sc.Parameters = map[string]string{"zone": unmanagedZone}
 | 
				
			||||||
 | 
								sc, err = c.Storage().StorageClasses().Create(sc)
 | 
				
			||||||
 | 
								defer Expect(c.Storage().StorageClasses().Delete(sc.Name, nil)).To(Succeed())
 | 
				
			||||||
 | 
								Expect(err).NotTo(HaveOccurred())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								By("Creating a claim and expecting it to timeout")
 | 
				
			||||||
 | 
								pvc := newClaim(ns, suffix, false)
 | 
				
			||||||
 | 
								pvc, err = c.Core().PersistentVolumeClaims(ns).Create(pvc)
 | 
				
			||||||
 | 
								defer Expect(c.Core().PersistentVolumeClaims(ns).Delete(pvc.Name, nil)).To(Succeed())
 | 
				
			||||||
 | 
								Expect(err).NotTo(HaveOccurred())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// The claim should timeout phase:Pending
 | 
				
			||||||
 | 
								err = framework.WaitForPersistentVolumeClaimPhase(v1.ClaimBound, c, ns, pvc.Name, 2*time.Second, framework.ClaimProvisionTimeout)
 | 
				
			||||||
 | 
								Expect(err).To(HaveOccurred())
 | 
				
			||||||
 | 
								framework.Logf(err.Error())
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	framework.KubeDescribe("DynamicProvisioner Alpha", func() {
 | 
						framework.KubeDescribe("DynamicProvisioner Alpha", func() {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user