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

     1  // Test the go-chef/chef chef server api /organizations/*/cookbooks endpoints against a live chef server
     2  package testapi
     3  
     4  import (
     5  	"fmt"
     6  	"os"
     7  	"os/exec"
     8  )
     9  
    10  // cookbook exercise the chef server api
    11  func Cookbook() {
    12  	// Create a client for user access
    13  	client := Client(nil)
    14  
    15  	// Prep by adding a couple versions of some cookbooks before running this code
    16  	err := addSampleCookbooks()
    17  	// testbook version 0.1.0 and 0.2.0
    18  	// sampbook version 0.1.0 and 0.2.0
    19  
    20  	fmt.Println("Starting cookbooks")
    21  	// Cookbooks
    22  	cookList, err := client.Cookbooks.List()
    23  	if err != nil {
    24  		fmt.Fprintln(os.Stderr, "Issue listing cookbooks:", err)
    25  	}
    26  	fmt.Printf("List initial cookbooks %+v\nEndInitialList\n", cookList)
    27  
    28  	// cookbook GET info
    29  	testbook, err := client.Cookbooks.Get("testbook")
    30  	if err != nil {
    31  		fmt.Fprintln(os.Stderr, "Issue getting cookbook testbook:", err)
    32  	}
    33  	fmt.Printf("Get cookbook testbook %+v\n", testbook)
    34  
    35  	// GET missing cookbook
    36  	nothere, err := client.Cookbooks.Get("nothere")
    37  	if err != nil {
    38  		fmt.Fprintln(os.Stderr, "Issue getting cookbook nothere:", err)
    39  	} else {
    40  		fmt.Printf("Get cookbook nothere %+v\n", nothere)
    41  	}
    42  
    43  	// list available versions of a cookbook
    44  	testbookversions, err := client.Cookbooks.GetAvailableVersions("testbook", "0")
    45  	if err != nil {
    46  		fmt.Fprintln(os.Stderr, "Issue getting cookbook versions for testbook:", err)
    47  	}
    48  	fmt.Printf("Get cookbook versions testbook %+v\n", testbookversions)
    49  
    50  	// list available versions of a cookbook
    51  	sampbookversions, err := client.Cookbooks.GetAvailableVersions("sampbook", "0")
    52  	if err != nil {
    53  		fmt.Fprintln(os.Stderr, "Issue getting cookbook versions for sampbook:", err)
    54  	}
    55  	fmt.Printf("Get cookbook versions sampbook %+v\n", sampbookversions)
    56  
    57  	// get specific versions of a cookbook
    58  	testbookv1, err := client.Cookbooks.GetVersion("testbook", "0.1.0")
    59  	if err != nil {
    60  		fmt.Fprintln(os.Stderr, "Issue getting specific cookbook version for testbook:", err)
    61  	}
    62  	fmt.Printf("Get specific cookbook version testbook %+v\n", testbookv1)
    63  
    64  	// list all recipes
    65  	allRecipes, err := client.Cookbooks.ListAllRecipes()
    66  	if err != nil {
    67  		fmt.Fprintln(os.Stderr, "Issue getting all recipes:", err)
    68  	}
    69  	fmt.Printf("Get all recipes %+v\n", allRecipes)
    70  
    71  	// Verify the returned cookbook  metadata
    72  	if len(testbookv1.Metadata.Gems) != 1 {
    73  		fmt.Fprintln(os.Stderr, "No gems found for cookbook testbook")
    74  	}
    75  	if len(testbookv1.Metadata.Gems) != 1 || len(testbookv1.Metadata.Gems[0]) != 2 {
    76  		fmt.Fprintln(os.Stderr, "gem json not found for cookbook testbook")
    77  	}
    78  
    79  	// delete version
    80  	err = client.Cookbooks.Delete("testbook", "0.1.0")
    81  	if err != nil {
    82  		fmt.Fprintln(os.Stderr, "Issue deleting testbook 0.1.0:", err)
    83  	}
    84  	fmt.Printf("Delete testbook 0.1.0 %+v\n", err)
    85  
    86  	// delete version
    87  	err = client.Cookbooks.Delete("testbook", "0.2.0")
    88  	if err != nil {
    89  		fmt.Fprintln(os.Stderr, "Issue deleting testbook 0.2.0:", err)
    90  	}
    91  	fmt.Printf("Delete testbook 0.2.0 %+v\n", err)
    92  
    93  	// List cookbooks
    94  	cookList, err = client.Cookbooks.List()
    95  	if err != nil {
    96  		fmt.Fprintln(os.Stderr, "Issue listing cookbooks:", err)
    97  	}
    98  	fmt.Printf("Final cookbook list %+v\n", cookList)
    99  
   100  	// list available versions of a cookbook
   101  	sampbookversions, err = client.Cookbooks.GetAvailableVersions("sampbook", "0")
   102  	if err != nil {
   103  		fmt.Fprintln(os.Stderr, "Issue getting cookbook versions for sampbook:", err)
   104  	}
   105  	fmt.Printf("Final cookbook versions sampbook %+v\n", sampbookversions)
   106  
   107  }
   108  
   109  func addSampleCookbooks() (err error) {
   110  	cmd := exec.Command("/opt/opscode/bin/knife", "cookbook", "upload", "sampbook", "testbook", "-c", "/go/src/testapi/bin/knife.rb", "-o", "/fixtures/chef/cb/0.1.0")
   111  	out, err := cmd.CombinedOutput()
   112  	if err != nil {
   113  		fmt.Fprintln(os.Stderr, "Issue loading cookbook:", err)
   114  	}
   115  	fmt.Printf("Load 0.1.0 cookbook versions: %+v", string(out))
   116  	cmd = exec.Command("/opt/opscode/bin/knife", "cookbook", "upload", "sampbook", "testbook", "-c", "/go/src/testapi/bin/knife.rb", "-o", "/fixtures/chef/cb/0.2.0")
   117  	out, err = cmd.CombinedOutput()
   118  	if err != nil {
   119  		fmt.Fprintln(os.Stderr, "Issue loading cookbook:", err)
   120  	}
   121  	fmt.Printf("Load 0.2.0 cookbook versions: %+v", string(out))
   122  	return
   123  }