Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NETCONFを転用して、 設定ファイルエディターをつくる話 / Config Editor ...

NETCONFを転用して、 設定ファイルエディターをつくる話 / Config Editor Implementation with NETCONF or YANG

JANOG43 の発表スライドです。

NETCONFを使えば、ネットワークデバイスから様々な情報を取得できます。設定データのスキーマ(文法) もそのひとつです。

このトークでは、NETCONFのスキーマ定義からCLI文法の抽象構文木を構築し、ネットワークデバイス向けの設定ファイルエディターをつくる方法を紹介します。

今回選んだスキーマは 100MB / 230万行におよびますが、このように作成することで細やかなキーワード補完 / 文法チェック / シンタックスハイライト が可能です。
NETCONF本来の目的とは違った方向への転用ですが、非常に便利です。

また、サンプルとしてLanguage Serverを実装しました。Visual Studio Codeによる実装ですが、vimやemacsなど多種多様なエディターをサポートできる可能性についても言及します。

デモ: https://www.youtube.com/watch?v=ZAonHbRVtz8

Shintaro Kojima

January 21, 2019
Tweet

More Decks by Shintaro Kojima

Other Decks in Technology

Transcript

  1. XSD(NETCONF) / YANG vs. CLI <?xml version…> <rpc/> <xsd:schema …/>

    or yang text NETCONF CLI ͜͜ͷߏ଄͕ ࣅ͍ͯΔͨΊ !6
  2. NETCONF / YANG vs. CLI <?xml version…> <rpc/> <xsd:schema …/>

    or yang text NETCONF CLI จ๏ͷ஫ೖ͕Մೳ !7
  3. <xsd:complexType name="interfaces-type"> <xsd:sequence> <xsd:element name="name"> <xsd:complexType> <xsd:simpleContent> <xsd:restriction base="key-attribute-string-type"> <xsd:enumeration

    value="$junos-interface-ifd-name"> </xsd:enumeration> <xsd:enumeration value="interface-name"> </xsd:enumeration> </xsd:restriction> </xsd:simpleContent> </xsd:complexType> </xsd:element> <!-- </name> --> <xsd:element name="unit" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="name"> <xsd:complexType> <xsd:simpleContent> <xsd:restriction base="xsd:anyType"> <xsd:simpleType> <xsd:union memberTypes="xsd:unsignedLong"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="$junos-underlying- interface-unit"> XSD (NETCONF) set interfaces <name> unit <number> CLI +6/04ͷྫ !8 OBNF VOJU
  4. grouping interfaces_type { description "Physical interface"; leaf name { type

    string; } list unit { key name; description "Logical interface"; leaf name { type string; } list unit { key name; description "Logical interface"; leaf name { type string; } YANG set interfaces <name> unit <number> CLI +6/04ͷྫ !9
  5.  94%ͷऔಘ w <get-schema/>ίϚϯυ /&5$0/'   ΋͘͠͸ɺ:"/(Ϟσϧऔಘ w ϕϯμʔ͕ެ։͍ͯ͠Δ

     PSΛύʔεͯ͠ந৅ߏจ໦Λͭ͘Δ w ೚ҙͷ$-*֊૚Ͱɺଓ͘ҰஈԼͷΩʔϫʔυ ࢬ Ϧετ͕औΕΔ w ิ׬ɾจ๏νΣοΫ͕Ͱ͖Δ  ΤσΟλʔΛ࣮૷͢Δ ΤσΟλʔͷ࡞Γ͔ͨ ֓ཁ !10