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

     1  // Test the go-chef/chef chef server api /users endpoints against a live chef server
     2  package testapi
     3  
     4  import (
     5  	"fmt"
     6  	"github.com/go-chef/chef"
     7  	"os"
     8  )
     9  
    10  // User exercise the chef server api
    11  func User() {
    12  	client := Client(nil)
    13  
    14  	// Create a new private key when adding the user
    15  	usr1 := chef.User{UserName: "usr1",
    16  		Email:       "user1@domain.io",
    17  		FirstName:   "user1",
    18  		LastName:    "fullname",
    19  		DisplayName: "User1 Fullname",
    20  		Password:    "Logn12ComplexPwd#",
    21  		CreateKey:   true,
    22  	}
    23  
    24  	// Supply a public key
    25  	usr2 := chef.User{UserName: "usr2",
    26  		Email:       "user2@domain.io",
    27  		FirstName:   "user2",
    28  		LastName:    "lastname",
    29  		DisplayName: "User2 Lastname",
    30  		Password:    "Logn12ComplexPwd#",
    31  		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",
    32  	}
    33  
    34  	err := deleteUser_u(client, "usr2")
    35  	fmt.Println("Delete usr2", err)
    36  
    37  	// Neither PublicKey nor CreateKey specified
    38  	usr3 := chef.User{UserName: "usr3",
    39  		Email:       "user3@domain.io",
    40  		FirstName:   "user3",
    41  		LastName:    "lastname",
    42  		DisplayName: "User3 Lastname",
    43  		Password:    "Logn12ComplexPwd#",
    44  	}
    45  
    46  	// Users
    47  	userList := listUsers(client)
    48  	fmt.Printf("List initial users %+v EndInitialList\n", userList)
    49  
    50  	userout := getUser(client, "pivotal")
    51  	fmt.Printf("Pivotal user %+v\n", userout)
    52  
    53  	userResult := createUser_u(client, usr1)
    54  	fmt.Printf("Add usr1 %+v\n", userResult)
    55  
    56  	userResult = createUser_u(client, usr2)
    57  	fmt.Printf("Add usr2 %+v\n", userResult)
    58  
    59  	err = deleteUser_u(client, "usr2")
    60  	fmt.Println("Delete usr2", err)
    61  
    62  	userResult = createUser_u(client, usr3)
    63  	fmt.Printf("Add usr3 %+v\n", userResult)
    64  
    65  	err = deleteUser_u(client, "usr3")
    66  	fmt.Println("Delete usr3", err)
    67  
    68  	userList = listUsers(client, "email=user1@domain.io")
    69  	fmt.Printf("Filter users %+v\n", userList)
    70  
    71  	userVerboseOut := listUsersVerbose(client)
    72  	fmt.Printf("Verbose out %v\n", userVerboseOut)
    73  
    74  	userResult = createUser_u(client, usr1)
    75  	fmt.Printf("Add usr1 again %+v\n", userResult)
    76  
    77  	userout = getUser(client, "usr1")
    78  	fmt.Printf("Get usr1 %+v\n", userout)
    79  
    80  	userList = listUsers(client)
    81  	fmt.Printf("List after adding %+v EndAddList\n", userList)
    82  
    83  	userbody := chef.User{UserName: "usr1", DisplayName: "usr1", Email: "myuser@samp.com"}
    84  	userresult := updateUser(client, "usr1", userbody)
    85  	fmt.Printf("Update usr1 partial update %+v\n", userresult)
    86  
    87  	userout = getUser(client, "usr1")
    88  	fmt.Printf("Get usr1 after partial update %+v\n", userout)
    89  
    90  	userbody = chef.User{UserName: "usr1", DisplayName: "usr1", FirstName: "user", MiddleName: "mid", LastName: "name", Email: "myuser@samp.com"}
    91  	userresult = updateUser(client, "usr1", userbody)
    92  	fmt.Printf("Update usr1 full update %+v\n", userresult)
    93  
    94  	userout = getUser(client, "usr1")
    95  	fmt.Printf("Get usr1 after full update %+v\n", userout)
    96  
    97  	userbody = chef.User{UserName: "usr1new", DisplayName: "usr1", FirstName: "user", MiddleName: "mid", LastName: "name", Email: "myuser@samp.com"}
    98  	userresult = updateUser(client, "usr1", userbody)
    99  	fmt.Printf("Update usr1 rename %+v\n", userresult)
   100  
   101  	userout = getUser(client, "usr1new")
   102  	fmt.Printf("Get usr1 after rename %+v\n", userout)
   103  
   104  	userbody = chef.User{UserName: "usr1new", DisplayName: "usr1", FirstName: "user", MiddleName: "mid", LastName: "name", Email: "myuser@samp.com", CreateKey: true}
   105  	userresult = updateUser(client, "usr1new", userbody)
   106  	fmt.Printf("Update usr1new create key  %+v\n", userresult)
   107  
   108  	userout = getUser(client, "usr1new")
   109  	fmt.Printf("Get usr1new after create key %+v\n", userout)
   110  
   111  	err = deleteUser_u(client, "usr1")
   112  	fmt.Println("Delete usr1", err)
   113  
   114  	err = deleteUser_u(client, "usr1new")
   115  	fmt.Println("Delete usr1new", err)
   116  
   117  	userList = listUsers(client)
   118  	fmt.Printf("List after cleanup %+v EndCleanupList\n", userList)
   119  }
   120  
   121  // createUser_u uses the chef server api to create a single user
   122  func createUser_u(client *chef.Client, user chef.User) chef.UserResult {
   123  	usrResult, err := client.Users.Create(user)
   124  	if err != nil {
   125  		fmt.Fprintf(os.Stderr, "Issue creating user %+v\n", err)
   126  		if cerr, ok := err.(*chef.ErrorResponse); ok {
   127  			fmt.Fprintf(os.Stderr, "Issue creating user err: %+v\n", cerr.Error())
   128  			fmt.Fprintf(os.Stderr, "Issue creating user code: %+v\n", cerr.StatusCode())
   129  			fmt.Fprintf(os.Stderr, "Issue creating user method: %+v\n", cerr.StatusMethod())
   130  			fmt.Fprintf(os.Stderr, "Issue creating user url: %+v\n", cerr.StatusURL().String())
   131  		}
   132  	}
   133  	return usrResult
   134  }
   135  
   136  // deleteUser_u uses the chef server api to delete a single user
   137  func deleteUser_u(client *chef.Client, name string) (err error) {
   138  	err = client.Users.Delete(name)
   139  	if err != nil {
   140  		fmt.Fprintln(os.Stderr, "Issue deleting user:", err)
   141  	}
   142  	return
   143  }
   144  
   145  // getUser uses the chef server api to get information for a single user
   146  func getUser(client *chef.Client, name string) chef.User {
   147  	userList, err := client.Users.Get(name)
   148  	if err != nil {
   149  		fmt.Fprintln(os.Stderr, "Issue listing user", err)
   150  	}
   151  	return userList
   152  }
   153  
   154  // listUsers uses the chef server api to list all users
   155  func listUsers(client *chef.Client, filters ...string) map[string]string {
   156  	var filter string
   157  	if len(filters) > 0 {
   158  		filter = filters[0]
   159  	}
   160  	userList, err := client.Users.List(filter)
   161  	if err != nil {
   162  		fmt.Fprintln(os.Stderr, "Issue listing users:", err)
   163  	}
   164  	return userList
   165  }
   166  
   167  // listUsersVerbose uses the chef server api to list all users and return verbose output
   168  func listUsersVerbose(client *chef.Client) map[string]chef.UserVerboseResult {
   169  	userList, err := client.Users.VerboseList()
   170  	fmt.Printf("VERBOSE LIST %+v\n", userList)
   171  	if err != nil {
   172  		fmt.Println("Issue listing verbose users:", err)
   173  	}
   174  	return userList
   175  }
   176  
   177  // updateUser uses the chef server api to update information for a single user
   178  func updateUser(client *chef.Client, username string, user chef.User) chef.UserResult {
   179  	user_update, err := client.Users.Update(username, user)
   180  	if err != nil {
   181  		fmt.Println("Issue updating user:", err)
   182  	}
   183  	return user_update
   184  }