Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
86f1a94b
Commit
86f1a94b
authored
Oct 12, 2016
by
Scott Creeley
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adding default StorageClass annotation printout for resource_printer
parent
f39e86c0
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
238 additions
and
129 deletions
+238
-129
helpers.go
pkg/api/helpers.go
+14
-0
helpers.go
pkg/apis/storage/util/helpers.go
+136
-0
binder_test.go
pkg/controller/volume/persistentvolume/binder_test.go
+11
-10
framework_test.go
pkg/controller/volume/persistentvolume/framework_test.go
+9
-8
index.go
pkg/controller/volume/persistentvolume/index.go
+4
-3
index_test.go
pkg/controller/volume/persistentvolume/index_test.go
+6
-5
provision_test.go
pkg/controller/volume/persistentvolume/provision_test.go
+0
-0
pv_controller.go
pkg/controller/volume/persistentvolume/pv_controller.go
+27
-41
pv_controller_base.go
pkg/controller/volume/persistentvolume/pv_controller_base.go
+3
-41
describe.go
pkg/kubectl/describe.go
+4
-0
resource_printer.go
pkg/kubectl/resource_printer.go
+5
-0
admission.go
plugin/pkg/admission/storageclass/default/admission.go
+4
-10
admission_test.go
plugin/pkg/admission/storageclass/default/admission_test.go
+8
-7
volume_provisioning.go
test/e2e/volume_provisioning.go
+3
-2
persistent_volumes_test.go
.../integration/persistentvolumes/persistent_volumes_test.go
+2
-1
storage_classes_test.go
test/integration/storageclasses/storage_classes_test.go
+2
-1
No files found.
pkg/api/helpers.go
View file @
86f1a94b
...
@@ -236,6 +236,20 @@ var standardFinalizers = sets.NewString(
...
@@ -236,6 +236,20 @@ var standardFinalizers = sets.NewString(
FinalizerOrphan
,
FinalizerOrphan
,
)
)
// HasAnnotation returns a bool if passed in annotation exists
func
HasAnnotation
(
obj
ObjectMeta
,
ann
string
)
bool
{
_
,
found
:=
obj
.
Annotations
[
ann
]
return
found
}
// SetMetaDataAnnotation sets the annotation and value
func
SetMetaDataAnnotation
(
obj
*
ObjectMeta
,
ann
string
,
value
string
)
{
if
obj
.
Annotations
==
nil
{
obj
.
Annotations
=
make
(
map
[
string
]
string
)
}
obj
.
Annotations
[
ann
]
=
value
}
func
IsStandardFinalizerName
(
str
string
)
bool
{
func
IsStandardFinalizerName
(
str
string
)
bool
{
return
standardFinalizers
.
Has
(
str
)
return
standardFinalizers
.
Has
(
str
)
}
}
...
...
pkg/apis/storage/util/helpers.go
0 → 100644
View file @
86f1a94b
/*
Copyright 2016 The Kubernetes Authors.
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.
*/
package
util
import
(
"k8s.io/kubernetes/pkg/api"
)
// IsDefaultStorageClassAnnotation represents a StorageClass annotation that
// marks a class as the default StorageClass
//TODO: Update IsDefaultStorageClassannotation and remove Beta when no longer used
const
IsDefaultStorageClassAnnotation
=
"storageclass.beta.kubernetes.io/is-default-class"
const
BetaIsDefaultStorageClassAnnotation
=
"storageclass.beta.kubernetes.io/is-default-class"
// AlphaStorageClassAnnotation represents the previous alpha storage class
// annotation. it's no longer used and held here for posterity.
const
AlphaStorageClassAnnotation
=
"volume.alpha.kubernetes.io/storage-class"
// BetaStorageClassAnnotation represents the beta/previous StorageClass annotation.
// It's currently still used and will be held for backwards compatibility
const
BetaStorageClassAnnotation
=
"volume.beta.kubernetes.io/storage-class"
// StorageClassAnnotation represents the storage class associated with a resource.
// It currently matches the Beta value and can change when official is set.
// - in PersistentVolumeClaim it represents required class to match.
// Only PersistentVolumes with the same class (i.e. annotation with the same
// value) can be bound to the claim. In case no such volume exists, the
// controller will provision a new one using StorageClass instance with
// the same name as the annotation value.
// - in PersistentVolume it represents storage class to which the persistent
// volume belongs.
//TODO: Update this to final annotation value as it matches BetaStorageClassAnnotation for now
const
StorageClassAnnotation
=
"volume.beta.kubernetes.io/storage-class"
// GetVolumeStorageClass returns value of StorageClassAnnotation or empty string in case
// the annotation does not exist.
// TODO: change to PersistentVolume.Spec.Class value when this attribute is
// introduced.
func
GetVolumeStorageClass
(
volume
*
api
.
PersistentVolume
)
string
{
if
class
,
found
:=
volume
.
Annotations
[
StorageClassAnnotation
];
found
{
return
class
}
// 'nil' is interpreted as "", i.e. the volume does not belong to any class.
return
""
}
// GetClaimStorageClass returns name of class that is requested by given claim.
// Request for `nil` class is interpreted as request for class "",
// i.e. for a classless PV.
// TODO: change to PersistentVolumeClaim.Spec.Class value when this
// attribute is introduced.
func
GetClaimStorageClass
(
claim
*
api
.
PersistentVolumeClaim
)
string
{
if
class
,
found
:=
claim
.
Annotations
[
StorageClassAnnotation
];
found
{
return
class
}
return
""
}
// GetStorageClassAnnotation returns the StorageClass value
// if the annotation is set, empty string if not
// TODO: remove Alpha and Beta when no longer used or needed
func
GetStorageClassAnnotation
(
obj
api
.
ObjectMeta
)
string
{
if
class
,
ok
:=
obj
.
Annotations
[
StorageClassAnnotation
];
ok
{
return
class
}
if
class
,
ok
:=
obj
.
Annotations
[
BetaStorageClassAnnotation
];
ok
{
return
class
}
if
class
,
ok
:=
obj
.
Annotations
[
AlphaStorageClassAnnotation
];
ok
{
return
class
}
return
""
}
// HasStorageClassAnnotation returns a boolean
// if the annotation is set
// TODO: remove Alpha and Beta when no longer used or needed
func
HasStorageClassAnnotation
(
obj
api
.
ObjectMeta
)
bool
{
if
_
,
found
:=
obj
.
Annotations
[
StorageClassAnnotation
];
found
{
return
found
}
if
_
,
found
:=
obj
.
Annotations
[
BetaStorageClassAnnotation
];
found
{
return
found
}
if
_
,
found
:=
obj
.
Annotations
[
AlphaStorageClassAnnotation
];
found
{
return
found
}
return
false
}
// IsDefaultAnnotationText returns a pretty Yes/No String if
// the annotation is set
// TODO: remove Beta when no longer needed
func
IsDefaultAnnotationText
(
obj
api
.
ObjectMeta
)
string
{
if
obj
.
Annotations
[
IsDefaultStorageClassAnnotation
]
==
"true"
{
return
"Yes"
}
if
obj
.
Annotations
[
BetaIsDefaultStorageClassAnnotation
]
==
"true"
{
return
"Yes"
}
return
"No"
}
// IsDefaultAnnotation returns a boolean if
// the annotation is set
// TODO: remove Beta when no longer needed
func
IsDefaultAnnotation
(
obj
api
.
ObjectMeta
)
bool
{
if
obj
.
Annotations
[
IsDefaultStorageClassAnnotation
]
==
"true"
{
return
true
}
if
obj
.
Annotations
[
BetaIsDefaultStorageClassAnnotation
]
==
"true"
{
return
true
}
return
false
}
pkg/controller/volume/persistentvolume/binder_test.go
View file @
86f1a94b
...
@@ -21,6 +21,7 @@ import (
...
@@ -21,6 +21,7 @@ import (
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/apis/storage"
storageutil
"k8s.io/kubernetes/pkg/apis/storage/util"
)
)
// Test single call to syncClaim and syncVolume methods.
// Test single call to syncClaim and syncVolume methods.
...
@@ -430,14 +431,14 @@ func TestSync(t *testing.T) {
...
@@ -430,14 +431,14 @@ func TestSync(t *testing.T) {
"13-1 - binding to class"
,
"13-1 - binding to class"
,
[]
*
api
.
PersistentVolume
{
[]
*
api
.
PersistentVolume
{
newVolume
(
"volume13-1-1"
,
"1Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
),
newVolume
(
"volume13-1-1"
,
"1Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
),
newVolume
(
"volume13-1-2"
,
"10Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
,
annClass
),
newVolume
(
"volume13-1-2"
,
"10Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
,
storageutil
.
StorageClassAnnotation
),
},
},
[]
*
api
.
PersistentVolume
{
[]
*
api
.
PersistentVolume
{
newVolume
(
"volume13-1-1"
,
"1Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
),
newVolume
(
"volume13-1-1"
,
"1Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
),
newVolume
(
"volume13-1-2"
,
"10Gi"
,
"uid13-1"
,
"claim13-1"
,
api
.
VolumeBound
,
api
.
PersistentVolumeReclaimRetain
,
annBoundByController
,
annClass
),
newVolume
(
"volume13-1-2"
,
"10Gi"
,
"uid13-1"
,
"claim13-1"
,
api
.
VolumeBound
,
api
.
PersistentVolumeReclaimRetain
,
annBoundByController
,
storageutil
.
StorageClassAnnotation
),
},
},
newClaimArray
(
"claim13-1"
,
"uid13-1"
,
"1Gi"
,
""
,
api
.
ClaimPending
,
annClass
),
newClaimArray
(
"claim13-1"
,
"uid13-1"
,
"1Gi"
,
""
,
api
.
ClaimPending
,
storageutil
.
StorageClassAnnotation
),
withExpectedCapacity
(
"10Gi"
,
newClaimArray
(
"claim13-1"
,
"uid13-1"
,
"1Gi"
,
"volume13-1-2"
,
api
.
ClaimBound
,
annBoundByController
,
annClass
,
annBindCompleted
)),
withExpectedCapacity
(
"10Gi"
,
newClaimArray
(
"claim13-1"
,
"uid13-1"
,
"1Gi"
,
"volume13-1-2"
,
api
.
ClaimBound
,
annBoundByController
,
storageutil
.
StorageClassAnnotation
,
annBindCompleted
)),
noevents
,
noerrors
,
testSyncClaim
,
noevents
,
noerrors
,
testSyncClaim
,
},
},
{
{
...
@@ -445,11 +446,11 @@ func TestSync(t *testing.T) {
...
@@ -445,11 +446,11 @@ func TestSync(t *testing.T) {
// smaller PV with a class available
// smaller PV with a class available
"13-2 - binding without a class"
,
"13-2 - binding without a class"
,
[]
*
api
.
PersistentVolume
{
[]
*
api
.
PersistentVolume
{
newVolume
(
"volume13-2-1"
,
"1Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
,
annClass
),
newVolume
(
"volume13-2-1"
,
"1Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
,
storageutil
.
StorageClassAnnotation
),
newVolume
(
"volume13-2-2"
,
"10Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
),
newVolume
(
"volume13-2-2"
,
"10Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
),
},
},
[]
*
api
.
PersistentVolume
{
[]
*
api
.
PersistentVolume
{
newVolume
(
"volume13-2-1"
,
"1Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
,
annClass
),
newVolume
(
"volume13-2-1"
,
"1Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
,
storageutil
.
StorageClassAnnotation
),
newVolume
(
"volume13-2-2"
,
"10Gi"
,
"uid13-2"
,
"claim13-2"
,
api
.
VolumeBound
,
api
.
PersistentVolumeReclaimRetain
,
annBoundByController
),
newVolume
(
"volume13-2-2"
,
"10Gi"
,
"uid13-2"
,
"claim13-2"
,
api
.
VolumeBound
,
api
.
PersistentVolumeReclaimRetain
,
annBoundByController
),
},
},
newClaimArray
(
"claim13-2"
,
"uid13-2"
,
"1Gi"
,
""
,
api
.
ClaimPending
),
newClaimArray
(
"claim13-2"
,
"uid13-2"
,
"1Gi"
,
""
,
api
.
ClaimPending
),
...
@@ -462,14 +463,14 @@ func TestSync(t *testing.T) {
...
@@ -462,14 +463,14 @@ func TestSync(t *testing.T) {
"13-3 - binding to specific a class"
,
"13-3 - binding to specific a class"
,
volumeWithClass
(
"silver"
,
[]
*
api
.
PersistentVolume
{
volumeWithClass
(
"silver"
,
[]
*
api
.
PersistentVolume
{
newVolume
(
"volume13-3-1"
,
"1Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
),
newVolume
(
"volume13-3-1"
,
"1Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
),
newVolume
(
"volume13-3-2"
,
"10Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
,
annClass
),
newVolume
(
"volume13-3-2"
,
"10Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
,
storageutil
.
StorageClassAnnotation
),
}),
}),
volumeWithClass
(
"silver"
,
[]
*
api
.
PersistentVolume
{
volumeWithClass
(
"silver"
,
[]
*
api
.
PersistentVolume
{
newVolume
(
"volume13-3-1"
,
"1Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
),
newVolume
(
"volume13-3-1"
,
"1Gi"
,
""
,
""
,
api
.
VolumePending
,
api
.
PersistentVolumeReclaimRetain
),
newVolume
(
"volume13-3-2"
,
"10Gi"
,
"uid13-3"
,
"claim13-3"
,
api
.
VolumeBound
,
api
.
PersistentVolumeReclaimRetain
,
annBoundByController
,
annClass
),
newVolume
(
"volume13-3-2"
,
"10Gi"
,
"uid13-3"
,
"claim13-3"
,
api
.
VolumeBound
,
api
.
PersistentVolumeReclaimRetain
,
annBoundByController
,
storageutil
.
StorageClassAnnotation
),
}),
}),
newClaimArray
(
"claim13-3"
,
"uid13-3"
,
"1Gi"
,
""
,
api
.
ClaimPending
,
annClass
),
newClaimArray
(
"claim13-3"
,
"uid13-3"
,
"1Gi"
,
""
,
api
.
ClaimPending
,
storageutil
.
StorageClassAnnotation
),
withExpectedCapacity
(
"10Gi"
,
newClaimArray
(
"claim13-3"
,
"uid13-3"
,
"1Gi"
,
"volume13-3-2"
,
api
.
ClaimBound
,
annBoundByController
,
annBindCompleted
,
annClass
)),
withExpectedCapacity
(
"10Gi"
,
newClaimArray
(
"claim13-3"
,
"uid13-3"
,
"1Gi"
,
"volume13-3-2"
,
api
.
ClaimBound
,
annBoundByController
,
annBindCompleted
,
storageutil
.
StorageClassAnnotation
)),
noevents
,
noerrors
,
testSyncClaim
,
noevents
,
noerrors
,
testSyncClaim
,
},
},
{
{
...
...
pkg/controller/volume/persistentvolume/framework_test.go
View file @
86f1a94b
...
@@ -34,6 +34,7 @@ import (
...
@@ -34,6 +34,7 @@ import (
"k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/apis/storage"
storageutil
"k8s.io/kubernetes/pkg/apis/storage/util"
"k8s.io/kubernetes/pkg/client/cache"
"k8s.io/kubernetes/pkg/client/cache"
clientset
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
clientset
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
...
@@ -650,7 +651,7 @@ func newVolume(name, capacity, boundToClaimUID, boundToClaimName string, phase a
...
@@ -650,7 +651,7 @@ func newVolume(name, capacity, boundToClaimUID, boundToClaimName string, phase a
switch
a
{
switch
a
{
case
annDynamicallyProvisioned
:
case
annDynamicallyProvisioned
:
volume
.
Annotations
[
a
]
=
mockPluginName
volume
.
Annotations
[
a
]
=
mockPluginName
case
annClass
:
case
storageutil
.
StorageClassAnnotation
:
volume
.
Annotations
[
a
]
=
"gold"
volume
.
Annotations
[
a
]
=
"gold"
default
:
default
:
volume
.
Annotations
[
a
]
=
"yes"
volume
.
Annotations
[
a
]
=
"yes"
...
@@ -699,13 +700,13 @@ func withMessage(message string, volumes []*api.PersistentVolume) []*api.Persist
...
@@ -699,13 +700,13 @@ func withMessage(message string, volumes []*api.PersistentVolume) []*api.Persist
return
volumes
return
volumes
}
}
// volumeWithClass saves given class into
annClass
annotation.
// volumeWithClass saves given class into
storage.StorageClassAnnotation
annotation.
// Meant to be used to compose claims specified inline in a test.
// Meant to be used to compose claims specified inline in a test.
func
volumeWithClass
(
className
string
,
volumes
[]
*
api
.
PersistentVolume
)
[]
*
api
.
PersistentVolume
{
func
volumeWithClass
(
className
string
,
volumes
[]
*
api
.
PersistentVolume
)
[]
*
api
.
PersistentVolume
{
if
volumes
[
0
]
.
Annotations
==
nil
{
if
volumes
[
0
]
.
Annotations
==
nil
{
volumes
[
0
]
.
Annotations
=
map
[
string
]
string
{
annClass
:
className
}
volumes
[
0
]
.
Annotations
=
map
[
string
]
string
{
storageutil
.
StorageClassAnnotation
:
className
}
}
else
{
}
else
{
volumes
[
0
]
.
Annotations
[
annClass
]
=
className
volumes
[
0
]
.
Annotations
[
storageutil
.
StorageClassAnnotation
]
=
className
}
}
return
volumes
return
volumes
}
}
...
@@ -747,7 +748,7 @@ func newClaim(name, claimUID, capacity, boundToVolume string, phase api.Persiste
...
@@ -747,7 +748,7 @@ func newClaim(name, claimUID, capacity, boundToVolume string, phase api.Persiste
claim
.
Annotations
=
make
(
map
[
string
]
string
)
claim
.
Annotations
=
make
(
map
[
string
]
string
)
for
_
,
a
:=
range
annotations
{
for
_
,
a
:=
range
annotations
{
switch
a
{
switch
a
{
case
annClass
:
case
storageutil
.
StorageClassAnnotation
:
claim
.
Annotations
[
a
]
=
"gold"
claim
.
Annotations
[
a
]
=
"gold"
default
:
default
:
claim
.
Annotations
[
a
]
=
"yes"
claim
.
Annotations
[
a
]
=
"yes"
...
@@ -774,13 +775,13 @@ func newClaimArray(name, claimUID, capacity, boundToVolume string, phase api.Per
...
@@ -774,13 +775,13 @@ func newClaimArray(name, claimUID, capacity, boundToVolume string, phase api.Per
}
}
}
}
// claimWithClass saves given class into
annClass
annotation.
// claimWithClass saves given class into
storage.StorageClassAnnotation
annotation.
// Meant to be used to compose claims specified inline in a test.
// Meant to be used to compose claims specified inline in a test.
func
claimWithClass
(
className
string
,
claims
[]
*
api
.
PersistentVolumeClaim
)
[]
*
api
.
PersistentVolumeClaim
{
func
claimWithClass
(
className
string
,
claims
[]
*
api
.
PersistentVolumeClaim
)
[]
*
api
.
PersistentVolumeClaim
{
if
claims
[
0
]
.
Annotations
==
nil
{
if
claims
[
0
]
.
Annotations
==
nil
{
claims
[
0
]
.
Annotations
=
map
[
string
]
string
{
annClass
:
className
}
claims
[
0
]
.
Annotations
=
map
[
string
]
string
{
storageutil
.
StorageClassAnnotation
:
className
}
}
else
{
}
else
{
claims
[
0
]
.
Annotations
[
annClass
]
=
className
claims
[
0
]
.
Annotations
[
storageutil
.
StorageClassAnnotation
]
=
className
}
}
return
claims
return
claims
}
}
...
...
pkg/controller/volume/persistentvolume/index.go
View file @
86f1a94b
...
@@ -22,6 +22,7 @@ import (
...
@@ -22,6 +22,7 @@ import (
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/unversioned"
storageutil
"k8s.io/kubernetes/pkg/apis/storage/util"
"k8s.io/kubernetes/pkg/client/cache"
"k8s.io/kubernetes/pkg/client/cache"
"k8s.io/kubernetes/pkg/labels"
"k8s.io/kubernetes/pkg/labels"
)
)
...
@@ -92,7 +93,7 @@ func (pvIndex *persistentVolumeOrderedIndex) findByClaim(claim *api.PersistentVo
...
@@ -92,7 +93,7 @@ func (pvIndex *persistentVolumeOrderedIndex) findByClaim(claim *api.PersistentVo
var
smallestVolumeSize
int64
var
smallestVolumeSize
int64
requestedQty
:=
claim
.
Spec
.
Resources
.
Requests
[
api
.
ResourceName
(
api
.
ResourceStorage
)]
requestedQty
:=
claim
.
Spec
.
Resources
.
Requests
[
api
.
ResourceName
(
api
.
ResourceStorage
)]
requestedSize
:=
requestedQty
.
Value
()
requestedSize
:=
requestedQty
.
Value
()
requestedClass
:=
getClaim
Class
(
claim
)
requestedClass
:=
storageutil
.
GetClaimStorage
Class
(
claim
)
var
selector
labels
.
Selector
var
selector
labels
.
Selector
if
claim
.
Spec
.
Selector
!=
nil
{
if
claim
.
Spec
.
Selector
!=
nil
{
...
@@ -133,7 +134,7 @@ func (pvIndex *persistentVolumeOrderedIndex) findByClaim(claim *api.PersistentVo
...
@@ -133,7 +134,7 @@ func (pvIndex *persistentVolumeOrderedIndex) findByClaim(claim *api.PersistentVo
// with existing PVs, findByClaim must find only PVs that are
// with existing PVs, findByClaim must find only PVs that are
// pre-bound to the claim (by dynamic provisioning). TODO: remove in
// pre-bound to the claim (by dynamic provisioning). TODO: remove in
// 1.5
// 1.5
if
hasAnnotation
(
claim
.
ObjectMeta
,
annAlphaClass
)
{
if
api
.
HasAnnotation
(
claim
.
ObjectMeta
,
storageutil
.
AlphaStorageClassAnnotation
)
{
continue
continue
}
}
...
@@ -146,7 +147,7 @@ func (pvIndex *persistentVolumeOrderedIndex) findByClaim(claim *api.PersistentVo
...
@@ -146,7 +147,7 @@ func (pvIndex *persistentVolumeOrderedIndex) findByClaim(claim *api.PersistentVo
}
else
if
selector
!=
nil
&&
!
selector
.
Matches
(
labels
.
Set
(
volume
.
Labels
))
{
}
else
if
selector
!=
nil
&&
!
selector
.
Matches
(
labels
.
Set
(
volume
.
Labels
))
{
continue
continue
}
}
if
getVolum
eClass
(
volume
)
!=
requestedClass
{
if
storageutil
.
GetVolumeStorag
eClass
(
volume
)
!=
requestedClass
{
continue
continue
}
}
...
...
pkg/controller/volume/persistentvolume/index_test.go
View file @
86f1a94b
...
@@ -24,6 +24,7 @@ import (
...
@@ -24,6 +24,7 @@ import (
"k8s.io/kubernetes/pkg/api/resource"
"k8s.io/kubernetes/pkg/api/resource"
"k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/unversioned"
storageutil
"k8s.io/kubernetes/pkg/apis/storage/util"
)
)
func
TestMatchVolume
(
t
*
testing
.
T
)
{
func
TestMatchVolume
(
t
*
testing
.
T
)
{
...
@@ -177,7 +178,7 @@ func TestMatchVolume(t *testing.T) {
...
@@ -177,7 +178,7 @@ func TestMatchVolume(t *testing.T) {
Name
:
"claim01"
,
Name
:
"claim01"
,
Namespace
:
"myns"
,
Namespace
:
"myns"
,
Annotations
:
map
[
string
]
string
{
Annotations
:
map
[
string
]
string
{
annClass
:
"silver"
,
storageutil
.
StorageClassAnnotation
:
"silver"
,
},
},
},
},
Spec
:
api
.
PersistentVolumeClaimSpec
{
Spec
:
api
.
PersistentVolumeClaimSpec
{
...
@@ -202,7 +203,7 @@ func TestMatchVolume(t *testing.T) {
...
@@ -202,7 +203,7 @@ func TestMatchVolume(t *testing.T) {
Name
:
"claim01"
,
Name
:
"claim01"
,
Namespace
:
"myns"
,
Namespace
:
"myns"
,
Annotations
:
map
[
string
]
string
{
Annotations
:
map
[
string
]
string
{
annClass
:
"silver"
,
storageutil
.
StorageClassAnnotation
:
"silver"
,
},
},
},
},
Spec
:
api
.
PersistentVolumeClaimSpec
{
Spec
:
api
.
PersistentVolumeClaimSpec
{
...
@@ -626,7 +627,7 @@ func createTestVolumes() []*api.PersistentVolume {
...
@@ -626,7 +627,7 @@ func createTestVolumes() []*api.PersistentVolume {
"should-exist"
:
"true"
,
"should-exist"
:
"true"
,
},
},
Annotations
:
map
[
string
]
string
{
Annotations
:
map
[
string
]
string
{
annClass
:
"silver"
,
storageutil
.
StorageClassAnnotation
:
"silver"
,
},
},
},
},
Spec
:
api
.
PersistentVolumeSpec
{
Spec
:
api
.
PersistentVolumeSpec
{
...
@@ -646,7 +647,7 @@ func createTestVolumes() []*api.PersistentVolume {
...
@@ -646,7 +647,7 @@ func createTestVolumes() []*api.PersistentVolume {
UID
:
"gce-pd-silver2"
,
UID
:
"gce-pd-silver2"
,
Name
:
"gce0024"
,
Name
:
"gce0024"
,
Annotations
:
map
[
string
]
string
{
Annotations
:
map
[
string
]
string
{
annClass
:
"silver"
,
storageutil
.
StorageClassAnnotation
:
"silver"
,
},
},
},
},
Spec
:
api
.
PersistentVolumeSpec
{
Spec
:
api
.
PersistentVolumeSpec
{
...
@@ -666,7 +667,7 @@ func createTestVolumes() []*api.PersistentVolume {
...
@@ -666,7 +667,7 @@ func createTestVolumes() []*api.PersistentVolume {
UID
:
"gce-pd-gold"
,
UID
:
"gce-pd-gold"
,
Name
:
"gce0025"
,
Name
:
"gce0025"
,
Annotations
:
map
[
string
]
string
{
Annotations
:
map
[
string
]
string
{
annClass
:
"gold"
,
storageutil
.
StorageClassAnnotation
:
"gold"
,
},
},
},
},
Spec
:
api
.
PersistentVolumeSpec
{
Spec
:
api
.
PersistentVolumeSpec
{
...
...
pkg/controller/volume/persistentvolume/provision_test.go
View file @
86f1a94b
This diff is collapsed.
Click to expand it.
pkg/controller/volume/persistentvolume/pv_controller.go
View file @
86f1a94b
This diff is collapsed.
Click to expand it.
pkg/controller/volume/persistentvolume/pv_controller_base.go
View file @
86f1a94b
...
@@ -496,27 +496,15 @@ func (ctrl *PersistentVolumeController) upgradeVolumeFrom1_2(volume *api.Persist
...
@@ -496,27 +496,15 @@ func (ctrl *PersistentVolumeController) upgradeVolumeFrom1_2(volume *api.Persist
// Stateless functions
// Stateless functions
func
hasAnnotation
(
obj
api
.
ObjectMeta
,
ann
string
)
bool
{
_
,
found
:=
obj
.
Annotations
[
ann
]
return
found
}
func
setAnnotation
(
obj
*
api
.
ObjectMeta
,
ann
string
,
value
string
)
{
if
obj
.
Annotations
==
nil
{
obj
.
Annotations
=
make
(
map
[
string
]
string
)
}
obj
.
Annotations
[
ann
]
=
value
}
func
getClaimStatusForLogging
(
claim
*
api
.
PersistentVolumeClaim
)
string
{
func
getClaimStatusForLogging
(
claim
*
api
.
PersistentVolumeClaim
)
string
{
bound
:=
h
asAnnotation
(
claim
.
ObjectMeta
,
annBindCompleted
)
bound
:=
api
.
H
asAnnotation
(
claim
.
ObjectMeta
,
annBindCompleted
)
boundByController
:=
h
asAnnotation
(
claim
.
ObjectMeta
,
annBoundByController
)
boundByController
:=
api
.
H
asAnnotation
(
claim
.
ObjectMeta
,
annBoundByController
)
return
fmt
.
Sprintf
(
"phase: %s, bound to: %q, bindCompleted: %v, boundByController: %v"
,
claim
.
Status
.
Phase
,
claim
.
Spec
.
VolumeName
,
bound
,
boundByController
)
return
fmt
.
Sprintf
(
"phase: %s, bound to: %q, bindCompleted: %v, boundByController: %v"
,
claim
.
Status
.
Phase
,
claim
.
Spec
.
VolumeName
,
bound
,
boundByController
)
}
}
func
getVolumeStatusForLogging
(
volume
*
api
.
PersistentVolume
)
string
{
func
getVolumeStatusForLogging
(
volume
*
api
.
PersistentVolume
)
string
{
boundByController
:=
h
asAnnotation
(
volume
.
ObjectMeta
,
annBoundByController
)
boundByController
:=
api
.
H
asAnnotation
(
volume
.
ObjectMeta
,
annBoundByController
)
claimName
:=
""
claimName
:=
""
if
volume
.
Spec
.
ClaimRef
!=
nil
{
if
volume
.
Spec
.
ClaimRef
!=
nil
{
claimName
=
fmt
.
Sprintf
(
"%s/%s (uid: %s)"
,
volume
.
Spec
.
ClaimRef
.
Namespace
,
volume
.
Spec
.
ClaimRef
.
Name
,
volume
.
Spec
.
ClaimRef
.
UID
)
claimName
=
fmt
.
Sprintf
(
"%s/%s (uid: %s)"
,
volume
.
Spec
.
ClaimRef
.
Namespace
,
volume
.
Spec
.
ClaimRef
.
Name
,
volume
.
Spec
.
ClaimRef
.
UID
)
...
@@ -592,29 +580,3 @@ func storeObjectUpdate(store cache.Store, obj interface{}, className string) (bo
...
@@ -592,29 +580,3 @@ func storeObjectUpdate(store cache.Store, obj interface{}, className string) (bo
}
}
return
true
,
nil
return
true
,
nil
}
}
// getVolumeClass returns value of annClass annotation or empty string in case
// the annotation does not exist.
// TODO: change to PersistentVolume.Spec.Class value when this attribute is
// introduced.
func
getVolumeClass
(
volume
*
api
.
PersistentVolume
)
string
{
if
class
,
found
:=
volume
.
Annotations
[
annClass
];
found
{
return
class
}
// 'nil' is interpreted as "", i.e. the volume does not belong to any class.
return
""
}
// getClaimClass returns name of class that is requested by given claim.
// Request for `nil` class is interpreted as request for class "",
// i.e. for a classless PV.
func
getClaimClass
(
claim
*
api
.
PersistentVolumeClaim
)
string
{
// TODO: change to PersistentVolumeClaim.Spec.Class value when this
// attribute is introduced.
if
class
,
found
:=
claim
.
Annotations
[
annClass
];
found
{
return
class
}
return
""
}
pkg/kubectl/describe.go
View file @
86f1a94b
...
@@ -41,6 +41,7 @@ import (
...
@@ -41,6 +41,7 @@ import (
"k8s.io/kubernetes/pkg/apis/certificates"
"k8s.io/kubernetes/pkg/apis/certificates"
"k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/apis/storage"
storageutil
"k8s.io/kubernetes/pkg/apis/storage/util"
clientset
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
clientset
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
client
"k8s.io/kubernetes/pkg/client/unversioned"
client
"k8s.io/kubernetes/pkg/client/unversioned"
deploymentutil
"k8s.io/kubernetes/pkg/controller/deployment/util"
deploymentutil
"k8s.io/kubernetes/pkg/controller/deployment/util"
...
@@ -734,6 +735,7 @@ func (d *PersistentVolumeDescriber) Describe(namespace, name string, describerSe
...
@@ -734,6 +735,7 @@ func (d *PersistentVolumeDescriber) Describe(namespace, name string, describerSe
return
tabbedString
(
func
(
out
io
.
Writer
)
error
{
return
tabbedString
(
func
(
out
io
.
Writer
)
error
{
fmt
.
Fprintf
(
out
,
"Name:
\t
%s
\n
"
,
pv
.
Name
)
fmt
.
Fprintf
(
out
,
"Name:
\t
%s
\n
"
,
pv
.
Name
)
printLabelsMultiline
(
out
,
"Labels"
,
pv
.
Labels
)
printLabelsMultiline
(
out
,
"Labels"
,
pv
.
Labels
)
fmt
.
Fprintf
(
out
,
"StorageClass:
\t
%s
\n
"
,
storageutil
.
GetStorageClassAnnotation
(
pv
.
ObjectMeta
))
fmt
.
Fprintf
(
out
,
"Status:
\t
%s
\n
"
,
pv
.
Status
.
Phase
)
fmt
.
Fprintf
(
out
,
"Status:
\t
%s
\n
"
,
pv
.
Status
.
Phase
)
if
pv
.
Spec
.
ClaimRef
!=
nil
{
if
pv
.
Spec
.
ClaimRef
!=
nil
{
fmt
.
Fprintf
(
out
,
"Claim:
\t
%s
\n
"
,
pv
.
Spec
.
ClaimRef
.
Namespace
+
"/"
+
pv
.
Spec
.
ClaimRef
.
Name
)
fmt
.
Fprintf
(
out
,
"Claim:
\t
%s
\n
"
,
pv
.
Spec
.
ClaimRef
.
Namespace
+
"/"
+
pv
.
Spec
.
ClaimRef
.
Name
)
...
@@ -803,6 +805,7 @@ func (d *PersistentVolumeClaimDescriber) Describe(namespace, name string, descri
...
@@ -803,6 +805,7 @@ func (d *PersistentVolumeClaimDescriber) Describe(namespace, name string, descri
return
tabbedString
(
func
(
out
io
.
Writer
)
error
{
return
tabbedString
(
func
(
out
io
.
Writer
)
error
{
fmt
.
Fprintf
(
out
,
"Name:
\t
%s
\n
"
,
pvc
.
Name
)
fmt
.
Fprintf
(
out
,
"Name:
\t
%s
\n
"
,
pvc
.
Name
)
fmt
.
Fprintf
(
out
,
"Namespace:
\t
%s
\n
"
,
pvc
.
Namespace
)
fmt
.
Fprintf
(
out
,
"Namespace:
\t
%s
\n
"
,
pvc
.
Namespace
)
fmt
.
Fprintf
(
out
,
"StorageClass:
\t
%s
\n
"
,
storageutil
.
GetStorageClassAnnotation
(
pvc
.
ObjectMeta
))
fmt
.
Fprintf
(
out
,
"Status:
\t
%v
\n
"
,
pvc
.
Status
.
Phase
)
fmt
.
Fprintf
(
out
,
"Status:
\t
%v
\n
"
,
pvc
.
Status
.
Phase
)
fmt
.
Fprintf
(
out
,
"Volume:
\t
%s
\n
"
,
pvc
.
Spec
.
VolumeName
)
fmt
.
Fprintf
(
out
,
"Volume:
\t
%s
\n
"
,
pvc
.
Spec
.
VolumeName
)
printLabelsMultiline
(
out
,
"Labels"
,
pvc
.
Labels
)
printLabelsMultiline
(
out
,
"Labels"
,
pvc
.
Labels
)
...
@@ -2365,6 +2368,7 @@ func (s *StorageClassDescriber) Describe(namespace, name string, describerSettin
...
@@ -2365,6 +2368,7 @@ func (s *StorageClassDescriber) Describe(namespace, name string, describerSettin
}
}
return
tabbedString
(
func
(
out
io
.
Writer
)
error
{
return
tabbedString
(
func
(
out
io
.
Writer
)
error
{
fmt
.
Fprintf
(
out
,
"Name:
\t
%s
\n
"
,
sc
.
Name
)
fmt
.
Fprintf
(
out
,
"Name:
\t
%s
\n
"
,
sc
.
Name
)
fmt
.
Fprintf
(
out
,
"IsDefaultClass:
\t
%s
\n
"
,
storageutil
.
IsDefaultAnnotationText
(
sc
.
ObjectMeta
))
fmt
.
Fprintf
(
out
,
"Annotations:
\t
%s
\n
"
,
labels
.
FormatLabels
(
sc
.
Annotations
))
fmt
.
Fprintf
(
out
,
"Annotations:
\t
%s
\n
"
,
labels
.
FormatLabels
(
sc
.
Annotations
))
fmt
.
Fprintf
(
out
,
"Provisioner:
\t
%s
\n
"
,
sc
.
Provisioner
)
fmt
.
Fprintf
(
out
,
"Provisioner:
\t
%s
\n
"
,
sc
.
Provisioner
)
fmt
.
Fprintf
(
out
,
"Parameters:
\t
%s
\n
"
,
labels
.
FormatLabels
(
sc
.
Parameters
))
fmt
.
Fprintf
(
out
,
"Parameters:
\t
%s
\n
"
,
labels
.
FormatLabels
(
sc
.
Parameters
))
...
...
pkg/kubectl/resource_printer.go
View file @
86f1a94b
...
@@ -44,6 +44,7 @@ import (
...
@@ -44,6 +44,7 @@ import (
"k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/apis/rbac"
"k8s.io/kubernetes/pkg/apis/rbac"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/apis/storage"
storageutil
"k8s.io/kubernetes/pkg/apis/storage/util"
"k8s.io/kubernetes/pkg/labels"
"k8s.io/kubernetes/pkg/labels"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/runtime"
utilerrors
"k8s.io/kubernetes/pkg/util/errors"
utilerrors
"k8s.io/kubernetes/pkg/util/errors"
...
@@ -2082,6 +2083,10 @@ func printNetworkPolicyList(list *extensions.NetworkPolicyList, w io.Writer, opt
...
@@ -2082,6 +2083,10 @@ func printNetworkPolicyList(list *extensions.NetworkPolicyList, w io.Writer, opt
func
printStorageClass
(
sc
*
storage
.
StorageClass
,
w
io
.
Writer
,
options
PrintOptions
)
error
{
func
printStorageClass
(
sc
*
storage
.
StorageClass
,
w
io
.
Writer
,
options
PrintOptions
)
error
{
name
:=
sc
.
Name
name
:=
sc
.
Name
if
storageutil
.
IsDefaultAnnotation
(
sc
.
ObjectMeta
)
{
name
+=
" (default)"
}
provtype
:=
sc
.
Provisioner
provtype
:=
sc
.
Provisioner
if
_
,
err
:=
fmt
.
Fprintf
(
w
,
"%s
\t
%s
\t
"
,
name
,
provtype
);
err
!=
nil
{
if
_
,
err
:=
fmt
.
Fprintf
(
w
,
"%s
\t
%s
\t
"
,
name
,
provtype
);
err
!=
nil
{
...
...
plugin/pkg/admission/storageclass/default/admission.go
View file @
86f1a94b
...
@@ -26,6 +26,7 @@ import (
...
@@ -26,6 +26,7 @@ import (
api
"k8s.io/kubernetes/pkg/api"
api
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/errors"
"k8s.io/kubernetes/pkg/api/errors"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/apis/storage"
storageutil
"k8s.io/kubernetes/pkg/apis/storage/util"
"k8s.io/kubernetes/pkg/client/cache"
"k8s.io/kubernetes/pkg/client/cache"
clientset
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
clientset
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/runtime"
...
@@ -94,12 +95,6 @@ func (a *claimDefaulterPlugin) Stop() {
...
@@ -94,12 +95,6 @@ func (a *claimDefaulterPlugin) Stop() {
}
}
}
}
// This is a stand-in until we have a real field. This string should be a const somewhere.
const
classAnnotation
=
"volume.beta.kubernetes.io/storage-class"
// This indicates that a particular StorageClass nominates itself as the system default.
const
isDefaultAnnotation
=
"storageclass.beta.kubernetes.io/is-default-class"
// Admit sets the default value of a PersistentVolumeClaim's storage class, in case the user did
// Admit sets the default value of a PersistentVolumeClaim's storage class, in case the user did
// not provide a value.
// not provide a value.
//
//
...
@@ -121,8 +116,7 @@ func (c *claimDefaulterPlugin) Admit(a admission.Attributes) error {
...
@@ -121,8 +116,7 @@ func (c *claimDefaulterPlugin) Admit(a admission.Attributes) error {
return
nil
return
nil
}
}
_
,
found
:=
pvc
.
Annotations
[
classAnnotation
]
if
storageutil
.
HasStorageClassAnnotation
(
pvc
.
ObjectMeta
)
{
if
found
{
// The user asked for a class.
// The user asked for a class.
return
nil
return
nil
}
}
...
@@ -142,7 +136,7 @@ func (c *claimDefaulterPlugin) Admit(a admission.Attributes) error {
...
@@ -142,7 +136,7 @@ func (c *claimDefaulterPlugin) Admit(a admission.Attributes) error {
if
pvc
.
ObjectMeta
.
Annotations
==
nil
{
if
pvc
.
ObjectMeta
.
Annotations
==
nil
{
pvc
.
ObjectMeta
.
Annotations
=
map
[
string
]
string
{}
pvc
.
ObjectMeta
.
Annotations
=
map
[
string
]
string
{}
}
}
pvc
.
Annotations
[
c
lassAnnotation
]
=
def
.
Name
pvc
.
Annotations
[
storageutil
.
StorageC
lassAnnotation
]
=
def
.
Name
return
nil
return
nil
}
}
...
@@ -154,7 +148,7 @@ func getDefaultClass(store cache.Store) (*storage.StorageClass, error) {
...
@@ -154,7 +148,7 @@ func getDefaultClass(store cache.Store) (*storage.StorageClass, error) {
if
!
ok
{
if
!
ok
{
return
nil
,
errors
.
NewInternalError
(
fmt
.
Errorf
(
"error converting stored object to StorageClass: %v"
,
c
))
return
nil
,
errors
.
NewInternalError
(
fmt
.
Errorf
(
"error converting stored object to StorageClass: %v"
,
c
))
}
}
if
class
.
Annotations
[
isDefaultAnnotation
]
==
"true"
{
if
storageutil
.
IsDefaultAnnotation
(
class
.
ObjectMeta
)
{
defaultClasses
=
append
(
defaultClasses
,
class
)
defaultClasses
=
append
(
defaultClasses
,
class
)
glog
.
V
(
4
)
.
Infof
(
"getDefaultClass added: %s"
,
class
.
Name
)
glog
.
V
(
4
)
.
Infof
(
"getDefaultClass added: %s"
,
class
.
Name
)
}
}
...
...
plugin/pkg/admission/storageclass/default/admission_test.go
View file @
86f1a94b
...
@@ -25,6 +25,7 @@ import (
...
@@ -25,6 +25,7 @@ import (
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/apis/storage"
storageutil
"k8s.io/kubernetes/pkg/apis/storage/util"
"k8s.io/kubernetes/pkg/conversion"
"k8s.io/kubernetes/pkg/conversion"
)
)
...
@@ -36,7 +37,7 @@ func TestAdmission(t *testing.T) {
...
@@ -36,7 +37,7 @@ func TestAdmission(t *testing.T) {
ObjectMeta
:
api
.
ObjectMeta
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"default1"
,
Name
:
"default1"
,
Annotations
:
map
[
string
]
string
{
Annotations
:
map
[
string
]
string
{
isDefault
Annotation
:
"true"
,
storageutil
.
IsDefaultStorageClass
Annotation
:
"true"
,
},
},
},
},
Provisioner
:
"default1"
,
Provisioner
:
"default1"
,
...
@@ -48,7 +49,7 @@ func TestAdmission(t *testing.T) {
...
@@ -48,7 +49,7 @@ func TestAdmission(t *testing.T) {
ObjectMeta
:
api
.
ObjectMeta
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"default2"
,
Name
:
"default2"
,
Annotations
:
map
[
string
]
string
{
Annotations
:
map
[
string
]
string
{
isDefault
Annotation
:
"true"
,
storageutil
.
IsDefaultStorageClass
Annotation
:
"true"
,
},
},
},
},
Provisioner
:
"default2"
,
Provisioner
:
"default2"
,
...
@@ -61,7 +62,7 @@ func TestAdmission(t *testing.T) {
...
@@ -61,7 +62,7 @@ func TestAdmission(t *testing.T) {
ObjectMeta
:
api
.
ObjectMeta
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"nondefault1"
,
Name
:
"nondefault1"
,
Annotations
:
map
[
string
]
string
{
Annotations
:
map
[
string
]
string
{
isDefault
Annotation
:
"false"
,
storageutil
.
IsDefaultStorageClass
Annotation
:
"false"
,
},
},
},
},
Provisioner
:
"nondefault1"
,
Provisioner
:
"nondefault1"
,
...
@@ -84,7 +85,7 @@ func TestAdmission(t *testing.T) {
...
@@ -84,7 +85,7 @@ func TestAdmission(t *testing.T) {
ObjectMeta
:
api
.
ObjectMeta
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"nondefault2"
,
Name
:
"nondefault2"
,
Annotations
:
map
[
string
]
string
{
Annotations
:
map
[
string
]
string
{
isDefault
Annotation
:
""
,
storageutil
.
IsDefaultStorageClass
Annotation
:
""
,
},
},
},
},
Provisioner
:
"nondefault1"
,
Provisioner
:
"nondefault1"
,
...
@@ -98,7 +99,7 @@ func TestAdmission(t *testing.T) {
...
@@ -98,7 +99,7 @@ func TestAdmission(t *testing.T) {
Name
:
"claimWithClass"
,
Name
:
"claimWithClass"
,
Namespace
:
"ns"
,
Namespace
:
"ns"
,
Annotations
:
map
[
string
]
string
{
Annotations
:
map
[
string
]
string
{
c
lassAnnotation
:
"foo"
,
storageutil
.
StorageC
lassAnnotation
:
"foo"
,
},
},
},
},
}
}
...
@@ -110,7 +111,7 @@ func TestAdmission(t *testing.T) {
...
@@ -110,7 +111,7 @@ func TestAdmission(t *testing.T) {
Name
:
"claimWithEmptyClass"
,
Name
:
"claimWithEmptyClass"
,
Namespace
:
"ns"
,
Namespace
:
"ns"
,
Annotations
:
map
[
string
]
string
{
Annotations
:
map
[
string
]
string
{
c
lassAnnotation
:
""
,
storageutil
.
StorageC
lassAnnotation
:
""
,
},
},
},
},
}
}
...
@@ -218,7 +219,7 @@ func TestAdmission(t *testing.T) {
...
@@ -218,7 +219,7 @@ func TestAdmission(t *testing.T) {
class
:=
""
class
:=
""
if
claim
.
Annotations
!=
nil
{
if
claim
.
Annotations
!=
nil
{
if
value
,
ok
:=
claim
.
Annotations
[
c
lassAnnotation
];
ok
{
if
value
,
ok
:=
claim
.
Annotations
[
storageutil
.
StorageC
lassAnnotation
];
ok
{
class
=
value
class
=
value
}
}
}
}
...
...
test/e2e/volume_provisioning.go
View file @
86f1a94b
...
@@ -23,6 +23,7 @@ import (
...
@@ -23,6 +23,7 @@ import (
"k8s.io/kubernetes/pkg/api/resource"
"k8s.io/kubernetes/pkg/api/resource"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/apis/storage"
storageutil
"k8s.io/kubernetes/pkg/apis/storage/util"
client
"k8s.io/kubernetes/pkg/client/unversioned"
client
"k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/test/e2e/framework"
"k8s.io/kubernetes/test/e2e/framework"
...
@@ -172,11 +173,11 @@ func newClaim(ns string, alpha bool) *api.PersistentVolumeClaim {
...
@@ -172,11 +173,11 @@ func newClaim(ns string, alpha bool) *api.PersistentVolumeClaim {
if
alpha
{
if
alpha
{
claim
.
Annotations
=
map
[
string
]
string
{
claim
.
Annotations
=
map
[
string
]
string
{
"volume.alpha.kubernetes.io/storage-class"
:
""
,
storageutil
.
AlphaStorageClassAnnotation
:
""
,
}
}
}
else
{
}
else
{
claim
.
Annotations
=
map
[
string
]
string
{
claim
.
Annotations
=
map
[
string
]
string
{
"volume.beta.kubernetes.io/storage-class"
:
"fast"
,
storageutil
.
StorageClassAnnotation
:
"fast"
,
}
}
}
}
...
...
test/integration/persistentvolumes/persistent_volumes_test.go
View file @
86f1a94b
...
@@ -32,6 +32,7 @@ import (
...
@@ -32,6 +32,7 @@ import (
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/apimachinery/registered"
"k8s.io/kubernetes/pkg/apimachinery/registered"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/apis/storage"
storageutil
"k8s.io/kubernetes/pkg/apis/storage/util"
clientset
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
clientset
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/client/restclient"
"k8s.io/kubernetes/pkg/client/restclient"
fake_cloud
"k8s.io/kubernetes/pkg/cloudprovider/providers/fake"
fake_cloud
"k8s.io/kubernetes/pkg/cloudprovider/providers/fake"
...
@@ -884,7 +885,7 @@ func TestPersistentVolumeProvisionMultiPVCs(t *testing.T) {
...
@@ -884,7 +885,7 @@ func TestPersistentVolumeProvisionMultiPVCs(t *testing.T) {
for
i
:=
0
;
i
<
objCount
;
i
++
{
for
i
:=
0
;
i
<
objCount
;
i
++
{
pvc
:=
createPVC
(
"pvc-provision-"
+
strconv
.
Itoa
(
i
),
ns
.
Name
,
"1G"
,
[]
api
.
PersistentVolumeAccessMode
{
api
.
ReadWriteOnce
})
pvc
:=
createPVC
(
"pvc-provision-"
+
strconv
.
Itoa
(
i
),
ns
.
Name
,
"1G"
,
[]
api
.
PersistentVolumeAccessMode
{
api
.
ReadWriteOnce
})
pvc
.
Annotations
=
map
[
string
]
string
{
pvc
.
Annotations
=
map
[
string
]
string
{
"volume.beta.kubernetes.io/storage-class"
:
"gold"
,
storageutil
.
StorageClassAnnotation
:
"gold"
,
}
}
pvcs
[
i
]
=
pvc
pvcs
[
i
]
=
pvc
}
}
...
...
test/integration/storageclasses/storage_classes_test.go
View file @
86f1a94b
...
@@ -28,6 +28,7 @@ import (
...
@@ -28,6 +28,7 @@ import (
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/apimachinery/registered"
"k8s.io/kubernetes/pkg/apimachinery/registered"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/apis/storage"
storageutil
"k8s.io/kubernetes/pkg/apis/storage/util"
"k8s.io/kubernetes/pkg/client/restclient"
"k8s.io/kubernetes/pkg/client/restclient"
client
"k8s.io/kubernetes/pkg/client/unversioned"
client
"k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/test/integration/framework"
"k8s.io/kubernetes/test/integration/framework"
...
@@ -72,7 +73,7 @@ func DoTestStorageClasses(t *testing.T, client *client.Client, ns *api.Namespace
...
@@ -72,7 +73,7 @@ func DoTestStorageClasses(t *testing.T, client *client.Client, ns *api.Namespace
Name
:
"XXX"
,
Name
:
"XXX"
,
Namespace
:
ns
.
Name
,
Namespace
:
ns
.
Name
,
Annotations
:
map
[
string
]
string
{
Annotations
:
map
[
string
]
string
{
"volume.beta.kubernetes.io/storage-class"
:
"gold"
,
storageutil
.
StorageClassAnnotation
:
"gold"
,
},
},
},
},
Spec
:
api
.
PersistentVolumeClaimSpec
{
Spec
:
api
.
PersistentVolumeClaimSpec
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment