github.com/go-chef/chef@v0.30.1/policy.go (about)

     1  package chef
     2  
     3  import (
     4  	"fmt"
     5  )
     6  
     7  // PolicyService  is the service for interacting with chef server policies endpoint
     8  type PolicyService struct {
     9  	client *Client
    10  }
    11  
    12  // PolicyGetResponse is returned from the chef-server for Get Requests to /policies
    13  type PoliciesGetResponse map[string]Policy
    14  type Policy struct {
    15  	Uri       string                 `json:"uri,omitempty"`
    16  	Revisions map[string]interface{} `json:"revisions,omitempty"`
    17  }
    18  
    19  // PolicyGetResponse is returned from chef-server for Get Requests to /policies/<policy-name>
    20  type PolicyGetResponse map[string]PolicyRevision
    21  type PolicyRevision map[string]PolicyRevisionDetail
    22  type PolicyRevisionDetail map[string]interface{}
    23  
    24  // RevisionDetailsResponse is returned from the chef-server for Get Requests to /policies/<policy-name>/revisions/<rev-id>
    25  type RevisionDetailsResponse struct {
    26  	RevisionID           string                  `json:"revision_id,omitempty"`
    27  	Name                 string                  `json:"name,omitempty"`
    28  	RunList              []string                `json:"run_list,omitempty"`
    29  	NamedRunList         map[string][]string     `json:"named_run_lists,omitempty"`
    30  	IncludedPolicyLocks  []IncludedPolicyLocks   `json:"included_policy_locks,omitempty"`
    31  	CookbookLocks        map[string]CookbookLock `json:"cookbook_locks,omitempty"`
    32  	DefaultAttributes    map[string]interface{}  `json:"default_attributes,omitempty"`
    33  	OverrideAttributes   map[string]interface{}  `json:"override_attributes,omitempty"`
    34  	SolutionDependencies SolutionDep             `json:"solution_dependencies,omitempty"`
    35  }
    36  
    37  // IncludedPolicyLocks are the included policies locks
    38  type IncludedPolicyLocks struct {
    39  	Name          string            `json:"name,omitempty"`
    40  	RevisionID    string            `json:"revision_id,omitempty"`
    41  	SourceOptions map[string]string `json:"source_options,omitempty"`
    42  }
    43  
    44  type CookbookLock struct {
    45  	Version          string            `json:"version,omitempty"`
    46  	Identifier       string            `json:"identifier,omitempty"`
    47  	DottedIdentifier string            `json:"dotted_decimal_identifier,omitempty"`
    48  	Origin           string            `json:"origin,omitempty"`
    49  	Source           string            `json:"source,omitempty"`
    50  	CacheKey         string            `json:"cache_key,omitempty"`
    51  	SCM              SCMDetail         `json:"scm_info,omitempty"`
    52  	SourceOptions    map[string]string `json:"source_options,omitempty"`
    53  }
    54  type SCMDetail struct {
    55  	Name                       string   `json:"scm,omitempty"`
    56  	Remote                     string   `json:"remote,omitempty"`
    57  	Revision                   string   `json:"revision,omitempty"`
    58  	WorkingTreeClean           bool     `json:"working_tree_clean,omitempty"`
    59  	Published                  bool     `json:"published,omitempty"`
    60  	SynchronizedRemoteBranches []string `json:"synchronized_remote_branches,omitempty"`
    61  }
    62  type SolutionDep struct {
    63  	PolicyFile   [][]string  `json:"Policyfile,omitempty"`
    64  	Dependencies interface{} `json:"dependencies,omitempty"`
    65  }
    66  
    67  // List lists the policies in the Chef server.
    68  // Chef API docs: https://docs.chef.io/api_chef_server/#policies
    69  // GET /policies
    70  func (c *PolicyService) List() (data PoliciesGetResponse, err error) {
    71  	err = c.client.magicRequestDecoder("GET", "policies", nil, &data)
    72  	return
    73  }
    74  
    75  // Get returns details for a specific policy
    76  //
    77  //	GET /policies/name
    78  func (c *PolicyService) Get(name string) (data PolicyGetResponse, err error) {
    79  	path := fmt.Sprintf("policies/%s", name)
    80  	err = c.client.magicRequestDecoder("GET", path, nil, &data)
    81  	return
    82  }
    83  
    84  // Delete deletes a policy
    85  //
    86  //	DELETE /policies/name
    87  func (c *PolicyService) Delete(policyName string) (data PolicyGetResponse, err error) {
    88  	path := fmt.Sprintf("policies/%s", policyName)
    89  	err = c.client.magicRequestDecoder("DELETE", path, nil, &data)
    90  	return
    91  }
    92  
    93  // GetRevisionDetails returns details of a specific revision from Chef Server
    94  //
    95  //	GET /policies/<policy-name>/revisions/<revision-id>
    96  func (c *PolicyService) GetRevisionDetails(policyName string, revisionID string) (data RevisionDetailsResponse, err error) {
    97  	path := fmt.Sprintf("policies/%s/revisions/%s", policyName, revisionID)
    98  	err = c.client.magicRequestDecoder("GET", path, nil, &data)
    99  	return
   100  }
   101  
   102  // DeleteRevision deletes a revisiom from a policy
   103  //
   104  //	GET /policies/<policy-name>/revisions/<revision-id>
   105  func (c *PolicyService) DeleteRevision(policyName string, revisionID string) (data RevisionDetailsResponse, err error) {
   106  	path := fmt.Sprintf("policies/%s/revisions/%s", policyName, revisionID)
   107  	err = c.client.magicRequestDecoder("DELETE", path, nil, &data)
   108  	return
   109  }
   110  
   111  // TODO: Add these methods
   112  // POST  policies/policy-name/revisions