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

     1  package testapi
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  
     7  	"github.com/go-chef/chef"
     8  )
     9  
    10  // node exercise the chef api
    11  func Node() {
    12  	// Use the default test org
    13  	client := Client(nil)
    14  	fmt.Printf("Client settings %+v\n client auth %+v\n", client, client.Auth)
    15  	version := "1.0"
    16  	if len(os.Args) > 6 {
    17  		version = os.Args[6]
    18  	}
    19  
    20  	// List initial nodes
    21  	nodeList, err := client.Nodes.List()
    22  	if err != nil {
    23  		fmt.Fprintln(os.Stderr, "Couldn't list nodes: ", err)
    24  	}
    25  	fmt.Println("List initial nodes", nodeList)
    26  
    27  	// Define a Node object
    28  	node1 := chef.NewNode("node1" + version)
    29  	node1.RunList = []string{"pwn"}
    30  	node1.AutomaticAttributes = map[string]interface{}{
    31  		"attr": "value",
    32  	}
    33  	fmt.Printf("Define node1 %+v\n", node1)
    34  
    35  	// Delete node1 ignoring errors :)
    36  	err = client.Nodes.Delete(node1.Name)
    37  
    38  	// Create
    39  	nodeResult, err := client.Nodes.Post(node1)
    40  	if err != nil {
    41  		fmt.Fprintln(os.Stderr, "Couldn't create node node1. ", err)
    42  	}
    43  	fmt.Println("Added node1", nodeResult)
    44  
    45  	// List nodes
    46  	nodeList, err = client.Nodes.List()
    47  	if err != nil {
    48  		fmt.Fprintln(os.Stderr, "Couldn't list nodes: ", err)
    49  	}
    50  	fmt.Println("List nodes after adding node1", nodeList)
    51  
    52  	// Create a second time
    53  	nodeResult, err = client.Nodes.Post(node1)
    54  	if err != nil {
    55  		fmt.Fprintln(os.Stderr, "Couldn't recreate node node1. ", err)
    56  	}
    57  	cerr, err := chef.ChefError(err)
    58  	if cerr != nil {
    59  		fmt.Fprintln(os.Stderr, "Couldn't recreate node node1. ", cerr.StatusCode())
    60  	}
    61  	fmt.Println("Added node1", nodeResult)
    62  
    63  	// Read node1 information
    64  	serverNode, err := client.Nodes.Get(node1.Name)
    65  	if err != nil {
    66  		fmt.Fprintln(os.Stderr, "Couldn't get node: ", err)
    67  	}
    68  	fmt.Printf("Get node1 %+v\n", serverNode)
    69  
    70  	// Check node1 exits
    71  	err = client.Nodes.Head(node1.Name)
    72  	fmt.Println("Head node node1:", err)
    73  
    74  	// Check nothere exits
    75  	err = client.Nodes.Head("nothere")
    76  	fmt.Println("Head node nothere:", err)
    77  
    78  	// update node
    79  	node1.RunList = append(node1.RunList, "recipe[works]")
    80  	node1.AutomaticAttributes = map[string]interface{}{}
    81  	updateNode, err := client.Nodes.Put(node1)
    82  	if err != nil {
    83  		fmt.Fprintln(os.Stderr, "Couldn't update node: ", err)
    84  	}
    85  	fmt.Println("Update node1", updateNode)
    86  
    87  	// Info after update
    88  	serverNode, err = client.Nodes.Get(node1.Name)
    89  	if err != nil {
    90  		fmt.Fprintln(os.Stderr, "Couldn't get node: ", err)
    91  	}
    92  	fmt.Printf("Get node1 after update %+v\n", serverNode)
    93  
    94  	// Delete node ignoring errors :)
    95  	err = client.Nodes.Delete(node1.Name)
    96  	fmt.Println("Delete node1", err)
    97  
    98  	// List nodes
    99  	nodeList, err = client.Nodes.List()
   100  	if err != nil {
   101  		fmt.Fprintln(os.Stderr, "Couldn't list nodes: ", err)
   102  	}
   103  	fmt.Println("List nodes after cleanup", nodeList)
   104  }