Skip to content

Commit

Permalink
Merge pull request #70 from silinternational/develop
Browse files Browse the repository at this point in the history
Release 3.5.1 - Better error handling in GetVarsFromWorkspace
  • Loading branch information
briskt authored Aug 31, 2023
2 parents e3f66d8 + 511e25f commit b934b3b
Showing 1 changed file with 31 additions and 5 deletions.
36 changes: 31 additions & 5 deletions lib/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,21 @@ func GetUpdateVariablePayload(organization, workspaceName, variableID string, tf
`, variableID, tfVar.Key, tfVar.Value, tfVar.Hcl, tfVar.Sensitive, organization, workspaceName)
}

// OrganizationExists returns whether an organization with the given name exists
func OrganizationExists(organization string) (bool, error) {
if organization == "" {
return false, fmt.Errorf("OrganizationExists: organization is required")
}
u := NewTfcUrl("/organizations/" + organization)

resp := callAPI(http.MethodGet, u.String(), "", nil)

defer resp.Body.Close()

// Status 200 indicates the organization exists
return resp.StatusCode == http.StatusOK, nil
}

// GetAllWorkspaces retrieves all workspaces from Terraform Cloud and returns a list of Workspace objects
func GetAllWorkspaces(organization string) ([]Workspace, error) {
u := NewTfcUrl(fmt.Sprintf("/organizations/%s/workspaces", organization))
Expand All @@ -322,7 +337,7 @@ func GetAllWorkspaces(organization string) ([]Workspace, error) {
u.SetParam(paramPageNumber, strconv.Itoa(page))
nextWsData, err := getWorkspacePage(u.String())
if err != nil {
return []Workspace{}, fmt.Errorf("error getting workspace data for %s: %s", organization, err)
return nil, fmt.Errorf("error getting workspace data for %s: %s", organization, err)
}
allWsData = append(allWsData, nextWsData.Data...)

Expand Down Expand Up @@ -395,6 +410,17 @@ func GetWorkspaceVar(organization, wsName, key string) (*Var, error) {

// GetVarsFromWorkspace returns a list of Terraform variables for a given workspace
func GetVarsFromWorkspace(organization, workspaceName string) ([]Var, error) {
orgExists, err := OrganizationExists(organization)
if err != nil {
return nil, fmt.Errorf("GetVarsFromWorkspace: organization is required: %w", err)
} else if !orgExists {
return nil, fmt.Errorf("GetVarsFromWorkspace: invalid organization %s", organization)
}

if workspaceName == "" {
return nil, fmt.Errorf("GetVarsFromWorkspace: workspace is required")
}

u := NewTfcUrl("/vars")
u.SetParam(paramFilterOrganizationName, organization)
u.SetParam(paramFilterWorkspaceName, workspaceName)
Expand All @@ -408,7 +434,7 @@ func GetVarsFromWorkspace(organization, workspaceName string) ([]Var, error) {
var varsResp VarsResponse

if err := json.NewDecoder(resp.Body).Decode(&varsResp); err != nil {
return []Var{}, fmt.Errorf("Error getting variables for %s:%s ...\n%s", organization, workspaceName, err.Error())
return nil, fmt.Errorf("Error getting variables for %s:%s ...\n%s", organization, workspaceName, err.Error())
}

variables := []Var{}
Expand Down Expand Up @@ -452,7 +478,7 @@ func SearchVariables(organization, wsName, keyContains, valueContains string) ([
vars, err := GetVarsFromWorkspace(organization, wsName)
if err != nil {
err := fmt.Errorf("Error getting variables for %s:%s\n%s", organization, wsName, err.Error())
return []Var{}, err
return nil, err
}

var wsVars []Var
Expand Down Expand Up @@ -735,12 +761,12 @@ func RunTFInit(oc OpsConfig, tfToken, tfTokenDestination string) error {
func CloneWorkspace(cfg CloneConfig) ([]string, error) {
sourceWsData, err := GetWorkspaceData(cfg.Organization, cfg.SourceWorkspace)
if err != nil {
return []string{}, err
return nil, err
}

variables, err := GetVarsFromWorkspace(cfg.Organization, cfg.SourceWorkspace)
if err != nil {
return []string{}, err
return nil, err
}

if !cfg.DifferentDestinationAccount {
Expand Down

0 comments on commit b934b3b

Please sign in to comment.