Giter Club home page Giter Club logo

acb-oc's Introduction

Intro

What is OpenConfig

  • The OpenConfig Working Group is a group of network operators that defines a set of vendor-neutral data models for switch configuration and status
  • The data models are expressed in YANG, a data modelling language
  • The OpenConfig working group doesn’t mandate an API (or protocol) for client access
  • The OpenConfig data model is accessed and manipulated over a choice of APIs; NETCONF (over SSH), gNMI (gRPC) and RESTCONF (HTTPS)

History

  • Initially NETCONF, IETF group started 2003, first spec was RFC4741 Dec 2006
  • YANG modelling language, IETF group started 2008, first spec was RFC6020 in Oct 2010
  • Each vendor provided their own unique YANG models
  • OpenConfig working group was established in 2014
  • The working group published its first models including BGP in 2015

Pitch

  • Better programmatic interface to config and status
  • Better than the CLI for automated config management
  • Better than SNMP for getting telemetry
    • Streaming, not polling!
  • Models developed in the open by operators, with feedback from vendors
    • github.com/openconfig/public
  • Allows for cross-vendor tools to develop
    • Where switches from different vendors are managed in the same way.
  • Models are not from the usual standard bodies IETF, IEEE not involved
    • allows for rapid development of models

Customer Use Case

  • Do all config with YANG models
    • Use OpenConfig models wherever defined
    • Fill in gaps with proprietary models when necessary, proprietary models may be auto-generated.
    • Common switch management, pushed to switches in a standard fashion.
  • Stream telemetry using YANG model

Useful links

GNMI specification

OpenConfig YANG models

Arista OpenConfig YANG models

GNOI - file transfer, ping, traceroute, clear ARP/STP/LLDP/BGP

GRIBI

Demo

1. Setup

export CEOS_VERSION=ceos:4.21.5F

docker-compose up -d
docker inspect ceos-1 |  jq '.[0].NetworkSettings.Networks.oc_management.IPAddress'
docker inspect ceos-2 |  jq '.[0].NetworkSettings.Networks.oc_management.IPAddress'

2. Exploring YANG models

docker exec -it gnmi-client bash

GO111MODULE=on go build github.com/openconfig/goyang

git clone --depth 1 https://github.com/aristanetworks/yang arista
git clone --depth 1 https://github.com/YangModels/yang.git yang

./goyang --format tree --path ./arista/ --path ./yang/standard/ietf/ \
./arista/EOS-4.21.3F/openconfig/public/release/models/interfaces/* | more

3. Build Arista gNMI client

docker exec -it gnmi-client bash

GO111MODULE=on go build -o arista-gnmi github.com/aristanetworks/goarista/cmd/gnmi

4. Demonstrate gNMI client

./arista-gnmi -addr 172.20.0.2:6030 -password admin -username admin capabilities
./arista-gnmi -addr 172.20.0.2:6030 -password admin -username admin get /
./arista-gnmi -addr 172.20.0.2:6030 -password admin -username admin subscribe "/network-instances/network-instance[name=default]/protocols/protocol[identifier=BGP][name=BGP]/bgp/" &
./arista-gnmi -addr 172.20.0.2:6030 -username admin -password admin update "/interfaces/interface[name=Ethernet1]/config/enabled" "false"
./arista-gnmi -addr 172.20.0.2:6030 -username admin -password admin update "/interfaces/interface[name=Ethernet1]/config/enabled" "true"

Terraform demo

Link

  1. Tmux-split the screen into three and start Cli sessions in two smaller screens, default interface Ethernet1

  2. Open main.tf and provider.tf

cd ~/tf-yang
rm -f terraform.tfstate*        
code main.tf
code provider.tf
  1. First configure L2 interface
resource "gnmi_interface" "SW1_Eth1" {
    provider = "gnmi.s1"
    name = "Ethernet1"
    description = "TF_INT_ETH1"
    switchport = true
    trunk_vlans = [100]
}
resource "gnmi_interface" "SW2_Eth1" {
    provider = "gnmi.s2"
    name = "Ethernet1"
    description = "TF_INT_ETH1"
    switchport = true
    access_vlan = 200
}
  1. Next configure IPv4 interface
resource "gnmi_interface" "SW1_Eth1" {
    provider = "gnmi.s1"
    name = "Ethernet1"
    description = "TF_INT_ETH1"
    switchport = false
    ipv4_address = "12.12.12.1/24"
}
resource "gnmi_interface" "SW2_Eth1" {
    provider = "gnmi.s2"
    name = "Ethernet1"
    description = "TF_INT_ETH1"
    switchport = false
    ipv4_address = "12.12.12.2/24"
}
  1. Examine the code

Cleanup

docker-compose down            

acb-oc's People

Contributors

networkop avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  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.