From d69386d278b878179a9e1efa44cea46e137e828c Mon Sep 17 00:00:00 2001 From: liangchenye Date: Thu, 29 Jun 2017 19:05:10 +0800 Subject: [PATCH] check if device is duplicated Signed-off-by: liangchenye --- validate/validate.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/validate/validate.go b/validate/validate.go index b3b1bbffc..0203d523d 100644 --- a/validate/validate.go +++ b/validate/validate.go @@ -483,9 +483,19 @@ func (v *Validator) CheckLinux() (msgs []string) { msgs = append(msgs, fmt.Sprintf("On Linux, hostname requires a new UTS namespace to be specified as well")) } + deviceInfos := make(map[string]bool) for index := 0; index < len(v.spec.Linux.Devices); index++ { - if !deviceValid(v.spec.Linux.Devices[index]) { - msgs = append(msgs, fmt.Sprintf("device %v is invalid.", v.spec.Linux.Devices[index])) + device := v.spec.Linux.Devices[index] + if !deviceValid(device) { + msgs = append(msgs, fmt.Sprintf("device %v is invalid.", device)) + continue + } + + deviceSummary := fmt.Sprintf("%s-%d-%d", device.Type, device.Major, device.Minor) + if _, ok := deviceInfos[deviceSummary]; ok { + msgs = append(msgs, fmt.Sprintf("device %v is duplicated.", device)) + } else { + deviceInfos[deviceSummary] = true } }