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
a7818ac3
Commit
a7818ac3
authored
Feb 15, 2016
by
k8s-merge-robot
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #20926 from derekwaynecarr/pvc_edit_validation
Auto commit by PR queue bot
parents
2778bc0c
c5cb0940
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
91 additions
and
2 deletions
+91
-2
validation.go
pkg/api/validation/validation.go
+8
-2
validation_test.go
pkg/api/validation/validation_test.go
+83
-0
No files found.
pkg/api/validation/validation.go
View file @
a7818ac3
...
@@ -903,8 +903,14 @@ func ValidatePersistentVolumeClaim(pvc *api.PersistentVolumeClaim) field.ErrorLi
...
@@ -903,8 +903,14 @@ func ValidatePersistentVolumeClaim(pvc *api.PersistentVolumeClaim) field.ErrorLi
}
}
func
ValidatePersistentVolumeClaimUpdate
(
newPvc
,
oldPvc
*
api
.
PersistentVolumeClaim
)
field
.
ErrorList
{
func
ValidatePersistentVolumeClaimUpdate
(
newPvc
,
oldPvc
*
api
.
PersistentVolumeClaim
)
field
.
ErrorList
{
allErrs
:=
field
.
ErrorList
{}
allErrs
:=
ValidateObjectMetaUpdate
(
&
newPvc
.
ObjectMeta
,
&
oldPvc
.
ObjectMeta
,
field
.
NewPath
(
"metadata"
))
allErrs
=
ValidatePersistentVolumeClaim
(
newPvc
)
allErrs
=
append
(
allErrs
,
ValidatePersistentVolumeClaim
(
newPvc
)
...
)
// if a pvc had a bound volume, we should not allow updates to resources or access modes
if
len
(
oldPvc
.
Spec
.
VolumeName
)
!=
0
{
if
!
api
.
Semantic
.
DeepEqual
(
newPvc
.
Spec
,
oldPvc
.
Spec
)
{
allErrs
=
append
(
allErrs
,
field
.
Forbidden
(
field
.
NewPath
(
"spec"
),
"spec is immutable once a claim has been bound to a volume"
))
}
}
newPvc
.
Status
=
oldPvc
.
Status
newPvc
.
Status
=
oldPvc
.
Status
return
allErrs
return
allErrs
}
}
...
...
pkg/api/validation/validation_test.go
View file @
a7818ac3
...
@@ -463,6 +463,89 @@ func TestValidatePersistentVolumeClaim(t *testing.T) {
...
@@ -463,6 +463,89 @@ func TestValidatePersistentVolumeClaim(t *testing.T) {
}
}
}
}
func
TestValidatePersistentVolumeClaimUpdate
(
t
*
testing
.
T
)
{
validClaim
:=
testVolumeClaim
(
"foo"
,
"ns"
,
api
.
PersistentVolumeClaimSpec
{
AccessModes
:
[]
api
.
PersistentVolumeAccessMode
{
api
.
ReadWriteOnce
,
api
.
ReadOnlyMany
,
},
Resources
:
api
.
ResourceRequirements
{
Requests
:
api
.
ResourceList
{
api
.
ResourceName
(
api
.
ResourceStorage
)
:
resource
.
MustParse
(
"10G"
),
},
},
})
validUpdateClaim
:=
testVolumeClaim
(
"foo"
,
"ns"
,
api
.
PersistentVolumeClaimSpec
{
AccessModes
:
[]
api
.
PersistentVolumeAccessMode
{
api
.
ReadWriteOnce
,
api
.
ReadOnlyMany
,
},
Resources
:
api
.
ResourceRequirements
{
Requests
:
api
.
ResourceList
{
api
.
ResourceName
(
api
.
ResourceStorage
)
:
resource
.
MustParse
(
"10G"
),
},
},
VolumeName
:
"volume"
,
})
invalidUpdateClaimResources
:=
testVolumeClaim
(
"foo"
,
"ns"
,
api
.
PersistentVolumeClaimSpec
{
AccessModes
:
[]
api
.
PersistentVolumeAccessMode
{
api
.
ReadWriteOnce
,
api
.
ReadOnlyMany
,
},
Resources
:
api
.
ResourceRequirements
{
Requests
:
api
.
ResourceList
{
api
.
ResourceName
(
api
.
ResourceStorage
)
:
resource
.
MustParse
(
"20G"
),
},
},
VolumeName
:
"volume"
,
})
invalidUpdateClaimAccessModes
:=
testVolumeClaim
(
"foo"
,
"ns"
,
api
.
PersistentVolumeClaimSpec
{
AccessModes
:
[]
api
.
PersistentVolumeAccessMode
{
api
.
ReadWriteOnce
,
},
Resources
:
api
.
ResourceRequirements
{
Requests
:
api
.
ResourceList
{
api
.
ResourceName
(
api
.
ResourceStorage
)
:
resource
.
MustParse
(
"10G"
),
},
},
VolumeName
:
"volume"
,
})
scenarios
:=
map
[
string
]
struct
{
isExpectedFailure
bool
oldClaim
*
api
.
PersistentVolumeClaim
newClaim
*
api
.
PersistentVolumeClaim
}{
"valid-update"
:
{
isExpectedFailure
:
false
,
oldClaim
:
validClaim
,
newClaim
:
validUpdateClaim
,
},
"invalid-update-change-resources-on-bound-claim"
:
{
isExpectedFailure
:
true
,
oldClaim
:
validUpdateClaim
,
newClaim
:
invalidUpdateClaimResources
,
},
"invalid-update-change-access-modes-on-bound-claim"
:
{
isExpectedFailure
:
true
,
oldClaim
:
validUpdateClaim
,
newClaim
:
invalidUpdateClaimAccessModes
,
},
}
for
name
,
scenario
:=
range
scenarios
{
// ensure we have a resource version specified for updates
scenario
.
oldClaim
.
ResourceVersion
=
"1"
scenario
.
newClaim
.
ResourceVersion
=
"1"
errs
:=
ValidatePersistentVolumeClaimUpdate
(
scenario
.
newClaim
,
scenario
.
oldClaim
)
if
len
(
errs
)
==
0
&&
scenario
.
isExpectedFailure
{
t
.
Errorf
(
"Unexpected success for scenario: %s"
,
name
)
}
if
len
(
errs
)
>
0
&&
!
scenario
.
isExpectedFailure
{
t
.
Errorf
(
"Unexpected failure for scenario: %s - %+v"
,
name
,
errs
)
}
}
}
func
TestValidateVolumes
(
t
*
testing
.
T
)
{
func
TestValidateVolumes
(
t
*
testing
.
T
)
{
lun
:=
1
lun
:=
1
successCase
:=
[]
api
.
Volume
{
successCase
:=
[]
api
.
Volume
{
...
...
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