From 8bedd0a3670dfe2bc60d3b750c981441f91d32c8 Mon Sep 17 00:00:00 2001 From: Jimmy Zelinskie Date: Tue, 3 Jan 2017 13:15:46 -0500 Subject: [PATCH] worker: ns detectors now support VersionFormat This also filters unknown namespaces from the generic lsb-release and osrelease detectors. --- .../namespace/alpinerelease/alpinerelease.go | 5 ++++- .../detectors/namespace/aptsources/aptsources.go | 5 ++++- .../detectors/namespace/lsbrelease/lsbrelease.go | 16 +++++++++++++++- .../detectors/namespace/osrelease/osrelease.go | 16 +++++++++++++++- .../namespace/redhatrelease/redhatrelease.go | 15 ++++++++++++--- worker/worker_test.go | 3 +++ 6 files changed, 53 insertions(+), 7 deletions(-) diff --git a/worker/detectors/namespace/alpinerelease/alpinerelease.go b/worker/detectors/namespace/alpinerelease/alpinerelease.go index ec7d5f2a..3587cef0 100644 --- a/worker/detectors/namespace/alpinerelease/alpinerelease.go +++ b/worker/detectors/namespace/alpinerelease/alpinerelease.go @@ -48,7 +48,10 @@ func (d *detector) Detect(data map[string][]byte) *database.Namespace { match := versionRegexp.FindStringSubmatch(line) if len(match) > 0 { versionNumbers := strings.Split(match[0], ".") - return &database.Namespace{Name: osName + ":" + "v" + versionNumbers[0] + "." + versionNumbers[1]} + return &database.Namespace{ + Name: osName + ":" + "v" + versionNumbers[0] + "." + versionNumbers[1], + VersionFormat: "dpkg", + } } } } diff --git a/worker/detectors/namespace/aptsources/aptsources.go b/worker/detectors/namespace/aptsources/aptsources.go index 69b6e30f..ea927501 100644 --- a/worker/detectors/namespace/aptsources/aptsources.go +++ b/worker/detectors/namespace/aptsources/aptsources.go @@ -75,7 +75,10 @@ func (detector *AptSourcesNamespaceDetector) Detect(data map[string][]byte) *dat } if OS != "" && version != "" { - return &database.Namespace{Name: OS + ":" + version} + return &database.Namespace{ + Name: OS + ":" + version, + VersionFormat: "dpkg", + } } return nil } diff --git a/worker/detectors/namespace/lsbrelease/lsbrelease.go b/worker/detectors/namespace/lsbrelease/lsbrelease.go index eab19984..e6c6d4c8 100644 --- a/worker/detectors/namespace/lsbrelease/lsbrelease.go +++ b/worker/detectors/namespace/lsbrelease/lsbrelease.go @@ -69,8 +69,22 @@ func (detector *LsbReleaseNamespaceDetector) Detect(data map[string][]byte) *dat } } + // Determine the VersionFormat. + var versionFormat string + switch OS { + case "debian", "ubuntu": + versionFormat = "dpkg" + case "centos", "rhel", "fedora", "amzn", "ol", "oracle": + versionFormat = "rpm" + default: + return nil + } + if OS != "" && version != "" { - return &database.Namespace{Name: OS + ":" + version} + return &database.Namespace{ + Name: OS + ":" + version, + VersionFormat: versionFormat, + } } return nil } diff --git a/worker/detectors/namespace/osrelease/osrelease.go b/worker/detectors/namespace/osrelease/osrelease.go index ad0593f2..b2f7db02 100644 --- a/worker/detectors/namespace/osrelease/osrelease.go +++ b/worker/detectors/namespace/osrelease/osrelease.go @@ -72,8 +72,22 @@ func (detector *OsReleaseNamespaceDetector) Detect(data map[string][]byte) *data } } + // Determine the VersionFormat. + var versionFormat string + switch OS { + case "debian", "ubuntu": + versionFormat = "dpkg" + case "centos", "rhel", "fedora", "amzn", "ol", "oracle": + versionFormat = "rpm" + default: + return nil + } + if OS != "" && version != "" { - return &database.Namespace{Name: OS + ":" + version} + return &database.Namespace{ + Name: OS + ":" + version, + VersionFormat: versionFormat, + } } return nil } diff --git a/worker/detectors/namespace/redhatrelease/redhatrelease.go b/worker/detectors/namespace/redhatrelease/redhatrelease.go index 7dcf445e..2d672129 100644 --- a/worker/detectors/namespace/redhatrelease/redhatrelease.go +++ b/worker/detectors/namespace/redhatrelease/redhatrelease.go @@ -58,20 +58,29 @@ func (detector *RedhatReleaseNamespaceDetector) Detect(data map[string][]byte) * // try for Oracle Linux r = oracleReleaseRegexp.FindStringSubmatch(string(f)) if len(r) == 4 { - return &database.Namespace{Name: strings.ToLower(r[1]) + ":" + r[3]} + return &database.Namespace{ + Name: strings.ToLower(r[1]) + ":" + r[3], + VersionFormat: "rpm", + } } // try for RHEL r = redhatReleaseRegexp.FindStringSubmatch(string(f)) if len(r) == 4 { // TODO(vbatts) this is a hack until https://github.com/coreos/clair/pull/193 - return &database.Namespace{Name: "centos" + ":" + r[3]} + return &database.Namespace{ + Name: "centos" + ":" + r[3], + VersionFormat: "rpm", + } } // then try centos first r = centosReleaseRegexp.FindStringSubmatch(string(f)) if len(r) == 4 { - return &database.Namespace{Name: strings.ToLower(r[1]) + ":" + r[3]} + return &database.Namespace{ + Name: strings.ToLower(r[1]) + ":" + r[3], + VersionFormat: "rpm", + } } } diff --git a/worker/worker_test.go b/worker/worker_test.go index 6f3829be..bc7683ad 100644 --- a/worker/worker_test.go +++ b/worker/worker_test.go @@ -89,6 +89,7 @@ func TestProcessWithDistUpgrade(t *testing.T) { for _, nufv := range nonUpgradedFeatureVersions { nufv.Feature.Namespace.Name = "debian:7" + nufv.Feature.Namespace.VersionFormat = "dpkg" assert.Contains(t, wheezy.Features, nufv) } } @@ -101,10 +102,12 @@ func TestProcessWithDistUpgrade(t *testing.T) { for _, nufv := range nonUpgradedFeatureVersions { nufv.Feature.Namespace.Name = "debian:7" + nufv.Feature.Namespace.VersionFormat = "dpkg" assert.Contains(t, jessie.Features, nufv) } for _, nufv := range nonUpgradedFeatureVersions { nufv.Feature.Namespace.Name = "debian:8" + nufv.Feature.Namespace.VersionFormat = "dpkg" assert.NotContains(t, jessie.Features, nufv) } }