@@ -42,7 +42,6 @@ type Runner struct {
42
42
metrics Metrics
43
43
job * proto.AcquiredJob
44
44
sender JobUpdater
45
- quotaCommitter QuotaCommitter
46
45
logger slog.Logger
47
46
filesystem afero.Fs
48
47
workDirectory string
@@ -87,13 +86,8 @@ type JobUpdater interface {
87
86
CompleteJob (ctx context.Context , in * proto.CompletedJob ) error
88
87
}
89
88
90
- type QuotaCommitter interface {
91
- CommitQuota (ctx context.Context , in * proto.CommitQuotaRequest ) (* proto.CommitQuotaResponse , error )
92
- }
93
-
94
89
type Options struct {
95
90
Updater JobUpdater
96
- QuotaCommitter QuotaCommitter
97
91
Logger slog.Logger
98
92
Filesystem afero.Fs
99
93
WorkDirectory string
@@ -121,7 +115,6 @@ func New(
121
115
metrics : opts .Metrics ,
122
116
job : job ,
123
117
sender : opts .Updater ,
124
- quotaCommitter : opts .QuotaCommitter ,
125
118
logger : opts .Logger .With (slog .F ("job_id" , job .JobId )),
126
119
filesystem : opts .Filesystem ,
127
120
workDirectory : opts .WorkDirectory ,
@@ -678,12 +671,13 @@ func (r *Runner) runTemplateImportProvision(ctx context.Context, values []*sdkpr
678
671
}
679
672
}()
680
673
err = stream .Send (& sdkproto.Provision_Request {
681
- Type : & sdkproto.Provision_Request_Start {
682
- Start : & sdkproto.Provision_Start {
683
- Directory : r .workDirectory ,
674
+ Type : & sdkproto.Provision_Request_Plan {
675
+ Plan : & sdkproto.Provision_Plan {
676
+ Config : & sdkproto.Provision_Config {
677
+ Directory : r .workDirectory ,
678
+ Metadata : metadata ,
679
+ },
684
680
ParameterValues : values ,
685
- DryRun : true ,
686
- Metadata : metadata ,
687
681
},
688
682
},
689
683
})
@@ -783,8 +777,8 @@ func (r *Runner) runTemplateDryRun(ctx context.Context) (*proto.CompletedJob, *p
783
777
}, nil
784
778
}
785
779
786
- func (r * Runner ) buildWorkspace (ctx context.Context , stage string , dry bool ) (
787
- * proto. CompletedJob , * proto.FailedJob ,
780
+ func (r * Runner ) buildWorkspace (ctx context.Context , stage string , req * sdkproto. Provision_Request ) (
781
+ * sdkproto. Provision_Complete , * proto.FailedJob ,
788
782
) {
789
783
// use the notStopped so that if we attempt to gracefully cancel, the stream
790
784
// will still be available for us to send the cancel to the provisioner
@@ -805,17 +799,8 @@ func (r *Runner) buildWorkspace(ctx context.Context, stage string, dry bool) (
805
799
})
806
800
}
807
801
}()
808
- err = stream .Send (& sdkproto.Provision_Request {
809
- Type : & sdkproto.Provision_Request_Start {
810
- Start : & sdkproto.Provision_Start {
811
- Directory : r .workDirectory ,
812
- ParameterValues : r .job .GetWorkspaceBuild ().ParameterValues ,
813
- Metadata : r .job .GetWorkspaceBuild ().Metadata ,
814
- State : r .job .GetWorkspaceBuild ().State ,
815
- DryRun : dry ,
816
- },
817
- },
818
- })
802
+
803
+ err = stream .Send (req )
819
804
if err != nil {
820
805
return nil , r .failedJobf ("start provision: %s" , err )
821
806
}
@@ -864,15 +849,7 @@ func (r *Runner) buildWorkspace(ctx context.Context, stage string, dry bool) (
864
849
slog .F ("state_length" , len (msgType .Complete .State )),
865
850
)
866
851
// Stop looping!
867
- return & proto.CompletedJob {
868
- JobId : r .job .JobId ,
869
- Type : & proto.CompletedJob_WorkspaceBuild_ {
870
- WorkspaceBuild : & proto.CompletedJob_WorkspaceBuild {
871
- State : msgType .Complete .State ,
872
- Resources : msgType .Complete .Resources ,
873
- },
874
- },
875
- }, nil
852
+ return msgType .Complete , nil
876
853
default :
877
854
return nil , r .failedJobf ("invalid message type %T received from provisioner" , msg .Type )
878
855
}
@@ -884,57 +861,62 @@ func (r *Runner) runWorkspaceBuild(ctx context.Context) (*proto.CompletedJob, *p
884
861
defer span .End ()
885
862
886
863
var (
887
- stage string
888
- commitQuota bool
864
+ applyStage string
889
865
)
890
866
switch r .job .GetWorkspaceBuild ().Metadata .WorkspaceTransition {
891
867
case sdkproto .WorkspaceTransition_START :
892
- stage = "Starting workspace"
893
- commitQuota = true
868
+ applyStage = "Starting workspace"
894
869
case sdkproto .WorkspaceTransition_STOP :
895
- stage = "Stopping workspace"
896
- commitQuota = true
870
+ applyStage = "Stopping workspace"
897
871
case sdkproto .WorkspaceTransition_DESTROY :
898
- stage = "Destroying workspace"
872
+ applyStage = "Destroying workspace"
899
873
}
900
874
901
875
r .queueLog (ctx , & proto.Log {
902
876
Source : proto .LogSource_PROVISIONER_DAEMON ,
903
877
Level : sdkproto .LogLevel_INFO ,
904
- Stage : stage ,
878
+ Stage : applyStage ,
905
879
CreatedAt : time .Now ().UnixMilli (),
906
880
})
881
+ config := & sdkproto.Provision_Config {
882
+ Directory : r .workDirectory ,
883
+ Metadata : r .job .GetWorkspaceBuild ().Metadata ,
884
+ State : r .job .GetWorkspaceBuild ().State ,
885
+ }
907
886
908
- if commitQuota {
909
- stage := "Quota Planning"
910
- completed , failed := r .buildWorkspace (ctx , stage , false )
911
- if failed != nil {
912
- return nil , failed
913
- }
914
- cost := countCost (completed .GetWorkspaceBuild ().Resources )
915
- if cost > 0 {
916
- resp , err := r .quotaCommitter .CommitQuota (ctx , & proto.CommitQuotaRequest {
917
- Cost : int32 (cost ),
918
- })
919
- if err != nil {
920
- return nil , r .failedJobf ("commit quota: %+v" , err )
921
- }
922
- r .queueLog (ctx , & proto.Log {
923
- Source : proto .LogSource_PROVISIONER ,
924
- Level : sdkproto .LogLevel_INFO ,
925
- CreatedAt : time .Now ().UnixMilli (),
926
- Output : fmt .Sprintf (
927
- "cost: %v\n total: %v\n available: %v\n " ,
928
- cost , resp .TotalCredits , resp .CreditsAvailable ,
929
- ),
930
- Stage : stage ,
931
- })
932
- if ! resp .Ok {
933
- return nil , r .failedJobf ("insufficient quota" )
934
- }
935
- }
887
+ completed , failed := r .buildWorkspace (ctx , "Planning infrastructure" , & sdkproto.Provision_Request {
888
+ Type : & sdkproto.Provision_Request_Plan {
889
+ Plan : & sdkproto.Provision_Plan {
890
+ Config : config ,
891
+ ParameterValues : r .job .GetWorkspaceBuild ().ParameterValues ,
892
+ },
893
+ },
894
+ })
895
+ if failed != nil {
896
+ return nil , failed
936
897
}
937
- return r .buildWorkspace (ctx , stage , false )
898
+
899
+ completedApply , failed := r .buildWorkspace (ctx , applyStage , & sdkproto.Provision_Request {
900
+ Type : & sdkproto.Provision_Request_Apply {
901
+ Apply : & sdkproto.Provision_Apply {
902
+ Config : config ,
903
+ Plan : completed .GetPlan (),
904
+ },
905
+ },
906
+ })
907
+ if failed != nil {
908
+ return nil , failed
909
+ }
910
+
911
+ return & proto.CompletedJob {
912
+ JobId : r .job .JobId ,
913
+ Type : & proto.CompletedJob_WorkspaceBuild_ {
914
+ WorkspaceBuild : & proto.CompletedJob_WorkspaceBuild {
915
+ State : completedApply .GetState (),
916
+ Resources : completedApply .GetResources (),
917
+ },
918
+ },
919
+ }, nil
938
920
}
939
921
940
922
func (r * Runner ) failedJobf (format string , args ... interface {}) * proto.FailedJob {
0 commit comments