{"id":16139429,"url":"https://github.com/networkop/acb-oc","last_synced_at":"2026-03-18T18:03:23.910Z","repository":{"id":83589934,"uuid":"188452884","full_name":"networkop/acb-oc","owner":"networkop","description":null,"archived":false,"fork":false,"pushed_at":"2019-05-28T08:21:34.000Z","size":171,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-06T17:51:57.411Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/networkop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-05-24T16:14:43.000Z","updated_at":"2023-06-03T16:37:48.000Z","dependencies_parsed_at":"2023-07-10T07:33:44.506Z","dependency_job_id":null,"html_url":"https://github.com/networkop/acb-oc","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/networkop/acb-oc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkop%2Facb-oc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkop%2Facb-oc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkop%2Facb-oc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkop%2Facb-oc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/networkop","download_url":"https://codeload.github.com/networkop/acb-oc/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/networkop%2Facb-oc/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260116645,"owners_count":22961064,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-09T23:49:03.108Z","updated_at":"2026-01-31T22:04:04.987Z","avatar_url":"https://github.com/networkop.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"## Intro\n\n\n### What is OpenConfig\n\n* The OpenConfig Working Group is a group of network operators that defines a set of vendor-neutral data models for switch configuration and status\n* The data models are expressed in YANG, a data modelling language\n* The OpenConfig working group doesn’t mandate an API (or protocol) for client access\n* The OpenConfig data model is accessed and manipulated over a choice of  APIs; NETCONF (over SSH), gNMI (gRPC) and RESTCONF (HTTPS)\n\n### History\n\n* Initially NETCONF, IETF group started 2003,  first spec was RFC4741 Dec 2006\n* YANG modelling language, IETF group started 2008,  first spec was RFC6020 in Oct 2010\n* Each vendor provided their own unique YANG models\n* OpenConfig working group was established in 2014\n* The working group published its first models including BGP in 2015 \n\n### Pitch \n\n*  Better programmatic interface to config and status\n* Better than the CLI for automated config management\n* Better than SNMP for getting telemetry\n    * Streaming, not polling!\n* Models developed in the open by operators, with feedback from vendors\n    * github.com/openconfig/public\n* Allows for cross-vendor tools to develop\n    * Where switches from different vendors are managed in the same way.\n* Models are not from the usual standard bodies IETF, IEEE not involved\n    * allows for rapid development of models\n\n### Customer Use Case\n\n* Do all config with YANG models\n    * Use OpenConfig models wherever defined\n    * Fill in gaps with proprietary models when necessary, proprietary models may be auto-generated.\n    * Common switch management, pushed to switches in a standard fashion. \n* Stream telemetry using YANG model\n\n\n## Useful links\n\n\n[GNMI specification](https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-specification.md)\n\n[OpenConfig YANG models](https://github.com/openconfig/public/tree/master/release/models)\n\n[Arista OpenConfig YANG models](https://github.com/aristanetworks/yang)\n\n[GNOI](https://github.com/openconfig/gnoi) - file transfer, ping, traceroute, clear ARP/STP/LLDP/BGP\n\n[GRIBI](https://github.com/openconfig/gribi/blob/master/proto/service/gribi.proto)\n\n## Demo \n\n### 1. Setup\n\n```bash\nexport CEOS_VERSION=ceos:4.21.5F\n\ndocker-compose up -d\ndocker inspect ceos-1 |  jq '.[0].NetworkSettings.Networks.oc_management.IPAddress'\ndocker inspect ceos-2 |  jq '.[0].NetworkSettings.Networks.oc_management.IPAddress'\n```\n\n### 2. Exploring YANG models\n\n```bash\ndocker exec -it gnmi-client bash\n\nGO111MODULE=on go build github.com/openconfig/goyang\n\ngit clone --depth 1 https://github.com/aristanetworks/yang arista\ngit clone --depth 1 https://github.com/YangModels/yang.git yang\n\n./goyang --format tree --path ./arista/ --path ./yang/standard/ietf/ \\\n./arista/EOS-4.21.3F/openconfig/public/release/models/interfaces/* | more\n```\n\n\n\n### 3. Build Arista gNMI client\n\n```\ndocker exec -it gnmi-client bash\n\nGO111MODULE=on go build -o arista-gnmi github.com/aristanetworks/goarista/cmd/gnmi\n```\n\n\n\n### 4. Demonstrate gNMI client \n\n```\n./arista-gnmi -addr 172.20.0.2:6030 -password admin -username admin capabilities\n```\n```\n./arista-gnmi -addr 172.20.0.2:6030 -password admin -username admin get /\n```\n```\n./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/\" \u0026\n```\n```\n./arista-gnmi -addr 172.20.0.2:6030 -username admin -password admin update \"/interfaces/interface[name=Ethernet1]/config/enabled\" \"false\"\n```\n```\n./arista-gnmi -addr 172.20.0.2:6030 -username admin -password admin update \"/interfaces/interface[name=Ethernet1]/config/enabled\" \"true\"\n```\n\n\n\n## Terraform demo\n\n[Link](https://github.com/networkop/terraform-yang)\n\n1. Tmux-split the screen into three and start Cli sessions in two smaller screens, default interface  Ethernet1\n\n2. Open `main.tf` and `provider.tf`\n\n```\ncd ~/tf-yang\nrm -f terraform.tfstate*        \ncode main.tf\ncode provider.tf\n```\n\n3. First configure L2 interface\n\n\n```\nresource \"gnmi_interface\" \"SW1_Eth1\" {\n    provider = \"gnmi.s1\"\n    name = \"Ethernet1\"\n    description = \"TF_INT_ETH1\"\n    switchport = true\n    trunk_vlans = [100]\n}\nresource \"gnmi_interface\" \"SW2_Eth1\" {\n    provider = \"gnmi.s2\"\n    name = \"Ethernet1\"\n    description = \"TF_INT_ETH1\"\n    switchport = true\n    access_vlan = 200\n}\n```\n\n4. Next configure IPv4 interface\n\n```\nresource \"gnmi_interface\" \"SW1_Eth1\" {\n    provider = \"gnmi.s1\"\n    name = \"Ethernet1\"\n    description = \"TF_INT_ETH1\"\n    switchport = false\n    ipv4_address = \"12.12.12.1/24\"\n}\nresource \"gnmi_interface\" \"SW2_Eth1\" {\n    provider = \"gnmi.s2\"\n    name = \"Ethernet1\"\n    description = \"TF_INT_ETH1\"\n    switchport = false\n    ipv4_address = \"12.12.12.2/24\"\n}\n```\n\n5. Examine the [code](https://github.com/networkop/terraform-yang/blob/master/resource_interface.go)\n\n\n## Cleanup\n\n```\ndocker-compose down            \n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetworkop%2Facb-oc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetworkop%2Facb-oc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetworkop%2Facb-oc/lists"}