Giter VIP home page Giter VIP logo

pugo's Introduction

Build Status Go Report Card codecov GoDoc

PuGo - A Go REST client for Pure Storage

This library is designed to provide a simple interface for issuing commands to a Pure Storage FlashArray using a REST API. It communicates with the array using the golang http library, and returns the data into types defined within the library.

This is not designed to be a standalone program. It is just meant to provide functions and communication within another program.

Table of Contents

Requirements

You should have a working Go environment setup. If not check out the Go getting started guide.

Capabilities

FlashArray

The FlashArray library contains all functionality provided by version 1.16 of the Purity//FA REST API.

Note that different versions of the REST API offer different functionality, and some operations may be unusable except on certain versions of the REST API. For example, functionality relating to FlashRecover and protection groups (pgroups) requires the use of REST API version 1.2, which is supported only by Purity versions 4.0 and later.

Pure1

The pure1 library contains all functionality provided by version 1.0 of the Pure1 REST API.

Installation

FlashArray

$ go get github.com/devans10/pugo/flasharray

Pure1

$ go get github.com/devans10/pugo/pure1

Testing

Run unit tests

$ make test

To Run Acceptance tests

$ make testacc

These tests require a connection to a Pure FlashArray. They will require environment variables are set for PURE_TARGET and PURE_APITOKEN or PURE_USERNAME and PURE_PASSWORD

The Pure1 tests require a connection to Pure1. They will require environment variables set for PURE1_APPID and PURE1_PRIVATEKEY

Documentation

FlashArray

https://godoc.org/github.com/devans10/pugo/flasharray

flasharray.Client

Create a client to connect to the FlashArray

import (
	"fmt"
	"github.com/devans10/pugo/flasharray"
)

client := flasharray.Client{Target: "flasharray.example.com", Username: "pureuser", Password: "password", APIToken: nil, RestVersion: nil, UserAgent: nil, RequestKwargs: nil}

flasharray.Array

Get the array status

array, _ := client.Array.Get(nil)
fmt.Printf("Array Name: %s", array.ArrayName)
fmt.Printf("ID: %s", array.Id)

flasharray.Volume

Create a new volume

volume, _ := client.Volumes.CreateVolume("testvol", 1024000000)
fmt.Printf("Name: %s, Size: %d", volume.Name, volume.Size)

Clone a volume

volume, _ = client.Volumes.CopyVolume("testclone", "testvol")
fmt.Printf("Name: %s, Source: %d", volume.Name, volume.Source)

Get a volume

volume, _ = client.Volumes.GetVolume("testclone", nil)
fmt.Printf("Name: %s, Size: %d", volume.Name, volume.Size)

Create a snapshot

snapshot, _ := client.Volumes.CreateSnapshot("testvolume", "test")

List Volumes

for _, vol := range client.Volumes.ListVolumes(nil) {
	fmt.Printf("Volume Name: %s", vol.Name
}

Pure1

https://godoc.org/github.com/devans10/pugo/pure1

Authentication

The Pure1 REST API authentication requires a public and private certificate. A certificate can be created using openssl:

$ openssl genrsa -aes256 -out private.pem 2048

From that cert, you can create a public cert:

$ openssl rsa -in private.pem -outform PEM -pubout -out public.pem

Next, you will need to create a API registration on the Pure1 Manage site. You will need to be an administrator to complete this.

  1. Login to https://pure1.purestorage.com
  2. Go to Administration -> API Registration
  3. Click "+ Register Application"
  4. Give your application a name, and paste the contents of the public.pem created above.
  5. the "Application ID" that is generated will be used to authenticate the client.

pure1.Client

To create a client connection, the Application ID, byte slice of the private key contents and the rest version need to be passed. In the example below, I have exported the contents of the private.pem and the Application ID to envrionment variables.

Create a client to connect to Pure1

import (
	"fmt"
	"os"
	"github.com/devans10/pugo/pure1"
)

appID := os.Getenv("PURE1_APPID")
privateKey := []byte(os.Getenv("PURE1_PRIVATEKEY"))
restVersion := ""

client := pure1.NewClient(appID, privateKey, restVersion)

pure1.Array

Get a list of FlashArray and FlashBlade objects

array, _ := client.Array.GetArray(nil)
fmt.Println("ID: ", array.ID)
fmt.Println("Name: ", array.Name)
fmt.Println("Model: ", array.Model)
fmt.Println("OS: ", array.OS)
fmt.Println("Version: ", array.Version)
fmt.Println("AsOf: ", array.AsOf)

Disclaimer

PuGo and its developer(s) are not affiliated with or sponsored by Pure Storage. The statements and opinions on this site are those of the developer(s) and do not necessarily represent those of Pure Storage. Pure Storage and the Pure Storage trademarks listed at https://www.purestorage.com/pure-folio/showcase.html?type=pdf&path=/content/dam/pdf/en/legal/external-trademark-list.pdf are trademarks of Pure Storage, Inc.

pugo's People

Contributors

devans10 avatar

Watchers

Carlos avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.