Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a show command to the Diki CLI #412

Merged
merged 27 commits into from
Jan 22, 2025
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
70446dc
Add supported versions metadata for each ruleset instance
georgibaltiev Dec 23, 2024
5c608f6
Add ruleset version resolving methods to the provider definitions
georgibaltiev Dec 23, 2024
a69a4d4
Add comments
georgibaltiev Dec 23, 2024
d8ae1c3
Add show command implementation
georgibaltiev Dec 23, 2024
30719f1
Move JSON defined structures into a separate module
georgibaltiev Dec 27, 2024
686523d
Move ruleset user-friendly names into constant variables for broader …
georgibaltiev Dec 27, 2024
1de2bb0
Add description comments for the new constants
georgibaltiev Dec 27, 2024
619ac19
Add functions that showcase each provider's metadata
georgibaltiev Dec 27, 2024
6a31e32
Refactor showProvider command and additional tabulations
georgibaltiev Dec 27, 2024
d4a4f1c
formatting
georgibaltiev Dec 27, 2024
c5e8f5e
Rename variables and comments in the metadata and builder packages
georgibaltiev Jan 3, 2025
688fadc
Add comment and reference changes to the app command
georgibaltiev Jan 3, 2025
99e3b2e
Add additional comments to the ruleset files
georgibaltiev Jan 3, 2025
683c7b5
Refactor metadata initalizing builder methods
georgibaltiev Jan 3, 2025
98adb5e
Fix typo
georgibaltiev Jan 3, 2025
9011efd
Add constants to the provider definition files
georgibaltiev Jan 3, 2025
ff6f2e6
Add constants to the metadata builder methods
georgibaltiev Jan 3, 2025
03bc32a
Declare and utilize a new string to Metadata map in main.go
georgibaltiev Jan 3, 2025
95bc6bd
Simplify some code
georgibaltiev Jan 3, 2025
98131a6
Tabulation
georgibaltiev Jan 6, 2025
7e20b39
Merge branch 'gardener:main' into add-show-command
georgibaltiev Jan 7, 2025
afe1993
Remove support for version v1r11
georgibaltiev Jan 7, 2025
d5ac7d0
Correct some nits
georgibaltiev Jan 7, 2025
94a0128
Add suggestions
georgibaltiev Jan 21, 2025
271e590
Fix typo
georgibaltiev Jan 21, 2025
7ca3599
Tabulation
georgibaltiev Jan 21, 2025
8fbdbce
Change comments
georgibaltiev Jan 21, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions cmd/diki/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ import (
"k8s.io/component-base/version"

"github.com/gardener/diki/pkg/config"
"github.com/gardener/diki/pkg/metadata"
"github.com/gardener/diki/pkg/provider"
"github.com/gardener/diki/pkg/provider/builder"
"github.com/gardener/diki/pkg/report"
"github.com/gardener/diki/pkg/ruleset"
)
Expand Down Expand Up @@ -124,6 +126,28 @@ e.g. to check compliance of your hyperscaler accounts.`,
addReportGenerateDiffFlags(generateDiffCmd, &generateDiffOpts)
generateCmd.AddCommand(generateDiffCmd)

showCmd := &cobra.Command{
Use: "show",
Short: "Show metadata of the providers that the current diki binary supports.",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Short: "Show metadata of the providers that the current diki binary supports.",
Short: "Show metadata information for different diki internals, i.e. providers.",

Long: "Show metadata of the providers that the current diki binary supports.",
RunE: func(_ *cobra.Command, _ []string) error {
return errors.New("show subcommand not selected")
},
}

rootCmd.AddCommand(showCmd)

showProviderCmd := &cobra.Command{
Use: "provider",
Short: "",
Long: "",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Short: "",
Long: "",
Short: "Show detailed information for the given provider.",
Long: "Show detailed information for the given provider.",

RunE: func(_ *cobra.Command, args []string) error {
return showProviderCmd(args)
},
}

showCmd.AddCommand(showProviderCmd)

return rootCmd
}

Expand Down Expand Up @@ -156,6 +180,51 @@ func addReportGenerateDiffFlags(cmd *cobra.Command, opts *generateDiffOptions) {
cmd.PersistentFlags().Var(cliflag.NewMapStringString(&opts.identityAttributes), "identity-attributes", "The keys are the IDs of the providers that will be present in the generated difference report and the values are metadata attributes to be used as identifiers.")
}

func showProviderCmd(args []string) error {
if len(args) > 1 {
return errors.New("command `show provider` accepts at most one provider")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
return errors.New("command `show provider` accepts at most one provider")
return errors.New("command 'show provider' accepts at most one provider")

}

var (
providerFuncMap = map[string]func() metadata.ProviderMetadata{
"gardener": builder.GardenerProviderMetadata,
"garden": builder.GardenProviderMetadata,
"managedk8s": builder.ManagedK8SProviderMetadata,
"virtualgarden": builder.VirtualGardenProviderMetadata,
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How is this customizable when it is hardcoded here? I would not be able to configure it through main.go. Please see how the command accepts builder functions through main.go and do the same for these.

)

if len(args) == 0 {
providersMetadata := []metadata.Provider{}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's stay consistent with the slice initializations.

Suggested change
providersMetadata := []metadata.Provider{}
var providersMetadata []metadata.Provider


for providerID := range providerFuncMap {
providersMetadata = append(providersMetadata, metadata.Provider{ProviderID: providerID, ProviderName: providerFuncMap[providerID]().ProviderName})
}

if bytes, err := json.Marshal(providersMetadata); err != nil {
return err
} else {
fmt.Println(string(bytes))
}
dimityrmirchev marked this conversation as resolved.
Show resolved Hide resolved
} else {
var providerArg = args[0]

metadataFunc, ok := providerFuncMap[providerArg]
if !ok {
return fmt.Errorf("provider %s does not exist in the current diki binary", providerArg)
}

providerMetadata := metadataFunc()

if bytes, err := json.Marshal(providerMetadata); err != nil {
return err
} else {
fmt.Println(string(bytes))
}
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
} else {
var providerArg = args[0]
metadataFunc, ok := providerFuncMap[providerArg]
if !ok {
return fmt.Errorf("provider %s does not exist in the current diki binary", providerArg)
}
providerMetadata := metadataFunc()
if bytes, err := json.Marshal(providerMetadata); err != nil {
return err
} else {
fmt.Println(string(bytes))
}
}
}
metadataFunc, ok := providerFuncMap[args[0]]
if !ok {
return fmt.Errorf("provider %s does not exist in the current diki binary", args[0])
}
if bytes, err := json.Marshal(metadataFunc()); err != nil {
return err
}
fmt.Println(string(bytes))

return nil
}

func generateDiffCmd(args []string, generateDiffOpts generateDiffOptions, rootOpts reportOptions, logger *slog.Logger) error {
if len(args) == 0 {
return errors.New("generate diff command requires a minimum of one filepath argument")
Expand Down
41 changes: 41 additions & 0 deletions pkg/metadata/metadata.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// SPDX-FileCopyrightText: 2023 SAP SE or an SAP affiliate company and Gardener contributors
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// SPDX-FileCopyrightText: 2023 SAP SE or an SAP affiliate company and Gardener contributors
// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Gardener contributors

//
// SPDX-License-Identifier: Apache-2.0

package metadata

// Version is used to represent a specific version of a ruleset
type Version struct {
// Version is the human-readable name of the ruleset release
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// Version is the human-readable name of the ruleset release
// Version is the name of the ruleset release.

Version string `json:"version"`
// Latest is a bool tag that showcases if the specific version is the latest one
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// Latest is a bool tag that showcases if the specific version is the latest one
// Latest shows if the specific version is the latest one.

Latest bool `json:"latest"`
}

// RulesetMetadata is used to represent a specific ruleset and it's metadata
type RulesetMetadata struct {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
type RulesetMetadata struct {
type Ruleset struct {

// RulesetID is the unique identifier of the ruleset
RulesetID string `json:"rulesetID"`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
RulesetID string `json:"rulesetID"`
ID string `json:"id"`

// RulesetName is the user-friendly name of the ruleset
RulesetName string `json:"rulesetName"`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
RulesetName string `json:"rulesetName"`
Name string `json:"name"`

// Versions is used to showcase the supported versions of the specific ruleset
Versions []Version `json:"versions"`
}

// Provider is used to represent an available provider by it's name and unique identifier
type Provider struct {
// ProviderID is the unique identifier of the provider
ProviderID string `json:"id"`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
ProviderID string `json:"id"`
ID string `json:"id"`

// ProviderName is the user-friendly name of the provider
ProviderName string `json:"name"`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
ProviderName string `json:"name"`
Name string `json:"name"`

}

// ProviderMetadata is used to represent a specific provider and it's metadata
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please put dots at the end of all sentences.

type ProviderMetadata struct {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
type ProviderMetadata struct {
type ProviderDetailed struct {

// ProviderID is the unique identifier of the provider
ProviderID string `json:"providerID"`
// ProviderName is the user-friendly name of the provider
ProviderName string `json:"providerName"`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// ProviderID is the unique identifier of the provider
ProviderID string `json:"providerID"`
// ProviderName is the user-friendly name of the provider
ProviderName string `json:"providerName"`
Provider

// ProviderRulesets is a list of rulesets supported by the specific provider
ProviderRulesets []RulesetMetadata `json:"rulesets"`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
ProviderRulesets []RulesetMetadata `json:"rulesets"`
Rulesets []RulesetMetadata `json:"rulesets"`

}
40 changes: 40 additions & 0 deletions pkg/provider/builder/garden.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"log/slog"

"github.com/gardener/diki/pkg/config"
"github.com/gardener/diki/pkg/metadata"
"github.com/gardener/diki/pkg/provider"
"github.com/gardener/diki/pkg/provider/garden"
"github.com/gardener/diki/pkg/provider/garden/ruleset/securityhardenedshoot"
Expand Down Expand Up @@ -48,3 +49,42 @@ func GardenProviderFromConfig(conf config.ProviderConfig) (provider.Provider, er

return p, nil
}

// gardenGetSupportedVersions returns the Supported Versions of a specific ruleset that is supported by the Garden provider.
func gardenGetSupportedVersions(ruleset string) []string {
switch ruleset {
case securityhardenedshoot.RulesetID:
return securityhardenedshoot.SupportedVersions
default:
return nil
}
}

// GardenProviderMetadata returns available metadata for the Garden Provider and it's supported rulesets.
func GardenProviderMetadata() metadata.ProviderMetadata {
providerMetadata := metadata.ProviderMetadata{}
providerMetadata.ProviderID = "garden"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This would not be correct if the provider id changes here

diki/cmd/diki/main.go

Lines 19 to 22 in a4a8e8f

"garden": builder.GardenProviderFromConfig,
"gardener": builder.GardenerProviderFromConfig,
"managedk8s": builder.ManagedK8SProviderFromConfig,
"virtualgarden": builder.VirtualGardenProviderFromConfig,

We should either fix the provider id to a constant or not hardcode it here.

providerMetadata.ProviderName = "Garden"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


var availableRulesets = map[string]string{
securityhardenedshoot.RulesetID: securityhardenedshoot.RulesetName,
}

for rulesetID, rulesetName := range availableRulesets {
rulesetMetadata := &metadata.RulesetMetadata{}
rulesetMetadata.RulesetID = rulesetID
rulesetMetadata.RulesetName = rulesetName
rulesetSupportedVersions := gardenGetSupportedVersions(rulesetMetadata.RulesetID)

for index, supportedVersion := range rulesetSupportedVersions {
if index == 0 {
rulesetMetadata.Versions = append(rulesetMetadata.Versions, metadata.Version{Version: supportedVersion, Latest: true})
} else {
rulesetMetadata.Versions = append(rulesetMetadata.Versions, metadata.Version{Version: supportedVersion, Latest: false})
}
}
providerMetadata.ProviderRulesets = append(providerMetadata.ProviderRulesets, *rulesetMetadata)
}

return providerMetadata
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not just initialize the structs?

providerMetadata := metadata.ProviderMetadata{
		ProviderID:   "garden",
		ProviderName: "Garden",
		ProviderRulesets: []metadata.RulesetMetadata{
			{
				RulesetID:   securityhardenedshoot.RulesetID,
				RulesetName: securityhardenedshoot.RulesetName,
			},
		},
	}

	for i := range providerMetadata.ProviderRulesets {
		supportedVersions := gardenGetSupportedVersions(providerMetadata.ProviderRulesets[i].RulesetID)
		for _, supportedVersion := range supportedVersions {
			providerMetadata.ProviderRulesets[i].Versions = append(
				providerMetadata.ProviderRulesets[i].Versions,
				metadata.Version{Version: supportedVersion, Latest: false},
			)
		}

		// Mark the first version as latest as the versions are sorted from newest to oldest
		if len(providerMetadata.ProviderRulesets[i].Versions) > 0 {
			providerMetadata.ProviderRulesets[i].Versions[0].Latest = true
		}
	}

	return providerMetadata

}
40 changes: 40 additions & 0 deletions pkg/provider/builder/gardener.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"k8s.io/client-go/rest"

"github.com/gardener/diki/pkg/config"
"github.com/gardener/diki/pkg/metadata"
"github.com/gardener/diki/pkg/provider"
"github.com/gardener/diki/pkg/provider/gardener"
"github.com/gardener/diki/pkg/provider/gardener/ruleset/disak8sstig"
Expand Down Expand Up @@ -61,3 +62,42 @@ func setConfigDefaults(config *rest.Config) {
config.Burst = 40
}
}

// gardenerGetSupportedVersions returns the Supported Versions of a specific ruleset that is supported by the Gardener provider.
func gardenerGetSupportedVersions(ruleset string) []string {
switch ruleset {
case disak8sstig.RulesetID:
return disak8sstig.SupportedVersions
default:
return nil
}
}

// GardenerProviderMetadata returns available metadata for the Gardener Provider and it's supported rulesets.
func GardenerProviderMetadata() metadata.ProviderMetadata {
providerMetadata := metadata.ProviderMetadata{}
providerMetadata.ProviderID = "gardener"
providerMetadata.ProviderName = "Gardener"

var availableRulesets = map[string]string{
disak8sstig.RulesetID: disak8sstig.RulesetName,
}

for rulesetID, rulesetName := range availableRulesets {
rulesetMetadata := &metadata.RulesetMetadata{}
rulesetMetadata.RulesetID = rulesetID
rulesetMetadata.RulesetName = rulesetName
rulesetSupportedVersions := gardenerGetSupportedVersions(rulesetMetadata.RulesetID)

for index, supportedVersion := range rulesetSupportedVersions {
if index == 0 {
rulesetMetadata.Versions = append(rulesetMetadata.Versions, metadata.Version{Version: supportedVersion, Latest: true})
} else {
rulesetMetadata.Versions = append(rulesetMetadata.Versions, metadata.Version{Version: supportedVersion, Latest: false})
}
}
providerMetadata.ProviderRulesets = append(providerMetadata.ProviderRulesets, *rulesetMetadata)
}

return providerMetadata
}
42 changes: 42 additions & 0 deletions pkg/provider/builder/managedk8s.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"log/slog"

"github.com/gardener/diki/pkg/config"
"github.com/gardener/diki/pkg/metadata"
"github.com/gardener/diki/pkg/provider"
"github.com/gardener/diki/pkg/provider/managedk8s"
"github.com/gardener/diki/pkg/provider/managedk8s/ruleset/disak8sstig"
Expand Down Expand Up @@ -57,3 +58,44 @@ func ManagedK8SProviderFromConfig(conf config.ProviderConfig) (provider.Provider

return p, nil
}

// managedK8SGetSupportedVersions returns the supported versions of a specific ruleset that is supported by the Managed K8S provider.
func managedK8SGetSupportedVersions(ruleset string) []string {
switch ruleset {
case securityhardenedk8s.RulesetID:
return securityhardenedk8s.SupportedVersions
case disak8sstig.RulesetID:
return disak8sstig.SupportedVersions
default:
return nil
}
}

// ManagedK8SProviderMetadata returns available metadata for the Managed Kubernetes Provider and it's supported rulesets.
func ManagedK8SProviderMetadata() metadata.ProviderMetadata {
providerMetadata := metadata.ProviderMetadata{}
providerMetadata.ProviderID = "managedk8s"
providerMetadata.ProviderName = "Managed Kubernetes"

var availableRulesets = map[string]string{
securityhardenedk8s.RulesetID: securityhardenedk8s.RulesetName,
disak8sstig.RulesetID: disak8sstig.RulesetName,
}

for rulesetID, rulesetName := range availableRulesets {
rulesetMetadata := &metadata.RulesetMetadata{}
rulesetMetadata.RulesetID = rulesetID
rulesetMetadata.RulesetName = rulesetName
rulesetSupportedVersions := managedK8SGetSupportedVersions(rulesetMetadata.RulesetID)

for index, supportedVersion := range rulesetSupportedVersions {
if index == 0 {
rulesetMetadata.Versions = append(rulesetMetadata.Versions, metadata.Version{Version: supportedVersion, Latest: true})
} else {
rulesetMetadata.Versions = append(rulesetMetadata.Versions, metadata.Version{Version: supportedVersion, Latest: false})
}
}
providerMetadata.ProviderRulesets = append(providerMetadata.ProviderRulesets, *rulesetMetadata)
}
return providerMetadata
}
39 changes: 39 additions & 0 deletions pkg/provider/builder/virtualgarden.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"log/slog"

"github.com/gardener/diki/pkg/config"
"github.com/gardener/diki/pkg/metadata"
"github.com/gardener/diki/pkg/provider"
"github.com/gardener/diki/pkg/provider/virtualgarden"
"github.com/gardener/diki/pkg/provider/virtualgarden/ruleset/disak8sstig"
Expand Down Expand Up @@ -48,3 +49,41 @@ func VirtualGardenProviderFromConfig(conf config.ProviderConfig) (provider.Provi

return p, nil
}

// virtualGardenGetSupportedVersions returns the supported versions of a specific ruleset that is supported by the Virtual Garden provider.
func virtualGardenGetSupportedVersions(ruleset string) []string {
switch ruleset {
case disak8sstig.RulesetID:
return disak8sstig.SupportedVersions
default:
return nil
}
}

// VirtualGardenProviderMetadata returns available metadata for the Virtual Garden Provider and it's supported rulesets.
func VirtualGardenProviderMetadata() metadata.ProviderMetadata {
providerMetadata := metadata.ProviderMetadata{}
providerMetadata.ProviderID = "virtualgarden"
providerMetadata.ProviderName = "Virtual Garden"

var availableRulesets = map[string]string{
disak8sstig.RulesetID: disak8sstig.RulesetName,
}

for rulesetID, rulesetName := range availableRulesets {
rulesetMetadata := &metadata.RulesetMetadata{}
rulesetMetadata.RulesetID = rulesetID
rulesetMetadata.RulesetName = rulesetName
rulesetSupportedVersions := virtualGardenGetSupportedVersions(rulesetMetadata.RulesetID)

for index, supportedVersion := range rulesetSupportedVersions {
if index == 0 {
rulesetMetadata.Versions = append(rulesetMetadata.Versions, metadata.Version{Version: supportedVersion, Latest: true})
} else {
rulesetMetadata.Versions = append(rulesetMetadata.Versions, metadata.Version{Version: supportedVersion, Latest: false})
}
}
providerMetadata.ProviderRulesets = append(providerMetadata.ProviderRulesets, *rulesetMetadata)
}
return providerMetadata
}
12 changes: 9 additions & 3 deletions pkg/provider/garden/ruleset/securityhardenedshoot/ruleset.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,17 @@ import (
)

const (
// RulesetID is a constant containing the id of the Security Hardened Shoot Cluster Ruleset.
// RulesetID is a constant containing the id of the Security Hardened Shoot Cluster ruleset.
RulesetID = "security-hardened-shoot-cluster"
// RulesetName is a constant containing the user-friendly name of the Security Hardened Shoot Cluster ruleset.
RulesetName = "Security Hardened Shoot Cluster"
)

var _ ruleset.Ruleset = &Ruleset{}
var (
_ ruleset.Ruleset = &Ruleset{}
// SupportedVersions is a list of available versions for the Security Hardened Shoot Cluster Ruleset.
dimityrmirchev marked this conversation as resolved.
Show resolved Hide resolved
SupportedVersions = []string{"v0.1.0"}
)

// Ruleset implements Security Hardened Shoot Cluster.
type Ruleset struct {
Expand Down Expand Up @@ -62,7 +68,7 @@ func (r *Ruleset) ID() string {

// Name returns the name of the Ruleset.
func (r *Ruleset) Name() string {
return "Security Hardened Shoot Cluster"
return RulesetName
}

// Version returns the version of the Ruleset.
Expand Down
10 changes: 8 additions & 2 deletions pkg/provider/gardener/ruleset/disak8sstig/ruleset.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,15 @@ import (
const (
// RulesetID is a constant containing the id of the DISA Kubernetes STIG Ruleset.
RulesetID = "disa-kubernetes-stig"
// RulesetName is a constant containing the user-friendly name of the DISA Kubernetes STIG ruleset.
RulesetName = "DISA Kubernetes Security Technical Implementation Guide"
)

var _ ruleset.Ruleset = &Ruleset{}
var (
_ ruleset.Ruleset = &Ruleset{}
// SupportedVersions is a list of available versions for the DISA Kubernetes STIG Ruleset.
SupportedVersions = []string{"v2r1", "v1r11"}
)

// Ruleset implements DISA Kubernetes STIG.
type Ruleset struct {
Expand Down Expand Up @@ -71,7 +77,7 @@ func (r *Ruleset) ID() string {

// Name returns the name of the Ruleset.
func (r *Ruleset) Name() string {
return "DISA Kubernetes Security Technical Implementation Guide"
return RulesetName
}

// Version returns the version of the Ruleset.
Expand Down
Loading
Loading