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