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 }