MCPcopy Create free account
hub / github.com/cloudbase/garm / CreateEntityScaleSet

Method CreateEntityScaleSet

database/sql/scalesets.go:60–144  ·  view source on GitHub ↗
(ctx context.Context, entity params.ForgeEntity, param params.CreateScaleSetParams)

Source from the content-addressed store, hash-verified

58}
59
60func (s *sqlDatabase) CreateEntityScaleSet(ctx context.Context, entity params.ForgeEntity, param params.CreateScaleSetParams) (scaleSet params.ScaleSet, err error) {
61 if err := param.Validate(); err != nil {
62 return params.ScaleSet{}, fmt.Errorf("failed to validate create params: %w", err)
63 }
64
65 defer func() {
66 if err == nil {
67 s.sendNotify(common.ScaleSetEntityType, common.CreateOperation, scaleSet)
68 }
69 }()
70
71 newScaleSet := ScaleSet{
72 Name: param.Name,
73 ScaleSetID: param.ScaleSetID,
74 DisableUpdate: param.DisableUpdate,
75 ProviderName: param.ProviderName,
76 RunnerPrefix: param.GetRunnerPrefix(),
77 MaxRunners: param.MaxRunners,
78 MinIdleRunners: param.MinIdleRunners,
79 RunnerBootstrapTimeout: param.RunnerBootstrapTimeout,
80 Image: param.Image,
81 Flavor: param.Flavor,
82 OSType: param.OSType,
83 OSArch: param.OSArch,
84 Enabled: param.Enabled,
85 GitHubRunnerGroup: param.GitHubRunnerGroup,
86 State: params.ScaleSetPendingCreate,
87 TemplateID: param.TemplateID,
88 EnableShell: param.EnableShell,
89 }
90
91 if len(param.ExtraSpecs) > 0 {
92 newScaleSet.ExtraSpecs = datatypes.JSON(param.ExtraSpecs)
93 }
94
95 entityID, err := uuid.Parse(entity.ID)
96 if err != nil {
97 return params.ScaleSet{}, fmt.Errorf("error parsing id: %w", runnerErrors.ErrBadRequest)
98 }
99
100 switch entity.EntityType {
101 case params.ForgeEntityTypeRepository:
102 newScaleSet.RepoID = &entityID
103 case params.ForgeEntityTypeOrganization:
104 newScaleSet.OrgID = &entityID
105 case params.ForgeEntityTypeEnterprise:
106 newScaleSet.EnterpriseID = &entityID
107 }
108 err = s.conn.Transaction(func(tx *gorm.DB) error {
109 if err := s.hasGithubEntity(tx, entity.EntityType, entity.ID); err != nil {
110 return fmt.Errorf("error checking entity existence: %w", err)
111 }
112
113 q := tx.Create(&newScaleSet)
114 if q.Error != nil {
115 return fmt.Errorf("error creating scale set: %w", q.Error)
116 }
117

Callers

nothing calls this directly

Calls 6

sendNotifyMethod · 0.95
hasGithubEntityMethod · 0.95
getOrCreateTagMethod · 0.95
GetScaleSetByIDMethod · 0.95
GetRunnerPrefixMethod · 0.80
ValidateMethod · 0.45

Tested by

no test coverage detected