✏️

GoでgRPCを使ってIOS XRにconfigを投入する

2020/09/24に公開

前回はgRPCを使ってIOS XRでshowコマンドを実行する方法を紹介した。

今回は、gRPCを使ってconfigを投入する方法を紹介する。

前回同様、ログイン情報をmetadataとしてコンテキストに埋め込む。

	md := metadata.Pairs(
		"username", "root",
		"password", "password",
	)

	ctx := metadata.NewOutgoingContext(context.Background(), md)

また、投入するコマンドを文字列の配列として用意しておく

	clis := [...]string{
		"interface GigabitEthernet0/0/0/1",
		"interface GigabitEthernet0/0/0/1 ipv4 address 172.16.1.254 255.255.255.0",
	}

あとは、前回とclientとして作成する構造体が変わるだけで、

	conn, _ := grpc.Dial("192.168.1.10:50051", grpc.WithInsecure())
	client := dialin.NewGRPCConfigOperClient(conn)

用意したコマンドの数だけ投入してあげればよい

	for _, cli := range clis {
		reply, _ := client.CliConfig(ctx, &dialin.CliConfigArgs{Cli: cli})
		if reply.Errors != "" {
			fmt.Println(reply.Errors)
		}
	}

全体像は以下のようになる

package main

import (
	"context"
	"fmt"

	"google.golang.org/grpc"
	"google.golang.org/grpc/metadata"

	dialin "github.com/cisco/bigmuddy-network-telemetry-proto/proto_go/mdt_grpc_dialin"
)

func main() {

	md := metadata.Pairs(
		"username", "root",
		"password", "password",
	)

	clis := [...]string{
		"interface GigabitEthernet0/0/0/1",
		"interface GigabitEthernet0/0/0/1 ipv4 address 172.16.1.254 255.255.255.0",
	}

	conn, _ := grpc.Dial("192.168.1.10:50051", grpc.WithInsecure())
	client := dialin.NewGRPCConfigOperClient(conn)

	ctx := metadata.NewOutgoingContext(context.Background(), md)

	for _, cli := range clis {
		reply, _ := client.CliConfig(ctx, &dialin.CliConfigArgs{Cli: cli})
		if reply.Errors != "" {
			fmt.Println(reply.Errors)
		}
	}

}

これまで3回にわたり、gRPCによるIOS XRの操作を紹介したが、これでなんとなくgRPCの基礎がつかめたのではないかと思う。

Discussion