2021年7月4日にAutomating and Programming Cisco Service Provider Solutions v1.0 (SPAUTO 300-535) になんとか合格できたので、受験記を書いてみます。この試験に関しては、まだかなり情報が少ないので、受験を考えている方の参考になれば幸いです。
- Automating and Programming Cisco Service Provider Solutions v1.0とは?
- 勉強した内容
- 1.0 Network Programming Foundation (10%)
- 1.1 Utilize common version control operations with git (add, clone, push, commit, diff, branching, and merging conflict)
- 1.2 Describe characteristics of API styles (REST and RPC)
- 1.3 Describe the challenges encountered and patterns used when consuming APIs synchronously and asynchronously
- 1.4 Interpret Python scripts containing data types, functions, classes, conditions, and looping
- 1.5 Describe the benefits of Python virtual environments
- 1.6 Explain the benefits of using network configuration tools such as Ansible and Puppet for automating IOS XE or IOS XR platforms
- 2.0 Automation APIs and Protocols (30%)
- 2.1 Describe the characteristics and use of YANG Data Models (OpenConfig, IETF, and Vendor)
- 2.2 Describe common HTTP authentication mechanisms (basic, token, and oauth)
- 2.3 Compare common data types (JSON, XML, YAML, plain text, gRPC, and protobuf)
- 2.4 Identify the JSON instance based on a YANG model
- 2.5 Identify the XML instance based on a YANG model
- 2.6 Interpret a YANG module tree generated by pyang
- 2.7 Implement configuration and operation management using RESTCONF protocol
- 2.8 Implement configuration and operation management using NETCONF protocol
- 2.9 Compare the NETCONF datastores
- 1.0 Network Programming Foundation (10%)
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として認定されます。
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の記載から大きく外れる問題は出題されませんでした。
勉強期間は約一ヶ月です。この試験は、DevNet Specialistに分類される試験ですが、DevNet Associate (DEVASC 200-901)を取得している方であれば、Exam Topicsを見て、「あれ?意外にハードル低いのでは?」と思われると思います。主に利用した勉強リソースは、下記です。
- Cisco DevNet Learning Labs (上のExam Topicsに関連づけされているStudy Material)
- Cisco Liveの資料
- ラボ環境 (CSR1000v, ASR9kv, NSO)
手元にラボ環境がない場合も、DevNet SandBoxを利用することで同じように勉強ができると思います。
また、私は利用していないのですが、Official Trainingがあるので、効率的に勉強したい方は活用しても良いかもしれません。
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の取り消しなどのコマンドは覚えていないという方も多いのでは!?
1.2 Describe characteristics of API styles (REST and RPC)
下記リンクの情報を参考させて頂き、RESTとRPCの違いを説明できるようにしました。
- REST (REpresentational State Transfer):リソース要求スタイル
- RPC (Remote Procedure Call) : 操作要求スタイル
1.3 Describe the challenges encountered and patterns used when consuming APIs synchronously and asynchronously
下記リンクを参考に、同期処理・非同期処理の違いと、非同期リクエストをポーリング実行する場合のステータスコードの変化を勉強しました。
1.4 Interpret Python scripts containing data types, functions, classes, conditions, and looping
下記のDevNet Learning LabsのコンテンツでPythonスクリプトの基本構文とその実行結果を復習しました。Pythonスクリプトをよく書いている方はここに時間を割く必要はないかもしれません。
- https://developer.cisco.com/learning/lab/intro-python-part1/step/1
- https://developer.cisco.com/learning/lab/intro-python-part2/step/1
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
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(*,!,…)などの表記の定義を勉強しました。
$ 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の資料を勉強しました。
- DevNet : Breaking down RESTCONF Communications
- Ciscolive : Introduction to Model Driven Programmability (p.62-80)
2.8 Implement configuration and operation management using NETCONF protocol
下記のDevNet Learning LabsのコンテンツとCisco Liveの資料を勉強しました。
- DevNet : Breaking down NETCONF Communications
- Ciscolive : Introduction to Model Driven Programmability (p.33-61)
2.9 Compare the NETCONF datastores
2.8と重複しますが、下記のData Storesセクションを勉強しました。
少し長くなってしまったので、別記事にて後半を書きたいと思います。
ネットワーク自動化を基礎から体系的に学びたい方は下記の本がおすすめです。
コメント