tiad 2016 : network automation with ansible and openconfig/yang

18
Network Automation with Ansible and OpenConfig / YANG Marcel Wiget & Khelil Sator Juniper Networks

Upload: the-incredible-automation-day

Post on 06-Jan-2017

242 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

Network Automationwith Ansible andOpenConfig / YANGMarcel Wiget & Khelil SatorJuniper Networks

Page 2: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

2 © 2016 Juniper Networks, Inc. All rights reserved.

Agenda

• One Protocol – many languages to master …• From CLI scraping to NETCONF• NETCONF Python Tools• Common Data Model Language YANG• OpenConfig• Ansible for Juniper Network Devices• Demo

Page 3: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

3 © 2016 Juniper Networks, Inc. All rights reserved.

One Protocol – many languages to master …

router bgp as-number 12345

configure router autonomous-system 12345

set routing-options autonomous-system 1234

router bgp 12345

Page 4: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

4 © 2016 Juniper Networks, Inc. All rights reserved.

Wait, we have been here 25 years ago …

SNMP RFC 1157 Get and Set Operations

A

Standard and Enterprise specific MIBs don’t mix !

B C D

MIBStandard:

Enterprise Specific MIBs:

Page 5: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

5 © 2016 Juniper Networks, Inc. All rights reserved.

Why CLI scraping is bad …

Simple Task: Get IP address of a Linux Server

IP=$(hostname --ip-address | awk '{print $1}’)

hostname --ip-address172.17.0.4 172.20.0.3 172.18.0.2 172.19.0.2 Host2:

hostname --ip-address2a05:4f8:1130:55b0::2 193.5.1.23Host3:

hostname --ip-address172.17.0.3Host1:

Page 6: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

6 © 2016 Juniper Networks, Inc. All rights reserved.

The Network Configuration Protocol - NETCONF

• Protocol to “install, manipulate and delete configuration” • Extensible Markup Language (XML)-based data encoding for

configuration data and protocol messages• NETCONF protocol operations over a simple RPC layer• Defined by the IETF in RFC 4741 in 2006, updated in RFC 6241• NETCONF over SSH first defined in RFC 4742, updated in RFC

6242 XML RPC over SSH

TCP Port 830

Page 7: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

7 © 2016 Juniper Networks, Inc. All rights reserved.

NETCONF Python Tools

• ncclient: Python library for NETCONF clients (http://ncclient.org/)Can automate operations, but still low low level operation

• Junos PyEZ uses ncclient and adds a level of abstraction “easy” to use, even for network operatorshttps://github.com/Juniper/py-junos-eznc

• Ansible uses PyEZ

XML RPC over SSH

TCP Port 830

Page 8: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

8 © 2016 Juniper Networks, Inc. All rights reserved.

YANG

• Data model language for the Network Configuration Protocol (NETCONF)• Defined by the IETF in RFC 6020 in 2010• YANG is an acronym for "Yet Another Next Generation"• Human readable • Any encoding format, including XML and JSON• Transport over NETCONF over SSH and recently also over gPRC

https://tools.ietf.org/html/rfc6020

Page 9: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

9 © 2016 Juniper Networks, Inc. All rights reserved.

YANG Schema Examplegrouping bgp-global-config {...

leaf as { type inet:as-number; mandatory true; description "Local autonomous system number of the router. Uses

the 32-bit as-number type from the model in RFC 6991.";

}...

[edit openconfig-bgp:bgp global config]mwiget@oc1# set as ?Possible completions: <as> Local autonomous system number of the router. Uses the 32-bit as-number type from the model in RFC 6991.

Page 10: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

10 © 2016 Juniper Networks, Inc. All rights reserved.

YANG Augmentation and Deviation

Base Schema Augmentation Deviation Used Schema

Add new container, leafor description

Disable container

or leaf

ActiveSchema

IETFOpenConfig

Custom

maintained in separate text files

Page 11: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

11 © 2016 Juniper Networks, Inc. All rights reserved.

• Vendor-neutral, model-driven network management designed by users

• Common Data Modelswritten in YANG

• Streaming Telemetry• Published on GitHub

OpenConfig http://www.openconfig.net

Page 12: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

12 © 2016 Juniper Networks, Inc. All rights reserved.

OpenConfigOne Protocol – one language to master all vendors

openconfig-bgp:bgp global as 12345

(over CLI, NETCONF/SSH & gRPC)

http://www.juniper.net/us/en/solutions/automation/

Page 13: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

13 © 2016 Juniper Networks, Inc. All rights reserved.

OpenConfigOne Protocol – one language, many encoding

openconfig-bgp:bgp global as 12345

<rpc-reply xmlns:junos="http://xml.juniper.net/junos/16.1I0/junos"> <bgp xmlns="http://openconfig.net/yang/bgp"> <global> <config> <as>65000</as> <router-id>1.1.1.1</router-id> </config> </global> </bgp></rpc-reply>

{ "openconfig-bgp:bgp" : { "global" : { "config" : { "as" : "65000", "router-id" : "1.1.1.1" } } }}

XML JSON

CLI

Page 14: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

14 © 2016 Juniper Networks, Inc. All rights reserved.

Standard Mode: sendsPython module over SSH,executes, then removes it

NetworkDevices

Servers

Ansible Python module over SSH

Page 15: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

15 © 2016 Juniper Networks, Inc. All rights reserved.

NETCONF over SSH

NetworkDevices

Servers

Ansible

+

API Mode:Modules run on server,communicate over an API

https://www.ansible.com/ansible-juniper

Page 16: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

16 © 2016 Juniper Networks, Inc. All rights reserved.

Junos Core Modules in Ansible 2.1

junos_config Deploy configuration lines, zeroize, rollback junos_template Deploy configuration template or filejunos_facts Gather device facts and configurationjunos_packages Deploy and install packages/os on devicesjunos_command Execute any CLI or RPC commands remotely junos_netconf Enable NETCONF on devices

Page 17: TIAD 2016 : Network automation with Ansible and OpenConfig/YANG

© 2016 Juniper Networks, Inc. All rights reserved.17

DEMO !

https://github.com/ksator/openconfig-demo