Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion cmd/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ func assembleConfigForCommand(configBase *deployer.Config, configFromArgs deploy

// Apply user config on top (overriding defaults).
if !skipUserConfig {
if err := tryApplyUserDefaults(globalLogger, &config); err != nil {
if err := tryApplyUserDefaults(&config); err != nil {
return deployer.Config{}, fmt.Errorf("applying user config: %w", err)
}
}
Expand Down
41 changes: 17 additions & 24 deletions cmd/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import (
"github.com/stackrox/roxie/internal/helpers"
"github.com/stackrox/roxie/internal/imagetag"
"github.com/stackrox/roxie/internal/k8s"
"github.com/stackrox/roxie/internal/logger"
log "github.com/stackrox/roxie/internal/logger"
"github.com/stackrox/roxie/internal/manifest"
"github.com/stackrox/roxie/internal/roxieenv"
"github.com/stackrox/roxie/internal/stackroxversions"
Expand Down Expand Up @@ -216,9 +216,8 @@ this flag can be used to tell roxie how to pre-load images for the current clust
}

func runDeploy(cmd *cobra.Command, args []string) error {
log := globalLogger
if !dryRun {
if err := env.Initialize(log); err != nil {
if err := env.Initialize(); err != nil {
return err
}
}
Expand All @@ -239,7 +238,7 @@ func runDeploy(cmd *cobra.Command, args []string) error {
setupCtx, setupCancel := context.WithTimeout(context.Background(), 10*time.Minute)
defer setupCancel()

clusterConfig := retrieveClusterConfigForComponents(setupCtx, log, components)
clusterConfig := retrieveClusterConfigForComponents(setupCtx, components)

deploySettings, err := assembleConfigForCommand(clusterConfig, deploySettingsFromArgs, skipUserConfig)
if err != nil {
Expand All @@ -252,7 +251,7 @@ func runDeploy(cmd *cobra.Command, args []string) error {
if deploySettings.Roxie.Version != "" {
log.Dimf("Using main image tag %s", deploySettings.Roxie.Version)
} else {
mainImageTag, err := helpers.LookupMainImageTag(ctx, log)
mainImageTag, err := helpers.LookupMainImageTag(ctx)
if err != nil {
return fmt.Errorf("looking up main image tag: %w", err)
}
Expand All @@ -265,15 +264,15 @@ func runDeploy(cmd *cobra.Command, args []string) error {
}
}

if err := configureConfig(log, components, &deploySettings); err != nil {
if err := configureConfig(components, &deploySettings); err != nil {
return err
}

if err := deployValidate(log, components, &deploySettings); err != nil {
if err := deployValidate(components, &deploySettings); err != nil {
return err
}

d, err := deployer.New(log)
d, err := deployer.New()
if err != nil {
return fmt.Errorf("failed to create deployer: %w", err)
}
Expand All @@ -282,7 +281,6 @@ func runDeploy(cmd *cobra.Command, args []string) error {
if envrc != "" {
d.SetEnvrcFile(envrc)
}
d.SetVerbose(verbose)
d.SetConfig(deploySettings)

if dryRun {
Expand All @@ -295,7 +293,7 @@ func runDeploy(cmd *cobra.Command, args []string) error {
if deploySettings.Roxie.ClusterType.IsLocal() && !deploySettings.Roxie.KonfluxImagesEnabled() {
var preLoader deployer.ImagePreLoader
if imagePreLoadCommand != "" {
preLoader = deployer.NewCustomImagePreloader(ctx, log, imagePreLoadCommand)
preLoader = deployer.NewCustomImagePreloader(imagePreLoadCommand)
} else {
preLoader, err = d.GetPreLoaderForCluster()
if err != nil {
Expand Down Expand Up @@ -344,13 +342,13 @@ func runDeploy(cmd *cobra.Command, args []string) error {
RoxieEnvironment: roxieEnv,
Config: deploySettings,
}
if err := manifest.CreateManifestSecretOnCluster(ctx, log, m); err != nil {
if err := manifest.CreateManifestSecretOnCluster(ctx, m); err != nil {
log.Warningf("Failed to save roxie manifest: %v", err)
}
}

if components.IncludesCentral() && envrc == "" {
if err := spawnSubshellForDeployerEnv(deploySettings.Roxie, d, log); err != nil {
if err := spawnSubshellForDeployerEnv(deploySettings.Roxie, d); err != nil {
return fmt.Errorf("failed to spawn subshell: %w", err)
}
}
Expand Down Expand Up @@ -388,10 +386,9 @@ func computeDeployContextTimeout(components component.Component, cfg deployer.Co

func retrieveClusterConfigForComponents(
ctx context.Context,
log *logger.Logger,
components component.Component,
) *deployer.Config {
clusterManifest, err := manifest.LoadManifestSecret(ctx, log)
clusterManifest, err := manifest.LoadManifestSecret(ctx)
if err != nil {
if errors.Is(err, k8s.ErrResourceNotFound) {
log.Dim("No existing manifest found on cluster, starting from defaults")
Expand All @@ -411,7 +408,7 @@ func retrieveClusterConfigForComponents(
return &clusterManifest.Config
}

func configureConfig(log *logger.Logger, components component.Component, deploySettings *deployer.Config) error {
func configureConfig(components component.Component, deploySettings *deployer.Config) error {
if deploySettings.Roxie.ClusterType == "" {
clusterType := env.GetAutoDetectedClusterType()
log.Dimf("Detected cluster type: %v", clusterType)
Expand All @@ -425,10 +422,8 @@ func configureConfig(log *logger.Logger, components component.Component, deployS
if err != nil {
return err
}
if verbose {
log.Dimf("Applying the following defaults based on cluster type %v:", clusterType)
helpers.LogMultilineYaml(log, defaults)
}
log.Debugf("Applying the following defaults based on cluster type %v:", clusterType)
log.LogMultilineYaml(defaults)

// Deal with the "auto" resourceProfile.
if deploySettings.Central.ResourceProfile == types.ResourceProfileAuto {
Expand Down Expand Up @@ -466,10 +461,8 @@ func configureConfig(log *logger.Logger, components component.Component, deployS
return fmt.Errorf("configuring SecuredCluster spec: %w", err)
}
}
if verbose {
log.Dim("Deployment configuration:")
helpers.LogMultilineYaml(log, deploySettings)
}
log.Debug("Deployment configuration:")
log.LogMultilineYaml(deploySettings)

if !deploySettings.Central.PortForwardingSet() && !deploySettings.Central.ExposureEnabled() {
log.Info("Enabling port-forwarding due to no exposure")
Expand All @@ -479,7 +472,7 @@ func configureConfig(log *logger.Logger, components component.Component, deployS
return nil
}

func deployValidate(log *logger.Logger, components component.Component, deploySettings *deployer.Config) error {
func deployValidate(components component.Component, deploySettings *deployer.Config) error {
if components.IncludesCentral() && os.Getenv("ROXIE_SHELL") != "" {
return errors.New("already in a roxie sub-shell (ROXIE_SHELL environment variable is set), please exit the shell and try again")
}
Expand Down
7 changes: 2 additions & 5 deletions cmd/deploy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
"github.com/stackrox/roxie/internal/component"
"github.com/stackrox/roxie/internal/deployer"
"github.com/stackrox/roxie/internal/imagetag"
"github.com/stackrox/roxie/internal/logger"
"github.com/stackrox/roxie/internal/paths"
"github.com/stackrox/roxie/internal/types"
"github.com/stretchr/testify/assert"
Expand Down Expand Up @@ -316,8 +315,6 @@ func TestNewDeployCmd_SetRejectsSpec(t *testing.T) {
}

func TestApplyUserDefaults(t *testing.T) {
log := logger.New()

tests := []struct {
name string
config deployer.Config
Expand Down Expand Up @@ -405,7 +402,7 @@ func TestApplyUserDefaults(t *testing.T) {

cfg := deployer.NewConfig()
require.NoError(t, mergo.Merge(&cfg, &tt.config, mergo.WithOverride, mergo.WithoutDereference))
require.NoError(t, tryApplyUserDefaults(log, &cfg))
require.NoError(t, tryApplyUserDefaults(&cfg))

expected := deployer.NewConfig()
require.NoError(t, mergo.Merge(&expected, &tt.expected, mergo.WithOverride, mergo.WithoutDereference))
Expand All @@ -425,7 +422,7 @@ func TestApplyUserDefaults(t *testing.T) {
require.NoError(t, os.WriteFile(configPath, []byte(`invalid: [yaml`), 0o644))

cfg := deployer.NewConfig()
assert.Error(t, tryApplyUserDefaults(log, &cfg))
assert.Error(t, tryApplyUserDefaults(&cfg))
})
}

Expand Down
3 changes: 1 addition & 2 deletions cmd/env.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ func newEnvCmd() *cobra.Command {
}

func runEnv(cmd *cobra.Command, args []string) error {
log := globalLogger
if err := env.Initialize(log); err != nil {
if err := env.Initialize(); err != nil {
return err
}

Expand Down
10 changes: 6 additions & 4 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (
"github.com/spf13/cobra"
"github.com/stackrox/roxie/internal/deployer"
"github.com/stackrox/roxie/internal/helpers"
"github.com/stackrox/roxie/internal/logger"
log "github.com/stackrox/roxie/internal/logger"
"github.com/stackrox/roxie/internal/paths"
"gopkg.in/yaml.v3"
"helm.sh/helm/v3/pkg/strvals"
Expand All @@ -27,8 +27,6 @@ var (

skipUserConfig bool

globalLogger = logger.New()

// We need this set up before command line flags are parsed.
deploySettingsFromArgs = deployer.NewConfig()
)
Expand All @@ -44,7 +42,7 @@ func main() {
// If a user config file exists, apply those user defaults on top the
// current config. This essentially means, that the user config can
// override values, which are already initialized in NewConfig().
func tryApplyUserDefaults(log *logger.Logger, config *deployer.Config) error {
func tryApplyUserDefaults(config *deployer.Config) error {
path, err := paths.UserConfigPath(true)
if err != nil {
return err
Expand Down Expand Up @@ -72,6 +70,10 @@ var rootCmd = &cobra.Command{
Short: "roxie - Advanced Cluster Security Deployment Tool",
Long: `roxie is a fast, developer-friendly CLI to deploy and manage
Red Hat Advanced Cluster Security (ACS) on any Kubernetes/OpenShift cluster.`,
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
log.SetVerbose(verbose)
return nil
},
SilenceUsage: true,
SilenceErrors: true,
}
Expand Down
11 changes: 5 additions & 6 deletions cmd/shell.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (

"github.com/spf13/cobra"
"github.com/stackrox/roxie/internal/env"
"github.com/stackrox/roxie/internal/logger"
log "github.com/stackrox/roxie/internal/logger"
"github.com/stackrox/roxie/internal/manifest"
)

Expand Down Expand Up @@ -52,8 +52,7 @@ Examples:
}

func runShell(args []string) error {
log := logger.New()
if err := env.Initialize(log); err != nil {
if err := env.Initialize(); err != nil {
return err
}

Expand All @@ -66,7 +65,7 @@ func runShell(args []string) error {
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
defer cancel()

m, err := manifest.LoadManifestSecret(ctx, log)
m, err := manifest.LoadManifestSecret(ctx)
if err != nil {
return fmt.Errorf("failed to load roxie manifest: %w", err)
}
Expand All @@ -85,10 +84,10 @@ func runShell(args []string) error {
}
defer os.RemoveAll(tempDir)

centralDeploymentInfo, err := manifest.ManifestToCentralDeploymentInfo(ctx, log, tempDir, m)
centralDeploymentInfo, err := manifest.ManifestToCentralDeploymentInfo(ctx, tempDir, m)
if err != nil {
return fmt.Errorf("extracting central deployment info from manifest: %w", err)
}

return runCommandOrSubshell(config.Roxie, centralDeploymentInfo, log, args)
return runCommandOrSubshell(config.Roxie, centralDeploymentInfo, args)
}
11 changes: 5 additions & 6 deletions cmd/subshell.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,20 @@ import (
"github.com/stackrox/roxie/internal/deployer"
"github.com/stackrox/roxie/internal/env"
"github.com/stackrox/roxie/internal/haproxy"
"github.com/stackrox/roxie/internal/logger"
log "github.com/stackrox/roxie/internal/logger"
"github.com/stackrox/roxie/internal/roxieenv"
"github.com/stackrox/roxie/internal/types"
)

// spawnSubshellForDeployerEnv assembles the roxie environment from a Deployer and invokes an interactive subshell.
func spawnSubshellForDeployerEnv(roxieConfig deployer.RoxieConfig, d *deployer.Deployer, log *logger.Logger) error {
return runCommandOrSubshell(roxieConfig, d.GetCentralDeploymentInfo(), log, nil)
func spawnSubshellForDeployerEnv(roxieConfig deployer.RoxieConfig, d *deployer.Deployer) error {
return runCommandOrSubshell(roxieConfig, d.GetCentralDeploymentInfo(), nil)
}

// runCommandOrSubshell spawns an interactive subshell or runs the provided command using the given
// central deployment info.
// It handles HAProxy setup, prints the connection banner, and manages shell lifecycle.
func runCommandOrSubshell(roxieConfig deployer.RoxieConfig, centralDeploymentInfo types.CentralDeploymentInfo, log *logger.Logger, args []string) error {
func runCommandOrSubshell(roxieConfig deployer.RoxieConfig, centralDeploymentInfo types.CentralDeploymentInfo, args []string) error {
cmdEnv := os.Environ()
for name, val := range roxieenv.AssembleRoxieEnvironment(centralDeploymentInfo).Export() {
cmdEnv = append(cmdEnv, fmt.Sprintf("%s=%s", name, val))
Expand All @@ -33,7 +33,7 @@ func runCommandOrSubshell(roxieConfig deployer.RoxieConfig, centralDeploymentInf
cmdEnv = append(cmdEnv, fmt.Sprintf("name=acs@%s", centralDeploymentInfo.KubeContext))

if roxieConfig.HAProxy.Enabled() {
cleanupFunc, err := tryStartHAProxy(log, roxieConfig, &centralDeploymentInfo)
cleanupFunc, err := tryStartHAProxy(roxieConfig, &centralDeploymentInfo)
if err != nil {
log.Warningf("Failed to start HAProxy: %v", err)
}
Expand Down Expand Up @@ -89,7 +89,6 @@ func runCommandOrSubshell(roxieConfig deployer.RoxieConfig, centralDeploymentInf
}

func tryStartHAProxy(
log *logger.Logger,
roxieConfig deployer.RoxieConfig,
centralDeploymentInfo *types.CentralDeploymentInfo) (func(), error) {

Expand Down
13 changes: 6 additions & 7 deletions cmd/teardown.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/stackrox/roxie/internal/deployer"
"github.com/stackrox/roxie/internal/env"
"github.com/stackrox/roxie/internal/k8s"
log "github.com/stackrox/roxie/internal/logger"
"github.com/stackrox/roxie/internal/manifest"
)

Expand Down Expand Up @@ -40,8 +41,7 @@ func newTeardownCmd(settings *deployer.Config) *cobra.Command {
}

func runTeardown(cmd *cobra.Command, args []string) error {
log := globalLogger
if err := env.Initialize(log); err != nil {
if err := env.Initialize(); err != nil {
return err
}

Expand All @@ -61,7 +61,7 @@ func runTeardown(cmd *cobra.Command, args []string) error {
defer cancel()

var clusterConfig *deployer.Config
clusterManifest, err := manifest.LoadManifestSecret(ctx, log)
clusterManifest, err := manifest.LoadManifestSecret(ctx)
if errors.Is(err, k8s.ErrResourceNotFound) {
log.Infof("No roxie manifest found in cluster, proceeding without it")
} else if err != nil {
Expand All @@ -75,26 +75,25 @@ func runTeardown(cmd *cobra.Command, args []string) error {
return err
}

d, err := deployer.New(log)
d, err := deployer.New()
if err != nil {
return fmt.Errorf("failed to create deployer: %w", err)
}
defer d.Cleanup()

d.SetConfig(deploySettings)
d.SetVerbose(verbose)

if err := d.Teardown(ctx, components); err != nil {
return fmt.Errorf("teardown failed: %w", err)
}

if components.IncludesCentral() {
if err := manifest.DeleteManifestSecret(ctx, log); err != nil {
if err := manifest.DeleteManifestSecret(ctx); err != nil {
log.Warningf("Failed to delete roxie manifest: %v", err)
}
}
if components == component.All {
if err := manifest.DeleteRoxieNamespace(ctx, log); err != nil {
if err := manifest.DeleteRoxieNamespace(ctx); err != nil {
log.Warningf("Failed to delete roxie namespace: %v", err)
}
}
Expand Down
Loading
Loading