diff --git a/cmd/server.go b/cmd/server.go index 58b5f1a9c..ed88f0cad 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -231,7 +231,8 @@ var stringFlags = map[string]stringFlag{ "default: Runs atlantis with default event handler that processes events within same.\n" + "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.", + "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 on behalf of other users.", defaultValue: "", }, LyftWorkerQueueURLFlag: { @@ -344,6 +345,7 @@ func NewServerCmd(v *viper.Viper, version string) *ServerCmd { GatewayCreator: &GatewayCreator{}, WorkerCreator: &WorkerCreator{}, TemporalWorkerCreator: &TemporalWorker{}, + TerraformAdminCreator: &TerraformAdmin{}, }, Viper: v, AtlantisVersion: version, @@ -374,6 +376,7 @@ type ServerCreatorProxy struct { GatewayCreator ServerCreator WorkerCreator ServerCreator TemporalWorkerCreator ServerCreator + TerraformAdminCreator ServerCreator } func (d *ServerCreatorProxy) NewServer(userConfig server.UserConfig, config server.Config) (ServerStarter, error) { @@ -389,6 +392,10 @@ func (d *ServerCreatorProxy) NewServer(userConfig server.UserConfig, config serv return d.TemporalWorkerCreator.NewServer(userConfig, config) } + if userConfig.ToLyftMode() == server.TerraformAdmin { + return d.TerraformAdminCreator.NewServer(userConfig, config) + } + return d.WorkerCreator.NewServer(userConfig, config) } diff --git a/server/legacy/user_config.go b/server/legacy/user_config.go index fb84431db..980a38a01 100644 --- a/server/legacy/user_config.go +++ b/server/legacy/user_config.go @@ -11,6 +11,7 @@ const ( Gateway Worker TemporalWorker + TerraformAdmin ) // UserConfig holds config values passed in by the user. @@ -104,6 +105,8 @@ func (u UserConfig) ToLyftMode() Mode { return Worker case "temporalworker": return TemporalWorker + case "terraformadmin": + return TerraformAdmin } return Default } diff --git a/server/legacy/user_config_test.go b/server/legacy/user_config_test.go index 52e0a85d2..de2e91335 100644 --- a/server/legacy/user_config_test.go +++ b/server/legacy/user_config_test.go @@ -70,6 +70,14 @@ func TestUserConfig_ToLyftMode(t *testing.T) { "", server.Default, }, + { + "terraformadmin", + server.TerraformAdmin, + }, + { + "temporalworker", + server.TemporalWorker, + }, } for _, c := range cases {