Documentation
¶
Index ¶
- Constants
- type ApplyExecutor
- type Command
- type CommandContext
- type CommandHandler
- type CommandName
- type CommandResponse
- type CommandRunner
- type CommitStatusUpdater
- type CommonData
- type DefaultCommitStatusUpdater
- type DefaultProjectFinder
- type DefaultProjectPreExecutor
- type DefaultWorkspaceLocker
- type EnvLock
- type EnvLocker
- type ErrData
- type EventParser
- func (e *EventParser) DetermineCommand(comment string, vcsHost vcs.Host) (*Command, error)
- func (e *EventParser) ParseGithubIssueCommentEvent(comment *github.IssueCommentEvent) (baseRepo models.Repo, user models.User, pullNum int, err error)
- func (e *EventParser) ParseGithubPull(pull *github.PullRequest) (models.PullRequest, models.Repo, error)
- func (e *EventParser) ParseGithubRepo(ghRepo *github.Repository) (models.Repo, error)
- func (e *EventParser) ParseGitlabMergeCommentEvent(event gitlab.MergeCommentEvent) (baseRepo models.Repo, headRepo models.Repo, user models.User)
- func (e *EventParser) ParseGitlabMergeEvent(event gitlab.MergeEvent) (models.PullRequest, models.Repo)
- func (e *EventParser) ParseGitlabMergeRequest(mr *gitlab.MergeRequest) models.PullRequest
- type EventParsing
- type Executor
- type FailureData
- type FileWorkspace
- type GithubPullGetter
- type GitlabMergeRequestGetter
- type HelpExecutor
- type Hook
- type LockURLGenerator
- type MarkdownRenderer
- type PlanExecutor
- type PlanSuccess
- type PreExecuteResult
- type ProjectConfig
- type ProjectConfigManager
- type ProjectConfigReader
- type ProjectFinder
- type ProjectPreExecutor
- type ProjectResult
- type PullCleaner
- type PullClosedExecutor
- type ResultData
- type Workspace
- type WorkspaceLocker
Constants ¶
const ProjectConfigFile = "atlantis.yaml"
ProjectConfigFile is the filename of Atlantis project config.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ApplyExecutor ¶
type ApplyExecutor struct {
VCSClient vcs.ClientProxy
Terraform *terraform.Client
RequireApproval bool
Run *run.Run
Workspace Workspace
ProjectPreExecute *DefaultProjectPreExecutor
Webhooks webhooks.Sender
}
ApplyExecutor handles executing terraform apply.
func (*ApplyExecutor) Execute ¶
func (a *ApplyExecutor) Execute(ctx *CommandContext) CommandResponse
Execute executes apply for the ctx.
type Command ¶
type Command struct {
Name CommandName
Environment string
Verbose bool
Flags []string
}
type CommandContext ¶
type CommandContext struct {
// BaseRepo is the repository that the pull request will be merged into.
BaseRepo models.Repo
// HeadRepo is the repository that is getting merged into the BaseRepo.
// If the pull request branch is from the same repository then HeadRepo will
// be the same as BaseRepo.
// See https://help.github.com/articles/about-pull-request-merges/.
HeadRepo models.Repo
Pull models.PullRequest
// User is the user that triggered this command.
User models.User
Command *Command
Log *logging.SimpleLogger
// VCSHost is the host that the command came from.
VCSHost vcs.Host
}
CommandContext represents the context of a command that came from a comment on a pull request.
type CommandHandler ¶
type CommandHandler struct {
PlanExecutor Executor
ApplyExecutor Executor
HelpExecutor Executor
LockURLGenerator LockURLGenerator
VCSClient vcs.ClientProxy
GithubPullGetter GithubPullGetter
GitlabMergeRequestGetter GitlabMergeRequestGetter
CommitStatusUpdater CommitStatusUpdater
EventParser EventParsing
WorkspaceLocker WorkspaceLocker
MarkdownRenderer *MarkdownRenderer
Logger logging.SimpleLogging
}
CommandHandler is the first step when processing a comment command.
func (*CommandHandler) ExecuteCommand ¶
func (c *CommandHandler) ExecuteCommand(baseRepo models.Repo, headRepo models.Repo, user models.User, pullNum int, cmd *Command, vcsHost vcs.Host)
ExecuteCommand executes the command.
func (*CommandHandler) SetLockURL ¶
func (c *CommandHandler) SetLockURL(f func(id string) (url string))
SetLockURL sets a function that's used to return the URL for a lock.
type CommandName ¶
type CommandName int
CommandName is the type of command.
const ( Apply CommandName = iota Plan Help )
func (CommandName) String ¶
func (c CommandName) String() string
String returns the string representation of c.
type CommandResponse ¶
type CommandResponse struct {
Error error
Failure string
ProjectResults []ProjectResult
}
CommandResponse is the result of running a Command.
type CommandRunner ¶
type CommandRunner interface {
// ExecuteCommand is the first step after a command request has been parsed.
// It handles gathering additional information needed to execute the command
// and then calling the appropriate services to finish executing the command.
ExecuteCommand(baseRepo models.Repo, headRepo models.Repo, user models.User, pullNum int, cmd *Command, vcsHost vcs.Host)
}
CommandRunner is the first step after a command request has been parsed.
type CommitStatusUpdater ¶ added in v0.2.0
type CommitStatusUpdater interface {
// Update updates the status of the head commit of pull.
Update(repo models.Repo, pull models.PullRequest, status vcs.CommitStatus, cmd *Command, host vcs.Host) error
// UpdateProjectResult updates the status of the head commit given the
// state of response.
UpdateProjectResult(ctx *CommandContext, res CommandResponse) error
}
CommitStatusUpdater updates the status of a commit with the VCS host. We set the status to signify whether the plan/apply succeeds.
type CommonData ¶
CommonData is data that all responses have.
type DefaultCommitStatusUpdater ¶ added in v0.2.0
type DefaultCommitStatusUpdater struct {
Client vcs.ClientProxy
}
DefaultCommitStatusUpdater implements CommitStatusUpdater.
func (*DefaultCommitStatusUpdater) Update ¶ added in v0.2.0
func (d *DefaultCommitStatusUpdater) Update(repo models.Repo, pull models.PullRequest, status vcs.CommitStatus, cmd *Command, host vcs.Host) error
Update updates the commit status.
func (*DefaultCommitStatusUpdater) UpdateProjectResult ¶ added in v0.2.0
func (d *DefaultCommitStatusUpdater) UpdateProjectResult(ctx *CommandContext, res CommandResponse) error
UpdateProjectResult updates the commit status based on the status of res.
type DefaultProjectFinder ¶ added in v0.2.1
type DefaultProjectFinder struct{}
DefaultProjectFinder implements ProjectFinder.
func (*DefaultProjectFinder) FindModified ¶ added in v0.2.1
func (p *DefaultProjectFinder) FindModified(log *logging.SimpleLogger, modifiedFiles []string, repoFullName string) []models.Project
FindModified returns the list of projects that were modified based on the modifiedFiles. The list will be de-duplicated.
type DefaultProjectPreExecutor ¶ added in v0.2.1
type DefaultProjectPreExecutor struct {
Locker locking.Locker
ConfigReader ProjectConfigReader
Terraform terraform.Runner
Run run.Runner
}
DefaultProjectPreExecutor implements ProjectPreExecutor.
func (*DefaultProjectPreExecutor) Execute ¶ added in v0.2.1
func (p *DefaultProjectPreExecutor) Execute(ctx *CommandContext, repoDir string, project models.Project) PreExecuteResult
Execute executes the pre plan/apply tasks.
type DefaultWorkspaceLocker ¶ added in v0.2.1
type DefaultWorkspaceLocker struct {
// contains filtered or unexported fields
}
DefaultWorkspaceLocker implements WorkspaceLocker.
func NewDefaultWorkspaceLocker ¶ added in v0.2.1
func NewDefaultWorkspaceLocker() *DefaultWorkspaceLocker
NewDefaultWorkspaceLocker is a constructor.
func (*DefaultWorkspaceLocker) TryLock ¶ added in v0.2.1
func (d *DefaultWorkspaceLocker) TryLock(repoFullName string, env string, pullNum int) bool
TryLock returns true if a lock is acquired for this repo, pull and env and false otherwise.
func (*DefaultWorkspaceLocker) Unlock ¶ added in v0.2.1
func (d *DefaultWorkspaceLocker) Unlock(repoFullName, env string, pullNum int)
Unlock unlocks the repo, pull and env.
type EnvLock ¶
type EnvLock struct {
// contains filtered or unexported fields
}
EnvLock is used to prevent multiple runs and commands from occurring at the same time for a single repo, pull, and environment
func NewEnvLock ¶
func NewEnvLock() *EnvLock
type ErrData ¶
type ErrData struct {
Error string
CommonData
}
ErrData is data about an error response.
type EventParser ¶
type EventParser struct {
GithubUser string
GithubToken string
GitlabUser string
GitlabToken string
}
func (*EventParser) DetermineCommand ¶
DetermineCommand parses the comment as an atlantis command. If it succeeds, it returns the command. Otherwise it returns error. nolint: gocyclo
func (*EventParser) ParseGithubIssueCommentEvent ¶ added in v0.2.0
func (e *EventParser) ParseGithubIssueCommentEvent(comment *github.IssueCommentEvent) (baseRepo models.Repo, user models.User, pullNum int, err error)
func (*EventParser) ParseGithubPull ¶ added in v0.2.0
func (e *EventParser) ParseGithubPull(pull *github.PullRequest) (models.PullRequest, models.Repo, error)
func (*EventParser) ParseGithubRepo ¶ added in v0.2.0
func (e *EventParser) ParseGithubRepo(ghRepo *github.Repository) (models.Repo, error)
func (*EventParser) ParseGitlabMergeCommentEvent ¶ added in v0.2.0
func (e *EventParser) ParseGitlabMergeCommentEvent(event gitlab.MergeCommentEvent) (baseRepo models.Repo, headRepo models.Repo, user models.User)
ParseGitlabMergeCommentEvent creates Atlantis models out of a GitLab event.
func (*EventParser) ParseGitlabMergeEvent ¶ added in v0.2.0
func (e *EventParser) ParseGitlabMergeEvent(event gitlab.MergeEvent) (models.PullRequest, models.Repo)
func (*EventParser) ParseGitlabMergeRequest ¶ added in v0.2.0
func (e *EventParser) ParseGitlabMergeRequest(mr *gitlab.MergeRequest) models.PullRequest
type EventParsing ¶
type EventParsing interface {
DetermineCommand(comment string, vcsHost vcs.Host) (*Command, error)
ParseGithubIssueCommentEvent(comment *github.IssueCommentEvent) (baseRepo models.Repo, user models.User, pullNum int, err error)
ParseGithubPull(pull *github.PullRequest) (models.PullRequest, models.Repo, error)
ParseGithubRepo(ghRepo *github.Repository) (models.Repo, error)
ParseGitlabMergeEvent(event gitlab.MergeEvent) (models.PullRequest, models.Repo)
ParseGitlabMergeCommentEvent(event gitlab.MergeCommentEvent) (baseRepo models.Repo, headRepo models.Repo, user models.User)
ParseGitlabMergeRequest(mr *gitlab.MergeRequest) models.PullRequest
}
type Executor ¶
type Executor interface {
Execute(ctx *CommandContext) CommandResponse
}
Executor is the generic interface implemented by each command type: help, plan, and apply.
type FailureData ¶
type FailureData struct {
Failure string
CommonData
}
FailureData is data about a failure response.
type FileWorkspace ¶
type FileWorkspace struct {
DataDir string
}
FileWorkspace implements Workspace with the file system.
func (*FileWorkspace) Clone ¶
func (w *FileWorkspace) Clone( log *logging.SimpleLogger, baseRepo models.Repo, headRepo models.Repo, p models.PullRequest, env string) (string, error)
Clone git clones headRepo, checks out the branch and then returns the absolute path to the root of the cloned repo.
func (*FileWorkspace) Delete ¶
func (w *FileWorkspace) Delete(r models.Repo, p models.PullRequest) error
Delete deletes the workspace for this repo and pull.
func (*FileWorkspace) GetWorkspace ¶
func (w *FileWorkspace) GetWorkspace(r models.Repo, p models.PullRequest, env string) (string, error)
GetWorkspace returns the path to the workspace for this repo and pull.
type GithubPullGetter ¶ added in v0.2.0
type GithubPullGetter interface {
// GetPullRequest gets the pull request with id pullNum for the repo.
GetPullRequest(repo models.Repo, pullNum int) (*github.PullRequest, error)
}
GithubPullGetter makes API calls to get pull requests.
type GitlabMergeRequestGetter ¶ added in v0.2.0
type GitlabMergeRequestGetter interface {
// GetMergeRequest gets the pull request with the id pullNum for the repo.
GetMergeRequest(repoFullName string, pullNum int) (*gitlab.MergeRequest, error)
}
GitlabMergeRequestGetter makes API calls to get merge requests.
type HelpExecutor ¶
type HelpExecutor struct{}
HelpExecutor executes the help command.
func (*HelpExecutor) Execute ¶
func (h *HelpExecutor) Execute(ctx *CommandContext) CommandResponse
Execute executes the help command.
type Hook ¶
type Hook struct {
Commands []string `yaml:"commands"`
}
Hook represents the commands that can be run at a certain stage.
type LockURLGenerator ¶
type LockURLGenerator interface {
// SetLockURL takes a function that given a lock id, will return a url
// to view that lock.
SetLockURL(func(id string) (url string))
}
LockURLGenerator consumes lock URLs.
type MarkdownRenderer ¶ added in v0.2.0
type MarkdownRenderer struct{}
MarkdownRenderer renders responses as markdown.
func (*MarkdownRenderer) Render ¶ added in v0.2.0
func (g *MarkdownRenderer) Render(res CommandResponse, cmdName CommandName, log string, verbose bool) string
Render formats the data into a markdown string. nolint: interfacer
type PlanExecutor ¶
type PlanExecutor struct {
VCSClient vcs.ClientProxy
Terraform terraform.Runner
Locker locking.Locker
LockURL func(id string) (url string)
Run run.Runner
Workspace Workspace
ProjectPreExecute ProjectPreExecutor
ProjectFinder ProjectFinder
}
PlanExecutor handles everything related to running terraform plan.
func (*PlanExecutor) Execute ¶
func (p *PlanExecutor) Execute(ctx *CommandContext) CommandResponse
Execute executes terraform plan for the ctx.
func (*PlanExecutor) SetLockURL ¶
func (p *PlanExecutor) SetLockURL(f func(id string) (url string))
SetLockURL takes a function that given a lock id, will return a url to view that lock.
type PlanSuccess ¶
PlanSuccess is the result of a successful plan.
type PreExecuteResult ¶
type PreExecuteResult struct {
ProjectResult ProjectResult
ProjectConfig ProjectConfig
TerraformVersion *version.Version
LockResponse locking.TryLockResponse
}
PreExecuteResult is the result of running the pre execute.
type ProjectConfig ¶
type ProjectConfig struct {
// PreInit is a slice of command strings to run prior to terraform init.
PreInit []string
// PreGet is a slice of command strings to run prior to terraform get.
PreGet []string
// PrePlan is a slice of command strings to run prior to terraform plan.
PrePlan []string
// PostPlan is a slice of command strings to run after terraform plan.
PostPlan []string
// PreApply is a slice of command strings to run prior to terraform apply.
PreApply []string
// PostApply is a slice of command strings to run after terraform apply.
PostApply []string
// TerraformVersion is the version specified in the config file or nil
// if version wasn't specified.
TerraformVersion *version.Version
// contains filtered or unexported fields
}
ProjectConfig is a more usable version of projectConfigYAML that we can return to our callers. It holds the config for a project.
func (*ProjectConfig) GetExtraArguments ¶
func (c *ProjectConfig) GetExtraArguments(command string) []string
GetExtraArguments returns the arguments that were specified to be appended to command in the project config file.
type ProjectConfigManager ¶
type ProjectConfigManager struct{}
ProjectConfigManager deals with project config files that users can use to specify additional behaviour around how Atlantis executes for a project.
func (*ProjectConfigManager) Exists ¶
func (c *ProjectConfigManager) Exists(projectPath string) bool
Exists returns true if an atlantis config file exists for the project at projectPath. projectPath is an absolute path to the project.
func (*ProjectConfigManager) Read ¶
func (c *ProjectConfigManager) Read(execPath string) (ProjectConfig, error)
Read attempts to read the project config file for the project at projectPath. NOTE: projectPath is not the path to the actual config file. Returns the parsed ProjectConfig or error if unable to read.
type ProjectConfigReader ¶
type ProjectConfigReader interface {
// Exists returns true if a project config file exists at projectPath.
Exists(projectPath string) bool
// Read attempts to read the project config file for the project at projectPath.
// NOTE: projectPath is not the path to the actual config file, just to the
// project root.
// Returns the parsed ProjectConfig or error if unable to read.
Read(projectPath string) (ProjectConfig, error)
}
ProjectConfigReader implements reading project config.
type ProjectFinder ¶
type ProjectFinder interface {
// FindModified returns the list of projects that were modified based on
// the modifiedFiles. The list will be de-duplicated.
FindModified(log *logging.SimpleLogger, modifiedFiles []string, repoFullName string) []models.Project
}
ProjectFinder determines what are the terraform project(s) within a repo.
type ProjectPreExecutor ¶
type ProjectPreExecutor interface {
// Execute executes the pre plan/apply tasks.
Execute(ctx *CommandContext, repoDir string, project models.Project) PreExecuteResult
}
ProjectPreExecutor executes before the plan and apply executors. It handles the setup tasks that are common to both plan and apply.
type ProjectResult ¶
type ProjectResult struct {
Path string
Error error
Failure string
PlanSuccess *PlanSuccess
ApplySuccess string
}
ProjectResult is the result of executing a plan/apply for a project.
func (ProjectResult) Status ¶
func (p ProjectResult) Status() vcs.CommitStatus
Status returns the vcs commit status of this project result.
type PullCleaner ¶
type PullCleaner interface {
// CleanUpPull deletes the workspaces used by the pull request on disk
// and deletes any locks associated with this pull request for all envs.
CleanUpPull(repo models.Repo, pull models.PullRequest, host vcs.Host) error
}
PullCleaner cleans up pull requests after they're closed/merged.
type PullClosedExecutor ¶
type PullClosedExecutor struct {
Locker locking.Locker
VCSClient vcs.ClientProxy
Workspace Workspace
}
PullClosedExecutor executes the tasks required to clean up a closed pull request.
func (*PullClosedExecutor) CleanUpPull ¶
func (p *PullClosedExecutor) CleanUpPull(repo models.Repo, pull models.PullRequest, host vcs.Host) error
CleanUpPull cleans up after a closed pull request.
type ResultData ¶
type ResultData struct {
Results map[string]string
CommonData
}
ResultData is data about a successful response.
type Workspace ¶
type Workspace interface {
// Clone git clones headRepo, checks out the branch and then returns the
// absolute path to the root of the cloned repo.
Clone(log *logging.SimpleLogger, baseRepo models.Repo, headRepo models.Repo, p models.PullRequest, env string) (string, error)
// GetWorkspace returns the path to the workspace for this repo and pull.
GetWorkspace(r models.Repo, p models.PullRequest, env string) (string, error)
// Delete deletes the workspace for this repo and pull.
Delete(r models.Repo, p models.PullRequest) error
}
Workspace handles the workspace on disk for running commands.
type WorkspaceLocker ¶ added in v0.2.1
type WorkspaceLocker interface {
// TryLock tries to acquire a lock for this repo, env and pull.
TryLock(repoFullName string, env string, pullNum int) bool
// Unlock deletes the lock for this repo, env and pull. If there was no
// lock it will do nothing.
Unlock(repoFullName, env string, pullNum int)
}
WorkspaceLocker is used to prevent multiple commands from executing at the same time for a single repo, pull, and environment. We need to prevent this from happening because a specific repo/pull/env has a single workspace on disk and we haven't written Atlantis (yet) to handle concurrent execution within this workspace.
Source Files
¶
- apply_executor.go
- command_context.go
- command_handler.go
- command_name.go
- command_response.go
- commit_status_updater.go
- env_lock.go
- event_parser.go
- executor.go
- help_executor.go
- markdown_renderer.go
- plan_executor.go
- project_config.go
- project_finder.go
- project_pre_execute.go
- project_result.go
- pull_closed_executor.go
- workspace.go
- workspace_locker.go
Directories
¶
| Path | Synopsis |
|---|---|
|
Package locking handles locking projects when they have in-progress runs.
|
Package locking handles locking projects when they have in-progress runs. |
|
boltdb
Package boltdb provides a locking implementation using Bolt.
|
Package boltdb provides a locking implementation using Bolt. |
|
Package models holds all models that are needed across packages.
|
Package models holds all models that are needed across packages. |
|
Package run handles running commands prior and following the regular Atlantis commands.
|
Package run handles running commands prior and following the regular Atlantis commands. |
|
Package terraform handles the actual running of terraform commands
|
Package terraform handles the actual running of terraform commands |