github.com/go-chef/chef@v0.30.1/testapi/clientkey.go (about) 1 // Test the go-chef/chef chef server api /clients/CLIENTNAME/keys endpoints against a live chef server 2 package testapi 3 4 import ( 5 "fmt" 6 "github.com/go-chef/chef" 7 "os" 8 "strings" 9 ) 10 11 // clientkey exercise the chef server api 12 func Clientkey() { 13 client := Client(nil) 14 15 // Create a new private key when adding the client 16 clnt1 := chef.ApiNewClient{ 17 ClientName: "clnt1", 18 CreateKey: true, 19 } 20 // CreateKey not specified 21 clnt3 := chef.ApiNewClient{ 22 ClientName: "clnt3", 23 } 24 25 _ = createClient(client, clnt1) 26 fmt.Printf("Add clnt1\n") 27 _ = createClient(client, clnt3) 28 fmt.Printf("Add clnt3\n") 29 30 // Client Keys 31 clientkeys := listClientKeys(client, "clnt1") 32 fmt.Printf("List initial client clnt1 keys %+v\n", clientkeys) 33 clientkeys = listClientKeys(client, "clnt3") 34 fmt.Printf("List initial client clnt3 keys %+v\n", clientkeys) 35 36 // Add a key to a client 37 keyadd := chef.AccessKey{ 38 Name: "newkey", 39 PublicKey: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoYyN0AIhUh7Fw1+gQtR+ \n0/HY3625IUlVheoUeUz3WnsTrUGSSS4fHvxUiCJlNni1sQvcJ0xC9Bw3iMz7YVFO\nWz5SeKmajqKEnNywN8/NByZhhlLdBxBX/UN04/7aHZMoZxrrjXGLcyjvXN3uxyCO\nyPY989pa68LJ9jXWyyfKjCYdztSFcRuwF7tWgqnlsc8pve/UaWamNOTXQnyrQ6Dp\ndn+1jiNbEJIdxiza7DJMH/9/i/mLIDEFCLRPQ3RqW4T8QrSbkyzPO/iwaHl9U196\n06Ajv1RNnfyHnBXIM+I5mxJRyJCyDFo/MACc5AgO6M0a7sJ/sdX+WccgcHEVbPAl\n1wIDAQAB \n-----END PUBLIC KEY-----\n\n", 40 ExpirationDate: "infinity", 41 } 42 keyout, err := addClientKey(client, "clnt1", keyadd) 43 fmt.Printf("Add clnt1 key %+v\n", keyout) 44 // List the client keys after adding 45 clientkeys = listClientKeys(client, "clnt1") 46 fmt.Printf("List after add clnt1 keys %+v\n", clientkeys) 47 48 // Add a defaultkey to client clnt3 49 keyadd.Name = "default" 50 keyout, err = addClientKey(client, "clnt3", keyadd) 51 fmt.Printf("Add clnt3 key %+v\n", keyout) 52 // List the client keys after adding 53 clientkeys = listClientKeys(client, "clnt3") 54 fmt.Printf("List after add clnt3 keys %+v\n", clientkeys) 55 56 // Get key detail 57 keydetail, err := client.Clients.GetKey("clnt1", "default") 58 if err != nil { 59 fmt.Fprintf(os.Stderr, "Error displaying key detail %+v\n", err) 60 } 61 keyfold := strings.Replace(fmt.Sprintf("%+v", keydetail), "\n", "", -1) 62 fmt.Printf("Key detail clnt1 default %+v\n", keyfold) 63 64 // update a key 65 keyadd.Name = "default" 66 keyupdate, err := client.Clients.UpdateKey("clnt1", "default", keyadd) 67 if err != nil { 68 fmt.Fprintf(os.Stderr, "Error updating clnt1 default key%+v\n", err) 69 } 70 keyfold = strings.Replace(fmt.Sprintf("%+v", keyupdate), "\n", "", -1) 71 fmt.Printf("Key update output clnt1 default %+v\n", keyfold) 72 // Get key detail after update 73 keydetail, err = client.Clients.GetKey("clnt1", "default") 74 if err != nil { 75 fmt.Fprintf(os.Stderr, "Error displaying key detail %+v\n", err) 76 } 77 keyfold = strings.Replace(fmt.Sprintf("%+v", keydetail), "\n", "", -1) 78 fmt.Printf("Updated key detail clnt1 default %+v\n", keyfold) 79 80 // delete the key 81 keydel, err := client.Clients.DeleteKey("clnt1", "default") 82 if err != nil { 83 fmt.Fprintf(os.Stderr, "Error deleting key %+v\n", err) 84 } 85 keyfold = strings.Replace(fmt.Sprintf("%+v", keydel), "\n", "", -1) 86 fmt.Printf("List delete result clnt1 keys %+v\n", keyfold) 87 // list the key after delete - expect 404 88 keydetail, err = client.Clients.GetKey("clnt1", "default") 89 if err != nil { 90 fmt.Fprintf(os.Stderr, "Error displaying key detail %+v\n", err) 91 } 92 fmt.Printf("Deleted key detail clnt1 default %+v\n", keydetail) 93 94 // Delete the clients 95 err = deleteClient(client, "clnt1") 96 fmt.Printf("Delete clnt1 %+v\n", err) 97 err = deleteClient(client, "clnt3") 98 fmt.Printf("Delete clnt3 %+v\n", err) 99 100 } 101 102 // listClientKeys uses the chef server api to show the keys for a client 103 func listClientKeys(client *chef.Client, name string) (clientkeys []chef.KeyItem) { 104 clientkeys, err := client.Clients.ListKeys(name) 105 if err != nil { 106 fmt.Fprintf(os.Stderr, "Issue showing keys for client %s: %+v\n", name, err) 107 } 108 return clientkeys 109 } 110 111 // addClientKey uses the chef server api to add a key to client 112 func addClientKey(client *chef.Client, name string, keyadd chef.AccessKey) (clientkey chef.KeyItem, err error) { 113 clientkey, err = client.Clients.AddKey(name, keyadd) 114 if err != nil { 115 fmt.Fprintln(os.Stderr, "Issue deleting org:", err) 116 } 117 return 118 } 119 120 // createClient uses the chef server api to create a single client 121 func createClient(client *chef.Client, apiclient chef.ApiNewClient) *chef.ApiClientCreateResult { 122 clntResult, err := client.Clients.Create(apiclient) 123 if err != nil { 124 fmt.Fprintln(os.Stderr, "Issue creating client:", err) 125 } 126 return clntResult 127 } 128 129 // deleteClient uses the chef server api to delete a single client 130 func deleteClient(client *chef.Client, name string) (err error) { 131 err = client.Clients.Delete(name) 132 if err != nil { 133 fmt.Fprintln(os.Stderr, "Issue deleting org:", err) 134 } 135 return 136 }