このセクションでは、さまざまな自動化の要件を満たすために、NSX Advanced Load Balancer Go SDK パッケージをインストール、構成、および使用する方法について説明します。

NSX Advanced Load Balancer Go SDK は、NSX Advanced Load Balancer REST API と通信するための他の API を提供する Go パッケージです。NSX Advanced Load Balancer GO SDK パッケージには、NSX Advanced Load Balancer Controller のロード バランシング構成を簡素化および自動化するために使用できるユーティリティも用意されています。NSX Advanced Load Balancer GO SDK パッケージの主要な機能は次のとおりです。

  • NSX Advanced Load Balancer のセッション クラスを使用し、NSX Advanced Load Balancer Controller との統合を簡素化するためのユーティリティを提供します。

  • セッション認証を補佐し、セッションのキャッシュを保持して複数の接続を回避し、異なる API セッションの呼び出しで分解します。

  • NSX Advanced Load Balancer Controller からセッション Cookie と CSRF トークンを自動的に更新し、NSX Advanced Load Balancer オブジェクトのヘルパー API とテンプレートを提供します。

  • X-AVI-TENANT(テナント)ヘッダーを処理し、一般的なロード バランシング例のためのサンプル ソース コードを提供します。

SDK ディレクトリ

NSX Advanced Load Balancer Go SDK パッケージは、NSX Advanced Load Balancer Controller 構成の Go SDK のソースです。パッケージのダウンロードは不要です。Go がパッケージのインストールを行います。

以下に示すのは、NSX Advanced Load Balancer Go SDK の重要なディレクトリです。

  1. examples:Go のサンプルが go/examples ディレクトリにあります。create_vs.go には、NSX Advanced Load Balancer Controller に関する次の構成についての自動化のサンプルがあります。

    • セッションの作成

    • NSX Advanced Load Balancer Controller への汎用クライアント

    • 1 台のサーバでプールを作成し、SSL 仮想サービスを作成し、名前でオブジェクトを取得

  2. clientsNSX Advanced Load Balancer セッション クラスを使用して、Go SDK と NSX Advanced Load Balancer Controller との間で接続を確立するための NSX Advanced Load Balancer クライアントが含まれています。各リソースには、接続を確立するためのクライアントがあります。

  3. sessionNSX Advanced Load Balancer セッションのための REST API 呼び出しのすべての汎用コードと、REST API 呼び出しからのヘルパー ルーチンが含まれています。指定されたリソースのセッションを作成して維持します。

  4. models:API 応答の取得に必要なすべてのモデルが含まれています。これらは、対応する NSX Advanced Load Balancer REST API 呼び出しのデータを取得して保存するための構造です。

前提条件

NSX Advanced Load Balancer Go SDK パッケージをインストールする前に、Go Lang パッケージをインストールする必要があります。Go Lang パッケージをインストールするには、「Go Lang のインストール方法」を参照してください。

Go プログラミング言語の詳細については、「Go Lang のドキュメント」を参照してください。

NSX Advanced Load Balancer Go SDK パッケージのインストール

NSX Advanced Load Balancer Go SDK パッケージをインストールするための構文は次のとおりです。

$ mkdir -p src/github.com/avinetworks/
$ cd src/github.com/avinetworks/
$ git clone https://github.com/avinetworks/sdk.git
#GOPATH will be path till src dir.
$ export GOPATH=~/src

使用例

セッション、プール、および基本仮想サービス (my-test-vs) を作成するには、create_vs.go ファイルを実行します。このスクリプトを実行する前に、create_vs.go ファイルで、NSX Advanced Load Balancer Controller IP アドレス、ユーザー名、パスワード、およびテナントを指定します。

NSX Advanced Load Balancer のセッション、モデル、およびクライアントのインポート
package main

import (
	"github.com/avinetworks/sdk/go/clients"
	"github.com/avinetworks/sdk/go/models"
	"github.com/avinetworks/sdk/go/session"
	)
NSX Advanced Load Balancer API セッションの作成

次のサンプル構文では、次の属性のセッションが作成されます。

  • クライアント セッションの IP アドレス:10.10.25.25

  • テナント:admin

  • セッション タイプ:セキュアでない

aviClient, err := clients.NewAviClient("10.10.25.25", "admin",
		session.SetPassword("something"),
		session.SetTenant("admin"),
		session.SetInsecure)
プールの作成

以下の構文では、次の属性のプールが作成されます。

  • プール名:my-test-pool

  • サーバ IP アドレス:10.90.20.12

pobj := models.Pool{}
pobj.Name = "my-test-pool"
serverobj := models.Server{}
serverobj.Enabled = true
serverobj.IP = &models.IPAddr{Type: "V4", Addr: "10.90.20.12"}
pobj.Servers = append(pobj.Servers, &serverobj)
npobj, err := aviClient.Pool.Create(&pobj)
if err != nil {
	fmt.Println("Pool creation failed: ", err)
	return
}
仮想サービスの作成

