github.com/go-chef/chef@v0.30.1/testapi/search.go (about) 1 package testapi 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "os" 7 "time" 8 9 "github.com/go-chef/chef" 10 ) 11 12 // search exercise the chef api 13 func Search() { 14 // Add nodes 15 client := Client(nil) 16 addNodes(client) 17 // Give the nodes time to end up in all of the data bases. An immediate search will show no nodes 18 time.Sleep(10 * time.Second) 19 20 // List Indexes 21 indexes, err := client.Search.Indexes() 22 if err != nil { 23 fmt.Fprintln(os.Stderr, "Issue listing indexes ", err) 24 } 25 fmt.Printf("List indexes %+v EndIndex\n", indexes) 26 27 // build an invalid seach query 28 query, err := client.Search.NewQuery("node", "name") 29 if err != nil { 30 fmt.Fprintln(os.Stderr, "Issue building invalid query", err) 31 } 32 33 // build a seach query 34 query, err = client.Search.NewQuery("node", "name:node*") 35 query.Rows = 2 36 if err != nil { 37 fmt.Fprintln(os.Stderr, "Issue building query ", err) 38 } 39 fmt.Printf("List new query %+v\n", query) 40 41 // Run the query 42 res, err := query.Do(client) 43 if err != nil { 44 fmt.Fprintln(os.Stderr, "Issue running query ", err) 45 } 46 fmt.Printf("List nodes from query %+v\n", res) 47 48 // Run the query, JSON output 49 jres, err := query.DoJSON(client) 50 if err != nil { 51 fmt.Fprintln(os.Stderr, "Issue running query ", err) 52 } 53 fmt.Printf("List nodes from query JSON format %+v\n", jres) 54 55 // Get the next page of results 56 fmt.Printf("Query after the call %+v\n", query) 57 query.Start = query.Start + query.Rows 58 res, err = query.Do(client) 59 if err != nil { 60 fmt.Fprintln(os.Stderr, "Issue running 2nd query ", err) 61 } 62 fmt.Printf("List 2nd set of nodes from query %+v\n", res) 63 64 // Get the next page of results again, in JSON format 65 query.Start = query.Start - query.Rows 66 jres, err = query.DoJSON(client) 67 if err != nil { 68 fmt.Fprintln(os.Stderr, "Issue running 2nd query ", err) 69 } 70 fmt.Printf("List 2nd set of nodes from query JSON format %+v\n", jres) 71 72 // You can also use the service to run a query 73 res, err = client.Search.Exec("node", "name:node1") 74 if err != nil { 75 fmt.Fprintln(os.Stderr, "Issue running Search.Exec() ", err) 76 } 77 fmt.Printf("List nodes from Exec query %+v\n", res) 78 // dump out results back in json as an example 79 fmt.Println("JSON output example") 80 jsonData, err := json.MarshalIndent(res, "", "\t") 81 os.Stdout.Write(jsonData) 82 os.Stdout.WriteString("\n") 83 84 res, err = client.Search.Exec("node", "name:*") 85 if err != nil { 86 fmt.Fprintln(os.Stderr, "Issue running Search.Exec() ", err) 87 } 88 fmt.Printf("List nodes from all nodes Exec query %+v\n", res) 89 90 // You can also use the service to run a query JSON Format 91 jres, err = client.Search.ExecJSON("node", "name:node1") 92 if err != nil { 93 fmt.Fprintln(os.Stderr, "Issue running Search.Exec() ", err) 94 } 95 fmt.Printf("List nodes from Exec query JSON format %+v\n", jres) 96 // dump out results back in json as an example 97 fmt.Println("JSON output example") 98 os.Stdout.WriteString("\n") 99 100 jres, err = client.Search.ExecJSON("node", "name:*") 101 if err != nil { 102 fmt.Fprintln(os.Stderr, "Issue running Search.Exec() ", err) 103 } 104 fmt.Printf("List nodes from all nodes Exec query JSON format %+v\n", jres) 105 106 // Partial search 107 part := make(map[string]interface{}) 108 part["name"] = []string{"name"} 109 jpres, err := client.Search.PartialExecJSON("node", "*:*", part) 110 if err != nil { 111 fmt.Fprintln(os.Stderr, "Issue running Search.PartialExec()", err) 112 } 113 fmt.Printf("List nodes from partial search %+v\n", jpres) 114 115 // Partial search JSON format 116 part = make(map[string]interface{}) 117 part["name"] = []string{"name"} 118 jpres, err = client.Search.PartialExecJSON("node", "*:*", part) 119 if err != nil { 120 fmt.Fprintln(os.Stderr, "Issue running Search.PartialExec()", err) 121 } 122 fmt.Printf("List nodes from partial search JSON format %+v\n", jpres) 123 for i, row := range jpres.Rows { 124 fmt.Fprintf(os.Stdout, "Partial search JSON format row: %v rawjson: %v\n", i, string(row.Data)) 125 } 126 127 // Clean up nodes 128 deleteNodes(client) 129 } 130 131 func addNodes(client *chef.Client) { 132 for i := 0; i < 2; i++ { 133 node := chef.NewNode("node" + fmt.Sprintf("%d", i)) 134 _, err := client.Nodes.Post(node) 135 if err != nil { 136 fmt.Fprintln(os.Stderr, "Issue adding node", node, err) 137 } 138 bode := chef.NewNode("bode" + fmt.Sprintf("%d", i)) 139 _, err = client.Nodes.Post(bode) 140 if err != nil { 141 fmt.Fprintln(os.Stderr, "Issue adding node", node, err) 142 } 143 } 144 return 145 } 146 147 func deleteNodes(client *chef.Client) { 148 for i := 0; i < 2; i++ { 149 err := client.Nodes.Delete("node" + fmt.Sprintf("%d", i)) 150 if err != nil { 151 fmt.Fprintln(os.Stderr, "Issue deleting node", err) 152 } 153 err = client.Nodes.Delete("bode" + fmt.Sprintf("%d", i)) 154 if err != nil { 155 fmt.Fprintln(os.Stderr, "Issue deleting node", err) 156 } 157 } 158 return 159 }