diff --git a/README.md b/README.md index c3cd8464..c1443d75 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ --- # Audit +**IMPORTANT** This project still at the POC level since its first release did not get done so far. Before running the reports, ensure that you have its latest version by running `git pull` and `git status`. + ## Overview The audit is an analytic tool which uses the Operator Framework solutions. Its purpose is to obtain and report and aggregate data provided by checks and analyses done in the operator bundles, packages and channels from an index catalog image. diff --git a/pkg/reports/bundles/data.go b/pkg/reports/bundles/data.go index 87ff0e79..f1a83c69 100644 --- a/pkg/reports/bundles/data.go +++ b/pkg/reports/bundles/data.go @@ -16,6 +16,7 @@ package bundles import ( "fmt" + "sort" log "github.com/sirupsen/logrus" @@ -109,6 +110,10 @@ func (d *Data) PrepareReport() Report { allColumns = append(allColumns, col) } + sort.Slice(allColumns[:], func(i, j int) bool { + return allColumns[i].PackageName < allColumns[j].PackageName + }) + finalReport := Report{} finalReport.Flags = d.Flags finalReport.Columns = allColumns diff --git a/pkg/reports/channels/data.go b/pkg/reports/channels/data.go index c76367fc..b59d3514 100644 --- a/pkg/reports/channels/data.go +++ b/pkg/reports/channels/data.go @@ -17,6 +17,7 @@ package channels import ( "fmt" "log" + "sort" "strings" sq "github.com/Masterminds/squirrel" @@ -86,6 +87,10 @@ func (d *Data) PrepareReport() Report { allColumns = append(allColumns, col) } + sort.Slice(allColumns[:], func(i, j int) bool { + return allColumns[i].PackageName < allColumns[j].PackageName + }) + finalReport := Report{} finalReport.Flags = d.Flags finalReport.Columns = allColumns diff --git a/pkg/reports/packages/data.go b/pkg/reports/packages/data.go index 87482fa5..2df30deb 100644 --- a/pkg/reports/packages/data.go +++ b/pkg/reports/packages/data.go @@ -17,6 +17,7 @@ package packages import ( "fmt" "log" + "sort" sq "github.com/Masterminds/squirrel" "github.com/operator-framework/api/pkg/operators/v1alpha1" @@ -170,6 +171,10 @@ func (d *Data) PrepareReport() Report { allColumns = append(allColumns, col) } + sort.Slice(allColumns[:], func(i, j int) bool { + return allColumns[i].PackageName < allColumns[j].PackageName + }) + finalReport := Report{} finalReport.Flags = d.Flags finalReport.Columns = allColumns diff --git a/testdata/samples/bundles/json/bundles_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.json b/testdata/samples/bundles/json/bundles_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.json index 7df11fec..46e42df0 100644 --- a/testdata/samples/bundles/json/bundles_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.json +++ b/testdata/samples/bundles/json/bundles_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.json @@ -10,7 +10,9 @@ "hasV1beta1CRDs": "YES", "buildAt": "2020-09-09T15:40:17.804777864Z", "company": "Alcide", - "bundleChannel": "alpha", + "bundleChannel": [ + "alpha" + ], "defaultChannel": "alpha", "maturity": "alpha", "emailMaintainers": [ @@ -29,61 +31,61 @@ "apiextensions.k8s.io/v1beta1, kind=CustomResourceDefinitions was deprecated in Kubernetes v1.16 and will be removed in v1.22 in favor of v1: [\"kaudits.kaudit.alcide.com\"] should be migrated" ], "scorecardErrors": [ - "gke does not have a spec descriptor", - "ingress does not have a spec descriptor", - "prometheus does not have a spec descriptor", "clusterName does not have a spec descriptor", + "image does not have a spec descriptor", + "ingress does not have a spec descriptor", "kauditPolicyFile does not have a spec descriptor", + "namespace does not have a spec descriptor", "tls does not have a spec descriptor", - "vault does not have a spec descriptor", "aks does not have a spec descriptor", - "image does not have a spec descriptor", - "namespace does not have a spec descriptor", - "storage does not have a spec descriptor", - "runOptions does not have a spec descriptor", - "alcide does not have a spec descriptor", + "prometheus does not have a spec descriptor", + "resources does not have a spec descriptor", "aws does not have a spec descriptor", - "k8s does not have a spec descriptor", "k8sAuditEnvironment does not have a spec descriptor", - "resources does not have a spec descriptor", + "vault does not have a spec descriptor", + "alcide does not have a spec descriptor", + "gke does not have a spec descriptor", + "k8s does not have a spec descriptor", + "runOptions does not have a spec descriptor", + "storage does not have a spec descriptor", "kaudits.kaudit.alcide.com does not have a status descriptor", "Owned CRDs do not have resources specified" ], "scorecardSuggestions": [ - "Add a spec descriptor for gke", - "Add a spec descriptor for ingress", - "Add a spec descriptor for prometheus", "Add a spec descriptor for clusterName", + "Add a spec descriptor for image", + "Add a spec descriptor for ingress", "Add a spec descriptor for kauditPolicyFile", + "Add a spec descriptor for namespace", "Add a spec descriptor for tls", - "Add a spec descriptor for vault", "Add a spec descriptor for aks", - "Add a spec descriptor for image", - "Add a spec descriptor for namespace", - "Add a spec descriptor for storage", - "Add a spec descriptor for runOptions", - "Add a spec descriptor for alcide", + "Add a spec descriptor for prometheus", + "Add a spec descriptor for resources", "Add a spec descriptor for aws", - "Add a spec descriptor for k8s", "Add a spec descriptor for k8sAuditEnvironment", - "Add a spec descriptor for resources", + "Add a spec descriptor for vault", + "Add a spec descriptor for alcide", + "Add a spec descriptor for gke", + "Add a spec descriptor for k8s", + "Add a spec descriptor for runOptions", + "Add a spec descriptor for storage", + "Add CRD validation for spec field `clusterName` in Kaudit/v1alpha1", + "Add CRD validation for spec field `ingress` in Kaudit/v1alpha1", "Add CRD validation for spec field `prometheus` in Kaudit/v1alpha1", + "Add CRD validation for spec field `resources` in Kaudit/v1alpha1", "Add CRD validation for spec field `runOptions` in Kaudit/v1alpha1", - "Add CRD validation for spec field `alcide` in Kaudit/v1alpha1", - "Add CRD validation for spec field `aws` in Kaudit/v1alpha1", - "Add CRD validation for spec field `image` in Kaudit/v1alpha1", + "Add CRD validation for spec field `aks` in Kaudit/v1alpha1", "Add CRD validation for spec field `k8s` in Kaudit/v1alpha1", "Add CRD validation for spec field `namespace` in Kaudit/v1alpha1", - "Add CRD validation for spec field `aks` in Kaudit/v1alpha1", - "Add CRD validation for spec field `clusterName` in Kaudit/v1alpha1", - "Add CRD validation for spec field `resources` in Kaudit/v1alpha1", - "Add CRD validation for spec field `tls` in Kaudit/v1alpha1", "Add CRD validation for spec field `vault` in Kaudit/v1alpha1", - "Add CRD validation for spec field `gke` in Kaudit/v1alpha1", - "Add CRD validation for spec field `ingress` in Kaudit/v1alpha1", - "Add CRD validation for spec field `k8sAuditEnvironment` in Kaudit/v1alpha1", "Add CRD validation for spec field `kauditPolicyFile` in Kaudit/v1alpha1", - "Add CRD validation for spec field `storage` in Kaudit/v1alpha1" + "Add CRD validation for spec field `storage` in Kaudit/v1alpha1", + "Add CRD validation for spec field `tls` in Kaudit/v1alpha1", + "Add CRD validation for spec field `alcide` in Kaudit/v1alpha1", + "Add CRD validation for spec field `aws` in Kaudit/v1alpha1", + "Add CRD validation for spec field `gke` in Kaudit/v1alpha1", + "Add CRD validation for spec field `image` in Kaudit/v1alpha1", + "Add CRD validation for spec field `k8sAuditEnvironment` in Kaudit/v1alpha1" ], "scorecardFailingTests": [ "olm-spec-descriptors", @@ -108,7 +110,9 @@ "buildAt": "2020-09-24T13:57:07.140350464Z", "company": "Anaconda, Inc.", "repository": "github.com/anaconda", - "bundleChannel": "beta", + "bundleChannel": [ + "beta" + ], "defaultChannel": "beta", "maturity": "beta", "emailMaintainers": [ @@ -133,6 +137,8 @@ "apiextensions.k8s.io/v1beta1, kind=CustomResourceDefinitions was deprecated in Kubernetes v1.16 and will be removed in v1.22 in favor of v1: [\"anacondateameditions.anaconda.com\"] should be migrated" ], "scorecardErrors": [ + "Owned CRDs do not have resources specified", + "anacondateameditions.anaconda.com does not have a status descriptor", "proxy does not have a spec descriptor", "redis does not have a spec descriptor", "storage does not have a spec descriptor", @@ -140,19 +146,10 @@ "api does not have a spec descriptor", "dispatcher does not have a spec descriptor", "route does not have a spec descriptor", - "postgres does not have a spec descriptor", - "Owned CRDs do not have resources specified", - "anacondateameditions.anaconda.com does not have a status descriptor" + "postgres does not have a spec descriptor" ], "scorecardSuggestions": [ - "Add a spec descriptor for proxy", - "Add a spec descriptor for redis", - "Add a spec descriptor for storage", - "Add a spec descriptor for worker", - "Add a spec descriptor for api", - "Add a spec descriptor for dispatcher", - "Add a spec descriptor for route", - "Add a spec descriptor for postgres", + "Add CRD validation for spec field `worker` in AnacondaTeamEdition/v1beta1", "Add CRD validation for spec field `api` in AnacondaTeamEdition/v1beta1", "Add CRD validation for spec field `dispatcher` in AnacondaTeamEdition/v1beta1", "Add CRD validation for spec field `route` in AnacondaTeamEdition/v1beta1", @@ -160,12 +157,19 @@ "Add CRD validation for spec field `proxy` in AnacondaTeamEdition/v1beta1", "Add CRD validation for spec field `redis` in AnacondaTeamEdition/v1beta1", "Add CRD validation for spec field `storage` in AnacondaTeamEdition/v1beta1", - "Add CRD validation for spec field `worker` in AnacondaTeamEdition/v1beta1" + "Add a spec descriptor for proxy", + "Add a spec descriptor for redis", + "Add a spec descriptor for storage", + "Add a spec descriptor for worker", + "Add a spec descriptor for api", + "Add a spec descriptor for dispatcher", + "Add a spec descriptor for route", + "Add a spec descriptor for postgres" ], "scorecardFailingTests": [ - "olm-spec-descriptors", "olm-crds-have-resources", - "olm-status-descriptors" + "olm-status-descriptors", + "olm-spec-descriptors" ], "invalidVersioning": "NO", "invalidSkipRange": "NOT USED", @@ -188,7 +192,7 @@ "outputFormat": "json" }, "IndexImageInspect": { - "Id": "sha256:414ec051c4eec31a9f8e0e51eb4e0aa92653ca6b1d1c3da6cef92cb4bd21d0ed", + "ID": "sha256:414ec051c4eec31a9f8e0e51eb4e0aa92653ca6b1d1c3da6cef92cb4bd21d0ed", "Created": "2021-04-27T21:39:54.614373596Z", "Config": { "Labels": { diff --git a/testdata/samples/bundles/xls/bundles_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.xlsx b/testdata/samples/bundles/xls/bundles_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.xlsx index c285db7e..a69e2f8e 100644 Binary files a/testdata/samples/bundles/xls/bundles_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.xlsx and b/testdata/samples/bundles/xls/bundles_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.xlsx differ diff --git a/testdata/samples/channels/json/channels_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.json b/testdata/samples/channels/json/channels_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.json index 30f80817..46b70848 100644 --- a/testdata/samples/channels/json/channels_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.json +++ b/testdata/samples/channels/json/channels_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.json @@ -12,12 +12,6 @@ "foundAllReplaces": true, "errors": null }, - { - "packageName": "appdynamics-operator", - "channelName": "alpha", - "foundAllReplaces": true, - "errors": null - }, { "packageName": "anchore-engine", "channelName": "alpha", @@ -30,6 +24,12 @@ "isFollowingNameConvention": true, "foundAllReplaces": true, "errors": null + }, + { + "packageName": "appdynamics-operator", + "channelName": "alpha", + "foundAllReplaces": true, + "errors": null } ], "flags": { @@ -40,7 +40,7 @@ "outputFormat": "json" }, "IndexImageInspect": { - "Id": "sha256:414ec051c4eec31a9f8e0e51eb4e0aa92653ca6b1d1c3da6cef92cb4bd21d0ed", + "ID": "sha256:414ec051c4eec31a9f8e0e51eb4e0aa92653ca6b1d1c3da6cef92cb4bd21d0ed", "Created": "2021-04-27T21:39:54.614373596Z", "Config": { "Labels": { diff --git a/testdata/samples/channels/xls/channels_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.xlsx b/testdata/samples/channels/xls/channels_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.xlsx index 099f779b..e23c0dfc 100644 Binary files a/testdata/samples/channels/xls/channels_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.xlsx and b/testdata/samples/channels/xls/channels_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.xlsx differ diff --git a/testdata/samples/packages/json/package_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.json b/testdata/samples/packages/json/package_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.json index a9e0887a..dd03840b 100644 --- a/testdata/samples/packages/json/package_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.json +++ b/testdata/samples/packages/json/package_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.json @@ -11,65 +11,65 @@ "apiextensions.k8s.io/v1beta1, kind=CustomResourceDefinitions was deprecated in Kubernetes v1.16 and will be removed in v1.22 in favor of v1: [\"kaudits.kaudit.alcide.com\"] should be migrated" ], "scorecardErrors": [ - "Owned CRDs do not have resources specified", - "aks does not have a spec descriptor", - "aws does not have a spec descriptor", - "image does not have a spec descriptor", - "resources does not have a spec descriptor", - "vault does not have a spec descriptor", "clusterName does not have a spec descriptor", - "k8s does not have a spec descriptor", - "k8sAuditEnvironment does not have a spec descriptor", + "kauditPolicyFile does not have a spec descriptor", "namespace does not have a spec descriptor", "alcide does not have a spec descriptor", - "gke does not have a spec descriptor", - "prometheus does not have a spec descriptor", + "k8sAuditEnvironment does not have a spec descriptor", "runOptions does not have a spec descriptor", + "image does not have a spec descriptor", + "k8s does not have a spec descriptor", + "prometheus does not have a spec descriptor", + "aks does not have a spec descriptor", + "aws does not have a spec descriptor", + "gke does not have a spec descriptor", + "tls does not have a spec descriptor", + "vault does not have a spec descriptor", "ingress does not have a spec descriptor", - "kauditPolicyFile does not have a spec descriptor", + "resources does not have a spec descriptor", "storage does not have a spec descriptor", - "tls does not have a spec descriptor", + "Owned CRDs do not have resources specified", "kaudits.kaudit.alcide.com does not have a status descriptor" ], "scorecardSuggestions": [ + "Add a spec descriptor for clusterName", + "Add a spec descriptor for kauditPolicyFile", + "Add a spec descriptor for namespace", + "Add a spec descriptor for alcide", + "Add a spec descriptor for k8sAuditEnvironment", + "Add a spec descriptor for runOptions", + "Add a spec descriptor for image", + "Add a spec descriptor for k8s", + "Add a spec descriptor for prometheus", + "Add a spec descriptor for aks", + "Add a spec descriptor for aws", + "Add a spec descriptor for gke", + "Add a spec descriptor for tls", + "Add a spec descriptor for vault", + "Add a spec descriptor for ingress", + "Add a spec descriptor for resources", + "Add a spec descriptor for storage", "Add CRD validation for spec field `alcide` in Kaudit/v1alpha1", - "Add CRD validation for spec field `ingress` in Kaudit/v1alpha1", - "Add CRD validation for spec field `k8s` in Kaudit/v1alpha1", - "Add CRD validation for spec field `prometheus` in Kaudit/v1alpha1", - "Add CRD validation for spec field `runOptions` in Kaudit/v1alpha1", - "Add CRD validation for spec field `clusterName` in Kaudit/v1alpha1", + "Add CRD validation for spec field `aws` in Kaudit/v1alpha1", "Add CRD validation for spec field `gke` in Kaudit/v1alpha1", - "Add CRD validation for spec field `kauditPolicyFile` in Kaudit/v1alpha1", "Add CRD validation for spec field `namespace` in Kaudit/v1alpha1", + "Add CRD validation for spec field `prometheus` in Kaudit/v1alpha1", "Add CRD validation for spec field `resources` in Kaudit/v1alpha1", - "Add CRD validation for spec field `tls` in Kaudit/v1alpha1", - "Add CRD validation for spec field `aks` in Kaudit/v1alpha1", - "Add CRD validation for spec field `aws` in Kaudit/v1alpha1", + "Add CRD validation for spec field `runOptions` in Kaudit/v1alpha1", + "Add CRD validation for spec field `clusterName` in Kaudit/v1alpha1", "Add CRD validation for spec field `image` in Kaudit/v1alpha1", + "Add CRD validation for spec field `k8s` in Kaudit/v1alpha1", "Add CRD validation for spec field `k8sAuditEnvironment` in Kaudit/v1alpha1", "Add CRD validation for spec field `storage` in Kaudit/v1alpha1", - "Add CRD validation for spec field `vault` in Kaudit/v1alpha1", - "Add a spec descriptor for aks", - "Add a spec descriptor for aws", - "Add a spec descriptor for image", - "Add a spec descriptor for resources", - "Add a spec descriptor for vault", - "Add a spec descriptor for clusterName", - "Add a spec descriptor for k8s", - "Add a spec descriptor for k8sAuditEnvironment", - "Add a spec descriptor for namespace", - "Add a spec descriptor for alcide", - "Add a spec descriptor for gke", - "Add a spec descriptor for prometheus", - "Add a spec descriptor for runOptions", - "Add a spec descriptor for ingress", - "Add a spec descriptor for kauditPolicyFile", - "Add a spec descriptor for storage", - "Add a spec descriptor for tls" + "Add CRD validation for spec field `ingress` in Kaudit/v1alpha1", + "Add CRD validation for spec field `kauditPolicyFile` in Kaudit/v1alpha1", + "Add CRD validation for spec field `aks` in Kaudit/v1alpha1", + "Add CRD validation for spec field `tls` in Kaudit/v1alpha1", + "Add CRD validation for spec field `vault` in Kaudit/v1alpha1" ], "scorecardFailingTests": [ - "olm-crds-have-resources", "olm-spec-descriptors", + "olm-crds-have-resources", "olm-status-descriptors" ], "hasSupportForAllNamespaces": true, @@ -99,8 +99,7 @@ "apiextensions.k8s.io/v1beta1, kind=CustomResourceDefinitions was deprecated in Kubernetes v1.16 and will be removed in v1.22 in favor of v1: [\"anacondateameditions.anaconda.com\"] should be migrated" ], "scorecardErrors": [ - "anacondateameditions.anaconda.com does not have a status descriptor", - "Owned CRDs do not have resources specified", + "storage does not have a spec descriptor", "worker does not have a spec descriptor", "api does not have a spec descriptor", "dispatcher does not have a spec descriptor", @@ -108,9 +107,11 @@ "postgres does not have a spec descriptor", "proxy does not have a spec descriptor", "redis does not have a spec descriptor", - "storage does not have a spec descriptor" + "anacondateameditions.anaconda.com does not have a status descriptor", + "Owned CRDs do not have resources specified" ], "scorecardSuggestions": [ + "Add a spec descriptor for storage", "Add a spec descriptor for worker", "Add a spec descriptor for api", "Add a spec descriptor for dispatcher", @@ -118,20 +119,19 @@ "Add a spec descriptor for postgres", "Add a spec descriptor for proxy", "Add a spec descriptor for redis", - "Add a spec descriptor for storage", - "Add CRD validation for spec field `postgres` in AnacondaTeamEdition/v1beta1", - "Add CRD validation for spec field `proxy` in AnacondaTeamEdition/v1beta1", - "Add CRD validation for spec field `redis` in AnacondaTeamEdition/v1beta1", - "Add CRD validation for spec field `storage` in AnacondaTeamEdition/v1beta1", "Add CRD validation for spec field `worker` in AnacondaTeamEdition/v1beta1", "Add CRD validation for spec field `api` in AnacondaTeamEdition/v1beta1", "Add CRD validation for spec field `dispatcher` in AnacondaTeamEdition/v1beta1", - "Add CRD validation for spec field `route` in AnacondaTeamEdition/v1beta1" + "Add CRD validation for spec field `route` in AnacondaTeamEdition/v1beta1", + "Add CRD validation for spec field `postgres` in AnacondaTeamEdition/v1beta1", + "Add CRD validation for spec field `proxy` in AnacondaTeamEdition/v1beta1", + "Add CRD validation for spec field `redis` in AnacondaTeamEdition/v1beta1", + "Add CRD validation for spec field `storage` in AnacondaTeamEdition/v1beta1" ], "scorecardFailingTests": [ + "olm-spec-descriptors", "olm-status-descriptors", - "olm-crds-have-resources", - "olm-spec-descriptors" + "olm-crds-have-resources" ], "hasSupportForAllNamespaces": true, "hasSupportForSingleNamespaces": true, @@ -157,7 +157,7 @@ "disableValidators": false }, "IndexImageInspect": { - "Id": "sha256:414ec051c4eec31a9f8e0e51eb4e0aa92653ca6b1d1c3da6cef92cb4bd21d0ed", + "ID": "sha256:414ec051c4eec31a9f8e0e51eb4e0aa92653ca6b1d1c3da6cef92cb4bd21d0ed", "Created": "2021-04-27T21:39:54.614373596Z", "Config": { "Labels": { diff --git a/testdata/samples/packages/xls/packages_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.xlsx b/testdata/samples/packages/xls/packages_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.xlsx index f45cf740..8b2a8e96 100644 Binary files a/testdata/samples/packages/xls/packages_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.xlsx and b/testdata/samples/packages/xls/packages_registry.redhat.io_redhat_certified_operator_index_v4.8_2021-05-14.xlsx differ