以下の構文により、次の属性の仮想サービスが作成されました。

  • 名前:my-test-vs

  • IP アドレス:10.90.20.51

  • ポート番号:80

  • 仮想サービスに関連付けられたプール:my-test-pool

vsobj := models.VirtualService{}
vsobj.Name = "my-test-vs"
vipip := models.IPAddr{Type: "V4", Addr: "10.90.20.51"}
vsobj.Vip = append(vsobj.Vip, &models.Vip{VipID: "myvip", IPAddress: &vipip})
vsobj.PoolRef = npobj.UUID
vsobj.Services = append(vsobj.Services, &models.Service{Port: 80})

nvsobj, err := aviClient.VirtualService.Create(&vsobj)
if err != nil {
	fmt.Println("VS creation failed: ", err)
	return
}
fmt.Printf("VS obj: %+v", *nvsobj)
名前によるオブジェクトの取得

以下のサンプル構文は、my-test-vs という名前の仮想サービスの詳細を取得し、Cloud UUID: f39f950a-e6ca-442d-b546-fc31520991bb という出力を提供します。

var obj interface{}
err = aviClient.AviSession.GetObjectByName("virtualservice", "my-test-vs", &obj)
fmt.Printf("VS obj: %v\n", obj)

err = aviClient.AviSession.GetObject(
	"virtualservice", session.SetName("my-test-vs"), session.SetResult(&obj),
	session.SetCloudUUID("cloud-f39f950a-e6ca-442d-b546-fc31520991bb"))
fmt.Printf("VS with CLOUD_UUID obj: %v", obj)
仮想サービスの削除

以下の構文は、仮想サービスのオブジェクト ID を使用して目的の仮想サービスを削除します。

aviClient.VirtualService.Delete(nvsobj.UUID)
プールの削除

目的のプールを削除するには、次の構文を使用します。

aviClient.Pool.Delete(npobj.UUID)
create_vs.go を使用した基本仮想サービス (my-test-vs) の作成
$ go run create_vs.go
メトリックおよびインベントリ API の例
package main

import (
	//"flag"
	"fmt"
	"github.com/avinetworks/sdk/go/clients"
	"github.com/avinetworks/sdk/go/session"
)

type MetricRequest struct {
	Step           int    `json:"step"`
	Limit          int    `json:"limit"`
	EntityUUID     string `json:"entity_uuid"`
	MetricID       string `json:"metric_id"`
	IncludeName    string `json:"include_name"`
	IncludeRefs    string `json:"include_refs"`
	PadMissingData string `json:"pad_missing_data"`
}

type Metrics struct {
	MetricRequests []MetricRequest `json:"metric_requests"`
}

func main() {
	// Create a session and a generic client to Avi Controller
	aviClient, err := clients.NewAviClient("10.10.25.42", "admin",
		session.SetPassword(""),
		session.SetTenant("admin"),
		session.SetInsecure)
	if err != nil {
		fmt.Println("Couldn't create session: ", err)
		return
	}
	mr := MetricRequest{Step: 1, Limit: 1, EntityUUID: "*", MetricID: "l7_server.max_concurrent_sessions", IncludeName: "True", IncludeRefs: "True", PadMissingData: "False"}
	sr := []MetricRequest{}
	sr = append(sr, mr)
	req := Metrics{MetricRequests: sr}
	path := "/api/analytics/metrics/collection"
	var rsp interface{}
	aviClient.AviSession.Post(path, req, &rsp)
	fmt.Printf("response %v\n", rsp)
}

コンパイル

NSX Advanced Load Balancer Go SDK パッケージをコンパイルするには、次の構文を使用します。

$ go build -o /usr/bin/create_vs create_vs.go

サードパーティのコードに Go SDK パッケージを含める

NSX Advanced Load Balancer Go SDK パッケージは、サードパーティの Go コード パッケージと統合することもできます。次に示すのは、NSX Advanced Load Balancer Go SDK パッケージをサードパーティの Go コード パッケージにインポートする例です。

import
 (
	"github.com/avinetworks/sdk/go/clients"
	"github.com/avinetworks/sdk/go/session"

Terraform プロバイダの vendor.json ファイルのエントリの例を次に示します。

"package": [ {
		"path": "github.com/avinetworks/sdk/go/clients",
		"revision": "796ddcccdc37a5a9771bfbb716b159ae5c9b4b11",
		"revisionTime": "2018-04-06T16:51:27.185773",
		"version": "18.1.3",
		"versionExact": "18.1.3"
	},
	{
		"path": "github.com/avinetworks/sdk/go/session",
		"revision": "796ddcccdc37a5a9771bfbb716b159ae5c9b4b11",
		"revisionTime": "2018-04-06T16:51:27.185773",
		"version": "18.1.3",
		"versionExact": "18.1.3"
	} ]

追加情報

NSX Advanced Load Balancer Go SDK パッケージの GitHub 上の場所:https://github.com/avinetworks/sdk/tree/master/go