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  }