aristanetworks / go-cvprac

BSD 3-Clause "New" or "Revised" License
4 stars 10 forks source link

go-cvprac - Golang CloudVision Portal RESTful API and Client

Table of Contents

  1. Overview
  2. Requirements
  3. Installation
  4. Usage
  5. Development
  6. Testing
  7. Versioning
  8. Contributing
  9. Support
  10. License

Overview

This module provides a RESTful API client for Cloudvision® Portal (CVP) which can be used for building applications that work with Arista CVP.

There are two pieces to go-cvprac:

If you would like to spin your own version of a client, then you only need to implement the API interface.

Requirements

CVP Versions supported for each go-cvprac release:

CVP Version go-cvprac Version
2016.x-2017.x v1
2018.1.x, 2018.2.x, 2019.1.x v2
2020.1.x, 2020.2.x v3

Installation

First, it is assumed you have a standard Go workspace, as described in http://golang.org/doc/code.html, with proper GOPATH set.

Please refer section Versioning for detailed info.

To download and install go-cvprac:

$ go get -u gopkg.in/aristanetworks/go-cvprac.v2

After setting up Go and installing go-cvprac, any required build tools can be installed by bootstrapping your environment via:

$ make bootstrap

Usage

Basic usage:

The included client can be used to connect/interact with CVP:

package main

import (
    "fmt"
    "log"

    "gopkg.in/aristanetworks/go-cvprac.v2/client"
)

func main() {
    hosts := []string{"10.81.110.85"}
    cvpClient, _ := client.NewCvpClient(
        client.Protocol("https"),
        client.Port(443),
        client.Hosts(hosts...),
        client.Debug(false))

    if err := cvpClient.Connect("cvpadmin", "cvp123"); err != nil {
        log.Fatalf("ERROR: %s", err)
    }

    // verify we have at least one device in inventory
    data, err := cvpClient.API.GetCvpInfo()
    if err != nil {
        log.Fatalf("ERROR: %s", err)
    }

    fmt.Printf("Data: %v\n", data)
}

If you want to use your own client (to leverage some custom behavior), you merely need to implement the provided ClientInterface:

type ClientInterface interface {
    Get(string, *url.Values) ([]byte, error)
    Post(string, *url.Values, interface{}) ([]byte, error)
}

You then can access/interact with CVP using your clients underlying behavior. Example:

import (
    "fmt"
    "log"

    "gopkg.in/aristanetworks/go-cvprac.v2/api"
)

type YourCustomClient struct {
  ...
}
func NewYourCustomClient(host string) *YourCustomClient {
  ...
}
func (c *YourCustomClient) Get(url string, params *url.Values) ([]byte, error) {
  ...
}
func (c *YourCustomClient) Post(url string, params *url.Values, data interface{}) ([]byte, error) {
  ...
}

yourClient := NewYourCustomClient("10.10.1.2")
cvpClient := cvpapi.NewCvpRestAPI(yourClient)
cvpClient.Login(user, passwd)

Development

Please refer to Contributing section on contribution guidelines. To install the needed packages for lint/vet/etc. run the bootstrap provided:

$ make bootstrap

Testing

The go-cvprac library provides various tests. To run System specific tests, you will need to update the cvp_node.gcfg file (found in api/) to include CVP specifics/credentials for your setup.

System Test Requirements:

For running System tests, issue the following from the root of the go-cvprac directory:

$ make systest

Similarly, Unit tests can be run via:

$ make unittest

Note: Test cases live in respective XXX_test.go files and have the following function signature:

Unit Tests: TestXXX_UnitTest(t testing.T){... System Tests: TestXXX_SystemTest(t testing.T){...

Any tests written must conform to this standard.

Versioning

Releases are done according to Semantic Versioning

Contributing

Bug reports and pull requests are welcome on GitHub. Please note that all contributions that modify the library behavior require corresponding test cases. Otherwise the pull request will be rejected.

This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

Support

For support, please open an issue on GitHub or contact eosplus@arista.com. Commercial support agreements are available through your Arista account team.

License

BSD 3-Clause License

Copyright (c) 2017, Arista Networks EOS+ All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.