github.com/go-chef/chef@v0.30.1/databag.go (about) 1 package chef 2 3 import "fmt" 4 5 // DataBagService is the service for interacting with the chef server data endpoint 6 type DataBagService struct { 7 client *Client 8 } 9 10 // DataBagItem is a data bag item 11 type DataBagItem interface{} 12 13 // DataBag is a data bag 14 type DataBag struct { 15 Name string `json:"name"` 16 JsonClass string `json:"json_class"` 17 ChefType string `json:"chef_type"` 18 } 19 20 type DataBagCreateResult struct { 21 URI string `json:"uri"` 22 } 23 24 // DataBagListResult is the list of data bags returned by chef-api when listing 25 // https://docs.chef.io/api_chef_server/#data 26 type DataBagListResult map[string]string 27 28 // String makes DataBagListResult implement the string result 29 func (d DataBagListResult) String() (out string) { 30 for k, v := range d { 31 out += fmt.Sprintf("%s => %s\n", k, v) 32 } 33 return out 34 } 35 36 // List returns a list of databags on the server 37 // 38 // Chef API Docs: https://docs.chef.io/api_chef_server/#get-19 39 func (d *DataBagService) List() (data *DataBagListResult, err error) { 40 path := fmt.Sprintf("data") 41 err = d.client.magicRequestDecoder("GET", path, nil, &data) 42 return 43 } 44 45 // Create adds a data bag to the server 46 // 47 // Chef API Docs: https://docs.chef.io/api_chef_server/#post-7 48 func (d *DataBagService) Create(databag *DataBag) (result *DataBagCreateResult, err error) { 49 body, err := JSONReader(databag) 50 if err != nil { 51 return 52 } 53 54 err = d.client.magicRequestDecoder("POST", "data", body, &result) 55 return 56 } 57 58 // Delete removes a data bag from the server 59 // 60 // Chef API Docs: https://docs.chef.io/api_chef_server/#delete-7 61 func (d *DataBagService) Delete(name string) (result *DataBag, err error) { 62 path := fmt.Sprintf("data/%s", name) 63 err = d.client.magicRequestDecoder("DELETE", path, nil, &result) 64 return 65 } 66 67 // ListItems gets a list of the items in a data bag. 68 // 69 // Chef API Docs: https://docs.chef.io/api_chef_server/#get-20 70 func (d *DataBagService) ListItems(name string) (data *DataBagListResult, err error) { 71 path := fmt.Sprintf("data/%s", name) 72 err = d.client.magicRequestDecoder("GET", path, nil, &data) 73 return 74 } 75 76 // CreateItem adds an item to a data bag 77 // 78 // Chef API Docs: https://docs.chef.io/api_chef_server/#post-8 79 func (d *DataBagService) CreateItem(databagName string, databagItem DataBagItem) (err error) { 80 body, err := JSONReader(databagItem) 81 if err != nil { 82 return 83 } 84 path := fmt.Sprintf("data/%s", databagName) 85 return d.client.magicRequestDecoder("POST", path, body, nil) 86 } 87 88 // DeleteItem deletes an item from a data bag 89 // 90 // Chef API Docs: https://docs.chef.io/api_chef_server/#delete-8 91 func (d *DataBagService) DeleteItem(databagName string, databagItem string) (err error) { 92 path := fmt.Sprintf("data/%s/%s", databagName, databagItem) 93 err = d.client.magicRequestDecoder("DELETE", path, nil, nil) 94 return 95 } 96 97 // GetItem gets an item from a data bag 98 // 99 // Chef API Docs: https://docs.chef.io/api_chef_server/#get-21 100 func (d *DataBagService) GetItem(databagName string, databagItem string) (item DataBagItem, err error) { 101 path := fmt.Sprintf("data/%s/%s", databagName, databagItem) 102 err = d.client.magicRequestDecoder("GET", path, nil, &item) 103 return 104 } 105 106 // UpdateItem updates an item in a data bag 107 // 108 // Chef API Docs: https://docs.chef.io/api_chef_server/#put-6 109 func (d *DataBagService) UpdateItem(databagName string, databagItemId string, databagItem DataBagItem) (err error) { 110 body, err := JSONReader(databagItem) 111 if err != nil { 112 return 113 } 114 path := fmt.Sprintf("data/%s/%s", databagName, databagItemId) 115 return d.client.magicRequestDecoder("PUT", path, body, nil) 116 }