231 lines
6.6 KiB
Go
231 lines
6.6 KiB
Go
package tfe
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"net/url"
|
|
)
|
|
|
|
// Compile-time proof of interface implementation.
|
|
var _ PolicySetParameters = (*policySetParameters)(nil)
|
|
|
|
// PolicySetParameters describes all the parameter related methods that the Terraform
|
|
// Enterprise API supports.
|
|
//
|
|
// TFE API docs: https://www.terraform.io/docs/enterprise/api/policy-set-params.html
|
|
type PolicySetParameters interface {
|
|
// List all the parameters associated with the given policy-set.
|
|
List(ctx context.Context, policySetID string, options PolicySetParameterListOptions) (*PolicySetParameterList, error)
|
|
|
|
// Create is used to create a new parameter.
|
|
Create(ctx context.Context, policySetID string, options PolicySetParameterCreateOptions) (*PolicySetParameter, error)
|
|
|
|
// Read a parameter by its ID.
|
|
Read(ctx context.Context, policySetID string, parameterID string) (*PolicySetParameter, error)
|
|
|
|
// Update values of an existing parameter.
|
|
Update(ctx context.Context, policySetID string, parameterID string, options PolicySetParameterUpdateOptions) (*PolicySetParameter, error)
|
|
|
|
// Delete a parameter by its ID.
|
|
Delete(ctx context.Context, policySetID string, parameterID string) error
|
|
}
|
|
|
|
// policySetParameters implements Parameters.
|
|
type policySetParameters struct {
|
|
client *Client
|
|
}
|
|
|
|
// PolicySetParameterList represents a list of parameters.
|
|
type PolicySetParameterList struct {
|
|
*Pagination
|
|
Items []*PolicySetParameter
|
|
}
|
|
|
|
// PolicySetParameter represents a Policy Set parameter
|
|
type PolicySetParameter struct {
|
|
ID string `jsonapi:"primary,vars"`
|
|
Key string `jsonapi:"attr,key"`
|
|
Value string `jsonapi:"attr,value"`
|
|
Category CategoryType `jsonapi:"attr,category"`
|
|
Sensitive bool `jsonapi:"attr,sensitive"`
|
|
|
|
// Relations
|
|
PolicySet *PolicySet `jsonapi:"relation,configurable"`
|
|
}
|
|
|
|
// PolicySetParameterListOptions represents the options for listing parameters.
|
|
type PolicySetParameterListOptions struct {
|
|
ListOptions
|
|
}
|
|
|
|
func (o PolicySetParameterListOptions) valid() error {
|
|
return nil
|
|
}
|
|
|
|
// List all the parameters associated with the given policy-set.
|
|
func (s *policySetParameters) List(ctx context.Context, policySetID string, options PolicySetParameterListOptions) (*PolicySetParameterList, error) {
|
|
if !validStringID(&policySetID) {
|
|
return nil, errors.New("invalid value for policy set ID")
|
|
}
|
|
if err := options.valid(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
u := fmt.Sprintf("policy-sets/%s/parameters", policySetID)
|
|
req, err := s.client.newRequest("GET", u, &options)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
vl := &PolicySetParameterList{}
|
|
err = s.client.do(ctx, req, vl)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return vl, nil
|
|
}
|
|
|
|
// PolicySetParameterCreateOptions represents the options for creating a new parameter.
|
|
type PolicySetParameterCreateOptions struct {
|
|
// For internal use only!
|
|
ID string `jsonapi:"primary,vars"`
|
|
|
|
// The name of the parameter.
|
|
Key *string `jsonapi:"attr,key"`
|
|
|
|
// The value of the parameter.
|
|
Value *string `jsonapi:"attr,value,omitempty"`
|
|
|
|
// The Category of the parameter, should always be "policy-set"
|
|
Category *CategoryType `jsonapi:"attr,category"`
|
|
|
|
// Whether the value is sensitive.
|
|
Sensitive *bool `jsonapi:"attr,sensitive,omitempty"`
|
|
}
|
|
|
|
func (o PolicySetParameterCreateOptions) valid() error {
|
|
if !validString(o.Key) {
|
|
return errors.New("key is required")
|
|
}
|
|
if o.Category == nil {
|
|
return errors.New("category is required")
|
|
}
|
|
if *o.Category != CategoryPolicySet {
|
|
return errors.New("category must be policy-set")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Create is used to create a new parameter.
|
|
func (s *policySetParameters) Create(ctx context.Context, policySetID string, options PolicySetParameterCreateOptions) (*PolicySetParameter, error) {
|
|
if !validStringID(&policySetID) {
|
|
return nil, errors.New("invalid value for policy set ID")
|
|
}
|
|
if err := options.valid(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Make sure we don't send a user provided ID.
|
|
options.ID = ""
|
|
|
|
u := fmt.Sprintf("policy-sets/%s/parameters", url.QueryEscape(policySetID))
|
|
req, err := s.client.newRequest("POST", u, &options)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
p := &PolicySetParameter{}
|
|
err = s.client.do(ctx, req, p)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return p, nil
|
|
}
|
|
|
|
// Read a parameter by its ID.
|
|
func (s *policySetParameters) Read(ctx context.Context, policySetID string, parameterID string) (*PolicySetParameter, error) {
|
|
if !validStringID(&policySetID) {
|
|
return nil, errors.New("invalid value for policy set ID")
|
|
}
|
|
if !validStringID(¶meterID) {
|
|
return nil, errors.New("invalid value for parameter ID")
|
|
}
|
|
|
|
u := fmt.Sprintf("policy-sets/%s/parameters/%s", url.QueryEscape(policySetID), url.QueryEscape(parameterID))
|
|
req, err := s.client.newRequest("GET", u, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
p := &PolicySetParameter{}
|
|
err = s.client.do(ctx, req, p)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return p, err
|
|
}
|
|
|
|
// PolicySetParameterUpdateOptions represents the options for updating a parameter.
|
|
type PolicySetParameterUpdateOptions struct {
|
|
// For internal use only!
|
|
ID string `jsonapi:"primary,vars"`
|
|
|
|
// The name of the parameter.
|
|
Key *string `jsonapi:"attr,key,omitempty"`
|
|
|
|
// The value of the parameter.
|
|
Value *string `jsonapi:"attr,value,omitempty"`
|
|
|
|
// Whether the value is sensitive.
|
|
Sensitive *bool `jsonapi:"attr,sensitive,omitempty"`
|
|
}
|
|
|
|
// Update values of an existing parameter.
|
|
func (s *policySetParameters) Update(ctx context.Context, policySetID string, parameterID string, options PolicySetParameterUpdateOptions) (*PolicySetParameter, error) {
|
|
if !validStringID(&policySetID) {
|
|
return nil, errors.New("invalid value for policy set ID")
|
|
}
|
|
if !validStringID(¶meterID) {
|
|
return nil, errors.New("invalid value for parameter ID")
|
|
}
|
|
|
|
// Make sure we don't send a user provided ID.
|
|
options.ID = parameterID
|
|
|
|
u := fmt.Sprintf("policy-sets/%s/parameters/%s", url.QueryEscape(policySetID), url.QueryEscape(parameterID))
|
|
req, err := s.client.newRequest("PATCH", u, &options)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
p := &PolicySetParameter{}
|
|
err = s.client.do(ctx, req, p)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return p, nil
|
|
}
|
|
|
|
// Delete a parameter by its ID.
|
|
func (s *policySetParameters) Delete(ctx context.Context, policySetID string, parameterID string) error {
|
|
if !validStringID(&policySetID) {
|
|
return errors.New("invalid value for policy set ID")
|
|
}
|
|
if !validStringID(¶meterID) {
|
|
return errors.New("invalid value for parameter ID")
|
|
}
|
|
|
|
u := fmt.Sprintf("policy-sets/%s/parameters/%s", url.QueryEscape(policySetID), url.QueryEscape(parameterID))
|
|
req, err := s.client.newRequest("DELETE", u, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return s.client.do(ctx, req, nil)
|
|
}
|