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 }