【前半】Automating and Programming Cisco Service Provider Solutions v1.0 (SPAUTO 300-535) 受験記

DevNet

2021年7月4日にAutomating and Programming Cisco Service Provider Solutions v1.0  (SPAUTO 300-535) になんとか合格できたので、受験記を書いてみます。この試験に関しては、まだかなり情報が少ないので、受験を考えている方の参考になれば幸いです。

Automating and Programming Cisco Service Provider Solutions v1.0とは?

DevNet Specialist試験のうちの一つで、CCNAに相当するDevNet Associate試験の次のレベルの試験になります。この試験とDeveloping Applications using Cisco Core Platforms and APIs v1.0 (350-901)に合格すると、CCNP相当のDevNet Professionalとして認定されます。

Cisco DevNet
Cisco DevNet is Cisco's developer program to help developers and IT professionals who want to write applications and develop integrations with Cisco products, p...

Automating and Programming Cisco Service Provider Solutions v1.0  (SPAUTO 300-535) では、サービスプロバイダ自動化ソリューションの実装に関する知識が問われます。

受験方法:テストセンターまたはオンライン試験

試験時間:90分 + 30分 (non-native English speakerの場合)

試験形式:単一/複数選択式、Drag&Drop

勉強した内容

下記のExam Topicsに沿って勉強をしました。予告なしで変更される可能性があるとのことで、時間が経つとこのブログと試験内容が乖離する可能性がありますが、現時点でのExam Topicsに沿ってどんな勉強したか?を書いてみます。Exam Topicsの記載から大きく外れる問題は出題されませんでした。

Cisco DevNet
Cisco DevNet is Cisco's developer program to help developers and IT professionals who want to write applications and develop integrations with Cisco products, p...

勉強期間は約一ヶ月です。この試験は、DevNet Specialistに分類される試験ですが、DevNet Associate (DEVASC 200-901)を取得している方であれば、Exam Topicsを見て、「あれ?意外にハードル低いのでは?」と思われると思います。主に利用した勉強リソースは、下記です。

  • Cisco DevNet Learning Labs (上のExam Topicsに関連づけされているStudy Material)
  • Cisco Liveの資料
  • ラボ環境 (CSR1000v, ASR9kv, NSO)

手元にラボ環境がない場合も、DevNet SandBoxを利用することで同じように勉強ができると思います。

DevNet auth

また、私は利用していないのですが、Official Trainingがあるので、効率的に勉強したい方は活用しても良いかもしれません。

Implementing Automation for Cisco Service Provider Solutions (SPAUI)
Learn how to implement and support automation solutions in a Service Provider network infrastructure, using network programmability principles, protocols, tools...

1.0 Network Programming Foundation (10%)

1.1 Utilize common version control operations with git (add, clone, push, commit, diff, branching, and merging conflict)

下記のgitコマンド早見表をひたすら暗記しました。よく使う”git clone”や”git commit”などは知っている方も多いと思いますが、add/commitの取り消しなどのコマンドは覚えていないという方も多いのでは!?

Gitコマンド早見表 - Qiita
作業別Gitコマンド集の圧縮版 初期設定を行う $ git config --global user.name "XXXX" $ git config --global user.email "XXXX@hogehoge.com...

1.2 Describe characteristics of API styles (REST and RPC)

下記リンクの情報を参考させて頂き、RESTとRPCの違いを説明できるようにしました。

  • REST (REpresentational State Transfer):リソース要求スタイル
  • RPC (Remote Procedure Call) : 操作要求スタイル
ときどきWEB | REST APIとRPCによるアーキテクチャの違いをまとめてやんよ!!!
ときどきWEB | REST APIとRPCによるアーキテクチャの違いをまとめてやんよ!!!

1.3 Describe the challenges encountered and patterns used when consuming APIs synchronously and asynchronously

下記リンクを参考に、同期処理・非同期処理の違いと、非同期リクエストをポーリング実行する場合のステータスコードの変化を勉強しました。

Cisco DevNet
Cisco DevNet is Cisco's developer program to help developers and IT professionals who want to write applications and develop integrations with Cisco products, p...

1.4 Interpret Python scripts containing data types, functions, classes, conditions, and looping

下記のDevNet Learning LabsのコンテンツでPythonスクリプトの基本構文とその実行結果を復習しました。Pythonスクリプトをよく書いている方はここに時間を割く必要はないかもしれません。

1.5 Describe the benefits of Python virtual environments

下記を参考にvenvを使うメリットを復習しました。こちらもvenvを普段利用されている方はここに時間を割く必要はないかもしれません。

1.6 Explain the benefits of using network configuration tools such as Ansible and Puppet for automating IOS XE or IOS XR platforms

下記のDevNet Docsを参考に、Ansibleを利用するメリットを説明できるようにしました。

2.0 Automation APIs and Protocols (30%)

