# OpenStorage API usage Any storage product that uses the openstorage API can be managed via this API. Below are some examples of using this API. ### Enumerate nodes in a cluster ```go import ( ... "github.com/libopenstorage/gossip/types" "github.com/libopenstorage/openstorage/api" "github.com/libopenstorage/openstorage/api/client/cluster" ) type myapp struct { manager cluster.Cluster } func (c *myapp) init() { // Choose the default version. // Leave the host blank to use the local UNIX socket, or pass in an IP and a port at which the server is listening on. clnt, err := cluster.NewClusterClient("", cluster.APIVersion) if err != nil { fmt.Printf("Failed to initialize client library: %v\n", err) os.Exit(1) } c.manager = cluster.ClusterManager(clnt) } func (c *myapp) listNodes() { cluster, err := c.manager.Enumerate() if err != nil { cmdError(context, fn, err) return } // cluster is now a hashmap of nodes... do something useful with it: for _, n := range cluster.Nodes { } } ``` ### Inspect a volume in a cluster ```go import ( ... "github.com/libopenstorage/openstorage/api" volumeclient "github.com/libopenstorage/openstorage/api/client/volume" "github.com/libopenstorage/openstorage/volume" ) type myapp struct { volDriver volume.VolumeDriver } func (c *myapp) init() { // Choose the default version. // Leave the host blank to use the local UNIX socket, or pass in an IP and a port at which the server is listening on. clnt, err := volumeclient.NewDriverClient("", v.name, volume.APIVersion) if err != nil { fmt.Printf("Failed to initialize client library: %v\n", err) os.Exit(1) } v.volDriver = volumeclient.VolumeDriver(clnt) } func (c *myapp) inspect(id string) { stats, err := v.volDriver.Stats(id, true) if err != nil { return } // stats is an object that has various volume properties and statistics. } ```