Creating Simple YANG Model

YANG model adalah bahasa yang dibuat khusus memodelkan jaringan. sekarang mari kita coba membuat yang model

module vyos-interface {
    prefix "interfaces";
    namespace "https://btech.id/";

    organization
      "Boer Technology";
    contact
      "zufar@btech.co.id";

    description
      "This is YANG Module for VyOS interface";

    typedef ipv4-prefix {
        type string {
            pattern
            '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
            + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
            + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
        }
    }

    container interface {
        list ethernet {
            key "name";
            leaf name {
                type string;
            }
            leaf address {
                type interfaces:ipv4-prefix;
            }
            leaf description {
                type string;
            }
        }
    }
}
  • module, adalah nama module yang tersebut, nama harus sama dengan nama file .yang
  • prefix, adalah tanda yang digunakan bahwa menggunakan resource di module tersebut, akan berguna jika kita mengimport data dari module lain.
  • namespace, semua YANG data model mempunyai namespace yang unik, module yang di publish di RFC, namespace dialokasikan oleh IANA. untuk private organization, namespace bebas dan harus didefinisikan.
  • organization, contact, description, penjelasan mengenai module tersebut
  • typedef, merupakan object yang mendefinisikan sebuah tipe data baru. pada contoh program diatas kita mendefinisikan tipe data ipv4-prefix. pattern saya ambil dari https://github.com/YangModels/yang/blob/master/standard/ietf/RFC/ietf-inet-types%402013-07-15.yang
  • container, merupakan kontainer yang berisi data yang lain, dapat di nestedkan (nested container)
  • list, merupakan object yang berisi kumpulan data, list tidak berisi value tertentu.
  • leaf, merupakan object yang memiliki satu value tertentu.

cek yang model tersebut :

zufar@zufar:~/Documents/Technology/Programming/YANG$ pyang -f tree vyos-interface.yang
module: vyos-interface
   +--rw interface
      +--rw ethernet* [name]
         +--rw name           string
         +--rw address?       ipv4-prefix
         +--rw description?   string

generate module tersebut menjadi module python :

zufar@zufar:~/Documents/Technology/Programming/YANG$ export PYBINDPLUGIN=`/usr/bin/env python -c \
>         'import pyangbind; import os; print "%s/plugin" % os.path.dirname(pyangbind.__file__)'`
zufar@zufar:~/Documents/Technology/Programming/YANG$ pyang --plugindir $PYBINDPLUGIN -f pybind vyos-interface.yang > vyos_interface.py

buat program python berdasarkan tree dari file YANG :

import vyos_interface                                              1

interface = vyos_interface.vyos_interface()                        2

new_interface = interface.interface.ethernet.add("eth0")           3
new_interface.address = "192.168.1.1/24"                           4
new_interface.description = "YANG generate"                        4

import json                                                        5
print (json.dumps(interface.get(), indent=4))                      5
  1. import module tersebut
  2. buat sebuah variable dari module tersebut, dengan memanggil fungsi module dari tree.
  3. lihat fungsi bintang pada tree? jika ada fungsi bintang, tambahkan .add() dimana value diisi dengan [name]
  4. tambahkan value lain seperti address dan description
  5. generate dengan indentasi 4, kedalam bentuk json

jalankan program tersebut :

zufar@zufar:~/Documents/Technology/Programming/YANG$ python generate.py
{
    "interface": {
        "ethernet": {
            "eth0": {
                "address": "192.168.1.1/24",
                "description": "YANG generate",
                "name": "eth0"
            }
        }
    }
}

Comments are closed.