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  }