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

Method CreateOrganization

runner/organizations.go:31–95  ·  view source on GitHub ↗
(ctx context.Context, param params.CreateOrgParams)

Source from the content-addressed store, hash-verified

29)
30
31func (r *Runner) CreateOrganization(ctx context.Context, param params.CreateOrgParams) (org params.Organization, err error) {
32 if !auth.IsAdmin(ctx) {
33 return org, runnerErrors.ErrUnauthorized
34 }
35
36 if err := param.Validate(); err != nil {
37 return params.Organization{}, fmt.Errorf("error validating params: %w", err)
38 }
39
40 var creds params.ForgeCredentials
41 switch param.ForgeType {
42 case params.GithubEndpointType:
43 slog.DebugContext(ctx, "getting github credentials")
44 creds, err = r.store.GetGithubCredentialsByName(ctx, param.CredentialsName, true)
45 case params.GiteaEndpointType:
46 slog.DebugContext(ctx, "getting gitea credentials")
47 creds, err = r.store.GetGiteaCredentialsByName(ctx, param.CredentialsName, true)
48 default:
49 creds, err = r.ResolveForgeCredentialByName(ctx, param.CredentialsName)
50 }
51
52 if err != nil {
53 return params.Organization{}, runnerErrors.NewBadRequestError("credentials %s not defined", param.CredentialsName)
54 }
55
56 _, err = r.store.GetOrganization(ctx, param.Name, creds.Endpoint.Name)
57 if err != nil {
58 if !errors.Is(err, runnerErrors.ErrNotFound) {
59 return params.Organization{}, fmt.Errorf("error fetching org: %w", err)
60 }
61 } else {
62 return params.Organization{}, runnerErrors.NewConflictError("organization %s already exists", param.Name)
63 }
64
65 org, err = r.store.CreateOrganization(ctx, param.Name, creds, param.WebhookSecret, param.PoolBalancerType, param.AgentMode)
66 if err != nil {
67 return params.Organization{}, fmt.Errorf("error creating organization: %w", err)
68 }
69
70 defer func() {
71 if err != nil {
72 if deleteErr := r.store.DeleteOrganization(ctx, org.ID); deleteErr != nil {
73 slog.With(slog.Any("error", deleteErr)).ErrorContext(
74 ctx, "failed to delete org",
75 "org_id", org.ID)
76 }
77 }
78 }()
79
80 // Use the admin context in the pool manager. Any access control is already done above when
81 // updating the store.
82 poolMgr, err := r.poolManagerCtrl.CreateOrgPoolManager(r.ctx, org, r.providers, r.store)
83 if err != nil {
84 return params.Organization{}, fmt.Errorf("error creating org pool manager: %w", err)
85 }
86 if err := poolMgr.Start(); err != nil {
87 if deleteErr := r.poolManagerCtrl.DeleteOrgPoolManager(org); deleteErr != nil {
88 slog.With(slog.Any("error", deleteErr)).ErrorContext(

Callers

nothing calls this directly

Calls 11

IsAdminFunction · 0.92
GetOrganizationMethod · 0.65
CreateOrganizationMethod · 0.65
DeleteOrganizationMethod · 0.65
CreateOrgPoolManagerMethod · 0.65
StartMethod · 0.65
DeleteOrgPoolManagerMethod · 0.65
ValidateMethod · 0.45

Tested by

no test coverage detected