Documentation
¶
Index ¶
Constants ¶
View Source
const ( PoolScaleDownInterval = 1 * time.Minute PoolConsilitationInterval = 5 * time.Second PoolReapTimeoutInterval = 5 * time.Minute // Temporary tools download token is valid for 1 hour by default. // There is no point in making an API call to get available tools, for every runner // we spin up. We cache the tools for 5 minutes. This should save us a lot of API calls // in cases where we have a lot of runners spin up at the same time. PoolToolUpdateInterval = 5 * time.Minute // BackoffTimer is the time we wait before attempting to make another request // to the github API. BackoffTimer = 1 * time.Minute )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type GithubClient ¶
type GithubClient interface { GithubEntityOperations // GetWorkflowJobByID gets details about a single workflow job. GetWorkflowJobByID(ctx context.Context, owner, repo string, jobID int64) (*github.WorkflowJob, *github.Response, error) }
GithubClient that describes the minimum list of functions we need to interact with github. Allows for easier testing.
type GithubEntityOperations ¶ added in v0.1.5
type GithubEntityOperations interface { ListEntityHooks(ctx context.Context, opts *github.ListOptions) (ret []*github.Hook, response *github.Response, err error) GetEntityHook(ctx context.Context, id int64) (ret *github.Hook, err error) CreateEntityHook(ctx context.Context, hook *github.Hook) (ret *github.Hook, err error) DeleteEntityHook(ctx context.Context, id int64) (ret *github.Response, err error) PingEntityHook(ctx context.Context, id int64) (ret *github.Response, err error) ListEntityRunners(ctx context.Context, opts *github.ListOptions) (*github.Runners, *github.Response, error) ListEntityRunnerApplicationDownloads(ctx context.Context) ([]*github.RunnerApplicationDownload, *github.Response, error) RemoveEntityRunner(ctx context.Context, runnerID int64) (*github.Response, error) CreateEntityRegistrationToken(ctx context.Context) (*github.RegistrationToken, *github.Response, error) GetEntityJITConfig(ctx context.Context, instance string, pool params.Pool, labels []string) (jitConfigMap map[string]string, runner *github.Runner, err error) }
type PoolManager ¶
type PoolManager interface { // ID returns the ID of the entity (repo, org, enterprise) ID() string // WebhookSecret returns the unencrypted webhook secret associated with the webhook installed // in GitHub for GARM. For GARM to receive webhook events for an entity, either the operator or // GARM will have to create a webhook in GitHub which points to the GARM API server. To authenticate // the webhook, a webhook secret is used. This function returns that secret. WebhookSecret() string // GithubRunnerRegistrationToken returns a new registration token for a github runner. This is used // for GHES installations that have not yet upgraded to a version >= 3.10. Starting with 3.10, we use // just-in-time runners, which no longer require exposing a runner registration token. GithubRunnerRegistrationToken() (string, error) // HandleWorkflowJob handles a workflow job meant for a particular entity. When a webhook is fired for // a repo, org or enterprise, we determine the destination of that webhook, retrieve the pool manager // for it and call this function with the WorkflowJob as a parameter. HandleWorkflowJob(job params.WorkflowJob) error // DeleteRunner will attempt to remove a runner from the pool. If forceRemove is true, any error // received from the provider will be ignored and we will proceed to remove the runner from the database. // An error received while attempting to remove from GitHub (other than 404) will still stop the deletion // process. This can happen if the runner is already processing a job. At which point, you can simply cancel // the job in github. Doing so will prompt GARM to reap the runner automatically. DeleteRunner(runner params.Instance, forceRemove, bypassGHUnauthorizedError bool) error // InstallWebhook will create a webhook in github for the entity associated with this pool manager. InstallWebhook(ctx context.Context, param params.InstallWebhookParams) (params.HookInfo, error) // GetWebhookInfo will return information about the webhook installed in github for the entity associated GetWebhookInfo(ctx context.Context) (params.HookInfo, error) // UninstallWebhook will remove the webhook installed in github for the entity associated with this pool manager. UninstallWebhook(ctx context.Context) error // RootCABundle will return a CA bundle that must be installed on all runners in order to properly validate // x509 certificates used by various systems involved. This CA bundle is defined in the GARM config file and // can include multiple CA certificates for the GARM api server, GHES server and any provider API endpoint that // may use internal or self signed certificates. RootCABundle() (params.CertificateBundle, error) // Start will start the pool manager and all associated workers. Start() error // Stop will stop the pool manager and all associated workers. Stop() error // Status will return the current status of the pool manager. Status() params.PoolManagerStatus // Wait will block until the pool manager has stopped. Wait() error }
type Provider ¶
type Provider interface { // CreateInstance creates a new compute instance in the provider. CreateInstance(ctx context.Context, bootstrapParams commonParams.BootstrapInstance) (commonParams.ProviderInstance, error) // Delete instance will delete the instance in a provider. DeleteInstance(ctx context.Context, instance string) error // GetInstance will return details about one instance. GetInstance(ctx context.Context, instance string) (commonParams.ProviderInstance, error) // ListInstances will list all instances for a provider. ListInstances(ctx context.Context, poolID string) ([]commonParams.ProviderInstance, error) // RemoveAllInstances will remove all instances created by this provider. RemoveAllInstances(ctx context.Context) error // Stop shuts down the instance. Stop(ctx context.Context, instance string) error // Start boots up an instance. Start(ctx context.Context, instance string) error // DisableJITConfig tells us if the provider explicitly disables JIT configuration and // forces runner registration tokens to be used. This may happen if a provider has not yet // been updated to support JIT configuration. DisableJITConfig() bool AsParams() params.Provider }
Click to show internal directories.
Click to hide internal directories.