github.com/go-chef/chef@v0.30.1/testapi/role.go (about) 1 // Test the go-chef/chef chef server api /role endpoints against a live server 2 package testapi 3 4 import ( 5 "encoding/json" 6 "fmt" 7 "github.com/go-chef/chef" 8 "os" 9 ) 10 11 // role exercise the chef server api 12 func Role() { 13 client := Client(nil) 14 15 // The environment need to exist for the GetEnvironmentRunlist function to work 16 create_en1(client) 17 18 // Build a stucture to define a role 19 role1 := create_role1() 20 21 // Add a new role 22 roleAdd, err := client.Roles.Create(&role1) 23 if err != nil { 24 fmt.Fprintln(os.Stderr, "Issue adding role1:", err) 25 } 26 fmt.Printf("Added role1 %+v\n", roleAdd) 27 28 // Build a stucture to define a role 29 roleNR := create_role_norunlist() 30 // Add a new role 31 roleAdd, err = client.Roles.Create(&roleNR) 32 if err != nil { 33 fmt.Fprintln(os.Stderr, "Issue adding roleNR:", err) 34 } 35 fmt.Printf("Added roleNR %+v\n", roleAdd) 36 37 // Add role again 38 roleAdd, err = client.Roles.Create(&role1) 39 if err != nil { 40 fmt.Fprintln(os.Stderr, "Issue recreating role1:", err) 41 } 42 cerr, err := chef.ChefError(err) 43 if cerr != nil { 44 fmt.Fprintln(os.Stderr, "Issue recreating role1:", cerr.StatusCode()) 45 } 46 fmt.Printf("Recreated role1 %+v\n", roleAdd) 47 48 // List roles after adding 49 roleList, err := client.Roles.List() 50 if err != nil { 51 fmt.Fprintln(os.Stderr, "Issue printing the existing roles:", err) 52 } 53 fmt.Printf("List roles after adding role1 %+v\n", roleList) 54 55 // Get new role 56 roleOut, err := client.Roles.Get("role1") 57 if err != nil { 58 fmt.Fprintln(os.Stderr, "Issue getting role1:", err) 59 } 60 fmt.Printf("Get role1 %+v\n", roleOut) 61 62 // Try to get a missing role 63 roleOutMissing, err := client.Roles.Get("nothere") 64 if err != nil { 65 fmt.Fprintln(os.Stderr, "Issue getting nothere:", err) 66 } 67 fmt.Printf("Get nothere %+v\n", roleOutMissing) 68 69 // Update a role 70 role1.Description = "Changed Role" 71 // TODO: try changing the runlists, attributes, environment run list 72 roleUpdate, err := client.Roles.Put(&role1) 73 if err != nil { 74 fmt.Fprintln(os.Stderr, "Issue updating role1:", err) 75 } 76 fmt.Printf("Update role1 %+v\n", roleUpdate) 77 78 envList, err := client.Roles.GetEnvironments("role1") 79 if err != nil { 80 fmt.Fprintln(os.Stderr, "Issue listing environments for role1:", err) 81 } 82 fmt.Printf("Environments for role1 %+v\n", envList) 83 84 envRunList, err := client.Roles.GetEnvironmentRunlist("role1", "en1") 85 if err != nil { 86 fmt.Fprintln(os.Stderr, "Issue listing runlist for role1::en1:", err) 87 } 88 fmt.Printf("Environments for role1 %+v\n", envRunList) 89 90 // Clean up 91 err = client.Roles.Delete("role1") 92 if err != nil { 93 fmt.Fprintln(os.Stderr, "Issue deleting role1", err) 94 } 95 fmt.Printf("Delete role1 %+v\n", err) 96 97 err = client.Roles.Delete("roleNR") 98 if err != nil { 99 fmt.Fprintln(os.Stderr, "Issue deleting roleNR", err) 100 } 101 fmt.Printf("Delete roleNR %+v\n", err) 102 103 _, err = client.Environments.Delete("en1") 104 105 // Final list of roles 106 roleList, err = client.Roles.List() 107 if err != nil { 108 fmt.Fprintln(os.Stderr, "Issue listing the final roles:", err) 109 } 110 fmt.Printf("List roles after cleanup %+v\n", roleList) 111 } 112 113 func create_en1(client *chef.Client) { 114 en1 := chef.Environment{ 115 Name: "en1", 116 Description: "Test environment", 117 CookbookVersions: map[string]string{ 118 "a": "0.0.0", 119 }, 120 } 121 _, err := client.Environments.Create(&en1) 122 if err != nil { 123 fmt.Fprintln(os.Stderr, "Issue adding en1:", err) 124 } 125 return 126 } 127 128 func create_role1() chef.Role { 129 defIn := []byte(`{ 130 "git_repo": "here.git", 131 "users": ["root", "moe"] 132 }`) 133 ovrIn := []byte(`{ 134 "env": { 135 "mine": "ample", 136 "yours": "full" 137 } 138 }`) 139 var defAtt interface{} 140 var ovrAtt interface{} 141 json.Unmarshal(defIn, &defAtt) 142 json.Unmarshal(ovrIn, &ovrAtt) 143 role1 := chef.Role{ 144 Name: "role1", 145 DefaultAttributes: defAtt, 146 Description: "Test role", 147 EnvRunList: chef.EnvRunList{ 148 "en1": []string{"recipe[foo1]", "recipe[foo2]"}, 149 "en2": []string{"recipe[foo2]"}, 150 }, 151 RunList: []string{"recipe[foo]", "recipe[baz]", "role[banana]"}, 152 OverrideAttributes: ovrAtt, 153 } 154 return role1 155 } 156 157 func create_role_norunlist() chef.Role { 158 role1 := chef.Role{ 159 Name: "roleNR", 160 Description: "Test role", 161 RunList: []string{"recipe[foo]", "recipe[baz]", "role[banana]"}, 162 } 163 return role1 164 }