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  }