diff --git a/internal/clients/github.go b/internal/clients/github.go index d53372c..e52e96f 100644 --- a/internal/clients/github.go +++ b/internal/clients/github.go @@ -40,6 +40,9 @@ const ( keyAppAuthPemFile = "pem_file" keyWriteDelayMs = "write_delay_ms" keyReadDelayMs = "read_delay_ms" + keyRetryDelayMs = "retry_delay_ms" + keyMaxRetries = "max_retries" + keyRetryableErrors = "retryable_errors" ) type appAuth struct { @@ -49,22 +52,19 @@ type appAuth struct { } type githubConfig struct { - BaseURL *string `json:"base_url,omitempty"` - Owner *string `json:"owner,omitempty"` - Token *string `json:"token,omitempty"` - AppAuth *[]appAuth `json:"app_auth,omitempty"` - WriteDelayMs *int `json:"write_delay_ms,omitempty"` - ReadDelayMs *int `json:"read_delay_ms,omitempty"` + BaseURL *string `json:"base_url,omitempty"` + Owner *string `json:"owner,omitempty"` + Token *string `json:"token,omitempty"` + AppAuth *[]appAuth `json:"app_auth,omitempty"` + WriteDelayMs *int `json:"write_delay_ms,omitempty"` + ReadDelayMs *int `json:"read_delay_ms,omitempty"` + RetryDelayMs *int `json:"retry_delay_ms,omitempty"` + MaxRetries *int `json:"max_retries,omitempty"` + RetryableErrors []int `json:"retryable_errors,omitempty"` } -func terraformProviderConfigurationBuilder(creds githubConfig) (terraform.ProviderConfiguration, error) { - - cnf := terraform.ProviderConfiguration{} - - if creds.BaseURL != nil { - cnf[keyBaseURL] = *creds.BaseURL - } - +// setCredentialConfigs will add credential type fields (Owner, Token, AppAuth) to terraform providerConfiguration +func setCredentialConfigs(creds githubConfig, cnf terraform.ProviderConfiguration) (terraform.ProviderConfiguration, error) { if creds.Owner != nil { cnf[keyOwner] = *creds.Owner } @@ -90,6 +90,11 @@ func terraformProviderConfigurationBuilder(creds githubConfig) (terraform.Provid cnf[keyAppAuth] = aaList } + return cnf, nil +} + +// setParameterConfigs will add configuration type fields (WriteDelayMs, ReadDelayMs, RetryDelayMs, MaxRetries, RetryableErrors) to terraform providerConfiguration +func setParameterConfigs(creds githubConfig, cnf terraform.ProviderConfiguration) terraform.ProviderConfiguration { if creds.WriteDelayMs != nil { cnf[keyWriteDelayMs] = *creds.WriteDelayMs } @@ -98,6 +103,36 @@ func terraformProviderConfigurationBuilder(creds githubConfig) (terraform.Provid cnf[keyReadDelayMs] = *creds.ReadDelayMs } + if creds.RetryDelayMs != nil { + cnf[keyRetryDelayMs] = *creds.RetryDelayMs + } + + if creds.MaxRetries != nil { + cnf[keyMaxRetries] = *creds.MaxRetries + } + + if creds.RetryableErrors != nil { + cnf[keyRetryableErrors] = creds.RetryableErrors + } + + return cnf +} + +func terraformProviderConfigurationBuilder(creds githubConfig) (terraform.ProviderConfiguration, error) { + + cnf := terraform.ProviderConfiguration{} + + if creds.BaseURL != nil { + cnf[keyBaseURL] = *creds.BaseURL + } + + cnf, err := setCredentialConfigs(creds, cnf) + if err != nil { + return cnf, errors.Errorf(errTerraformProviderMissingOwner) + } + + cnf = setParameterConfigs(creds, cnf) + return cnf, nil }