internal/provider/sdk/variable_helpers.go (29 lines of code) (raw):
package sdk
import (
"context"
"errors"
"fmt"
"net/http"
"strings"
"github.com/hashicorp/terraform-plugin-log/tflog"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"gitlab.com/gitlab-org/api/client-go"
)
func augmentVariableClientError(ctx context.Context, d *schema.ResourceData, err error) diag.Diagnostics {
// Masked values will commonly error due to their strict requirements, and the error message from the GitLab API is not very informative,
// so we return a custom error message in this case.
if d.Get("masked").(bool) && isInvalidValueError(err) {
tflog.Error(ctx, fmt.Sprintf("[ERROR] %v", err))
return diag.Errorf("Invalid value for a masked variable. Check the masked variable requirements: https://docs.gitlab.com/ci/variables/#masked-variable-requirements")
}
if err != nil {
return diag.FromErr(err)
}
return nil
}
func isInvalidValueError(err error) bool {
var httpErr *gitlab.ErrorResponse
return errors.As(err, &httpErr) &&
httpErr.Response.StatusCode == http.StatusBadRequest &&
strings.Contains(httpErr.Message, "value") &&
strings.Contains(httpErr.Message, "invalid")
}