2.1 Describe the characteristics and use of YANG Data Models (OpenConfig, IETF, and Vendor)

下記を参考にYANG Data Modelsの構造や定義を復習しました。

2.2 Describe common HTTP authentication mechanisms (basic, token, and oauth)

下記のCisco Liveの資料の「p.10-13 API Authorization/Authentication」でAuthentication Schemeの違いとHeaderの書き方を復習しました。

2.3 Compare common data types (JSON, XML, YAML, plain text, gRPC, and protobuf)

下記のCisco Liveの資料を参考にData Typeについて学習しました。

  • https://www.ciscolive.com/c/dam/r/ciscolive/apjc/docs/2017/pdf/BRKSDN-2119.pdf
    • JSON : p.15
    • XML : p.14
    • YAML : p.16
    • gRPC : p.55
    • protobuf : p.56

2.4 Identify the JSON instance based on a YANG model

pyangのYANGツリー表示とRESTCONFのGETレスポンス(JSON)を見比べて変換方法を確認して、YANGモデルからJSON形式のデータを作成できるようにしました。

$ pyang -f tree ietf-interfaces.yang --tree-depth=5
module: ietf-interfaces
   +--rw interfaces
   |  +--rw interface* [name]
   |     +--rw name                        string
   |     +--rw description?                string
   |     +--rw type                        identityref
   |     +--rw enabled?                    boolean
   |     +--rw link-up-down-trap-enable?   enumeration {if-mib}?
   +--ro interfaces-state
RESTCONF response

2.5 Identify the XML instance based on a YANG model

pyangのYANGツリー表示とNETCONFのレスポンス(XML)を見比べて変換方法を確認して、YANGモデルからXML形式のデータを作成できるようにしました。

$ pyang -f tree ietf-interfaces.yang --tree-depth=5
module: ietf-interfaces
   +--rw interfaces
   |  +--rw interface* [name]
   |     +--rw name                        string
   |     +--rw description?                string
   |     +--rw type                        identityref
   |     +--rw enabled?                    boolean
   |     +--rw link-up-down-trap-enable?   enumeration {if-mib}?
   +--ro interfaces-state

get_IFconf_netconf.py

from ncclient import manager
import xmltodict
import xml.dom.minidom

# Create an XML filter for targeted NETCONF queries
netconf_filter = """
<filter>
  <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
    <interface></interface>
  </interfaces>
</filter>"""

with manager.connect(
         host="**.**.**.**",
         port="830",
         username="***",
         password="***",
         hostkey_verify=False
         ) as m:


 netconf_reply = m.get_config(source = 'running', filter = netconf_filter)
 print(xml.dom.minidom.parseString(netconf_reply.xml).toprettyxml())
$ python3 get_IFconf_netconf.py
<?xml version="1.0" ?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:b9d3401e-ac87-445d-9bde-dad279f733f3">
	<data>
		<interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
			<interface>
				<name>GigabitEthernet2</name>
				<description>to_R4</description>
				<type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
				<enabled>true</enabled>
				<ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
					<address>
						<ip>172.16.1.1</ip>
						<netmask>255.255.255.0</netmask>
					</address>
				</ipv4>
				<ipv6 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip"/>
			</interface>
		</interfaces>
	</data>
</rpc-reply>

2.6 Interpret a YANG module tree generated by pyang

RFC8340の「2.6 Node Representation」を参考に、YANG treeのstatus(+,x,o), flags(rw,ro,…), option(*,!,…)などの表記の定義を勉強しました。

RFC 8340 - YANG Tree Diagrams
YANG Tree Diagrams (RFC )
$ pyang -f tree  Cisco-IOS-XE-bgp.yang  --tree-path=address-family/with-vrf/ipv4/vrf/ipv4-unicast/bgp --tree-depth=10 
module: Cisco-IOS-XE-bgp
 
  augment /ios:native/ios:router:
    +--rw bgp* [id]
       +--rw address-family
          +--rw with-vrf
             +--rw ipv4* [af-name]
                +--rw vrf* [name]
                   +--rw ipv4-unicast
                      +--rw bgp
                         +--rw additional-paths
                         |  +--rw install?   empty
                         |  +--rw receive?   empty

2.7 Implement configuration and operation management using RESTCONF protocol

下記のDevNet Learning LabsのコンテンツとCisco Liveの資料を勉強しました。

2.8 Implement configuration and operation management using NETCONF protocol

下記のDevNet Learning LabsのコンテンツとCisco Liveの資料を勉強しました。

2.9 Compare the NETCONF datastores

2.8と重複しますが、下記のData Storesセクションを勉強しました。

少し長くなってしまったので、別記事にて後半を書きたいと思います。

ネットワーク自動化を基礎から体系的に学びたい方は下記の本がおすすめです。

コメント

タイトルとURLをコピーしました