From 1ad555f226e92402aab3dfda938a5099281be5f7 Mon Sep 17 00:00:00 2001 From: Shawna Monero <smonero@lyft.com> Date: Wed, 6 Mar 2024 13:08:27 -0800 Subject: [PATCH] still making progress --- cmd/server.go | 2 +- cmd/terraformadmin.go | 12 ++-- server/legacy/user_config.go | 6 +- server/legacy/user_config_test.go | 4 +- server/neptune/admin/config/adminconfig.go | 61 +++++++++++++++++++ .../{terraformadmin => admin}/server.go | 21 ++----- 6 files changed, 79 insertions(+), 27 deletions(-) create mode 100644 server/neptune/admin/config/adminconfig.go rename server/neptune/{terraformadmin => admin}/server.go (93%) diff --git a/cmd/server.go b/cmd/server.go index 8c9f754ab..39a719fe8 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -232,7 +232,7 @@ var stringFlags = map[string]stringFlag{ "gateway: Runs atlantis with gateway event handler that publishes events through sns.\n" + "worker: Runs atlantis with a sqs handler that polls for events in the queue to process.\n" + "hybrid: Runs atlantis with both a gateway event handler and sqs handler to perform both gateway and worker behaviors.\n" + - "terraformadmin: Runs atlantis in a mode that allows for running terraform commands.", + "admin: Runs atlantis in an admin mode that allows for running terraform commands.", defaultValue: "", }, LyftWorkerQueueURLFlag: { diff --git a/cmd/terraformadmin.go b/cmd/terraformadmin.go index bb15f571e..06a3cbfe5 100644 --- a/cmd/terraformadmin.go +++ b/cmd/terraformadmin.go @@ -6,8 +6,8 @@ import ( "github.com/runatlantis/atlantis/server/config/valid" "github.com/runatlantis/atlantis/server/legacy" "github.com/runatlantis/atlantis/server/logging" - neptune "github.com/runatlantis/atlantis/server/neptune/temporalworker/config" "github.com/runatlantis/atlantis/server/neptune/terraformadmin" + adminconfig "github.com/runatlantis/atlantis/server/neptune/terraformadmin/config" ) type TerraformAdmin struct{} @@ -42,27 +42,27 @@ func (t *TerraformAdmin) NewServer(userConfig legacy.UserConfig, config legacy.C } // we don't need the feature config - cfg := &neptune.Config{ + cfg := &adminconfig.Config{ // we need the authCfg and ssl stuff for the http server - AuthCfg: neptune.AuthConfig{ + AuthCfg: adminconfig.AuthConfig{ SslCertFile: userConfig.SSLCertFile, SslKeyFile: userConfig.SSLKeyFile, }, // we need the servercfg stuff, see setAtlantisURL() TODO: is this true? - ServerCfg: neptune.ServerConfig{ + ServerCfg: adminconfig.ServerConfig{ URL: parsedURL, Version: config.AtlantisVersion, Port: userConfig.Port, }, // we need the terraformcfg stuff, since we need terraformActivities - TerraformCfg: neptune.TerraformConfig{ + TerraformCfg: adminconfig.TerraformConfig{ DefaultVersion: userConfig.DefaultTFVersion, DownloadURL: userConfig.TFDownloadURL, LogFilters: globalCfg.TerraformLogFilter, }, // also passed to terraform activities, even though we don't need conf test OPA stuff // TODO: But we have to introduce branching if we remove this... - ValidationConfig: neptune.ValidationConfig{ + ValidationConfig: adminconfig.ValidationConfig{ DefaultVersion: globalCfg.PolicySets.Version, Policies: globalCfg.PolicySets, }, diff --git a/server/legacy/user_config.go b/server/legacy/user_config.go index 980a38a01..0f17931b8 100644 --- a/server/legacy/user_config.go +++ b/server/legacy/user_config.go @@ -11,7 +11,7 @@ const ( Gateway Worker TemporalWorker - TerraformAdmin + Admin ) // UserConfig holds config values passed in by the user. @@ -105,8 +105,8 @@ func (u UserConfig) ToLyftMode() Mode { return Worker case "temporalworker": return TemporalWorker - case "terraformadmin": - return TerraformAdmin + case "admin": + return Admin } return Default } diff --git a/server/legacy/user_config_test.go b/server/legacy/user_config_test.go index de2e91335..b266d0d22 100644 --- a/server/legacy/user_config_test.go +++ b/server/legacy/user_config_test.go @@ -71,8 +71,8 @@ func TestUserConfig_ToLyftMode(t *testing.T) { server.Default, }, { - "terraformadmin", - server.TerraformAdmin, + "admin", + server.Admin, }, { "temporalworker", diff --git a/server/neptune/admin/config/adminconfig.go b/server/neptune/admin/config/adminconfig.go new file mode 100644 index 000000000..2a4d11cf9 --- /dev/null +++ b/server/neptune/admin/config/adminconfig.go @@ -0,0 +1,61 @@ +package adminconfig + +import ( + "net/url" + + "github.com/hashicorp/go-version" + + "github.com/palantir/go-githubapp/githubapp" + "github.com/runatlantis/atlantis/server/config/valid" + "github.com/runatlantis/atlantis/server/logging" +) + +type AuthConfig struct { + SslCertFile string + SslKeyFile string +} + +type ServerConfig struct { + URL *url.URL + Version string + Port int +} + +type TerraformConfig struct { + DefaultVersion string + DownloadURL string + LogFilters valid.TerraformLogFilters +} + +type ValidationConfig struct { + DefaultVersion *version.Version + Policies valid.PolicySets +} + +type FeatureConfig struct { + FFOwner string + FFRepo string + FFPath string + FFBranch string +} + +// Config is TerraformAdmin (admin mode) specific user config +type Config struct { + AuthCfg AuthConfig + ServerCfg ServerConfig + FeatureConfig FeatureConfig + TemporalCfg valid.Temporal + GithubCfg valid.Github + TerraformCfg TerraformConfig + ValidationConfig ValidationConfig + DeploymentConfig valid.StoreConfig + JobConfig valid.StoreConfig + Metrics valid.Metrics + + StatsNamespace string + + DataDir string + CtxLogger logging.Logger + App githubapp.Config + LyftAuditJobsSnsTopicArn string +} diff --git a/server/neptune/terraformadmin/server.go b/server/neptune/admin/server.go similarity index 93% rename from server/neptune/terraformadmin/server.go rename to server/neptune/admin/server.go index 88d25c1ce..848b15e1e 100644 --- a/server/neptune/terraformadmin/server.go +++ b/server/neptune/admin/server.go @@ -1,4 +1,4 @@ -package terraformadmin +package admin import ( "context" @@ -25,7 +25,7 @@ import ( "github.com/runatlantis/atlantis/server/metrics" neptune_http "github.com/runatlantis/atlantis/server/neptune/http" "github.com/runatlantis/atlantis/server/neptune/temporal" - "github.com/runatlantis/atlantis/server/neptune/temporalworker/config" + adminconfig "github.com/runatlantis/atlantis/server/neptune/terraformadmin/config" "github.com/runatlantis/atlantis/server/neptune/workflows" "github.com/runatlantis/atlantis/server/neptune/workflows/activities" "github.com/runatlantis/atlantis/server/static" @@ -44,20 +44,11 @@ type Server struct { TemporalClient *temporal.ClientWrapper TerraformActivities *activities.Terraform GithubActivities *activities.Github - // differences from temporal worker: - // - no additional notifiers - // - no revision setter - // - no PRRevisionGithubActivities - // - no AuditActivity - // - no RevisionSetterActivities - // - no DeployActivities - // - no JobStreamHandler - // - no CronScheduler - // - no crons + TerraformTaskQueue string } -func NewServer(config *config.Config) (*Server, error) { +func NewServer(config *adminconfig.Config) (*Server, error) { statsReporter, err := metrics.NewReporter(config.Metrics, config.CtxLogger) if err != nil { @@ -70,7 +61,7 @@ func NewServer(config *config.Config) (*Server, error) { } scope = scope.Tagged(map[string]string{ - "mode": "terraformadmin", + "mode": "admin", }) // difference from temporalworker: no job stuff (handler, controller, etc) @@ -115,7 +106,7 @@ func NewServer(config *config.Config) (*Server, error) { config.TemporalCfg.TerraformTaskQueue, config.GithubCfg.TemporalAppInstallationID, nil, - // difference from temporalworker: no jobstreamhandler TODO: test if this actually works + // difference from temporalworker: no jobstreamhandler TODO: test if this actually works ) if err != nil { return nil, errors.Wrap(err, "initializing terraform activities")