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")