go-sdk

module
v1.0.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 21, 2018 License: Apache-2.0

README

Datera Golang SDK
=================

Building
--------

.. _here: http://golang.org/dl/

Requires Go 1.8+
You can download the latest version of Go here_

::

    $ make

Running Tests
-------------

::

    $ make test

Updating the entity.py file
---------------------------

If the Datera product API has been updated and the Entity structs are out of date
they can be updated in the following method.  This script can also be extended to
generate types/Classes for other languages.

::

    $ ./pschema.py -u http://${your_cluster}:7717/v2.1/api | gofmt > /src/dsdk/entity.go

Getting Started
---------------

.. code:: go

    import (
        "fmt"

        // This is the sdk package
        "dsdk"
    )

    func main() {

        // First we'll get the sdk setup
        headers = make(map[string]string)
        sdk, err := dsdk.NewSDK(
            "172.19.1.41", "7717", "admin", "password", "2.1", "/root", "30s", headers, false)
        if err != nil {
            panic(err)
        }

        // Now that we have the sdk, lets create an AppInstance
        // Each call to a SubEndpoint is done via the "GetEp" function
        ai, err := sdk.GetEp("app_instances").Create("name=my-app")
        if err != nil {
            panic(err)
        }

        // This call returns a genric Entity Object.  The attributes of this
        // object can be accessed in two ways

        // 1. The dynamic way via the original JSON key
        aiName := ai.Get("name").(string)
        fmt.Printf("Dynamic Name: %s\n", aiName)

        // 2. The static way via unpacking into an autogenerated object
        myai, err := dsdk.NewAppInstance(ai.GetB())
        fmt.Printf("Static Name: %s\n", myai.Name)

        // Now lets update that AppInstance
        // You can pass two types of arguments to Create/Set/Delete functions

        // 1. "key=value" strings, both arguments MUST be strings when this form is used
        ai.Set("descr=my test label")
        ai, _ = ai.Reload()
        myai, err = dsdk.NewAppInstance(ai.GetB())
        fmt.Printf("Description: %s\n", myai.Descr)

        // 2. Give a single struct or map[string]interface{}
        var sendAi dsdk.AppInstance
        sendAi.Descr = "golden ticket"
        ai.Set(sendAi)
        ai, _ = ai.Reload()
        myai, _ = dsdk.NewAppInstance(ai.GetB())
        fmt.Printf("Description2: %s\n", myai.Descr)

        // Just for fun, lets create an AppInstance, StorageInstance and Volume
        // Then online and print the connection info
        testVol := dsdk.Volume{
            Name:         "my-vol",
            Size:         5,
            ReplicaCount: 1,
        }
        testSi := dsdk.StorageInstance{
            Name:    "my-si",
            Volumes: &[]dsdk.Volume{testVol},
        }
        testAi := dsdk.AppInstance{
            Name:             "my-ai",
            StorageInstances: &[]dsdk.StorageInstance{testSi},
        }
        ai, err = sdk.GetEp("app_instances").Create(testAi)
        ai, err = ai.Reload()
        if err != nil {
            t.Fatalf("%s", err)
        }
        myAi, err := dsdk.NewAppInstance(ai.GetB())
        if err != nil {
            t.Fatalf("%s", err)
        }
        mySi := (\*myAi.StorageInstances)[0]
        myVol := (\*mySi.Volumes)[0]
        fmt.Printf("AI Path: %s\nSI Path: %s\nVol Path: %s\n", myAi.Path, mySi.Path, myVol.Path)

        // Get the storage_instance endpoint, send "admin_state=online" and update our struct
        sis, _ := ai.GetEp("storage_instances").List()
        si := sis[0]
        si.Set("admin_state=online")
        si, _ = si.Reload()
        mySi, _ = dsdk.NewStorageInstance(si.GetB())
        fmt.Printf("Access: %s", mySi.Access)

    }

Handy Functions
---------------

.. code:: go

    // Use this function with caution.  Currently it will clean everything
    // under the configured Tenant.  This may change in the future to include
    // all tenants under the available login.
    sdk.ForceClean()

Please consult the test files for more in depth API usage

Directories

Path Synopsis
src

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL