From b15106b88cc7dd61c2d30886e181ad2f8cc722db Mon Sep 17 00:00:00 2001
From: Ray Kinsella <mdr@ashroe.eu>
Date: Wed, 29 Jun 2022 17:43:23 +0100
Subject: [PATCH] build: reworked with setuptools

Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
---
 Makefile                                      | 28 +++++++++++++
 README.md                                     | 23 +++++-----
 pyproject.toml                                | 17 ++++++++
 vppcfg.spec                                   | 42 -------------------
 vppcfg/__init__.py                            |  9 ++++
 {config => vppcfg/config}/__init__.py         |  0
 {config => vppcfg/config}/address.py          |  0
 {config => vppcfg/config}/bondethernet.py     |  0
 {config => vppcfg/config}/bridgedomain.py     |  0
 {config => vppcfg/config}/interface.py        |  0
 {config => vppcfg/config}/lcp.py              |  0
 {config => vppcfg/config}/loopback.py         |  0
 {config => vppcfg/config}/mac.py              |  0
 {config => vppcfg/config}/tap.py              |  0
 .../config}/test_bondethernet.py              |  0
 .../config}/test_bridgedomain.py              |  0
 {config => vppcfg/config}/test_interface.py   |  0
 {config => vppcfg/config}/test_lcp.py         |  0
 {config => vppcfg/config}/test_loopback.py    |  0
 {config => vppcfg/config}/test_mac.py         |  0
 {config => vppcfg/config}/test_tap.py         |  0
 .../config}/test_vxlan_tunnel.py              |  0
 {config => vppcfg/config}/vxlan_tunnel.py     |  0
 {intest => vppcfg/intest}/hippo-empty.yaml    |  0
 {intest => vppcfg/intest}/hippo1.yaml         |  0
 {intest => vppcfg/intest}/hippo10.yaml        |  0
 {intest => vppcfg/intest}/hippo11.yaml        |  0
 {intest => vppcfg/intest}/hippo12.yaml        |  0
 {intest => vppcfg/intest}/hippo13.yaml        |  0
 {intest => vppcfg/intest}/hippo14.yaml        |  0
 {intest => vppcfg/intest}/hippo2.yaml         |  0
 {intest => vppcfg/intest}/hippo3.yaml         |  0
 {intest => vppcfg/intest}/hippo4.yaml         |  0
 {intest => vppcfg/intest}/hippo5.yaml         |  0
 {intest => vppcfg/intest}/hippo6.yaml         |  0
 {intest => vppcfg/intest}/hippo7.yaml         |  0
 {intest => vppcfg/intest}/hippo8.yaml         |  0
 {intest => vppcfg/intest}/hippo9.yaml         |  0
 {intest => vppcfg/intest}/intest.sh           |  0
 tests.py => vppcfg/tests.py                   |  0
 .../unittest}/test_bondethernet.yaml          |  0
 .../unittest}/test_bridgedomain.yaml          |  0
 .../unittest}/test_interface.yaml             |  0
 {unittest => vppcfg/unittest}/test_lcp.yaml   |  0
 .../unittest}/test_loopback.yaml              |  0
 {unittest => vppcfg/unittest}/test_tap.yaml   |  0
 .../unittest}/test_vxlan_tunnel.yaml          |  0
 .../unittest}/yaml/correct-address.yaml       |  0
 .../unittest}/yaml/correct-bondethernet.yaml  |  0
 .../unittest}/yaml/correct-bridgedomain.yaml  |  0
 .../unittest}/yaml/correct-empty.yaml         |  0
 .../unittest}/yaml/correct-empty2.yaml        |  0
 .../unittest}/yaml/correct-example1.yaml      |  0
 .../unittest}/yaml/correct-l2xc.yaml          |  0
 .../unittest}/yaml/correct-loopback.yaml      |  0
 .../unittest}/yaml/correct-tap.yaml           |  0
 .../unittest}/yaml/correct-vxlan.yaml         |  0
 .../unittest}/yaml/error-address1.yaml        |  0
 .../unittest}/yaml/error-bondethernet1.yaml   |  0
 .../unittest}/yaml/error-bondethernet2.yaml   |  0
 .../unittest}/yaml/error-bondethernet3.yaml   |  0
 .../unittest}/yaml/error-bondethernet4.yaml   |  0
 .../unittest}/yaml/error-bondethernet5.yaml   |  0
 .../unittest}/yaml/error-bondethernet6.yaml   |  0
 .../unittest}/yaml/error-bondethernet7.yaml   |  0
 .../unittest}/yaml/error-bondethernet8.yaml   |  0
 .../unittest}/yaml/error-bondethernet9.yaml   |  0
 .../unittest}/yaml/error-bridgedomain1.yaml   |  0
 .../unittest}/yaml/error-bridgedomain2.yaml   |  0
 .../unittest}/yaml/error-bridgedomain3.yaml   |  0
 .../unittest}/yaml/error-bridgedomain4.yaml   |  0
 .../unittest}/yaml/error-bridgedomain5.yaml   |  0
 .../unittest}/yaml/error-bridgedomain6.yaml   |  0
 .../unittest}/yaml/error-bridgedomain7.yaml   |  0
 .../unittest}/yaml/error-bridgedomain8.yaml   |  0
 .../unittest}/yaml/error-bridgedomain9.yaml   |  0
 .../unittest}/yaml/error-interface-mtu1.yaml  |  0
 .../unittest}/yaml/error-interface-mtu2.yaml  |  0
 .../unittest}/yaml/error-interface1.yaml      |  0
 .../unittest}/yaml/error-l2xc1.yaml           |  0
 .../unittest}/yaml/error-l2xc2.yaml           |  0
 .../unittest}/yaml/error-l2xc3.yaml           |  0
 .../unittest}/yaml/error-l2xc4.yaml           |  0
 .../unittest}/yaml/error-l2xc5.yaml           |  0
 .../unittest}/yaml/error-l2xc6.yaml           |  0
 .../unittest}/yaml/error-l2xc7.yaml           |  0
 .../unittest}/yaml/error-l2xc8.yaml           |  0
 .../unittest}/yaml/error-lcp-unique1.yaml     |  0
 .../unittest}/yaml/error-lcp-unique2.yaml     |  0
 .../unittest}/yaml/error-loopback1.yaml       |  0
 .../unittest}/yaml/error-loopback2.yaml       |  0
 .../unittest}/yaml/error-schema-field1.yaml   |  0
 .../unittest}/yaml/error-schema-field2.yaml   |  0
 .../unittest}/yaml/error-subinterface1.yaml   |  0
 .../unittest}/yaml/error-subinterface2.yaml   |  0
 .../unittest}/yaml/error-subinterface3.yaml   |  0
 .../unittest}/yaml/error-subinterface6.yaml   |  0
 .../unittest}/yaml/error-subinterface7.yaml   |  0
 .../unittest}/yaml/error-subinterface8.yaml   |  0
 .../unittest}/yaml/error-subinterface9.yaml   |  0
 .../unittest}/yaml/error-tap1.yaml            |  0
 .../unittest}/yaml/error-tap2.yaml            |  0
 .../unittest}/yaml/error-tap3.yaml            |  0
 .../unittest}/yaml/error-tap4.yaml            |  0
 .../unittest}/yaml/error-tap5.yaml            |  0
 .../unittest}/yaml/error-tap6.yaml            |  0
 .../unittest}/yaml/error-vxlan1.yaml          |  0
 .../unittest}/yaml/error-vxlan2.yaml          |  0
 .../unittest}/yaml/error-vxlan3.yaml          |  0
 {vpp => vppcfg/vpp}/applier.py                |  0
 {vpp => vppcfg/vpp}/dumper.py                 |  0
 {vpp => vppcfg/vpp}/reconciler.py             |  0
 {vpp => vppcfg/vpp}/vppapi.py                 |  0
 vppcfg => vppcfg/vppcfg.py                    |  0
 114 files changed, 65 insertions(+), 54 deletions(-)
 create mode 100644 Makefile
 create mode 100644 pyproject.toml
 delete mode 100644 vppcfg.spec
 create mode 100644 vppcfg/__init__.py
 rename {config => vppcfg/config}/__init__.py (100%)
 rename {config => vppcfg/config}/address.py (100%)
 rename {config => vppcfg/config}/bondethernet.py (100%)
 rename {config => vppcfg/config}/bridgedomain.py (100%)
 rename {config => vppcfg/config}/interface.py (100%)
 rename {config => vppcfg/config}/lcp.py (100%)
 rename {config => vppcfg/config}/loopback.py (100%)
 rename {config => vppcfg/config}/mac.py (100%)
 rename {config => vppcfg/config}/tap.py (100%)
 rename {config => vppcfg/config}/test_bondethernet.py (100%)
 rename {config => vppcfg/config}/test_bridgedomain.py (100%)
 rename {config => vppcfg/config}/test_interface.py (100%)
 rename {config => vppcfg/config}/test_lcp.py (100%)
 rename {config => vppcfg/config}/test_loopback.py (100%)
 rename {config => vppcfg/config}/test_mac.py (100%)
 rename {config => vppcfg/config}/test_tap.py (100%)
 rename {config => vppcfg/config}/test_vxlan_tunnel.py (100%)
 rename {config => vppcfg/config}/vxlan_tunnel.py (100%)
 rename {intest => vppcfg/intest}/hippo-empty.yaml (100%)
 rename {intest => vppcfg/intest}/hippo1.yaml (100%)
 rename {intest => vppcfg/intest}/hippo10.yaml (100%)
 rename {intest => vppcfg/intest}/hippo11.yaml (100%)
 rename {intest => vppcfg/intest}/hippo12.yaml (100%)
 rename {intest => vppcfg/intest}/hippo13.yaml (100%)
 rename {intest => vppcfg/intest}/hippo14.yaml (100%)
 rename {intest => vppcfg/intest}/hippo2.yaml (100%)
 rename {intest => vppcfg/intest}/hippo3.yaml (100%)
 rename {intest => vppcfg/intest}/hippo4.yaml (100%)
 rename {intest => vppcfg/intest}/hippo5.yaml (100%)
 rename {intest => vppcfg/intest}/hippo6.yaml (100%)
 rename {intest => vppcfg/intest}/hippo7.yaml (100%)
 rename {intest => vppcfg/intest}/hippo8.yaml (100%)
 rename {intest => vppcfg/intest}/hippo9.yaml (100%)
 rename {intest => vppcfg/intest}/intest.sh (100%)
 rename tests.py => vppcfg/tests.py (100%)
 rename {unittest => vppcfg/unittest}/test_bondethernet.yaml (100%)
 rename {unittest => vppcfg/unittest}/test_bridgedomain.yaml (100%)
 rename {unittest => vppcfg/unittest}/test_interface.yaml (100%)
 rename {unittest => vppcfg/unittest}/test_lcp.yaml (100%)
 rename {unittest => vppcfg/unittest}/test_loopback.yaml (100%)
 rename {unittest => vppcfg/unittest}/test_tap.yaml (100%)
 rename {unittest => vppcfg/unittest}/test_vxlan_tunnel.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/correct-address.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/correct-bondethernet.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/correct-bridgedomain.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/correct-empty.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/correct-empty2.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/correct-example1.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/correct-l2xc.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/correct-loopback.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/correct-tap.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/correct-vxlan.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-address1.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bondethernet1.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bondethernet2.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bondethernet3.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bondethernet4.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bondethernet5.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bondethernet6.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bondethernet7.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bondethernet8.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bondethernet9.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bridgedomain1.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bridgedomain2.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bridgedomain3.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bridgedomain4.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bridgedomain5.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bridgedomain6.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bridgedomain7.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bridgedomain8.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-bridgedomain9.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-interface-mtu1.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-interface-mtu2.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-interface1.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-l2xc1.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-l2xc2.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-l2xc3.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-l2xc4.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-l2xc5.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-l2xc6.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-l2xc7.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-l2xc8.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-lcp-unique1.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-lcp-unique2.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-loopback1.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-loopback2.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-schema-field1.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-schema-field2.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-subinterface1.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-subinterface2.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-subinterface3.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-subinterface6.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-subinterface7.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-subinterface8.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-subinterface9.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-tap1.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-tap2.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-tap3.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-tap4.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-tap5.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-tap6.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-vxlan1.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-vxlan2.yaml (100%)
 rename {unittest => vppcfg/unittest}/yaml/error-vxlan3.yaml (100%)
 rename {vpp => vppcfg/vpp}/applier.py (100%)
 rename {vpp => vppcfg/vpp}/dumper.py (100%)
 rename {vpp => vppcfg/vpp}/reconciler.py (100%)
 rename {vpp => vppcfg/vpp}/vppapi.py (100%)
 rename vppcfg => vppcfg/vppcfg.py (100%)

diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..abffe8a
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,28 @@
+VERSION=0.0.1
+VPPCFG:=vppcfg
+PYTHON?=python3
+PIP?=pip
+PIP_DEPENDS=build yamale netaddr pylint
+PIP_DEPENDS+=argparse pyyaml ipaddress pyinstaller black
+WHL_INSTALL=dist/$(VPPCFG)-$(VERSION)-py3-none-any.whl
+
+
+.PHONY: build
+build:
+	$(PYTHON) -m build
+
+.PHONY: install-deps
+install-deps:
+	sudo $(PIP) install $(PIP_DEPENDS)
+
+.PHONY: install
+install:
+	sudo $(PIP) install $(WHL_INSTALL)
+
+.PHONY: uninstall
+uninstall:
+	sudo $(PIP) uninstall $(VPPCFG)
+
+.PHONY: wipe
+wipe:
+	$(RM) -rf dist $(VPPCFG).egg-info
diff --git a/README.md b/README.md
index 5162bc3..4f3df68 100644
--- a/README.md
+++ b/README.md
@@ -13,21 +13,20 @@ If you're interested in helping, reach out to &lt;pim at ipng dot ch&gt; to disc
 This program expects Python3 and PIP to be installed. It's known to work on OpenBSD and Debian.
 
 ```
-sudo pip3 install argparse
-sudo pip3 install yamale
-sudo pip3 install pyyaml
-sudo pip3 install netaddr
-sudo pip3 install ipaddress
-sudo pip3 install pyinstaller
-sudo pip3 install black
-sudo pip3 install pylint
+## Install python build dependencies 
+$ make install-deps
 
 ## Ensure all unittests pass.
-./tests.py -d -t unittest/yaml/*.yaml
+$ vppcfg/tests.py -d -t unittest/yaml/*.yaml
+
+## Build vppcfg
+$ make build
+
+## Install the tool with PIP
+$ make install
+
+###
 
-## Build the tool
-pyinstaller vppcfg.spec --onefile
-dist/vppcfg -h
 ```
 
 ## Running
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..829bc4e
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,17 @@
+[build-system]
+requires = ["setuptools"]
+build-backend = "setuptools.build_meta"
+
+[project]
+name = "vppcfg"
+version = "0.0.1"
+dependencies = [
+    'requests',
+    'importlib-metadata; python_version<"3.8"',
+]
+
+[project.scripts]
+vppcfg = "vppcfg:vppcfg.main"
+
+[options]
+include_package_data = true
\ No newline at end of file
diff --git a/vppcfg.spec b/vppcfg.spec
deleted file mode 100644
index b506e7c..0000000
--- a/vppcfg.spec
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- mode: python ; coding: utf-8 -*-
-
-
-block_cipher = None
-
-
-added_files = [ ( 'schema.yaml', '.') ]
-
-a = Analysis(['vppcfg'],
-             pathex=['/home/pim/src/vppcfg'],
-             binaries=[],
-             datas=added_files,
-             hiddenimports=[],
-             hookspath=[],
-             hooksconfig={},
-             runtime_hooks=[],
-             excludes=[],
-             win_no_prefer_redirects=False,
-             win_private_assemblies=False,
-             cipher=block_cipher,
-             noarchive=False)
-pyz = PYZ(a.pure, a.zipped_data,
-             cipher=block_cipher)
-
-exe = EXE(pyz,
-          a.scripts,
-          a.binaries,
-          a.zipfiles,
-          a.datas,  
-          [],
-          name='vppcfg',
-          debug=False,
-          bootloader_ignore_signals=False,
-          strip=False,
-          upx=True,
-          upx_exclude=[],
-          runtime_tmpdir=None,
-          console=True,
-          disable_windowed_traceback=False,
-          target_arch=None,
-          codesign_identity=None,
-          entitlements_file=None )
diff --git a/vppcfg/__init__.py b/vppcfg/__init__.py
new file mode 100644
index 0000000..93bc317
--- /dev/null
+++ b/vppcfg/__init__.py
@@ -0,0 +1,9 @@
+import os, sys
+
+ROOT_DIR = os.path.dirname(__file__)
+
+# fix the module load path
+sys.path.insert(0, ROOT_DIR)
+
+# fix the yaml search path
+os.chdir(ROOT_DIR)
diff --git a/config/__init__.py b/vppcfg/config/__init__.py
similarity index 100%
rename from config/__init__.py
rename to vppcfg/config/__init__.py
diff --git a/config/address.py b/vppcfg/config/address.py
similarity index 100%
rename from config/address.py
rename to vppcfg/config/address.py
diff --git a/config/bondethernet.py b/vppcfg/config/bondethernet.py
similarity index 100%
rename from config/bondethernet.py
rename to vppcfg/config/bondethernet.py
diff --git a/config/bridgedomain.py b/vppcfg/config/bridgedomain.py
similarity index 100%
rename from config/bridgedomain.py
rename to vppcfg/config/bridgedomain.py
diff --git a/config/interface.py b/vppcfg/config/interface.py
similarity index 100%
rename from config/interface.py
rename to vppcfg/config/interface.py
diff --git a/config/lcp.py b/vppcfg/config/lcp.py
similarity index 100%
rename from config/lcp.py
rename to vppcfg/config/lcp.py
diff --git a/config/loopback.py b/vppcfg/config/loopback.py
similarity index 100%
rename from config/loopback.py
rename to vppcfg/config/loopback.py
diff --git a/config/mac.py b/vppcfg/config/mac.py
similarity index 100%
rename from config/mac.py
rename to vppcfg/config/mac.py
diff --git a/config/tap.py b/vppcfg/config/tap.py
similarity index 100%
rename from config/tap.py
rename to vppcfg/config/tap.py
diff --git a/config/test_bondethernet.py b/vppcfg/config/test_bondethernet.py
similarity index 100%
rename from config/test_bondethernet.py
rename to vppcfg/config/test_bondethernet.py
diff --git a/config/test_bridgedomain.py b/vppcfg/config/test_bridgedomain.py
similarity index 100%
rename from config/test_bridgedomain.py
rename to vppcfg/config/test_bridgedomain.py
diff --git a/config/test_interface.py b/vppcfg/config/test_interface.py
similarity index 100%
rename from config/test_interface.py
rename to vppcfg/config/test_interface.py
diff --git a/config/test_lcp.py b/vppcfg/config/test_lcp.py
similarity index 100%
rename from config/test_lcp.py
rename to vppcfg/config/test_lcp.py
diff --git a/config/test_loopback.py b/vppcfg/config/test_loopback.py
similarity index 100%
rename from config/test_loopback.py
rename to vppcfg/config/test_loopback.py
diff --git a/config/test_mac.py b/vppcfg/config/test_mac.py
similarity index 100%
rename from config/test_mac.py
rename to vppcfg/config/test_mac.py
diff --git a/config/test_tap.py b/vppcfg/config/test_tap.py
similarity index 100%
rename from config/test_tap.py
rename to vppcfg/config/test_tap.py
diff --git a/config/test_vxlan_tunnel.py b/vppcfg/config/test_vxlan_tunnel.py
similarity index 100%
rename from config/test_vxlan_tunnel.py
rename to vppcfg/config/test_vxlan_tunnel.py
diff --git a/config/vxlan_tunnel.py b/vppcfg/config/vxlan_tunnel.py
similarity index 100%
rename from config/vxlan_tunnel.py
rename to vppcfg/config/vxlan_tunnel.py
diff --git a/intest/hippo-empty.yaml b/vppcfg/intest/hippo-empty.yaml
similarity index 100%
rename from intest/hippo-empty.yaml
rename to vppcfg/intest/hippo-empty.yaml
diff --git a/intest/hippo1.yaml b/vppcfg/intest/hippo1.yaml
similarity index 100%
rename from intest/hippo1.yaml
rename to vppcfg/intest/hippo1.yaml
diff --git a/intest/hippo10.yaml b/vppcfg/intest/hippo10.yaml
similarity index 100%
rename from intest/hippo10.yaml
rename to vppcfg/intest/hippo10.yaml
diff --git a/intest/hippo11.yaml b/vppcfg/intest/hippo11.yaml
similarity index 100%
rename from intest/hippo11.yaml
rename to vppcfg/intest/hippo11.yaml
diff --git a/intest/hippo12.yaml b/vppcfg/intest/hippo12.yaml
similarity index 100%
rename from intest/hippo12.yaml
rename to vppcfg/intest/hippo12.yaml
diff --git a/intest/hippo13.yaml b/vppcfg/intest/hippo13.yaml
similarity index 100%
rename from intest/hippo13.yaml
rename to vppcfg/intest/hippo13.yaml
diff --git a/intest/hippo14.yaml b/vppcfg/intest/hippo14.yaml
similarity index 100%
rename from intest/hippo14.yaml
rename to vppcfg/intest/hippo14.yaml
diff --git a/intest/hippo2.yaml b/vppcfg/intest/hippo2.yaml
similarity index 100%
rename from intest/hippo2.yaml
rename to vppcfg/intest/hippo2.yaml
diff --git a/intest/hippo3.yaml b/vppcfg/intest/hippo3.yaml
similarity index 100%
rename from intest/hippo3.yaml
rename to vppcfg/intest/hippo3.yaml
diff --git a/intest/hippo4.yaml b/vppcfg/intest/hippo4.yaml
similarity index 100%
rename from intest/hippo4.yaml
rename to vppcfg/intest/hippo4.yaml
diff --git a/intest/hippo5.yaml b/vppcfg/intest/hippo5.yaml
similarity index 100%
rename from intest/hippo5.yaml
rename to vppcfg/intest/hippo5.yaml
diff --git a/intest/hippo6.yaml b/vppcfg/intest/hippo6.yaml
similarity index 100%
rename from intest/hippo6.yaml
rename to vppcfg/intest/hippo6.yaml
diff --git a/intest/hippo7.yaml b/vppcfg/intest/hippo7.yaml
similarity index 100%
rename from intest/hippo7.yaml
rename to vppcfg/intest/hippo7.yaml
diff --git a/intest/hippo8.yaml b/vppcfg/intest/hippo8.yaml
similarity index 100%
rename from intest/hippo8.yaml
rename to vppcfg/intest/hippo8.yaml
diff --git a/intest/hippo9.yaml b/vppcfg/intest/hippo9.yaml
similarity index 100%
rename from intest/hippo9.yaml
rename to vppcfg/intest/hippo9.yaml
diff --git a/intest/intest.sh b/vppcfg/intest/intest.sh
similarity index 100%
rename from intest/intest.sh
rename to vppcfg/intest/intest.sh
diff --git a/tests.py b/vppcfg/tests.py
similarity index 100%
rename from tests.py
rename to vppcfg/tests.py
diff --git a/unittest/test_bondethernet.yaml b/vppcfg/unittest/test_bondethernet.yaml
similarity index 100%
rename from unittest/test_bondethernet.yaml
rename to vppcfg/unittest/test_bondethernet.yaml
diff --git a/unittest/test_bridgedomain.yaml b/vppcfg/unittest/test_bridgedomain.yaml
similarity index 100%
rename from unittest/test_bridgedomain.yaml
rename to vppcfg/unittest/test_bridgedomain.yaml
diff --git a/unittest/test_interface.yaml b/vppcfg/unittest/test_interface.yaml
similarity index 100%
rename from unittest/test_interface.yaml
rename to vppcfg/unittest/test_interface.yaml
diff --git a/unittest/test_lcp.yaml b/vppcfg/unittest/test_lcp.yaml
similarity index 100%
rename from unittest/test_lcp.yaml
rename to vppcfg/unittest/test_lcp.yaml
diff --git a/unittest/test_loopback.yaml b/vppcfg/unittest/test_loopback.yaml
similarity index 100%
rename from unittest/test_loopback.yaml
rename to vppcfg/unittest/test_loopback.yaml
diff --git a/unittest/test_tap.yaml b/vppcfg/unittest/test_tap.yaml
similarity index 100%
rename from unittest/test_tap.yaml
rename to vppcfg/unittest/test_tap.yaml
diff --git a/unittest/test_vxlan_tunnel.yaml b/vppcfg/unittest/test_vxlan_tunnel.yaml
similarity index 100%
rename from unittest/test_vxlan_tunnel.yaml
rename to vppcfg/unittest/test_vxlan_tunnel.yaml
diff --git a/unittest/yaml/correct-address.yaml b/vppcfg/unittest/yaml/correct-address.yaml
similarity index 100%
rename from unittest/yaml/correct-address.yaml
rename to vppcfg/unittest/yaml/correct-address.yaml
diff --git a/unittest/yaml/correct-bondethernet.yaml b/vppcfg/unittest/yaml/correct-bondethernet.yaml
similarity index 100%
rename from unittest/yaml/correct-bondethernet.yaml
rename to vppcfg/unittest/yaml/correct-bondethernet.yaml
diff --git a/unittest/yaml/correct-bridgedomain.yaml b/vppcfg/unittest/yaml/correct-bridgedomain.yaml
similarity index 100%
rename from unittest/yaml/correct-bridgedomain.yaml
rename to vppcfg/unittest/yaml/correct-bridgedomain.yaml
diff --git a/unittest/yaml/correct-empty.yaml b/vppcfg/unittest/yaml/correct-empty.yaml
similarity index 100%
rename from unittest/yaml/correct-empty.yaml
rename to vppcfg/unittest/yaml/correct-empty.yaml
diff --git a/unittest/yaml/correct-empty2.yaml b/vppcfg/unittest/yaml/correct-empty2.yaml
similarity index 100%
rename from unittest/yaml/correct-empty2.yaml
rename to vppcfg/unittest/yaml/correct-empty2.yaml
diff --git a/unittest/yaml/correct-example1.yaml b/vppcfg/unittest/yaml/correct-example1.yaml
similarity index 100%
rename from unittest/yaml/correct-example1.yaml
rename to vppcfg/unittest/yaml/correct-example1.yaml
diff --git a/unittest/yaml/correct-l2xc.yaml b/vppcfg/unittest/yaml/correct-l2xc.yaml
similarity index 100%
rename from unittest/yaml/correct-l2xc.yaml
rename to vppcfg/unittest/yaml/correct-l2xc.yaml
diff --git a/unittest/yaml/correct-loopback.yaml b/vppcfg/unittest/yaml/correct-loopback.yaml
similarity index 100%
rename from unittest/yaml/correct-loopback.yaml
rename to vppcfg/unittest/yaml/correct-loopback.yaml
diff --git a/unittest/yaml/correct-tap.yaml b/vppcfg/unittest/yaml/correct-tap.yaml
similarity index 100%
rename from unittest/yaml/correct-tap.yaml
rename to vppcfg/unittest/yaml/correct-tap.yaml
diff --git a/unittest/yaml/correct-vxlan.yaml b/vppcfg/unittest/yaml/correct-vxlan.yaml
similarity index 100%
rename from unittest/yaml/correct-vxlan.yaml
rename to vppcfg/unittest/yaml/correct-vxlan.yaml
diff --git a/unittest/yaml/error-address1.yaml b/vppcfg/unittest/yaml/error-address1.yaml
similarity index 100%
rename from unittest/yaml/error-address1.yaml
rename to vppcfg/unittest/yaml/error-address1.yaml
diff --git a/unittest/yaml/error-bondethernet1.yaml b/vppcfg/unittest/yaml/error-bondethernet1.yaml
similarity index 100%
rename from unittest/yaml/error-bondethernet1.yaml
rename to vppcfg/unittest/yaml/error-bondethernet1.yaml
diff --git a/unittest/yaml/error-bondethernet2.yaml b/vppcfg/unittest/yaml/error-bondethernet2.yaml
similarity index 100%
rename from unittest/yaml/error-bondethernet2.yaml
rename to vppcfg/unittest/yaml/error-bondethernet2.yaml
diff --git a/unittest/yaml/error-bondethernet3.yaml b/vppcfg/unittest/yaml/error-bondethernet3.yaml
similarity index 100%
rename from unittest/yaml/error-bondethernet3.yaml
rename to vppcfg/unittest/yaml/error-bondethernet3.yaml
diff --git a/unittest/yaml/error-bondethernet4.yaml b/vppcfg/unittest/yaml/error-bondethernet4.yaml
similarity index 100%
rename from unittest/yaml/error-bondethernet4.yaml
rename to vppcfg/unittest/yaml/error-bondethernet4.yaml
diff --git a/unittest/yaml/error-bondethernet5.yaml b/vppcfg/unittest/yaml/error-bondethernet5.yaml
similarity index 100%
rename from unittest/yaml/error-bondethernet5.yaml
rename to vppcfg/unittest/yaml/error-bondethernet5.yaml
diff --git a/unittest/yaml/error-bondethernet6.yaml b/vppcfg/unittest/yaml/error-bondethernet6.yaml
similarity index 100%
rename from unittest/yaml/error-bondethernet6.yaml
rename to vppcfg/unittest/yaml/error-bondethernet6.yaml
diff --git a/unittest/yaml/error-bondethernet7.yaml b/vppcfg/unittest/yaml/error-bondethernet7.yaml
similarity index 100%
rename from unittest/yaml/error-bondethernet7.yaml
rename to vppcfg/unittest/yaml/error-bondethernet7.yaml
diff --git a/unittest/yaml/error-bondethernet8.yaml b/vppcfg/unittest/yaml/error-bondethernet8.yaml
similarity index 100%
rename from unittest/yaml/error-bondethernet8.yaml
rename to vppcfg/unittest/yaml/error-bondethernet8.yaml
diff --git a/unittest/yaml/error-bondethernet9.yaml b/vppcfg/unittest/yaml/error-bondethernet9.yaml
similarity index 100%
rename from unittest/yaml/error-bondethernet9.yaml
rename to vppcfg/unittest/yaml/error-bondethernet9.yaml
diff --git a/unittest/yaml/error-bridgedomain1.yaml b/vppcfg/unittest/yaml/error-bridgedomain1.yaml
similarity index 100%
rename from unittest/yaml/error-bridgedomain1.yaml
rename to vppcfg/unittest/yaml/error-bridgedomain1.yaml
diff --git a/unittest/yaml/error-bridgedomain2.yaml b/vppcfg/unittest/yaml/error-bridgedomain2.yaml
similarity index 100%
rename from unittest/yaml/error-bridgedomain2.yaml
rename to vppcfg/unittest/yaml/error-bridgedomain2.yaml
diff --git a/unittest/yaml/error-bridgedomain3.yaml b/vppcfg/unittest/yaml/error-bridgedomain3.yaml
similarity index 100%
rename from unittest/yaml/error-bridgedomain3.yaml
rename to vppcfg/unittest/yaml/error-bridgedomain3.yaml
diff --git a/unittest/yaml/error-bridgedomain4.yaml b/vppcfg/unittest/yaml/error-bridgedomain4.yaml
similarity index 100%
rename from unittest/yaml/error-bridgedomain4.yaml
rename to vppcfg/unittest/yaml/error-bridgedomain4.yaml
diff --git a/unittest/yaml/error-bridgedomain5.yaml b/vppcfg/unittest/yaml/error-bridgedomain5.yaml
similarity index 100%
rename from unittest/yaml/error-bridgedomain5.yaml
rename to vppcfg/unittest/yaml/error-bridgedomain5.yaml
diff --git a/unittest/yaml/error-bridgedomain6.yaml b/vppcfg/unittest/yaml/error-bridgedomain6.yaml
similarity index 100%
rename from unittest/yaml/error-bridgedomain6.yaml
rename to vppcfg/unittest/yaml/error-bridgedomain6.yaml
diff --git a/unittest/yaml/error-bridgedomain7.yaml b/vppcfg/unittest/yaml/error-bridgedomain7.yaml
similarity index 100%
rename from unittest/yaml/error-bridgedomain7.yaml
rename to vppcfg/unittest/yaml/error-bridgedomain7.yaml
diff --git a/unittest/yaml/error-bridgedomain8.yaml b/vppcfg/unittest/yaml/error-bridgedomain8.yaml
similarity index 100%
rename from unittest/yaml/error-bridgedomain8.yaml
rename to vppcfg/unittest/yaml/error-bridgedomain8.yaml
diff --git a/unittest/yaml/error-bridgedomain9.yaml b/vppcfg/unittest/yaml/error-bridgedomain9.yaml
similarity index 100%
rename from unittest/yaml/error-bridgedomain9.yaml
rename to vppcfg/unittest/yaml/error-bridgedomain9.yaml
diff --git a/unittest/yaml/error-interface-mtu1.yaml b/vppcfg/unittest/yaml/error-interface-mtu1.yaml
similarity index 100%
rename from unittest/yaml/error-interface-mtu1.yaml
rename to vppcfg/unittest/yaml/error-interface-mtu1.yaml
diff --git a/unittest/yaml/error-interface-mtu2.yaml b/vppcfg/unittest/yaml/error-interface-mtu2.yaml
similarity index 100%
rename from unittest/yaml/error-interface-mtu2.yaml
rename to vppcfg/unittest/yaml/error-interface-mtu2.yaml
diff --git a/unittest/yaml/error-interface1.yaml b/vppcfg/unittest/yaml/error-interface1.yaml
similarity index 100%
rename from unittest/yaml/error-interface1.yaml
rename to vppcfg/unittest/yaml/error-interface1.yaml
diff --git a/unittest/yaml/error-l2xc1.yaml b/vppcfg/unittest/yaml/error-l2xc1.yaml
similarity index 100%
rename from unittest/yaml/error-l2xc1.yaml
rename to vppcfg/unittest/yaml/error-l2xc1.yaml
diff --git a/unittest/yaml/error-l2xc2.yaml b/vppcfg/unittest/yaml/error-l2xc2.yaml
similarity index 100%
rename from unittest/yaml/error-l2xc2.yaml
rename to vppcfg/unittest/yaml/error-l2xc2.yaml
diff --git a/unittest/yaml/error-l2xc3.yaml b/vppcfg/unittest/yaml/error-l2xc3.yaml
similarity index 100%
rename from unittest/yaml/error-l2xc3.yaml
rename to vppcfg/unittest/yaml/error-l2xc3.yaml
diff --git a/unittest/yaml/error-l2xc4.yaml b/vppcfg/unittest/yaml/error-l2xc4.yaml
similarity index 100%
rename from unittest/yaml/error-l2xc4.yaml
rename to vppcfg/unittest/yaml/error-l2xc4.yaml
diff --git a/unittest/yaml/error-l2xc5.yaml b/vppcfg/unittest/yaml/error-l2xc5.yaml
similarity index 100%
rename from unittest/yaml/error-l2xc5.yaml
rename to vppcfg/unittest/yaml/error-l2xc5.yaml
diff --git a/unittest/yaml/error-l2xc6.yaml b/vppcfg/unittest/yaml/error-l2xc6.yaml
similarity index 100%
rename from unittest/yaml/error-l2xc6.yaml
rename to vppcfg/unittest/yaml/error-l2xc6.yaml
diff --git a/unittest/yaml/error-l2xc7.yaml b/vppcfg/unittest/yaml/error-l2xc7.yaml
similarity index 100%
rename from unittest/yaml/error-l2xc7.yaml
rename to vppcfg/unittest/yaml/error-l2xc7.yaml
diff --git a/unittest/yaml/error-l2xc8.yaml b/vppcfg/unittest/yaml/error-l2xc8.yaml
similarity index 100%
rename from unittest/yaml/error-l2xc8.yaml
rename to vppcfg/unittest/yaml/error-l2xc8.yaml
diff --git a/unittest/yaml/error-lcp-unique1.yaml b/vppcfg/unittest/yaml/error-lcp-unique1.yaml
similarity index 100%
rename from unittest/yaml/error-lcp-unique1.yaml
rename to vppcfg/unittest/yaml/error-lcp-unique1.yaml
diff --git a/unittest/yaml/error-lcp-unique2.yaml b/vppcfg/unittest/yaml/error-lcp-unique2.yaml
similarity index 100%
rename from unittest/yaml/error-lcp-unique2.yaml
rename to vppcfg/unittest/yaml/error-lcp-unique2.yaml
diff --git a/unittest/yaml/error-loopback1.yaml b/vppcfg/unittest/yaml/error-loopback1.yaml
similarity index 100%
rename from unittest/yaml/error-loopback1.yaml
rename to vppcfg/unittest/yaml/error-loopback1.yaml
diff --git a/unittest/yaml/error-loopback2.yaml b/vppcfg/unittest/yaml/error-loopback2.yaml
similarity index 100%
rename from unittest/yaml/error-loopback2.yaml
rename to vppcfg/unittest/yaml/error-loopback2.yaml
diff --git a/unittest/yaml/error-schema-field1.yaml b/vppcfg/unittest/yaml/error-schema-field1.yaml
similarity index 100%
rename from unittest/yaml/error-schema-field1.yaml
rename to vppcfg/unittest/yaml/error-schema-field1.yaml
diff --git a/unittest/yaml/error-schema-field2.yaml b/vppcfg/unittest/yaml/error-schema-field2.yaml
similarity index 100%
rename from unittest/yaml/error-schema-field2.yaml
rename to vppcfg/unittest/yaml/error-schema-field2.yaml
diff --git a/unittest/yaml/error-subinterface1.yaml b/vppcfg/unittest/yaml/error-subinterface1.yaml
similarity index 100%
rename from unittest/yaml/error-subinterface1.yaml
rename to vppcfg/unittest/yaml/error-subinterface1.yaml
diff --git a/unittest/yaml/error-subinterface2.yaml b/vppcfg/unittest/yaml/error-subinterface2.yaml
similarity index 100%
rename from unittest/yaml/error-subinterface2.yaml
rename to vppcfg/unittest/yaml/error-subinterface2.yaml
diff --git a/unittest/yaml/error-subinterface3.yaml b/vppcfg/unittest/yaml/error-subinterface3.yaml
similarity index 100%
rename from unittest/yaml/error-subinterface3.yaml
rename to vppcfg/unittest/yaml/error-subinterface3.yaml
diff --git a/unittest/yaml/error-subinterface6.yaml b/vppcfg/unittest/yaml/error-subinterface6.yaml
similarity index 100%
rename from unittest/yaml/error-subinterface6.yaml
rename to vppcfg/unittest/yaml/error-subinterface6.yaml
diff --git a/unittest/yaml/error-subinterface7.yaml b/vppcfg/unittest/yaml/error-subinterface7.yaml
similarity index 100%
rename from unittest/yaml/error-subinterface7.yaml
rename to vppcfg/unittest/yaml/error-subinterface7.yaml
diff --git a/unittest/yaml/error-subinterface8.yaml b/vppcfg/unittest/yaml/error-subinterface8.yaml
similarity index 100%
rename from unittest/yaml/error-subinterface8.yaml
rename to vppcfg/unittest/yaml/error-subinterface8.yaml
diff --git a/unittest/yaml/error-subinterface9.yaml b/vppcfg/unittest/yaml/error-subinterface9.yaml
similarity index 100%
rename from unittest/yaml/error-subinterface9.yaml
rename to vppcfg/unittest/yaml/error-subinterface9.yaml
diff --git a/unittest/yaml/error-tap1.yaml b/vppcfg/unittest/yaml/error-tap1.yaml
similarity index 100%
rename from unittest/yaml/error-tap1.yaml
rename to vppcfg/unittest/yaml/error-tap1.yaml
diff --git a/unittest/yaml/error-tap2.yaml b/vppcfg/unittest/yaml/error-tap2.yaml
similarity index 100%
rename from unittest/yaml/error-tap2.yaml
rename to vppcfg/unittest/yaml/error-tap2.yaml
diff --git a/unittest/yaml/error-tap3.yaml b/vppcfg/unittest/yaml/error-tap3.yaml
similarity index 100%
rename from unittest/yaml/error-tap3.yaml
rename to vppcfg/unittest/yaml/error-tap3.yaml
diff --git a/unittest/yaml/error-tap4.yaml b/vppcfg/unittest/yaml/error-tap4.yaml
similarity index 100%
rename from unittest/yaml/error-tap4.yaml
rename to vppcfg/unittest/yaml/error-tap4.yaml
diff --git a/unittest/yaml/error-tap5.yaml b/vppcfg/unittest/yaml/error-tap5.yaml
similarity index 100%
rename from unittest/yaml/error-tap5.yaml
rename to vppcfg/unittest/yaml/error-tap5.yaml
diff --git a/unittest/yaml/error-tap6.yaml b/vppcfg/unittest/yaml/error-tap6.yaml
similarity index 100%
rename from unittest/yaml/error-tap6.yaml
rename to vppcfg/unittest/yaml/error-tap6.yaml
diff --git a/unittest/yaml/error-vxlan1.yaml b/vppcfg/unittest/yaml/error-vxlan1.yaml
similarity index 100%
rename from unittest/yaml/error-vxlan1.yaml
rename to vppcfg/unittest/yaml/error-vxlan1.yaml
diff --git a/unittest/yaml/error-vxlan2.yaml b/vppcfg/unittest/yaml/error-vxlan2.yaml
similarity index 100%
rename from unittest/yaml/error-vxlan2.yaml
rename to vppcfg/unittest/yaml/error-vxlan2.yaml
diff --git a/unittest/yaml/error-vxlan3.yaml b/vppcfg/unittest/yaml/error-vxlan3.yaml
similarity index 100%
rename from unittest/yaml/error-vxlan3.yaml
rename to vppcfg/unittest/yaml/error-vxlan3.yaml
diff --git a/vpp/applier.py b/vppcfg/vpp/applier.py
similarity index 100%
rename from vpp/applier.py
rename to vppcfg/vpp/applier.py
diff --git a/vpp/dumper.py b/vppcfg/vpp/dumper.py
similarity index 100%
rename from vpp/dumper.py
rename to vppcfg/vpp/dumper.py
diff --git a/vpp/reconciler.py b/vppcfg/vpp/reconciler.py
similarity index 100%
rename from vpp/reconciler.py
rename to vppcfg/vpp/reconciler.py
diff --git a/vpp/vppapi.py b/vppcfg/vpp/vppapi.py
similarity index 100%
rename from vpp/vppapi.py
rename to vppcfg/vpp/vppapi.py
diff --git a/vppcfg b/vppcfg/vppcfg.py
similarity index 100%
rename from vppcfg
rename to vppcfg/vppcfg.py