diff --git a/charms/.gitignore b/charms/.gitignore
deleted file mode 100644
index 9f751ef..0000000
--- a/charms/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-deps/
-builds/
diff --git a/charms/Dockerfile b/charms/Dockerfile
deleted file mode 100644
index 36248e2..0000000
--- a/charms/Dockerfile
+++ /dev/null
@@ -1,4 +0,0 @@
-FROM ubuntu:16.04
-
-RUN  apt-get update && apt install -y charm-tools
-
diff --git a/charms/Makefile b/charms/Makefile
deleted file mode 100644
index ad8af98..0000000
--- a/charms/Makefile
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-#   Copyright 2016 RIFT.io Inc
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-#
-
-BUILD_DIR = .
-
-CHARMS:= pingpong vyos-proxy netutils simple ansible-charm
-CHARM_SRC_DIR := layers
-CHARM_BUILD_DIR := $(BUILD_DIR)/builds
-
-CHARM_SRC_DIRS := $(addprefix $(CHARM_SRC_DIR)/, $(CHARMS))
-CHARM_BUILD_DIRS := $(addprefix $(CHARM_BUILD_DIR)/, $(CHARMS))
-CHARM_DOCKER_TAG := charm-tools
-DOCKER_BUILD     ?=
-
-all: $(CHARM_BUILD_DIRS)
-
-clean:
-	-@ $(RM) -rf $(CHARM_BUILD_DIR)
-
-
-ifdef DOCKER_BUILD
-$(CHARM_BUILD_DIR)/%: $(CHARM_SRC_DIR)/%
-	docker build -t $(CHARM_DOCKER_TAG) .
-	docker run -u $$(id -u):$$(id -g) -v$$(pwd):$$(pwd) -w$$(pwd) $(CHARM_DOCKER_TAG) charm-build -o $(BUILD_DIR) $<
-else
-$(CHARM_BUILD_DIR)/%: $(CHARM_SRC_DIR)/%
-	charm build -o $(BUILD_DIR) $<
-endif
diff --git a/charms/README.md b/charms/README.md
deleted file mode 100644
index 6eaf43f..0000000
--- a/charms/README.md
+++ /dev/null
@@ -1,79 +0,0 @@
-# Juju Charm usage and development
-
-This document is intended to provide a brief overview of the components included
-in this repository as well as recommendations for how to develop, build, and
-publish charms.
-
-Please read the [develper geting started guide](https://jujucharms.com/docs/2.0/developer-getting-started) before proceeding.
-
-## Directory structure
-
-```
-.
-├── builds
-│   └── vpe-router
-├── interfaces
-├── layers
-│   └── vpe-router
-└── module-blueprints
-```
-
-The source code of a charm is referred to as a "layer". This layer is compiled
-into a charm and placed in the `builds/` directory. Interfaces, currently
-unused in this context, extend relationships between applications.
-
-## Development workflow
-### Prepare your build environment
-```
-# Source the environment variables JUJU_REPOSITORY, INTERFACE_PATH, and
-# LAYER_PATH, which are needed to build a charm. You could also place these
-# in your $HOME/.bashrc
-$ source juju-env.sh
-```
-#### Install the `charm` command, either via apt:
-
-```
-$ sudo apt install charm
-```
-
-or with [snap](http://snapcraft.io/)
-
-```
-$ snap install charm --edge
-```
-
-To build a charm, simply run `charm build` inside of a layer.
-```
-$ cd $LAYER_PATH/vpe-router
-$ charm build
-$ charm deploy $JUJU_REPOSITORY/builds/vpe-router
-```
-
-## Publishing to jujucharms.com
-
-Publishing to the Juju Charm store requires a launchpad login. With that, login
-to [jujucharms.com](http://www.jujucharms.com/).
-
-Next, you'll use the charm command to publish your compiled charm. This will
-put the charm into the store where it can be used by anyone with access.
-
-For example, if I wanted to publish the latest version of the vpe-router charm:
-
-# Step 1: Upload the charm to the "unpublished" channel
-```
-$ cd $JUJU_REPOSITORY/builds
-$ charm push vpe-router/ cs:~aisrael/vpe-router
-url: cs:~aisrael/vpe-router-0
-channel: unpublished
-```
-
-# There are four channels to release a charm: edge, beta, candidate, and stable
-```
-$ charm release cs:~aisrael/vpe-router-0 --channel=edge
-url: cs:~aisrael/vpe-router-0
-channel: edge
-```
-The charm can then be deployed directly from the charm store:
-```
-$ juju deploy cs:~aisrael/vpe-router --channel=edge
-```
diff --git a/charms/juju-env.sh b/charms/juju-env.sh
deleted file mode 100644
index 61ef85e..0000000
--- a/charms/juju-env.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env bash
-
-##
-# Copyright 2019 ETSI
-#
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-##
-
-
-# Set the Juju env variables for building a layer
-export JUJU_REPOSITORY=`pwd`
-export INTERFACE_PATH=$JUJU_REPOSITORY/interfaces
-export LAYER_PATH=$JUJU_REPOSITORY/layers
diff --git a/charms/layers/ansible-charm/LICENSE b/charms/layers/ansible-charm/LICENSE
deleted file mode 100644
index 830e559..0000000
--- a/charms/layers/ansible-charm/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2017 Borja Nogales <bdorado@pa.uc3m.es>, Iván Vidal <ividal@it.uc3m.es>
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/charms/layers/ansible-charm/README.md b/charms/layers/ansible-charm/README.md
deleted file mode 100755
index 0529137..0000000
--- a/charms/layers/ansible-charm/README.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Overview
-This base charm layer provides a template to create a *proxy charm*, which enables to configure a Virtual Network Function (VNF) instantiated trough Open Source MANO (OSM) using an Ansible playbook. The files included in this charm layer are free to use under the terms provided by the license information specified below.
-
-
-# Usage
-The base charm layer includes the following base layers: [vnfproxy](https://github.com/AdamIsrael/vnfproxy) and [ansible-base](https://github.com/chuckbutler/ansible-base). It provides a template ready for customization, which enables to create a *proxy charm* that supports the execution of an Ansible playbook to configure a VNF. For more information on *proxy charms*, the reader is referred to the [OSM wiki](https://osm.etsi.org/wikipub/index.php/Creating_your_own_VNF_charm_(Release_TWO)).
-
-Step by step instructions to use the base charm layer:
-
-1. Include the playbook under the *playbook* folder of the base charm layer; name it as *playbook.yaml*. Alternatively, you can open the file *playbook.yaml* alreay existing in this directory and paste the playbook in this file.
-
-2. The base charm layer already implements a Juju action, _**ansible-playbook**_, which runs the playbook *playbook/playbook.yaml*. You can optionally define additional actions, if needed by your VNF.
-
-3. Build the charm, via the *charm build* command.
-
-4. Update the VNF descriptor (VNFD) to use the charm: a) specify the name of the Juju charm in in the VNF configuration; b) Include the action “ansible-playbook” with no arguments as a service primitive and as an initial configuration primitive.
-
-5. Include the compiled charm in the VNF package.
-
-More comprehensive and complementary information on building *Proxy charms* can be found in the [OSM wiki](https://osm.etsi.org/wikipub/index.php/Creating_your_own_VNF_charm_(Release_TWO)) and in the documentation of the [vnfproxy layer](https://github.com/AdamIsrael/vnfproxy).
-
-# Upstream Project Name
-This work has been supported by the European H2020 5GinFIRE project (grant agreement 732497).
diff --git a/charms/layers/ansible-charm/actions.yaml b/charms/layers/ansible-charm/actions.yaml
deleted file mode 100755
index 8807303..0000000
--- a/charms/layers/ansible-charm/actions.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# OSM devops/charms - Ansible charm inside OSM devops
-#
-# Copyright 2017-2018 Universidad Carlos III de Madrid
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-ansible-playbook:
-    description: "Configure needed ansible files and run the playbook"
diff --git a/charms/layers/ansible-charm/actions/ansible-playbook b/charms/layers/ansible-charm/actions/ansible-playbook
deleted file mode 100755
index 67f581f..0000000
--- a/charms/layers/ansible-charm/actions/ansible-playbook
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env python3
-#
-# OSM devops/charms - Ansible charm inside OSM devops
-#
-# Copyright 2017-2018 Universidad Carlos III de Madrid
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main
-from charms.reactive import set_state
-from charmhelpers.core.hookenv import action_fail, action_name
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_state('actions.{}'.format(action_name()))
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
diff --git a/charms/layers/ansible-charm/icon.svg b/charms/layers/ansible-charm/icon.svg
deleted file mode 100755
index e092eef..0000000
--- a/charms/layers/ansible-charm/icon.svg
+++ /dev/null
@@ -1,279 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="96"
-   height="96"
-   id="svg6517"
-   version="1.1"
-   inkscape:version="0.48+devel r12274"
-   sodipodi:docname="Juju_charm_icon_template.svg">
-  <defs
-     id="defs6519">
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#Background"
-       id="linearGradient6461"
-       gradientUnits="userSpaceOnUse"
-       x1="0"
-       y1="970.29498"
-       x2="144"
-       y2="970.29498"
-       gradientTransform="matrix(0,-0.66666669,0.6660448,0,-866.25992,731.29077)" />
-    <linearGradient
-       id="Background">
-      <stop
-         id="stop4178"
-         offset="0"
-         style="stop-color:#b8b8b8;stop-opacity:1" />
-      <stop
-         id="stop4180"
-         offset="1"
-         style="stop-color:#c9c9c9;stop-opacity:1" />
-    </linearGradient>
-    <filter
-       style="color-interpolation-filters:sRGB;"
-       inkscape:label="Inner Shadow"
-       id="filter1121">
-      <feFlood
-         flood-opacity="0.59999999999999998"
-         flood-color="rgb(0,0,0)"
-         result="flood"
-         id="feFlood1123" />
-      <feComposite
-         in="flood"
-         in2="SourceGraphic"
-         operator="out"
-         result="composite1"
-         id="feComposite1125" />
-      <feGaussianBlur
-         in="composite1"
-         stdDeviation="1"
-         result="blur"
-         id="feGaussianBlur1127" />
-      <feOffset
-         dx="0"
-         dy="2"
-         result="offset"
-         id="feOffset1129" />
-      <feComposite
-         in="offset"
-         in2="SourceGraphic"
-         operator="atop"
-         result="composite2"
-         id="feComposite1131" />
-    </filter>
-    <filter
-       style="color-interpolation-filters:sRGB;"
-       inkscape:label="Drop Shadow"
-       id="filter950">
-      <feFlood
-         flood-opacity="0.25"
-         flood-color="rgb(0,0,0)"
-         result="flood"
-         id="feFlood952" />
-      <feComposite
-         in="flood"
-         in2="SourceGraphic"
-         operator="in"
-         result="composite1"
-         id="feComposite954" />
-      <feGaussianBlur
-         in="composite1"
-         stdDeviation="1"
-         result="blur"
-         id="feGaussianBlur956" />
-      <feOffset
-         dx="0"
-         dy="1"
-         result="offset"
-         id="feOffset958" />
-      <feComposite
-         in="SourceGraphic"
-         in2="offset"
-         operator="over"
-         result="composite2"
-         id="feComposite960" />
-    </filter>
-    <clipPath
-       clipPathUnits="userSpaceOnUse"
-       id="clipPath873">
-      <g
-         transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)"
-         id="g875"
-         inkscape:label="Layer 1"
-         style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline">
-        <path
-           style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"
-           d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z"
-           id="path877"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="sssssssss" />
-      </g>
-    </clipPath>
-    <filter
-       inkscape:collect="always"
-       id="filter891"
-       inkscape:label="Badge Shadow">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="0.71999962"
-         id="feGaussianBlur893" />
-    </filter>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="4.0745362"
-     inkscape:cx="18.514671"
-     inkscape:cy="49.018169"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1029"
-     inkscape:window-x="0"
-     inkscape:window-y="24"
-     inkscape:window-maximized="1"
-     showborder="true"
-     showguides="true"
-     inkscape:guide-bbox="true"
-     inkscape:showpageshadow="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid821" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="16,48"
-       id="guide823" />
-    <sodipodi:guide
-       orientation="0,1"
-       position="64,80"
-       id="guide825" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="80,40"
-       id="guide827" />
-    <sodipodi:guide
-       orientation="0,1"
-       position="64,16"
-       id="guide829" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata6522">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="BACKGROUND"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(268,-635.29076)"
-     style="display:inline">
-    <path
-       style="fill:url(#linearGradient6461);fill-opacity:1;stroke:none;display:inline;filter:url(#filter1121)"
-       d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 C -264.11215,731.29077 -268,727.39888 -268,700.15563 Z"
-       id="path6455"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="sssssssss" />
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer3"
-     inkscape:label="PLACE YOUR PICTOGRAM HERE"
-     style="display:inline" />
-  <g
-     inkscape:groupmode="layer"
-     id="layer2"
-     inkscape:label="BADGE"
-     style="display:none"
-     sodipodi:insensitive="true">
-    <g
-       style="display:inline"
-       transform="translate(-340.00001,-581)"
-       id="g4394"
-       clip-path="none">
-      <g
-         id="g855">
-        <g
-           inkscape:groupmode="maskhelper"
-           id="g870"
-           clip-path="url(#clipPath873)"
-           style="opacity:0.6;filter:url(#filter891)">
-          <path
-             transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)"
-             d="m 264,552.36218 a 12,12 0 1 1 -24,0 A 12,12 0 1 1 264,552.36218 Z"
-             sodipodi:ry="12"
-             sodipodi:rx="12"
-             sodipodi:cy="552.36218"
-             sodipodi:cx="252"
-             id="path844"
-             style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             sodipodi:type="arc" />
-        </g>
-        <g
-           id="g862">
-          <path
-             sodipodi:type="arc"
-             style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             id="path4398"
-             sodipodi:cx="252"
-             sodipodi:cy="552.36218"
-             sodipodi:rx="12"
-             sodipodi:ry="12"
-             d="m 264,552.36218 a 12,12 0 1 1 -24,0 A 12,12 0 1 1 264,552.36218 Z"
-             transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)" />
-          <path
-             transform="matrix(1.25,0,0,1.25,33,-100.45273)"
-             d="m 264,552.36218 a 12,12 0 1 1 -24,0 A 12,12 0 1 1 264,552.36218 Z"
-             sodipodi:ry="12"
-             sodipodi:rx="12"
-             sodipodi:cy="552.36218"
-             sodipodi:cx="252"
-             id="path4400"
-             style="color:#000000;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             sodipodi:type="arc" />
-          <path
-             sodipodi:type="star"
-             style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             id="path4459"
-             sodipodi:sides="5"
-             sodipodi:cx="666.19574"
-             sodipodi:cy="589.50385"
-             sodipodi:r1="7.2431178"
-             sodipodi:r2="4.3458705"
-             sodipodi:arg1="1.0471976"
-             sodipodi:arg2="1.6755161"
-             inkscape:flatsided="false"
-             inkscape:rounded="0.1"
-             inkscape:randomized="0"
-             d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 C 669.9821,591.68426 670.20862,595.55064 669.8173,595.77657 Z"
-             transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)" />
-        </g>
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/charms/layers/ansible-charm/layer.yaml b/charms/layers/ansible-charm/layer.yaml
deleted file mode 100755
index 788e67c..0000000
--- a/charms/layers/ansible-charm/layer.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# OSM devops/charms - Ansible charm inside OSM devops
-#
-# Copyright 2017-2018 Universidad Carlos III de Madrid
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-includes: ['layer:ansible-base', 'layer:vnfproxy']
diff --git a/charms/layers/ansible-charm/metadata.yaml b/charms/layers/ansible-charm/metadata.yaml
deleted file mode 100755
index 2837b35..0000000
--- a/charms/layers/ansible-charm/metadata.yaml
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# OSM devops/charms - Ansible charm inside OSM devops
-#
-# Copyright 2017-2018 Universidad Carlos III de Madrid
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-name: ansible-charm
-summary: Base charm layer to configure a VNF using ansible.
-maintainer: borja <bdorado@pa.uc3m.es>
-description: |
-  Base charm layer to configure a VNF using ansible, through the Juju framework of Open Source MANO (OSM).
-series:
-  - trusty
-  - xenial
-tags:
-  - osm
-  - vnf
-subordinate: false
diff --git a/charms/layers/ansible-charm/playbook/playbook.yaml b/charms/layers/ansible-charm/playbook/playbook.yaml
deleted file mode 100755
index 67a3493..0000000
--- a/charms/layers/ansible-charm/playbook/playbook.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-#
-# OSM devops/charms - Ansible charm inside OSM devops
-#
-# Copyright 2017-2018 Universidad Carlos III de Madrid
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Place here the ansible playbook to be run
-
----
-- hosts: test
-  tasks:
-      - name: Create file
-        file: path=/tmp/playbook_created_file state=touch
diff --git a/charms/layers/ansible-charm/reactive/ansible_charm.py b/charms/layers/ansible-charm/reactive/ansible_charm.py
deleted file mode 100755
index 61425f3..0000000
--- a/charms/layers/ansible-charm/reactive/ansible_charm.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# OSM devops/charms - Ansible charm inside OSM devops
-#
-# Copyright 2017-2018 Universidad Carlos III de Madrid
-# Copyright 2018 Altran
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-from charmhelpers.core.hookenv import (
-    action_get,
-    action_fail,
-    action_set,
-    config,
-    status_set,
-)
-
-from charms.reactive import (
-    remove_state as remove_flag,
-    set_state as set_flag,
-    when,
-)
-import charms.sshproxy
-
-from subprocess import (
-    Popen,
-    CalledProcessError,
-    PIPE,
-)
-
-#from charms.ansible import apply_playbook
-import os, fnmatch
-import subprocess
-
-cfg = config()
-
-
-# Sets the status of the charm to show in OSM: configured
-@when('config.changed')
-def config_changed():
-    set_flag('ansible-charm.configured')
-    status_set('active', 'ready!')
-    return
-
-
-# Edits ansible config files and executes ansible-playbook
-@when('ansible-charm.configured')
-@when('actions.ansible-playbook')
-def ansible_playbook():
-    try:
-        # Retrieve the ssh parameter
-        cfg = config()
-        # edit ansible hosts file with the VNF parameters
-        h = open("/etc/ansible/hosts", "wt")
-        h.write("[test]\n")
-        h1 = "{} ansible_connection=ssh ansible_ssh_user={} ansible_ssh_pass={} ansible_python_interpreter=/usr/bin/python3\n".format(cfg['ssh-hostname'],cfg['ssh-username'],cfg['ssh-password'])
-        h.write(h1)
-        h.close()
-        # edit ansible config to enable ssh connection with th VNF
-        c = open("/etc/ansible/ansible.cfg", "wt")
-        c.write("[defaults]\n")
-        c.write("host_key_checking = False\n")
-        c.close()
-        # execute the ansible playbook
-        path = find('playbook.yaml','/var/lib/juju/agents/')
-        call = ['ansible-playbook', path]
-        subprocess.check_call(call)
-    except Exception as e:
-        action_fail('command failed: {}, errors: {}'.format(e, e.output))
-        remove_flag('actions.ansible-playbook')
-        return
-    finally:
-        remove_flag('actions.ansible-playbook')
-
-
-# Function to find the playbook path
-def find(pattern, path):
-    result = ''
-    for root, dirs, files in os.walk(path):
-        for name in files:
-            if fnmatch.fnmatch(name, pattern):
-                result = os.path.join(root, name)
-    return result
diff --git a/charms/layers/ansible-charm/tests/00-setup b/charms/layers/ansible-charm/tests/00-setup
deleted file mode 100755
index 8c0ff38..0000000
--- a/charms/layers/ansible-charm/tests/00-setup
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-#
-# OSM devops/charms - Ansible charm inside OSM devops
-#
-# Copyright 2017-2018 Universidad Carlos III de Madrid
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-sudo add-apt-repository ppa:juju/stable -y
-sudo apt-get update
-sudo apt-get install amulet python-requests -y
diff --git a/charms/layers/ansible-charm/tests/10-deploy b/charms/layers/ansible-charm/tests/10-deploy
deleted file mode 100755
index 35e0918..0000000
--- a/charms/layers/ansible-charm/tests/10-deploy
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/python3
-#
-# OSM devops/charms - Ansible charm inside OSM devops
-#
-# Copyright 2017-2018 Universidad Carlos III de Madrid
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import amulet
-import requests
-import unittest
-
-
-class TestCharm(unittest.TestCase):
-    def setUp(self):
-        self.d = amulet.Deployment()
-
-        self.d.add('ansible-charm')
-        self.d.expose('ansible-charm')
-
-        self.d.setup(timeout=900)
-        self.d.sentry.wait()
-
-        self.unit = self.d.sentry['ansible-charm'][0]
-
-    def test_service(self):
-        # test we can access over http
-        page = requests.get('http://{}'.format(self.unit.info['public-address']))
-        self.assertEqual(page.status_code, 200)
-        # Now you can use self.d.sentry[SERVICE][UNIT] to address each of the units and perform
-        # more in-depth steps. Each self.d.sentry[SERVICE][UNIT] has the following methods:
-        # - .info - An array of the information of that unit from Juju
-        # - .file(PATH) - Get the details of a file on that unit
-        # - .file_contents(PATH) - Get plain text output of PATH file from that unit
-        # - .directory(PATH) - Get details of directory
-        # - .directory_contents(PATH) - List files and folders in PATH on that unit
-        # - .relation(relation, service:rel) - Get relation data from return service
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/charms/layers/netutils/LICENSE b/charms/layers/netutils/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/charms/layers/netutils/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/charms/layers/netutils/README.md b/charms/layers/netutils/README.md
deleted file mode 100644
index e8258c0..0000000
--- a/charms/layers/netutils/README.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# Overview
-
-This charm provides basic network utilities that can be run from a Juju-deployed
-machine.
-
-# Usage
-
-To deploy the charm:
-```bash
-$ juju deploy cs:~nfv/netutils
-```
-
-To run an action:
-```bash
-$ juju run-action netutils/0 ping destination=google.com
-$ juju run-action netutils/0 traceroute destination=google.com
-```
-
-To fetch the output of an action:
-```bash
-$ juju show-action-output 026b3d4c-0bb2-4818-8d24-9855936cdcdf
-results:
-  output: |
-    traceroute to google.com (216.58.198.78), 30 hops max, 60 byte packets
-     1  ec2-79-125-0-86.eu-west-1.compute.amazonaws.com (79.125.0.86)  1.431 ms  1.410 ms  1.380 ms
-     2  100.64.2.73 (100.64.2.73)  1.647 ms 100.64.2.103 (100.64.2.103)  1.247 ms 100.64.2.121 (100.64.2.121)  1.224 ms
-     3  100.64.0.232 (100.64.0.232)  1.296 ms 100.64.0.184 (100.64.0.184)  1.515 ms 100.64.0.234 (100.64.0.234)  1.079 ms
-     4  100.64.16.37 (100.64.16.37)  0.377 ms 100.64.16.49 (100.64.16.49)  0.347 ms 100.64.16.1 (100.64.16.1)  0.340 ms
-     5  176.32.107.12 (176.32.107.12)  0.739 ms 176.32.107.4 (176.32.107.4)  0.875 ms  0.748 ms
-     6  178.236.0.111 (178.236.0.111)  0.650 ms  0.641 ms  0.645 ms
-     7  72.14.215.85 (72.14.215.85)  0.544 ms  1.508 ms  1.498 ms
-     8  209.85.252.198 (209.85.252.198)  0.680 ms  0.659 ms  0.618 ms
-     9  64.233.174.27 (64.233.174.27)  0.690 ms  0.682 ms  0.634 ms
-    10  dub08s02-in-f14.1e100.net (216.58.198.78)  0.568 ms  0.560 ms  0.595 ms
-status: completed
-timing:
-  completed: 2016-06-29 14:50:04 +0000 UTC
-  enqueued: 2016-06-29 14:50:03 +0000 UTC
-  started: 2016-06-29 14:50:03 +0000 UTC
-```
-## iperf3
-
-Because iperf3 has a client and server component, the netutils charm can operate
-as both. Setting the iperf3 configuration value to True will start iperf3 in
-server mode, running as a daemon.
-```
-$ juju deploy cs:~nfv/netutils client
-$ juju deploy cs:~nfv/netutils server iperf3=True
-$ juju run-action client/0 iperf host=<ip of server> [...]
-```
-
-## Scale out Usage
-
-With great scalability comes great power, but please don't use this to DDoS anyone without their permission.
-
-## Known Limitations and Issues
-
-# Contact Information
-
-## Contributing to the charm
-
-  - The compiled charm can be found [here](https://www.jujucharms.com/u/nfv/netutils).
-  - [layer/netutils](https://osm.etsi.org/gitweb/?p=osm/juju-charms.git;a=summary/) contains the source of the layer.
-  - Please add any bugs or feature requests to the [bugzilla](https://osm.etsi.org/bugzilla/buglist.cgi?component=Juju-charms&list_id=426&product=OSM&resolution=---).
diff --git a/charms/layers/netutils/actions.yaml b/charms/layers/netutils/actions.yaml
deleted file mode 100644
index f4f7884..0000000
--- a/charms/layers/netutils/actions.yaml
+++ /dev/null
@@ -1,133 +0,0 @@
-nmap:
-  description: "nmap a thing!"
-  params:
-    destination:
-      description: "destination to scan"
-      type: string
-  required:
-    - destination
-ping:
-  description: 'ping a thing!'
-  params:
-    count:
-      description: "Stop after sending count ECHO_REQUEST packets"
-      type: integer
-      default: 30
-    destination:
-      description: "destination of ping request"
-      type: string
-  required:
-    - destination
-traceroute:
-  description: 'trace a thing!'
-  params:
-    hops:
-      description: "Stop tracing after count hops"
-      type: integer
-      default: 30
-    destination:
-      description: "destination of traceroute request"
-      type: string
-  required:
-    - destination
-dig:
-  description: "DNS lookup"
-  params:
-    nsserver:
-      description: "The nameserver to lookup against."
-      type: string
-    host:
-      description: "The host to lookup"
-      type: string
-    type:
-      description: "The DNS record type to lookup"
-      type: string
-  required:
-    - host
-iperf:
-    description: ""
-    params:
-      host:
-        description: ""
-        type: string
-      port:
-        description: ""
-        type: integer
-        default: 5201
-      format:
-        description: ""
-        type: string
-      interval:
-        description: ""
-        type: string
-      affinity:
-        description: ""
-        type: string
-      udp:
-        description: "Use UDP rather than TCP"
-        type: boolean
-        default: False
-      bandwidth:
-        description: "Set the target bandwidth to n bits/sec (default 1Mbit/sec for UDP, unlimited for TCP)"
-        type: integer
-        default: 1
-      time:
-        description: "Time, in seconds, to transmit for."
-        type: integer
-        default: 10
-      blockcount:
-        description: "The number of blocks to transmit"
-        type: integer
-      length:
-        description: "The length of buffer to read or write (default 128KB for TCP, 8KB for UDP)"
-        type: integer
-      parallel:
-        description: "The number of parallel client streams to run"
-        type: integer
-      reverse:
-        description: "Run in reverse mode (server sends, client receives)."
-        type: boolean
-        default: false
-      window:
-        description: "Window size/socket buffer size."
-        type: integer
-      bind:
-        description: "Bind to a specific interface or multicast address"
-        type: string
-      mss:
-        description: "Set the TCP maximum segment size (MTU - 40 bytes)"
-        type: integer
-      no-delay:
-        description: "Set the TCP no delay, disabling Nagle's algorithm."
-        type: boolean
-        default: false
-      ipv4:
-        description: "Only use IPv4"
-        type: boolean
-        default: false
-      ipv6:
-        description: "Only use IPv6"
-        type: boolean
-        default: false
-      tos:
-        description: "Set the IP 'type of service'"
-        type: integer
-      flowlabel:
-        description: "Set the IPv6 flow label (linux-only)"
-        type: string
-      zerocopy:
-        description: "Use a 'zero copy' method of sending data, such as sendfile(s), instead of the usual write(2)."
-        type: boolean
-        default: false
-      omit:
-        description: "Omit the first n seconds of the test, to skip past the TCP slow-start period."
-        type: integer
-      title:
-        description: "Prefix every output line with this string."
-        type: string
-      congestion:
-        description: "Set the linux congestion control algorithm."
-        type: string
-
-    required:
-      - host
diff --git a/charms/layers/netutils/actions/dig b/charms/layers/netutils/actions/dig
deleted file mode 100755
index 736a406..0000000
--- a/charms/layers/netutils/actions/dig
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python3
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main
-from charms.reactive import set_state
-from charmhelpers.core.hookenv import action_fail
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_state('actions.dig')
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
diff --git a/charms/layers/netutils/actions/iperf b/charms/layers/netutils/actions/iperf
deleted file mode 100755
index 750028e..0000000
--- a/charms/layers/netutils/actions/iperf
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python3
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main
-from charms.reactive import set_state
-from charmhelpers.core.hookenv import action_fail
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_state('actions.iperf3')
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
diff --git a/charms/layers/netutils/actions/nmap b/charms/layers/netutils/actions/nmap
deleted file mode 100755
index ede4f5b..0000000
--- a/charms/layers/netutils/actions/nmap
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python3
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main
-from charms.reactive import set_state
-from charmhelpers.core.hookenv import action_fail
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_state('actions.nmap')
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
diff --git a/charms/layers/netutils/actions/ping b/charms/layers/netutils/actions/ping
deleted file mode 100755
index 9850fe7..0000000
--- a/charms/layers/netutils/actions/ping
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python3
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main
-from charms.reactive import set_state
-from charmhelpers.core.hookenv import action_fail
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_state('actions.ping')
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
diff --git a/charms/layers/netutils/actions/traceroute b/charms/layers/netutils/actions/traceroute
deleted file mode 100755
index 229ed32..0000000
--- a/charms/layers/netutils/actions/traceroute
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python3
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main
-from charms.reactive import set_state
-from charmhelpers.core.hookenv import action_fail
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_state('actions.traceroute')
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
diff --git a/charms/layers/netutils/config.yaml b/charms/layers/netutils/config.yaml
deleted file mode 100644
index 6101063..0000000
--- a/charms/layers/netutils/config.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-options:
-    iperf3:
-        type: boolean
-        default: false
-        description: "Enabling this option will start iperf3 in server mode."
diff --git a/charms/layers/netutils/icon.svg b/charms/layers/netutils/icon.svg
deleted file mode 100644
index e092eef..0000000
--- a/charms/layers/netutils/icon.svg
+++ /dev/null
@@ -1,279 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="96"
-   height="96"
-   id="svg6517"
-   version="1.1"
-   inkscape:version="0.48+devel r12274"
-   sodipodi:docname="Juju_charm_icon_template.svg">
-  <defs
-     id="defs6519">
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#Background"
-       id="linearGradient6461"
-       gradientUnits="userSpaceOnUse"
-       x1="0"
-       y1="970.29498"
-       x2="144"
-       y2="970.29498"
-       gradientTransform="matrix(0,-0.66666669,0.6660448,0,-866.25992,731.29077)" />
-    <linearGradient
-       id="Background">
-      <stop
-         id="stop4178"
-         offset="0"
-         style="stop-color:#b8b8b8;stop-opacity:1" />
-      <stop
-         id="stop4180"
-         offset="1"
-         style="stop-color:#c9c9c9;stop-opacity:1" />
-    </linearGradient>
-    <filter
-       style="color-interpolation-filters:sRGB;"
-       inkscape:label="Inner Shadow"
-       id="filter1121">
-      <feFlood
-         flood-opacity="0.59999999999999998"
-         flood-color="rgb(0,0,0)"
-         result="flood"
-         id="feFlood1123" />
-      <feComposite
-         in="flood"
-         in2="SourceGraphic"
-         operator="out"
-         result="composite1"
-         id="feComposite1125" />
-      <feGaussianBlur
-         in="composite1"
-         stdDeviation="1"
-         result="blur"
-         id="feGaussianBlur1127" />
-      <feOffset
-         dx="0"
-         dy="2"
-         result="offset"
-         id="feOffset1129" />
-      <feComposite
-         in="offset"
-         in2="SourceGraphic"
-         operator="atop"
-         result="composite2"
-         id="feComposite1131" />
-    </filter>
-    <filter
-       style="color-interpolation-filters:sRGB;"
-       inkscape:label="Drop Shadow"
-       id="filter950">
-      <feFlood
-         flood-opacity="0.25"
-         flood-color="rgb(0,0,0)"
-         result="flood"
-         id="feFlood952" />
-      <feComposite
-         in="flood"
-         in2="SourceGraphic"
-         operator="in"
-         result="composite1"
-         id="feComposite954" />
-      <feGaussianBlur
-         in="composite1"
-         stdDeviation="1"
-         result="blur"
-         id="feGaussianBlur956" />
-      <feOffset
-         dx="0"
-         dy="1"
-         result="offset"
-         id="feOffset958" />
-      <feComposite
-         in="SourceGraphic"
-         in2="offset"
-         operator="over"
-         result="composite2"
-         id="feComposite960" />
-    </filter>
-    <clipPath
-       clipPathUnits="userSpaceOnUse"
-       id="clipPath873">
-      <g
-         transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)"
-         id="g875"
-         inkscape:label="Layer 1"
-         style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline">
-        <path
-           style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"
-           d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z"
-           id="path877"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="sssssssss" />
-      </g>
-    </clipPath>
-    <filter
-       inkscape:collect="always"
-       id="filter891"
-       inkscape:label="Badge Shadow">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="0.71999962"
-         id="feGaussianBlur893" />
-    </filter>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="4.0745362"
-     inkscape:cx="18.514671"
-     inkscape:cy="49.018169"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1029"
-     inkscape:window-x="0"
-     inkscape:window-y="24"
-     inkscape:window-maximized="1"
-     showborder="true"
-     showguides="true"
-     inkscape:guide-bbox="true"
-     inkscape:showpageshadow="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid821" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="16,48"
-       id="guide823" />
-    <sodipodi:guide
-       orientation="0,1"
-       position="64,80"
-       id="guide825" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="80,40"
-       id="guide827" />
-    <sodipodi:guide
-       orientation="0,1"
-       position="64,16"
-       id="guide829" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata6522">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="BACKGROUND"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(268,-635.29076)"
-     style="display:inline">
-    <path
-       style="fill:url(#linearGradient6461);fill-opacity:1;stroke:none;display:inline;filter:url(#filter1121)"
-       d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 C -264.11215,731.29077 -268,727.39888 -268,700.15563 Z"
-       id="path6455"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="sssssssss" />
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer3"
-     inkscape:label="PLACE YOUR PICTOGRAM HERE"
-     style="display:inline" />
-  <g
-     inkscape:groupmode="layer"
-     id="layer2"
-     inkscape:label="BADGE"
-     style="display:none"
-     sodipodi:insensitive="true">
-    <g
-       style="display:inline"
-       transform="translate(-340.00001,-581)"
-       id="g4394"
-       clip-path="none">
-      <g
-         id="g855">
-        <g
-           inkscape:groupmode="maskhelper"
-           id="g870"
-           clip-path="url(#clipPath873)"
-           style="opacity:0.6;filter:url(#filter891)">
-          <path
-             transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)"
-             d="m 264,552.36218 a 12,12 0 1 1 -24,0 A 12,12 0 1 1 264,552.36218 Z"
-             sodipodi:ry="12"
-             sodipodi:rx="12"
-             sodipodi:cy="552.36218"
-             sodipodi:cx="252"
-             id="path844"
-             style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             sodipodi:type="arc" />
-        </g>
-        <g
-           id="g862">
-          <path
-             sodipodi:type="arc"
-             style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             id="path4398"
-             sodipodi:cx="252"
-             sodipodi:cy="552.36218"
-             sodipodi:rx="12"
-             sodipodi:ry="12"
-             d="m 264,552.36218 a 12,12 0 1 1 -24,0 A 12,12 0 1 1 264,552.36218 Z"
-             transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)" />
-          <path
-             transform="matrix(1.25,0,0,1.25,33,-100.45273)"
-             d="m 264,552.36218 a 12,12 0 1 1 -24,0 A 12,12 0 1 1 264,552.36218 Z"
-             sodipodi:ry="12"
-             sodipodi:rx="12"
-             sodipodi:cy="552.36218"
-             sodipodi:cx="252"
-             id="path4400"
-             style="color:#000000;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             sodipodi:type="arc" />
-          <path
-             sodipodi:type="star"
-             style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             id="path4459"
-             sodipodi:sides="5"
-             sodipodi:cx="666.19574"
-             sodipodi:cy="589.50385"
-             sodipodi:r1="7.2431178"
-             sodipodi:r2="4.3458705"
-             sodipodi:arg1="1.0471976"
-             sodipodi:arg2="1.6755161"
-             inkscape:flatsided="false"
-             inkscape:rounded="0.1"
-             inkscape:randomized="0"
-             d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 C 669.9821,591.68426 670.20862,595.55064 669.8173,595.77657 Z"
-             transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)" />
-        </g>
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/charms/layers/netutils/layer.yaml b/charms/layers/netutils/layer.yaml
deleted file mode 100644
index e13c81a..0000000
--- a/charms/layers/netutils/layer.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-repo: git@github.com:AdamIsrael/layer-netutils.git
-includes: ['layer:basic', 'layer:sshproxy']
-options:
-  basic:
-    packages:
-      - traceroute
-      - nmap
-      - iperf3
diff --git a/charms/layers/netutils/metadata.yaml b/charms/layers/netutils/metadata.yaml
deleted file mode 100644
index c42d963..0000000
--- a/charms/layers/netutils/metadata.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-name: netutils
-summary: A suite of network-related utilities.
-maintainer: Adam Israel <adam.israel@canonical.com>
-description: |
-  A suite of network-related utilities, such as ping and traceroute, that
-  can be deployed into a data center in order to diagnose connectivity issues.
-tags:
-  # https://jujucharms.com/docs/stable/authors-charm-metadata
-  - ops
-  - network
-  - performance
-series:
-  - trusty
-  - xenial
-subordinate: false
diff --git a/charms/layers/netutils/reactive/layer_netutils.py b/charms/layers/netutils/reactive/layer_netutils.py
deleted file mode 100644
index 1fd4cb2..0000000
--- a/charms/layers/netutils/reactive/layer_netutils.py
+++ /dev/null
@@ -1,137 +0,0 @@
-from charmhelpers.core.hookenv import (
-    action_get,
-    action_fail,
-    action_set,
-    config,
-    log,
-    status_set,
-)
-
-from charms.reactive import (
-    remove_state as remove_flag,
-    set_state as set_flag,
-    when,
-    when_not,
-)
-import charms.sshproxy
-from subprocess import CalledProcessError
-
-
-@when_not('netutils.ready')
-def ready():
-    status_set('active', 'Ready!')
-    set_flag('netutils.ready')
-
-
-@when('actions.dig')
-def dig():
-    err = ''
-    try:
-        nsserver = action_get('nsserver')
-        host = action_get('host')
-        nstype = action_get('type')
-        cmd = "dig"
-
-        if nsserver:
-            cmd += " @{}".format(nsserver)
-        if host:
-            cmd += " {}".format(host)
-        else:
-            action_fail('Hostname required.')
-        if nstype:
-            cmd += " -t {}".format(nstype)
-
-        result, err = charms.sshproxy._run(cmd)
-    except:
-        action_fail('dig command failed:' + err)
-    else:
-        action_set({'outout': result})
-    finally:
-        remove_flag('actions.dig')
-
-
-@when('actions.nmap')
-def nmap():
-    err = ''
-    try:
-        result, err = charms.sshproxy._run(
-            'nmap {}'.format(action_get('destination'))
-        )
-    except:
-        action_fail('nmap command failed:' + err)
-    else:
-        action_set({'outout': result})
-    finally:
-        remove_flag('actions.nmap')
-
-
-@when('actions.ping')
-def ping():
-    err = ''
-    try:
-        result, err = charms.sshproxy._run('ping -qc {} {}'.format(
-            action_get('count'), action_get('destination'))
-        )
-
-    except:
-        action_fail('ping command failed:' + err)
-    else:
-        # Here you can send results back from ping, if you had time to parse it
-        action_set({'output': result})
-    finally:
-        remove_flag('actions.ping')
-
-
-@when('actions.traceroute')
-def traceroute():
-    try:
-        result, err = charms.sshproxy._run(
-            'traceroute -m {} {}'.format(
-                    action_get('hops'),
-                    action_get('destination')
-            )
-        )
-    except:
-        action_fail('traceroute command failed')
-    else:
-        # Here you can send results back from ping, if you had time to parse it
-        action_set({'output': result})
-    finally:
-        remove_flag('actions.traceroute')
-
-
-@when('actions.iperf3')
-def iperf3():
-    err = ''
-    try:
-        # TODO: read all the flags via action_get and build the
-        # proper command line to run iperf3
-        host = action_get('host')
-
-        cmd = 'iperf3 -c {} --json'.format(host)
-        result, err = charms.sshproxy._run(cmd)
-    except CalledProcessError as e:
-        action_fail('iperf3 command failed:' + e.output)
-    else:
-        action_set({'outout': result})
-    finally:
-        remove_flag('actions.iperf3')
-
-
-@when('config.changed')
-def config_changed():
-    """ Handle configuration changes """
-    cfg = config()
-    if cfg.changed('iperf3'):
-        if cfg['iperf3']:
-            # start iperf in server + daemon mode
-            cmd = "iperf3 -s -D"
-        else:
-            cmd = "killall iperf3"
-        try:
-            charms.sshproxy._run(cmd)
-            log("iperf3 stopped.")
-        except CalledProcessError:
-            log("iperf3 not running.")
-        else:
-            log("iperf3 started.")
diff --git a/charms/layers/netutils/tests/00-setup b/charms/layers/netutils/tests/00-setup
deleted file mode 100755
index f0616a5..0000000
--- a/charms/layers/netutils/tests/00-setup
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-sudo add-apt-repository ppa:juju/stable -y
-sudo apt-get update
-sudo apt-get install amulet python-requests -y
diff --git a/charms/layers/netutils/tests/10-deploy b/charms/layers/netutils/tests/10-deploy
deleted file mode 100755
index ef269cd..0000000
--- a/charms/layers/netutils/tests/10-deploy
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/python3
-
-import amulet
-import requests
-import unittest
-
-
-class TestCharm(unittest.TestCase):
-    def setUp(self):
-        self.d = amulet.Deployment()
-
-        self.d.add('layer-netutils')
-        self.d.expose('layer-netutils')
-
-        self.d.setup(timeout=900)
-        self.d.sentry.wait()
-
-        self.unit = self.d.sentry['layer-netutils'][0]
-
-    def test_service(self):
-        # test we can access over http
-        page = requests.get('http://{}'.format(self.unit.info['public-address']))
-        self.assertEqual(page.status_code, 200)
-        # Now you can use self.d.sentry[SERVICE][UNIT] to address each of the units and perform
-        # more in-depth steps. Each self.d.sentry[SERVICE][UNIT] has the following methods:
-        # - .info - An array of the information of that unit from Juju
-        # - .file(PATH) - Get the details of a file on that unit
-        # - .file_contents(PATH) - Get plain text output of PATH file from that unit
-        # - .directory(PATH) - Get details of directory
-        # - .directory_contents(PATH) - List files and folders in PATH on that unit
-        # - .relation(relation, service:rel) - Get relation data from return service
diff --git a/charms/layers/pingpong/README.md b/charms/layers/pingpong/README.md
deleted file mode 100644
index 3bec243..0000000
--- a/charms/layers/pingpong/README.md
+++ /dev/null
@@ -1,163 +0,0 @@
-# Overview
-
-This repository contains the [Juju] layer that represents a working example of a proxy charm.
-
-# What is a proxy charm?
-
-A proxy charm is a limited type of charm that does not interact with software running on the same host, such as controlling and configuring a remote device (a static VM image, a router/switch, etc.). It cannot take advantage of some of Juju's key features, such as [scaling], [relations], and [leadership].
-
-Proxy charms are primarily a stop-gap, intended to prototype quickly, with the end goal being to develop it into a full-featured charm, which installs and executes code on the same machine as the charm is running.
-
-# Usage
-
-```bash
-# Clone this repository
-git clone https://osm.etsi.org/gerrit/osm/juju-charms
-cd juju-charms
-
-# Setup environment variables
-source juju-env.sh
-
-cd layers/pingpong
-charm build
-
-# Examine the built charm
-cd ../../builds/pingpong
-ls
-actions       config.yaml  icon.svg    metadata.yaml     tests
-actions.yaml  copyright    layer.yaml  reactive          tox.ini
-bin           deps         lib         README.md         wheelhouse
-builds        hooks        Makefile    requirements.txt
-
-```
-
-You can view a screencast of this: https://asciinema.org/a/96738
-
-The `charm build` process combines this pingpong layer with each layer that it
-has included in the `metadata.yaml` file, along with their various dependencies.
-
-This built charm is what will then be used by the SO to communicate with the
-VNF.
-
-# Configuration
-
-The pingpong charm has several configuration properties that can be set via
-the SO:
-
-- ssh-hostname
-- ssh-username
-- ssh-password
-- ssh-private-key
-- mode
-
-The ssh-* keys are included by the `sshproxy` layer, and enable the charm to
-connect to the VNF image.
-
-The mode key must be one of two values: `ping` or `pong`. This informs the
-charm as to which function it is serving.
-
-# Contact Information
-For support, please send an email to the [OSM Tech] list.
-
-
-[OSM Tech]: mailto:OSM_TECH@list.etsi.org
-[Juju]: https://jujucharms.com/about
-[configure]: https://jujucharms.com/docs/2.0/charms-config
-[scaling]: https://jujucharms.com/docs/2.0/charms-scaling
-[relations]: https://jujucharms.com/docs/2.0/charms-relations
-[leadership]: https://jujucharms.com/docs/2.0/developer-leadership
-[created your charm]: https://jujucharms.com/docs/2.0/developer-getting-started
-
-
-
-
-
------
-
-
-# Integration
-
-After you've [created your charm], open `interfaces.yaml` and add
-`layer:sshproxy` to the includes stanza, as shown below:
-```
-includes: ['layer:basic', 'layer:sshproxy']
-```
-
-## Reactive states
-
-This layer will set the following states:
-
-- `sshproxy.configured` This state is set when SSH credentials have been supplied to the charm.
-
-
-## Example
-In `reactive/mycharm.py`, you can add logic to execute commands over SSH. This
-example is run via a `start` action, and starts a service running on a remote
-host.
-```
-...
-import charms.sshproxy
-
-
-@when('sshproxy.configured')
-@when('actions.start')
-def start():
-    """ Execute's the command, via the start action` using the
-    configured SSH credentials
-    """
-    sshproxy.ssh("service myservice start")
-
-```
-
-## Actions
-This layer includes a built-in `run` action useful for debugging or running arbitrary commands:
-
-```
-$ juju run-action mycharm/0 run command=hostname
-Action queued with id: 014b72f3-bc02-4ecb-8d38-72bce03bbb63
-
-$ juju show-action-output 014b72f3-bc02-4ecb-8d38-72bce03bbb63
-results:
-  output: juju-66a5f3-11
-status: completed
-timing:
-  completed: 2016-10-27 19:53:49 +0000 UTC
-  enqueued: 2016-10-27 19:53:44 +0000 UTC
-  started: 2016-10-27 19:53:48 +0000 UTC
-
-```
-## Known Limitations and Issues
-
-### Security issues
-
-- Password and key-based authentications are supported, with the caveat that
-both (password and private key) are stored plaintext within the Juju controller.
-
-# Configuration and Usage
-
-This layer adds the following configuration options:
-- ssh-hostname
-- ssh-username
-- ssh-password
-- ssh-private-key
-
-Once  [configure] those values at any time. Once they are set, the `sshproxy.configured` state flag will be toggled:
-
-```
-juju deploy mycharm ssh-hostname=10.10.10.10 ssh-username=ubuntu ssh-password=yourpassword
-```
-or
-```
-juju deploy mycharm ssh-hostname=10.10.10.10 ssh-username=ubuntu ssh-private-key="cat `~/.ssh/id_rsa`"
-```
-
-
-# Contact Information
-Homepage: https://github.com/AdamIsrael/layer-sshproxy
-
-[Juju]: https://jujucharms.com/about
-[configure]: https://jujucharms.com/docs/2.0/charms-config
-[scaling]: https://jujucharms.com/docs/2.0/charms-scaling
-[relations]: https://jujucharms.com/docs/2.0/charms-relations
-[leadership]: https://jujucharms.com/docs/2.0/developer-leadership
-[created your charm]: https://jujucharms.com/docs/2.0/developer-getting-started
diff --git a/charms/layers/pingpong/actions.yaml b/charms/layers/pingpong/actions.yaml
deleted file mode 100644
index a5928f1..0000000
--- a/charms/layers/pingpong/actions.yaml
+++ /dev/null
@@ -1,32 +0,0 @@
-set-server:
-    description: "Set the target IP address and port"
-    params:
-        server-ip:
-            description: "IP on which the target service is listening."
-            type: string
-            default: ""
-        server-port:
-            description: "Port on which the target service is listening."
-            type: integer
-            default: 5555
-    required:
-        - server-ip
-set-rate:
-    description: "Set the rate of packet generation."
-    params:
-        rate:
-            description: "Packet rate."
-            type: integer
-            default: 5
-get-stats:
-    description: "Get the stats."
-get-state:
-    description: "Get the admin state of the target service."
-get-rate:
-    description: "Get the rate set on the target service."
-get-server:
-    description: "Get the target server and IP set"
-start-traffic:
-    description: "Start the traffic generator or echo."
-stop-traffic:
-    description: "Stop the traffic generator or echo."
diff --git a/charms/layers/pingpong/actions/get-rate b/charms/layers/pingpong/actions/get-rate
deleted file mode 100755
index 959b3e9..0000000
--- a/charms/layers/pingpong/actions/get-rate
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python3
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main
-from charms.reactive import set_state
-from charmhelpers.core.hookenv import action_fail
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_state('actions.get-rate')
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
diff --git a/charms/layers/pingpong/actions/get-server b/charms/layers/pingpong/actions/get-server
deleted file mode 100755
index 52e0089..0000000
--- a/charms/layers/pingpong/actions/get-server
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python3
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main
-from charms.reactive import set_state
-from charmhelpers.core.hookenv import action_fail
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_state('actions.get-server')
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
diff --git a/charms/layers/pingpong/actions/get-state b/charms/layers/pingpong/actions/get-state
deleted file mode 100755
index 446e8d7..0000000
--- a/charms/layers/pingpong/actions/get-state
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python3
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main
-from charms.reactive import set_state
-from charmhelpers.core.hookenv import action_fail
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_state('actions.get-state')
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
diff --git a/charms/layers/pingpong/actions/get-stats b/charms/layers/pingpong/actions/get-stats
deleted file mode 100755
index 086afc2..0000000
--- a/charms/layers/pingpong/actions/get-stats
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python3
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main
-from charms.reactive import set_state
-from charmhelpers.core.hookenv import action_fail
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_state('actions.get-stats')
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
diff --git a/charms/layers/pingpong/actions/set-rate b/charms/layers/pingpong/actions/set-rate
deleted file mode 100755
index 8fb723e..0000000
--- a/charms/layers/pingpong/actions/set-rate
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python3
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main
-from charms.reactive import set_state
-from charmhelpers.core.hookenv import action_fail
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_state('actions.set-rate')
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
diff --git a/charms/layers/pingpong/actions/set-server b/charms/layers/pingpong/actions/set-server
deleted file mode 100755
index d1e908f..0000000
--- a/charms/layers/pingpong/actions/set-server
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python3
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main
-from charms.reactive import set_state
-from charmhelpers.core.hookenv import action_fail
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_state('actions.set-server')
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
diff --git a/charms/layers/pingpong/actions/start-traffic b/charms/layers/pingpong/actions/start-traffic
deleted file mode 100755
index 562ac4c..0000000
--- a/charms/layers/pingpong/actions/start-traffic
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python3
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main
-from charms.reactive import set_state
-from charmhelpers.core.hookenv import action_fail
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_state('actions.start-traffic')
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
diff --git a/charms/layers/pingpong/actions/stop-traffic b/charms/layers/pingpong/actions/stop-traffic
deleted file mode 100755
index 9352b33..0000000
--- a/charms/layers/pingpong/actions/stop-traffic
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python3
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main
-from charms.reactive import set_state
-from charmhelpers.core.hookenv import action_fail
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_state('actions.stop-traffic')
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
diff --git a/charms/layers/pingpong/config.yaml b/charms/layers/pingpong/config.yaml
deleted file mode 100644
index 437524e..0000000
--- a/charms/layers/pingpong/config.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-options:
-  mode:
-    type: string
-    default:
-    description: "The service type: [ping, pong]"
diff --git a/charms/layers/pingpong/icon.svg b/charms/layers/pingpong/icon.svg
deleted file mode 100644
index e092eef..0000000
--- a/charms/layers/pingpong/icon.svg
+++ /dev/null
@@ -1,279 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="96"
-   height="96"
-   id="svg6517"
-   version="1.1"
-   inkscape:version="0.48+devel r12274"
-   sodipodi:docname="Juju_charm_icon_template.svg">
-  <defs
-     id="defs6519">
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#Background"
-       id="linearGradient6461"
-       gradientUnits="userSpaceOnUse"
-       x1="0"
-       y1="970.29498"
-       x2="144"
-       y2="970.29498"
-       gradientTransform="matrix(0,-0.66666669,0.6660448,0,-866.25992,731.29077)" />
-    <linearGradient
-       id="Background">
-      <stop
-         id="stop4178"
-         offset="0"
-         style="stop-color:#b8b8b8;stop-opacity:1" />
-      <stop
-         id="stop4180"
-         offset="1"
-         style="stop-color:#c9c9c9;stop-opacity:1" />
-    </linearGradient>
-    <filter
-       style="color-interpolation-filters:sRGB;"
-       inkscape:label="Inner Shadow"
-       id="filter1121">
-      <feFlood
-         flood-opacity="0.59999999999999998"
-         flood-color="rgb(0,0,0)"
-         result="flood"
-         id="feFlood1123" />
-      <feComposite
-         in="flood"
-         in2="SourceGraphic"
-         operator="out"
-         result="composite1"
-         id="feComposite1125" />
-      <feGaussianBlur
-         in="composite1"
-         stdDeviation="1"
-         result="blur"
-         id="feGaussianBlur1127" />
-      <feOffset
-         dx="0"
-         dy="2"
-         result="offset"
-         id="feOffset1129" />
-      <feComposite
-         in="offset"
-         in2="SourceGraphic"
-         operator="atop"
-         result="composite2"
-         id="feComposite1131" />
-    </filter>
-    <filter
-       style="color-interpolation-filters:sRGB;"
-       inkscape:label="Drop Shadow"
-       id="filter950">
-      <feFlood
-         flood-opacity="0.25"
-         flood-color="rgb(0,0,0)"
-         result="flood"
-         id="feFlood952" />
-      <feComposite
-         in="flood"
-         in2="SourceGraphic"
-         operator="in"
-         result="composite1"
-         id="feComposite954" />
-      <feGaussianBlur
-         in="composite1"
-         stdDeviation="1"
-         result="blur"
-         id="feGaussianBlur956" />
-      <feOffset
-         dx="0"
-         dy="1"
-         result="offset"
-         id="feOffset958" />
-      <feComposite
-         in="SourceGraphic"
-         in2="offset"
-         operator="over"
-         result="composite2"
-         id="feComposite960" />
-    </filter>
-    <clipPath
-       clipPathUnits="userSpaceOnUse"
-       id="clipPath873">
-      <g
-         transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)"
-         id="g875"
-         inkscape:label="Layer 1"
-         style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline">
-        <path
-           style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"
-           d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z"
-           id="path877"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="sssssssss" />
-      </g>
-    </clipPath>
-    <filter
-       inkscape:collect="always"
-       id="filter891"
-       inkscape:label="Badge Shadow">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="0.71999962"
-         id="feGaussianBlur893" />
-    </filter>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="4.0745362"
-     inkscape:cx="18.514671"
-     inkscape:cy="49.018169"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1029"
-     inkscape:window-x="0"
-     inkscape:window-y="24"
-     inkscape:window-maximized="1"
-     showborder="true"
-     showguides="true"
-     inkscape:guide-bbox="true"
-     inkscape:showpageshadow="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid821" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="16,48"
-       id="guide823" />
-    <sodipodi:guide
-       orientation="0,1"
-       position="64,80"
-       id="guide825" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="80,40"
-       id="guide827" />
-    <sodipodi:guide
-       orientation="0,1"
-       position="64,16"
-       id="guide829" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata6522">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="BACKGROUND"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(268,-635.29076)"
-     style="display:inline">
-    <path
-       style="fill:url(#linearGradient6461);fill-opacity:1;stroke:none;display:inline;filter:url(#filter1121)"
-       d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 C -264.11215,731.29077 -268,727.39888 -268,700.15563 Z"
-       id="path6455"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="sssssssss" />
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer3"
-     inkscape:label="PLACE YOUR PICTOGRAM HERE"
-     style="display:inline" />
-  <g
-     inkscape:groupmode="layer"
-     id="layer2"
-     inkscape:label="BADGE"
-     style="display:none"
-     sodipodi:insensitive="true">
-    <g
-       style="display:inline"
-       transform="translate(-340.00001,-581)"
-       id="g4394"
-       clip-path="none">
-      <g
-         id="g855">
-        <g
-           inkscape:groupmode="maskhelper"
-           id="g870"
-           clip-path="url(#clipPath873)"
-           style="opacity:0.6;filter:url(#filter891)">
-          <path
-             transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)"
-             d="m 264,552.36218 a 12,12 0 1 1 -24,0 A 12,12 0 1 1 264,552.36218 Z"
-             sodipodi:ry="12"
-             sodipodi:rx="12"
-             sodipodi:cy="552.36218"
-             sodipodi:cx="252"
-             id="path844"
-             style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             sodipodi:type="arc" />
-        </g>
-        <g
-           id="g862">
-          <path
-             sodipodi:type="arc"
-             style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             id="path4398"
-             sodipodi:cx="252"
-             sodipodi:cy="552.36218"
-             sodipodi:rx="12"
-             sodipodi:ry="12"
-             d="m 264,552.36218 a 12,12 0 1 1 -24,0 A 12,12 0 1 1 264,552.36218 Z"
-             transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)" />
-          <path
-             transform="matrix(1.25,0,0,1.25,33,-100.45273)"
-             d="m 264,552.36218 a 12,12 0 1 1 -24,0 A 12,12 0 1 1 264,552.36218 Z"
-             sodipodi:ry="12"
-             sodipodi:rx="12"
-             sodipodi:cy="552.36218"
-             sodipodi:cx="252"
-             id="path4400"
-             style="color:#000000;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             sodipodi:type="arc" />
-          <path
-             sodipodi:type="star"
-             style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             id="path4459"
-             sodipodi:sides="5"
-             sodipodi:cx="666.19574"
-             sodipodi:cy="589.50385"
-             sodipodi:r1="7.2431178"
-             sodipodi:r2="4.3458705"
-             sodipodi:arg1="1.0471976"
-             sodipodi:arg2="1.6755161"
-             inkscape:flatsided="false"
-             inkscape:rounded="0.1"
-             inkscape:randomized="0"
-             d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 C 669.9821,591.68426 670.20862,595.55064 669.8173,595.77657 Z"
-             transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)" />
-        </g>
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/charms/layers/pingpong/layer.yaml b/charms/layers/pingpong/layer.yaml
deleted file mode 100644
index 833eea6..0000000
--- a/charms/layers/pingpong/layer.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-includes:
-    - layer:basic
-    - layer:vnfproxy
-repo: https://osm.etsi.org/gerrit/osm/juju-charms
diff --git a/charms/layers/pingpong/metadata.yaml b/charms/layers/pingpong/metadata.yaml
deleted file mode 100644
index 1840743..0000000
--- a/charms/layers/pingpong/metadata.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-name: pingpong
-summary: <Fill in summary here>
-maintainer: Adam Israel <Adam.Israel@ronin>
-description: |
-  <Multi-line description here>
-tags:
-  # Replace "misc" with one or more whitelisted tags from this list:
-  # https://jujucharms.com/docs/stable/authors-charm-metadata
-  - misc
-subordinate: false
-series:
-    - trusty
-    - xenial
diff --git a/charms/layers/pingpong/reactive/pingpong.py b/charms/layers/pingpong/reactive/pingpong.py
deleted file mode 100755
index 7eedc84..0000000
--- a/charms/layers/pingpong/reactive/pingpong.py
+++ /dev/null
@@ -1,308 +0,0 @@
-from charmhelpers.core.hookenv import (
-    action_get,
-    action_fail,
-    action_set,
-    config,
-    status_set,
-)
-
-from charms.reactive import (
-    remove_state as remove_flag,
-    set_state as set_flag,
-    when,
-    when_not,
-)
-import charms.sshproxy
-# from subprocess import (
-#     Popen,
-#     CalledProcessError,
-#     PIPE,
-# )
-
-
-cfg = config()
-
-
-@when_not('pingpong.configured')
-def not_configured():
-    """Check the current configuration.
-
-    Check the current values in config to see if we have enough
-    information to continue.
-    """
-    config_changed()
-
-
-@when('config.changed', 'sshproxy.configured')
-def config_changed():
-    """Verify the configuration.
-
-    Verify that the charm has been configured
-    """
-
-    try:
-        status_set('maintenance', 'Verifying configuration data...')
-
-        (validated, output) = charms.sshproxy.verify_ssh_credentials()
-        if not validated:
-            status_set('blocked', 'Unable to verify SSH credentials: {}'.format(
-                output
-            ))
-            return
-
-        if all(k in cfg for k in ['mode']):
-            if cfg['mode'] in ['ping', 'pong']:
-                set_flag('pingpong.configured')
-                status_set('active', 'ready!')
-                return
-        status_set('blocked', 'Waiting for configuration')
-
-    except Exception as err:
-        status_set('blocked', 'Waiting for valid configuration ({})'.format(err))
-
-
-@when('config.changed')
-@when_not('sshproxy.configured')
-def invalid_credentials():
-    status_set('blocked', 'Waiting for SSH credentials.')
-    pass
-
-
-def is_ping():
-    if cfg['mode'] == 'ping':
-        return True
-    return False
-
-
-def is_pong():
-    return not is_ping()
-
-
-def get_port():
-    port = 18888
-    if is_pong():
-        port = 18889
-    return port
-
-
-@when('pingpong.configured')
-@when('actions.start')
-def start():
-    try:
-        # Bring up the eth1 interface.
-        # The selinux label on the file needs to be set correctly
-        cmd = "sudo timeout 5 /sbin/restorecon -v /etc/sysconfig/network-scripts/ifcfg-eth1"
-        result, err = charms.sshproxy._run(cmd)
-    except Exception as e:
-        err = "{}".format(e)
-        action_fail('command failed: {}, errors: {}'.format(err, e.output))
-        remove_flag('actions.start')
-        return
-
-    # Attempt to raise the non-mgmt interface, but ignore failures if
-    # the interface is already up.
-    try:
-        cmd = "sudo timeout 30 /sbin/ifup eth1"
-        result, err = charms.sshproxy._run(cmd)
-    except Exception as e:
-        pass
-
-    try:
-        cmd = "sudo timeout 30 /usr/bin/systemctl start {}". \
-              format(cfg['mode'])
-        result, err = charms.sshproxy._run(cmd)
-    except Exception as e:
-        action_fail('command failed: {}, errors: {}'.format(e, e.output))
-    else:
-        action_set({'stdout': result,
-                    'errors': err})
-    finally:
-        remove_flag('actions.start')
-
-
-@when('pingpong.configured')
-@when('actions.stop')
-def stop():
-    try:
-        # Enter the command to stop your service(s)
-        cmd = "sudo timeout 30 /usr/bin/systemctl stop {}".format(cfg['mode'])
-        result, err = charms.sshproxy._run(cmd)
-    except Exception as e:
-        action_fail('command failed: {}, errors: {}'.format(e, e.output))
-    else:
-        action_set({'stdout': result,
-                    'errors': err})
-    finally:
-        remove_flag('actions.stop')
-
-
-@when('pingpong.configured')
-@when('actions.restart')
-def restart():
-    try:
-        # Enter the command to restart your service(s)
-        cmd = "sudo timeout 30 /usr/bin/systemctl restart {}".format(cfg['mode'])
-        result, err = charms.sshproxy._run(cmd)
-    except Exception as e:
-        action_fail('command failed: {}, errors: {}'.format(e, e.output))
-    else:
-        action_set({'stdout': result,
-                    'errors': err})
-    finally:
-        remove_flag('actions.restart')
-
-
-@when('pingpong.configured')
-@when('actions.set-server')
-def set_server():
-    try:
-        # Get the target service info
-        target_ip = action_get('server-ip')
-        target_port = action_get('server-port')
-
-        data = '{{"ip" : "{}", "port" : {} }}'. \
-               format(target_ip, target_port)
-
-        cmd = format_curl(
-            'POST',
-            '/server',
-            data,
-        )
-
-        result, err = charms.sshproxy._run(cmd)
-    except Exception as e:
-        action_fail('command failed: {}, errors: {}'.format(e, e.output))
-    else:
-        action_set({'stdout': result,
-                    'errors': err})
-    finally:
-        remove_flag('actions.set-server')
-
-
-@when('pingpong.configured')
-@when('actions.set-rate')
-def set_rate():
-    try:
-        if is_ping():
-            rate = action_get('rate')
-            cmd = format_curl('POST', '/rate', '{{"rate" : {}}}'.format(rate))
-
-            result, err = charms.sshproxy._run(cmd)
-    except Exception as e:
-        err = "{}".format(e)
-        action_fail('command failed: {}, errors: {}'.format(err, e.output))
-    else:
-        action_set({'stdout': result,
-                    'errors': err})
-    finally:
-        remove_flag('actions.set-rate')
-
-
-@when('pingpong.configured')
-@when('actions.get-rate')
-def get_rate():
-    try:
-        if is_ping():
-            cmd = format_curl('GET', '/rate')
-
-            result, err = charms.sshproxy._run(cmd)
-    except Exception as e:
-        action_fail('command failed: {}, errors: {}'.format(e, e.output))
-    else:
-        action_set({'stdout': result,
-                    'errors': err})
-    finally:
-        remove_flag('actions.get-rate')
-
-
-@when('pingpong.configured')
-@when('actions.get-state')
-def get_state():
-    try:
-        cmd = format_curl('GET', '/state')
-
-        result, err = charms.sshproxy._run(cmd)
-    except Exception as e:
-        action_fail('command failed: {}, errors: {}'.format(e, e.output))
-    else:
-        action_set({'stdout': result,
-                    'errors': err})
-    finally:
-        remove_flag('actions.get-state')
-
-
-@when('pingpong.configured')
-@when('actions.get-stats')
-def get_stats():
-    try:
-        cmd = format_curl('GET', '/stats')
-
-        result, err = charms.sshproxy._run(cmd)
-    except Exception as e:
-        action_fail('command failed: {}, errors: {}'.format(e, e.output))
-    else:
-        action_set({'stdout': result,
-                    'errors': err})
-    finally:
-        remove_flag('actions.get-stats')
-
-
-@when('pingpong.configured')
-@when('actions.start-traffic')
-def start_traffic():
-    try:
-        cmd = format_curl('POST', '/adminstatus/state', '{"enable" : true}')
-
-        result, err = charms.sshproxy._run(cmd)
-    except Exception as e:
-        action_fail('command failed: {}, errors: {}'.format(e, e.output))
-    else:
-        action_set({'stdout': result,
-                    'errors': err})
-    finally:
-        remove_flag('actions.start-traffic')
-
-
-@when('pingpong.configured')
-@when('actions.stop-traffic')
-def stop_traffic():
-    try:
-        cmd = format_curl('POST', '/adminstatus/state', '{"enable" : false}')
-
-        result, err = charms.sshproxy._run(cmd)
-    except Exception as e:
-        action_fail('command failed: {}, errors: {}'.format(e, e.output))
-    else:
-        action_set({'stdout': result,
-                    'errors': err})
-    finally:
-        remove_flag('actions.stop-traffic')
-
-
-def format_curl(method, path, data=None):
-    """ A utility function to build the curl command line. """
-
-    # method must be GET or POST
-    if method not in ['GET', 'POST']:
-        # Throw exception
-        return None
-
-    # Get our service info
-    host = '127.0.0.1'
-    port = get_port()
-    mode = cfg['mode']
-
-    cmd = ['curl',
-           # '-D', '/dev/stdout',
-           '-H', 'Accept: application/vnd.yang.data+xml',
-           '-H', 'Content-Type: application/vnd.yang.data+json',
-           '-X', method]
-
-    if method == "POST" and data:
-        cmd.append('-d')
-        cmd.append('{}'.format(data))
-
-    cmd.append(
-        'http://{}:{}/api/v1/{}{}'.format(host, port, mode, path)
-    )
-    return cmd
diff --git a/charms/layers/pingpong/tests/00-setup b/charms/layers/pingpong/tests/00-setup
deleted file mode 100755
index f0616a5..0000000
--- a/charms/layers/pingpong/tests/00-setup
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-sudo add-apt-repository ppa:juju/stable -y
-sudo apt-get update
-sudo apt-get install amulet python-requests -y
diff --git a/charms/layers/pingpong/tests/10-deploy b/charms/layers/pingpong/tests/10-deploy
deleted file mode 100755
index d1d4719..0000000
--- a/charms/layers/pingpong/tests/10-deploy
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/python3
-
-import amulet
-import requests
-import unittest
-
-
-class TestCharm(unittest.TestCase):
-    def setUp(self):
-        self.d = amulet.Deployment()
-
-        self.d.add('pingpong')
-        self.d.expose('pingpong')
-
-        self.d.setup(timeout=900)
-        self.d.sentry.wait()
-
-        self.unit = self.d.sentry['pingpong'][0]
-
-    def test_service(self):
-        # test we can access over http
-        page = requests.get('http://{}'.format(self.unit.info['public-address']))
-        self.assertEqual(page.status_code, 200)
-        # Now you can use self.d.sentry[SERVICE][UNIT] to address each of the units and perform
-        # more in-depth steps. Each self.d.sentry[SERVICE][UNIT] has the following methods:
-        # - .info - An array of the information of that unit from Juju
-        # - .file(PATH) - Get the details of a file on that unit
-        # - .file_contents(PATH) - Get plain text output of PATH file from that unit
-        # - .directory(PATH) - Get details of directory
-        # - .directory_contents(PATH) - List files and folders in PATH on that unit
-        # - .relation(relation, service:rel) - Get relation data from return service
-
-        
-if __name__ == '__main__':
-    unittest.main()
diff --git a/charms/layers/simple/README.md b/charms/layers/simple/README.md
deleted file mode 100644
index f9d6eed..0000000
--- a/charms/layers/simple/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-# Overview
-
-This is an example charm as demonstrated in the OSM [Hackfest](https://osm.etsi.org/wikipub/index.php/OSM_workshops_and_events) series.
-
-This is intended to provide a well-documented example of the proxy charm written by Hackfest participants.
-
-# Prerequisites
-
-There are two ways that you can exercise this charm: install the latest stable release of OSM or use Juju directly.
-
-The workshop materials and tutorials cover using charms as part of OSM. You can follow that approach, but this README will focus on using Juju directly. We highly recommend that vendors and charm developers use this approach for the initial development of the charm.
-
-## Ubuntu 16.04 or higher
-
-We recommend using Ubuntu 16.04 or higher for the development and testing of charms. It is assumed that you have installed Ubuntu either on physical hardware or in a Virtual Machine.
-
-## Install LXD and Juju
-
-We will be installing the required software via snap. Snaps are containerised software packages, preferred because they are easy to create and install, will automatically update to the latest stable version, and contain bundled dependencies.
-
-```
-snap install lxd
-snap install juju
-snap install charm
-```
-
-# Usage
-
-
-## Known Limitations and Issues
-
-This not only helps users but gives people a place to start if they want to help
-you add features to your charm.
-
-# Configuration
-
-The configuration options will be listed on the charm store, however If you're
-making assumptions or opinionated decisions in the charm (like setting a default
-administrator password), you should detail that here so the user knows how to
-change it immediately, etc.
-
-# Contact Information
-
-## Upstream Project Name
-
-  - Upstream website
-  - Upstream bug tracker
-  - Upstream mailing list or contact information
-  - Feel free to add things if it's useful for users
-
-
-[service]: http://example.com
-[icon guidelines]: https://jujucharms.com/docs/stable/authors-charm-icon
diff --git a/charms/layers/simple/actions.yaml b/charms/layers/simple/actions.yaml
deleted file mode 100644
index 6cd6f8c..0000000
--- a/charms/layers/simple/actions.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-touch:
-    description: "Touch a file on the VNF."
-    params:
-        filename:
-            description: "The name of the file to touch."
-            type: string
-            default: ""
-    required:
-        - filename
diff --git a/charms/layers/simple/actions/touch b/charms/layers/simple/actions/touch
deleted file mode 100755
index 7e30af4..0000000
--- a/charms/layers/simple/actions/touch
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env python3
-##
-# Copyright 2016 Canonical Ltd.
-# All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-##
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main, set_flag
-from charmhelpers.core.hookenv import action_fail, action_name
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_flag('actions.{}'.format(action_name()))
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
diff --git a/charms/layers/simple/config.yaml b/charms/layers/simple/config.yaml
deleted file mode 100644
index 51f2ce4..0000000
--- a/charms/layers/simple/config.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
-options:
-  string-option:
-    type: string
-    default: "Default Value"
-    description: "A short description of the configuration option"
-  boolean-option:
-    type: boolean
-    default: False
-    description: "A short description of the configuration option"
-  int-option:
-    type: int
-    default: 9001
-    description: "A short description of the configuration option"
-
diff --git a/charms/layers/simple/icon.svg b/charms/layers/simple/icon.svg
deleted file mode 100644
index e092eef..0000000
--- a/charms/layers/simple/icon.svg
+++ /dev/null
@@ -1,279 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="96"
-   height="96"
-   id="svg6517"
-   version="1.1"
-   inkscape:version="0.48+devel r12274"
-   sodipodi:docname="Juju_charm_icon_template.svg">
-  <defs
-     id="defs6519">
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#Background"
-       id="linearGradient6461"
-       gradientUnits="userSpaceOnUse"
-       x1="0"
-       y1="970.29498"
-       x2="144"
-       y2="970.29498"
-       gradientTransform="matrix(0,-0.66666669,0.6660448,0,-866.25992,731.29077)" />
-    <linearGradient
-       id="Background">
-      <stop
-         id="stop4178"
-         offset="0"
-         style="stop-color:#b8b8b8;stop-opacity:1" />
-      <stop
-         id="stop4180"
-         offset="1"
-         style="stop-color:#c9c9c9;stop-opacity:1" />
-    </linearGradient>
-    <filter
-       style="color-interpolation-filters:sRGB;"
-       inkscape:label="Inner Shadow"
-       id="filter1121">
-      <feFlood
-         flood-opacity="0.59999999999999998"
-         flood-color="rgb(0,0,0)"
-         result="flood"
-         id="feFlood1123" />
-      <feComposite
-         in="flood"
-         in2="SourceGraphic"
-         operator="out"
-         result="composite1"
-         id="feComposite1125" />
-      <feGaussianBlur
-         in="composite1"
-         stdDeviation="1"
-         result="blur"
-         id="feGaussianBlur1127" />
-      <feOffset
-         dx="0"
-         dy="2"
-         result="offset"
-         id="feOffset1129" />
-      <feComposite
-         in="offset"
-         in2="SourceGraphic"
-         operator="atop"
-         result="composite2"
-         id="feComposite1131" />
-    </filter>
-    <filter
-       style="color-interpolation-filters:sRGB;"
-       inkscape:label="Drop Shadow"
-       id="filter950">
-      <feFlood
-         flood-opacity="0.25"
-         flood-color="rgb(0,0,0)"
-         result="flood"
-         id="feFlood952" />
-      <feComposite
-         in="flood"
-         in2="SourceGraphic"
-         operator="in"
-         result="composite1"
-         id="feComposite954" />
-      <feGaussianBlur
-         in="composite1"
-         stdDeviation="1"
-         result="blur"
-         id="feGaussianBlur956" />
-      <feOffset
-         dx="0"
-         dy="1"
-         result="offset"
-         id="feOffset958" />
-      <feComposite
-         in="SourceGraphic"
-         in2="offset"
-         operator="over"
-         result="composite2"
-         id="feComposite960" />
-    </filter>
-    <clipPath
-       clipPathUnits="userSpaceOnUse"
-       id="clipPath873">
-      <g
-         transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)"
-         id="g875"
-         inkscape:label="Layer 1"
-         style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline">
-        <path
-           style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"
-           d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z"
-           id="path877"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="sssssssss" />
-      </g>
-    </clipPath>
-    <filter
-       inkscape:collect="always"
-       id="filter891"
-       inkscape:label="Badge Shadow">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="0.71999962"
-         id="feGaussianBlur893" />
-    </filter>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="4.0745362"
-     inkscape:cx="18.514671"
-     inkscape:cy="49.018169"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1029"
-     inkscape:window-x="0"
-     inkscape:window-y="24"
-     inkscape:window-maximized="1"
-     showborder="true"
-     showguides="true"
-     inkscape:guide-bbox="true"
-     inkscape:showpageshadow="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid821" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="16,48"
-       id="guide823" />
-    <sodipodi:guide
-       orientation="0,1"
-       position="64,80"
-       id="guide825" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="80,40"
-       id="guide827" />
-    <sodipodi:guide
-       orientation="0,1"
-       position="64,16"
-       id="guide829" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata6522">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="BACKGROUND"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(268,-635.29076)"
-     style="display:inline">
-    <path
-       style="fill:url(#linearGradient6461);fill-opacity:1;stroke:none;display:inline;filter:url(#filter1121)"
-       d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 C -264.11215,731.29077 -268,727.39888 -268,700.15563 Z"
-       id="path6455"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="sssssssss" />
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer3"
-     inkscape:label="PLACE YOUR PICTOGRAM HERE"
-     style="display:inline" />
-  <g
-     inkscape:groupmode="layer"
-     id="layer2"
-     inkscape:label="BADGE"
-     style="display:none"
-     sodipodi:insensitive="true">
-    <g
-       style="display:inline"
-       transform="translate(-340.00001,-581)"
-       id="g4394"
-       clip-path="none">
-      <g
-         id="g855">
-        <g
-           inkscape:groupmode="maskhelper"
-           id="g870"
-           clip-path="url(#clipPath873)"
-           style="opacity:0.6;filter:url(#filter891)">
-          <path
-             transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)"
-             d="m 264,552.36218 a 12,12 0 1 1 -24,0 A 12,12 0 1 1 264,552.36218 Z"
-             sodipodi:ry="12"
-             sodipodi:rx="12"
-             sodipodi:cy="552.36218"
-             sodipodi:cx="252"
-             id="path844"
-             style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             sodipodi:type="arc" />
-        </g>
-        <g
-           id="g862">
-          <path
-             sodipodi:type="arc"
-             style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             id="path4398"
-             sodipodi:cx="252"
-             sodipodi:cy="552.36218"
-             sodipodi:rx="12"
-             sodipodi:ry="12"
-             d="m 264,552.36218 a 12,12 0 1 1 -24,0 A 12,12 0 1 1 264,552.36218 Z"
-             transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)" />
-          <path
-             transform="matrix(1.25,0,0,1.25,33,-100.45273)"
-             d="m 264,552.36218 a 12,12 0 1 1 -24,0 A 12,12 0 1 1 264,552.36218 Z"
-             sodipodi:ry="12"
-             sodipodi:rx="12"
-             sodipodi:cy="552.36218"
-             sodipodi:cx="252"
-             id="path4400"
-             style="color:#000000;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             sodipodi:type="arc" />
-          <path
-             sodipodi:type="star"
-             style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             id="path4459"
-             sodipodi:sides="5"
-             sodipodi:cx="666.19574"
-             sodipodi:cy="589.50385"
-             sodipodi:r1="7.2431178"
-             sodipodi:r2="4.3458705"
-             sodipodi:arg1="1.0471976"
-             sodipodi:arg2="1.6755161"
-             inkscape:flatsided="false"
-             inkscape:rounded="0.1"
-             inkscape:randomized="0"
-             d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 C 669.9821,591.68426 670.20862,595.55064 669.8173,595.77657 Z"
-             transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)" />
-        </g>
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/charms/layers/simple/layer.yaml b/charms/layers/simple/layer.yaml
deleted file mode 100644
index 3fed5e2..0000000
--- a/charms/layers/simple/layer.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-includes: ['layer:basic', 'layer:vnfproxy']
-options:
-        basic:
-                use_venv: false
diff --git a/charms/layers/simple/metadata.yaml b/charms/layers/simple/metadata.yaml
deleted file mode 100644
index fd80d1a..0000000
--- a/charms/layers/simple/metadata.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-name: simple
-summary: A simple VNF proxy charm
-maintainer: Adam Israel <adam.israel@canonical.com>
-subordinate: false
-series: ['xenial']
diff --git a/charms/layers/simple/metrics.yaml b/charms/layers/simple/metrics.yaml
deleted file mode 100644
index 6ebb605..0000000
--- a/charms/layers/simple/metrics.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-metrics:
-  uptime:
-    type: gauge
-    description: "Uptime of the VNF"
-    command: awk '{print $1}' /proc/uptime
diff --git a/charms/layers/simple/reactive/simple.py b/charms/layers/simple/reactive/simple.py
deleted file mode 100644
index 228be3c..0000000
--- a/charms/layers/simple/reactive/simple.py
+++ /dev/null
@@ -1,44 +0,0 @@
-from charmhelpers.core.hookenv import (
-    action_get,
-    action_fail,
-    action_set,
-    status_set,
-)
-from charms.reactive import (
-    clear_flag,
-    set_flag,
-    when,
-    when_not,
-)
-import charms.sshproxy
-
-
-@when('sshproxy.configured')
-@when_not('simple.installed')
-def install_simple_proxy_charm():
-    """Post-install actions.
-
-    This function will run when two conditions are met:
-    1. The 'sshproxy.configured' state is set
-    2. The 'simple.installed' state is not set
-
-    This ensures that the workload status is set to active only when the SSH
-    proxy is properly configured.
-    """
-    set_flag('simple.installed')
-    status_set('active', 'Ready!')
-
-
-@when('actions.touch')
-def touch():
-    err = ''
-    try:
-        filename = action_get('filename')
-        cmd = ['touch {}'.format(filename)]
-        result, err = charms.sshproxy._run(cmd)
-    except:
-        action_fail('command failed:' + err)
-    else:
-        action_set({'output': result})
-    finally:
-        clear_flag('actions.touch')
diff --git a/charms/layers/simple/tests/00-setup b/charms/layers/simple/tests/00-setup
deleted file mode 100755
index f0616a5..0000000
--- a/charms/layers/simple/tests/00-setup
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-sudo add-apt-repository ppa:juju/stable -y
-sudo apt-get update
-sudo apt-get install amulet python-requests -y
diff --git a/charms/layers/simple/tests/10-deploy b/charms/layers/simple/tests/10-deploy
deleted file mode 100755
index 9a26117..0000000
--- a/charms/layers/simple/tests/10-deploy
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/python3
-
-import amulet
-import requests
-import unittest
-
-
-class TestCharm(unittest.TestCase):
-    def setUp(self):
-        self.d = amulet.Deployment()
-
-        self.d.add('simple')
-        self.d.expose('simple')
-
-        self.d.setup(timeout=900)
-        self.d.sentry.wait()
-
-        self.unit = self.d.sentry['simple'][0]
-
-    def test_service(self):
-        # test we can access over http
-        page = requests.get('http://{}'.format(self.unit.info['public-address']))
-        self.assertEqual(page.status_code, 200)
-        # Now you can use self.d.sentry[SERVICE][UNIT] to address each of the units and perform
-        # more in-depth steps. Each self.d.sentry[SERVICE][UNIT] has the following methods:
-        # - .info - An array of the information of that unit from Juju
-        # - .file(PATH) - Get the details of a file on that unit
-        # - .file_contents(PATH) - Get plain text output of PATH file from that unit
-        # - .directory(PATH) - Get details of directory
-        # - .directory_contents(PATH) - List files and folders in PATH on that unit
-        # - .relation(relation, service:rel) - Get relation data from return service
-
-        
-if __name__ == '__main__':
-    unittest.main()
diff --git a/charms/layers/vyos-proxy/Makefile b/charms/layers/vyos-proxy/Makefile
deleted file mode 100644
index a1ad3a5..0000000
--- a/charms/layers/vyos-proxy/Makefile
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/make
-
-all: lint unit_test
-
-
-.PHONY: clean
-clean:
-	@rm -rf .tox
-
-.PHONY: apt_prereqs
-apt_prereqs:
-	@# Need tox, but don't install the apt version unless we have to (don't want to conflict with pip)
-	@which tox >/dev/null || (sudo apt-get install -y python-pip && sudo pip install tox)
-
-.PHONY: lint
-lint: apt_prereqs
-	@tox --notest
-	@PATH=.tox/py34/bin:.tox/py35/bin flake8 $(wildcard hooks reactive lib unit_tests tests)
-	@charm proof
-
-.PHONY: unit_test
-unit_test: apt_prereqs
-	@echo Starting tests...
-	tox
diff --git a/charms/layers/vyos-proxy/README.md b/charms/layers/vyos-proxy/README.md
deleted file mode 100644
index 0337c83..0000000
--- a/charms/layers/vyos-proxy/README.md
+++ /dev/null
@@ -1,221 +0,0 @@
-# Overview
-
-This is the base layer for all charms [built using layers][building].  It
-provides all of the standard Juju hooks and runs the
-[charms.reactive.main][charms.reactive] loop for them.  It also bootstraps the
-[charm-helpers][] and [charms.reactive][] libraries and all of their
-dependencies for use by the charm.
-
-# Usage
-
-To create a charm layer using this base layer, you need only include it in
-a `layer.yaml` file:
-
-```yaml
-includes: ['layer:basic']
-```
-
-This will fetch this layer from [interfaces.juju.solutions][] and incorporate
-it into your charm layer.  You can then add handlers under the `reactive/`
-directory.  Note that **any** file under `reactive/` will be expected to
-contain handlers, whether as Python decorated functions or [executables][non-python]
-using the [external handler protocol][].
-
-### Charm Dependencies
-
-Each layer can include a `wheelhouse.txt` file with Python requirement lines.
-For example, this layer's `wheelhouse.txt` includes:
-
-```
-pip>=7.0.0,<8.0.0
-charmhelpers>=0.4.0,<1.0.0
-charms.reactive>=0.1.0,<2.0.0
-```
-
-All of these dependencies from each layer will be fetched (and updated) at build
-time and will be automatically installed by this base layer before any reactive
-handlers are run.
-
-Note that the `wheelhouse.txt` file is intended for **charm** dependencies only.
-That is, for libraries that the charm code itself needs to do its job of deploying
-and configuring the payload.  If the payload itself has Python dependencies, those
-should be handled separately, by the charm.
-
-See [PyPI][pypi charms.X] for packages under the `charms.` namespace which might
-be useful for your charm.
-
-### Layer Namespace
-
-Each layer has a reserved section in the `charms.layer.` Python package namespace,
-which it can populate by including a `lib/charms/layer/<layer-name>.py` file or
-by placing files under `lib/charms/layer/<layer-name>/`.  (If the layer name
-includes hyphens, replace them with underscores.)  These can be helpers that the
-layer uses internally, or it can expose classes or functions to be used by other
-layers to interact with that layer.
-
-For example, a layer named `foo` could include a `lib/charms/layer/foo.py` file
-with some helper functions that other layers could access using:
-
-```python
-from charms.layer.foo import my_helper
-```
-
-### Layer Options
-
-Any layer can define options in its `layer.yaml`.  Those options can then be set
-by other layers to change the behavior of your layer.  The options are defined
-using [jsonschema][], which is the same way that [action paramters][] are defined.
-
-For example, the `foo` layer could include the following option definitons:
-
-```yaml
-includes: ['layer:basic']
-defines:  # define some options for this layer (the layer "foo")
-  enable-bar:  # define an "enable-bar" option for this layer
-    description: If true, enable support for "bar".
-    type: boolean
-    default: false
-```
-
-A layer using `foo` could then set it:
-
-```yaml
-includes: ['layer:foo']
-options:
-  foo:  # setting options for the "foo" layer
-    enable-bar: true  # set the "enable-bar" option to true
-```
-
-The `foo` layer can then use the `charms.layer.options` helper to load the values
-for the options that it defined.  For example:
-
-```python
-from charms import layer
-
-@when('state')
-def do_thing():
-  layer_opts = layer.options('foo')  # load all of the options for the "foo" layer
-  if layer_opts['enable-bar']:  # check the value of the "enable-bar" option
-      hookenv.log("Bar is enabled")
-```
-
-You can also access layer options in other handlers, such as Bash, using
-the command-line interface:
-
-```bash
-. charms.reactive.sh
-
-@when 'state'
-function do_thing() {
-    if layer_option foo enable-bar; then
-        juju-log "Bar is enabled"
-        juju-log "bar-value is: $(layer_option foo bar-value)"
-    fi
-}
-
-reactive_handler_main
-```
-
-Note that options of type `boolean` will set the exit code, while other types
-will be printed out.
-
-# Hooks
-
-This layer provides hooks that other layers can react to using the decorators
-of the [charms.reactive][] library:
-
-  * `config-changed`
-  * `install`
-  * `leader-elected`
-  * `leader-settings-changed`
-  * `start`
-  * `stop`
-  * `upgrade-charm`
-  * `update-status`
-
-Other hooks are not implemented at this time. A new layer can implement storage
-or relation hooks in their own layer by putting them in the `hooks` directory.
-
-**Note:** Because `update-status` is invoked every 5 minutes, you should take
-care to ensure that your reactive handlers only invoke expensive operations
-when absolutely necessary.  It is recommended that you use helpers like
-[`@only_once`][], [`@when_file_changed`][], and [`data_changed`][] to ensure
-that handlers run only when necessary.
-
-# Layer Configuration
-
-This layer supports the following options, which can be set in `layer.yaml`:
-
-  * **packages**  A list of system packages to be installed before the reactive
-    handlers are invoked.
-
-  * **use_venv**  If set to true, the charm dependencies from the various
-    layers' `wheelhouse.txt` files will be installed in a Python virtualenv
-    located at `$CHARM_DIR/../.venv`.  This keeps charm dependencies from
-    conflicting with payload dependencies, but you must take care to preserve
-    the environment and interpreter if using `execl` or `subprocess`.
-
-  * **include_system_packages**  If set to true and using a venv, include
-    the `--system-site-packages` options to make system Python libraries
-    visible within the venv.
-
-An example `layer.yaml` using these options might be:
-
-```yaml
-includes: ['layer:basic']
-options:
-  basic:
-    packages: ['git']
-    use_venv: true
-    include_system_packages: true
-```
-
-
-# Reactive States
-
-This layer will set the following states:
-
-  * **`config.changed`**  Any config option has changed from its previous value.
-    This state is cleared automatically at the end of each hook invocation.
-
-  * **`config.changed.<option>`** A specific config option has changed.
-    **`<option>`** will be replaced by the config option name from `config.yaml`.
-    This state is cleared automatically at the end of each hook invocation.
-
-  * **`config.set.<option>`** A specific config option has a True or non-empty
-    value set.  **`<option>`** will be replaced by the config option name from
-    `config.yaml`.  This state is cleared automatically at the end of each hook
-    invocation.
-
-  * **`config.default.<option>`** A specific config option is set to its
-    default value.  **`<option>`** will be replaced by the config option name
-    from `config.yaml`.  This state is cleared automatically at the end of
-    each hook invocation.
-
-An example using the config states would be:
-
-```python
-@when('config.changed.my-opt')
-def my_opt_changed():
-    update_config()
-    restart_service()
-```
-
-
-# Actions
-
-This layer currently does not define any actions.
-
-
-[building]: https://jujucharms.com/docs/devel/authors-charm-building
-[charm-helpers]: https://pythonhosted.org/charmhelpers/
-[charms.reactive]: https://pythonhosted.org/charms.reactive/
-[interfaces.juju.solutions]: http://interfaces.juju.solutions/
-[non-python]: https://pythonhosted.org/charms.reactive/#non-python-reactive-handlers
-[external handler protocol]: https://pythonhosted.org/charms.reactive/charms.reactive.bus.html#charms.reactive.bus.ExternalHandler
-[jsonschema]: http://json-schema.org/
-[action paramters]: https://jujucharms.com/docs/stable/authors-charm-actions
-[pypi charms.X]: https://pypi.python.org/pypi?%3Aaction=search&term=charms.&submit=search
-[`@only_once`]: https://pythonhosted.org/charms.reactive/charms.reactive.decorators.html#charms.reactive.decorators.only_once
-[`@when_file_changed`]: https://pythonhosted.org/charms.reactive/charms.reactive.decorators.html#charms.reactive.decorators.when_file_changed
-[`data_changed`]: https://pythonhosted.org/charms.reactive/charms.reactive.helpers.html#charms.reactive.helpers.data_changed
diff --git a/charms/layers/vyos-proxy/actions.yaml b/charms/layers/vyos-proxy/actions.yaml
deleted file mode 100644
index 2acc33d..0000000
--- a/charms/layers/vyos-proxy/actions.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-"ping":
-  "description": "ping a thing!"
-  "params":
-    "count":
-      "description": "Stop after sending count ECHO_REQUEST packets"
-      "type": "integer"
-      "default": !!int "30"
-    "destination":
-      "description": "destination of ping request"
-      "type": "string"
-  "required":
-  - "destination"
diff --git a/charms/layers/vyos-proxy/actions/ping b/charms/layers/vyos-proxy/actions/ping
deleted file mode 100755
index 9850fe7..0000000
--- a/charms/layers/vyos-proxy/actions/ping
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python3
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main
-from charms.reactive import set_state
-from charmhelpers.core.hookenv import action_fail
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_state('actions.ping')
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
diff --git a/charms/layers/vyos-proxy/config.yaml b/charms/layers/vyos-proxy/config.yaml
deleted file mode 100644
index 0780d5f..0000000
--- a/charms/layers/vyos-proxy/config.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-"options":
-  "hostname":
-    "default": !!null ""
-    "type": "string"
-    "description": "Hostname or IP of the VyOS"
-  "user":
-    "type": "string"
-    "default": "vyos"
-    "description": "Username for VyOS"
-  "pass":
-    "type": "string"
-    "default": !!null ""
-    "description": "Password for VyOS"
diff --git a/charms/layers/vyos-proxy/copyright b/charms/layers/vyos-proxy/copyright
deleted file mode 100644
index 720356a..0000000
--- a/charms/layers/vyos-proxy/copyright
+++ /dev/null
@@ -1,9 +0,0 @@
-Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0
-
-Files: *
-Copyright: 2015, Canonical Ltd.
-License: Apache-2.0 
-
-License: Apache-2.0
- On Debian GNU/Linux system you can find the complete text of the
- Apache-2.0 license in '/usr/share/common-licenses/Apache-2.0'
diff --git a/charms/layers/vyos-proxy/icon.svg b/charms/layers/vyos-proxy/icon.svg
deleted file mode 100644
index e092eef..0000000
--- a/charms/layers/vyos-proxy/icon.svg
+++ /dev/null
@@ -1,279 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="96"
-   height="96"
-   id="svg6517"
-   version="1.1"
-   inkscape:version="0.48+devel r12274"
-   sodipodi:docname="Juju_charm_icon_template.svg">
-  <defs
-     id="defs6519">
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#Background"
-       id="linearGradient6461"
-       gradientUnits="userSpaceOnUse"
-       x1="0"
-       y1="970.29498"
-       x2="144"
-       y2="970.29498"
-       gradientTransform="matrix(0,-0.66666669,0.6660448,0,-866.25992,731.29077)" />
-    <linearGradient
-       id="Background">
-      <stop
-         id="stop4178"
-         offset="0"
-         style="stop-color:#b8b8b8;stop-opacity:1" />
-      <stop
-         id="stop4180"
-         offset="1"
-         style="stop-color:#c9c9c9;stop-opacity:1" />
-    </linearGradient>
-    <filter
-       style="color-interpolation-filters:sRGB;"
-       inkscape:label="Inner Shadow"
-       id="filter1121">
-      <feFlood
-         flood-opacity="0.59999999999999998"
-         flood-color="rgb(0,0,0)"
-         result="flood"
-         id="feFlood1123" />
-      <feComposite
-         in="flood"
-         in2="SourceGraphic"
-         operator="out"
-         result="composite1"
-         id="feComposite1125" />
-      <feGaussianBlur
-         in="composite1"
-         stdDeviation="1"
-         result="blur"
-         id="feGaussianBlur1127" />
-      <feOffset
-         dx="0"
-         dy="2"
-         result="offset"
-         id="feOffset1129" />
-      <feComposite
-         in="offset"
-         in2="SourceGraphic"
-         operator="atop"
-         result="composite2"
-         id="feComposite1131" />
-    </filter>
-    <filter
-       style="color-interpolation-filters:sRGB;"
-       inkscape:label="Drop Shadow"
-       id="filter950">
-      <feFlood
-         flood-opacity="0.25"
-         flood-color="rgb(0,0,0)"
-         result="flood"
-         id="feFlood952" />
-      <feComposite
-         in="flood"
-         in2="SourceGraphic"
-         operator="in"
-         result="composite1"
-         id="feComposite954" />
-      <feGaussianBlur
-         in="composite1"
-         stdDeviation="1"
-         result="blur"
-         id="feGaussianBlur956" />
-      <feOffset
-         dx="0"
-         dy="1"
-         result="offset"
-         id="feOffset958" />
-      <feComposite
-         in="SourceGraphic"
-         in2="offset"
-         operator="over"
-         result="composite2"
-         id="feComposite960" />
-    </filter>
-    <clipPath
-       clipPathUnits="userSpaceOnUse"
-       id="clipPath873">
-      <g
-         transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)"
-         id="g875"
-         inkscape:label="Layer 1"
-         style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline">
-        <path
-           style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"
-           d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z"
-           id="path877"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="sssssssss" />
-      </g>
-    </clipPath>
-    <filter
-       inkscape:collect="always"
-       id="filter891"
-       inkscape:label="Badge Shadow">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="0.71999962"
-         id="feGaussianBlur893" />
-    </filter>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="4.0745362"
-     inkscape:cx="18.514671"
-     inkscape:cy="49.018169"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1920"
-     inkscape:window-height="1029"
-     inkscape:window-x="0"
-     inkscape:window-y="24"
-     inkscape:window-maximized="1"
-     showborder="true"
-     showguides="true"
-     inkscape:guide-bbox="true"
-     inkscape:showpageshadow="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid821" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="16,48"
-       id="guide823" />
-    <sodipodi:guide
-       orientation="0,1"
-       position="64,80"
-       id="guide825" />
-    <sodipodi:guide
-       orientation="1,0"
-       position="80,40"
-       id="guide827" />
-    <sodipodi:guide
-       orientation="0,1"
-       position="64,16"
-       id="guide829" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata6522">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="BACKGROUND"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(268,-635.29076)"
-     style="display:inline">
-    <path
-       style="fill:url(#linearGradient6461);fill-opacity:1;stroke:none;display:inline;filter:url(#filter1121)"
-       d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 C -264.11215,731.29077 -268,727.39888 -268,700.15563 Z"
-       id="path6455"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="sssssssss" />
-  </g>
-  <g
-     inkscape:groupmode="layer"
-     id="layer3"
-     inkscape:label="PLACE YOUR PICTOGRAM HERE"
-     style="display:inline" />
-  <g
-     inkscape:groupmode="layer"
-     id="layer2"
-     inkscape:label="BADGE"
-     style="display:none"
-     sodipodi:insensitive="true">
-    <g
-       style="display:inline"
-       transform="translate(-340.00001,-581)"
-       id="g4394"
-       clip-path="none">
-      <g
-         id="g855">
-        <g
-           inkscape:groupmode="maskhelper"
-           id="g870"
-           clip-path="url(#clipPath873)"
-           style="opacity:0.6;filter:url(#filter891)">
-          <path
-             transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)"
-             d="m 264,552.36218 a 12,12 0 1 1 -24,0 A 12,12 0 1 1 264,552.36218 Z"
-             sodipodi:ry="12"
-             sodipodi:rx="12"
-             sodipodi:cy="552.36218"
-             sodipodi:cx="252"
-             id="path844"
-             style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             sodipodi:type="arc" />
-        </g>
-        <g
-           id="g862">
-          <path
-             sodipodi:type="arc"
-             style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             id="path4398"
-             sodipodi:cx="252"
-             sodipodi:cy="552.36218"
-             sodipodi:rx="12"
-             sodipodi:ry="12"
-             d="m 264,552.36218 a 12,12 0 1 1 -24,0 A 12,12 0 1 1 264,552.36218 Z"
-             transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)" />
-          <path
-             transform="matrix(1.25,0,0,1.25,33,-100.45273)"
-             d="m 264,552.36218 a 12,12 0 1 1 -24,0 A 12,12 0 1 1 264,552.36218 Z"
-             sodipodi:ry="12"
-             sodipodi:rx="12"
-             sodipodi:cy="552.36218"
-             sodipodi:cx="252"
-             id="path4400"
-             style="color:#000000;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             sodipodi:type="arc" />
-          <path
-             sodipodi:type="star"
-             style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-             id="path4459"
-             sodipodi:sides="5"
-             sodipodi:cx="666.19574"
-             sodipodi:cy="589.50385"
-             sodipodi:r1="7.2431178"
-             sodipodi:r2="4.3458705"
-             sodipodi:arg1="1.0471976"
-             sodipodi:arg2="1.6755161"
-             inkscape:flatsided="false"
-             inkscape:rounded="0.1"
-             inkscape:randomized="0"
-             d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 C 669.9821,591.68426 670.20862,595.55064 669.8173,595.77657 Z"
-             transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)" />
-        </g>
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/charms/layers/vyos-proxy/layer.yaml b/charms/layers/vyos-proxy/layer.yaml
deleted file mode 100644
index dd254f3..0000000
--- a/charms/layers/vyos-proxy/layer.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-"options":
-  "basic":
-    "packages":
-    - "python-dev"
-    - "libffi-dev"
-    - "libssl-dev"
-    "use_venv": !!bool "false"
-    "include_system_packages": !!bool "false"
-  "vyos-proxy": {}
-"includes":
-- "layer:basic"
-"is": "vyos-proxy"
-"repo": "https://osm.etsi.org/gerrit/osm/juju-charms"
diff --git a/charms/layers/vyos-proxy/metadata.yaml b/charms/layers/vyos-proxy/metadata.yaml
deleted file mode 100644
index 1d29b37..0000000
--- a/charms/layers/vyos-proxy/metadata.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-"name": "vyos-proxy"
-"summary": "VyOS Proxy charm for ping"
-"description": |
-  VyOS Proxy charm
-"tags":
-- "vnf"
-- "network"
-"maintainers":
-- "Marco Ceppi <marco.ceppi@canonical.com>"
-"series":
-- "xenial"
-- "trusty"
diff --git a/charms/layers/vyos-proxy/reactive/__init__.py b/charms/layers/vyos-proxy/reactive/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/charms/layers/vyos-proxy/reactive/__init__.py
+++ /dev/null
diff --git a/charms/layers/vyos-proxy/reactive/vyos_proxy.py b/charms/layers/vyos-proxy/reactive/vyos_proxy.py
deleted file mode 100644
index a8fd5e0..0000000
--- a/charms/layers/vyos-proxy/reactive/vyos_proxy.py
+++ /dev/null
@@ -1,99 +0,0 @@
-
-import subprocess
-import paramiko
-
-from charmhelpers.core.hookenv import (
-    config,
-    status_set,
-    action_get,
-    action_set,
-    action_fail,
-)
-
-from charms.reactive import (
-    when,
-    when_not,
-    set_state as set_flag,
-    remove_state as remove_flag,
-)
-
-
-@when('config.changed')
-def test_connection():
-    status_set('maintenance', 'configuring ssh connection')
-    remove_flag('vyos-proxy.ready')
-    try:
-        who, _ = run('whoami')
-    except MgmtNotConfigured as e:
-        remove_flag('vyos-proxy.configured')
-        status_set('blocked', str(e))
-    except subprocess.CalledProcessError as e:
-        remove_flag('vyos-proxy.configured')
-        status_set('blocked', e.output)
-    else:
-        set_flag('vyos-proxy.configured')
-
-
-@when('vyos-proxy.configured')
-@when_not('vyos-proxy.ready')
-def vyos_proxy_ready():
-    status_set('active', 'ready')
-    set_flag('vyos-proxy.ready')
-
-
-@when('actions.ping')
-@when_not('vyos-proxy.configured')
-def pingme():
-    action_fail('proxy is not ready')
-
-
-@when('actions.ping')
-@when('vyos-proxy.configured')
-def pingme_forreal():
-    try:
-        result, err = run('ping -qc {} {}'.format(action_get('count'), action_get('destination')))
-    except:
-        action_fail('ping command failed')
-    finally:
-        remove_flag('actions.ping')
-
-    # Here you can send results back from ping, if you had time to parse it
-    action_set({'output': result})
-
-
-
-class MgmtNotConfigured(Exception):
-    pass
-
-
-def run(cmd):
-    ''' Suddenly this project needs to SSH to something. So we replicate what
-        _run was doing with subprocess using the Paramiko library. This is
-        temporary until this charm /is/ the VPE Router '''
-
-    cfg = config()
-
-    hostname = cfg.get('hostname')
-    password = cfg.get('pass')
-    username = cfg.get('user')
-
-    if not (username and password and hostname):
-        raise MgmtNotConfigured('incomplete remote credentials')
-
-    client = paramiko.SSHClient()
-    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
-
-    try:
-        client.connect(cfg.get('hostname'), port=22,
-                       username=cfg.get('user'), password=cfg.get('pass'))
-    except paramiko.ssh_exception.AuthenticationException:
-        raise MgmtNotConfigured('invalid credentials')
-
-    stdin, stdout, stderr = client.exec_command(cmd)
-    retcode = stdout.channel.recv_exit_status()
-    client.close()  # @TODO re-use connections
-    if retcode > 0:
-        output = stderr.read().strip()
-        raise subprocess.CalledProcessError(returncode=retcode, cmd=cmd,
-                                            output=output)
-    return (''.join(stdout), ''.join(stderr))
diff --git a/charms/layers/vyos-proxy/requirements.txt b/charms/layers/vyos-proxy/requirements.txt
deleted file mode 100644
index 28ecaca..0000000
--- a/charms/layers/vyos-proxy/requirements.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-flake8
-pytest
diff --git a/charms/layers/vyos-proxy/revision b/charms/layers/vyos-proxy/revision
deleted file mode 100644
index c227083..0000000
--- a/charms/layers/vyos-proxy/revision
+++ /dev/null
@@ -1 +0,0 @@
-0
\ No newline at end of file
diff --git a/charms/layers/vyos-proxy/tox.ini b/charms/layers/vyos-proxy/tox.ini
deleted file mode 100644
index 0b8b27a..0000000
--- a/charms/layers/vyos-proxy/tox.ini
+++ /dev/null
@@ -1,12 +0,0 @@
-[tox]
-skipsdist=True
-envlist = py34, py35
-skip_missing_interpreters = True
-
-[testenv]
-commands = py.test -v
-deps =
-    -r{toxinidir}/requirements.txt
-
-[flake8]
-exclude=docs
diff --git a/charms/layers/vyos-proxy/wheelhouse.txt b/charms/layers/vyos-proxy/wheelhouse.txt
deleted file mode 100644
index 24d2c9c..0000000
--- a/charms/layers/vyos-proxy/wheelhouse.txt
+++ /dev/null
@@ -1 +0,0 @@
-paramiko==2.0.1
diff --git a/descriptor-packages/.gitignore b/descriptor-packages/.gitignore
deleted file mode 100644
index 0766a22..0000000
--- a/descriptor-packages/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-nsd/*/build
-vnfd/*/build
diff --git a/descriptor-packages/Makefile b/descriptor-packages/Makefile
deleted file mode 100644
index 61710bf..0000000
--- a/descriptor-packages/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-SUBDIRS = vnfd nsd
-
-include mk/dirs.mk
diff --git a/descriptor-packages/README b/descriptor-packages/README
deleted file mode 100644
index 0d99d66..0000000
--- a/descriptor-packages/README
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-#   Copyright 2016 RIFT.IO Inc
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-# Author(s): Austin Cormier
-# Creation Date: 2016/05/23
-
-
-Generates the MWC16 NSD and VNFD descriptor packages from source.
-
-To generate the packages type "make". The VNF and NSD packages will be located
-build/vnfd_pkgs and build/nsd_pkgs.
-
-To clean, type 'make clean'.
-
-You need to install charm tools to compile the charms required for the packages.
-On Fedora, install using: pip install charm-tools
-On Ubuntu, install using: apt install charm-tools
-For other platforms, check https://jujucharms.com/docs/2.0/tools-charm-tools
-You need also docker
-
-Due to license issues, for the IMS VNFD package, the IMS charm is fetched
-extracted from the respective git repository prior to packaging.  Because of
-this, internet access is required to reach github.
diff --git a/descriptor-packages/mk/dirs.mk b/descriptor-packages/mk/dirs.mk
deleted file mode 100644
index 8e00787..0000000
--- a/descriptor-packages/mk/dirs.mk
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-TOPDIR=$(shell readlink -f .|sed -e 's/\/descriptor-packages\/.*//')
-TOOLS_DIR := $(TOPDIR)/tools
-
-SUBDIRS_CLEAN = $(addsuffix .clean, $(SUBDIRS))
-SUBDIRS_TEST = $(addsuffix .test, $(SUBDIRS))
-
-.PHONY: $(SUBDIRS) $(SUBDIRS_CLEAN) clean
-
-all: $(SUBDIRS)
-
-clean: $(SUBDIRS_CLEAN)
-
-test: $(SUBDIRS_TEST)
-
-$(SUBDIRS_CLEAN): %.clean:
-	@$(MAKE) --no-print-directory -C $* clean
-
-$(SUBDIRS_TEST): %.test:
-	@$(MAKE) --no-print-directory -C $* test
-
-$(SUBDIRS):
-	@$(MAKE) --no-print-directory -C $@
-
-test:
-	$(TOOLS_DIR)/launch_tests.sh
diff --git a/descriptor-packages/mk/pkg.mk b/descriptor-packages/mk/pkg.mk
deleted file mode 100644
index 4226ebf..0000000
--- a/descriptor-packages/mk/pkg.mk
+++ /dev/null
@@ -1,82 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-TOPDIR=$(shell readlink -f .|sed -e 's/\/descriptor-packages\/.*//')
-
-BUILD_DIR := build
-TOOLS_DIR := $(TOPDIR)/descriptor-packages/tools
-PKG_BASE_NAME := $(shell basename $(shell pwd))
-PKG_NAME      := $(addsuffix .tar.gz, $(PKG_BASE_NAME))
-
-CHARM_DIR        := $(TOPDIR)/charms
-CHARM_SRC_DIR    := $(CHARM_DIR)/layers
-CHARM_DOCKER_TAG := charm-tools
-CHARM_BUILD_DIR  := $(CHARM_DIR)/builds
-DOCKER_BUILD     ?=
-
-Q=@
-
-GEN_VNFD_PKG := $(TOOLS_DIR)/gen_vnfd_pkg.sh
-GEN_NSD_PKG  := $(TOOLS_DIR)/gen_nsd_pkg.sh
-GEN_PKG      := $(TOOLS_DIR)/generate_descriptor_pkg.sh
-TEST_PKG     := $(TOOLS_DIR)/validate_descriptor.py
-BUILD_VNFD   := $(shell readlink -f .|sed -e 's/\/.*descriptor-packages//' | grep vnfd)
-
-DEP_FILES = $(wildcard src/*)
-
-ifdef BUILD_VNFD
-$(BUILD_DIR)/$(PKG_BASE_NAME): src
-	$(Q)mkdir -p $@
-	$(Q)cp -rf $</. $@
-	$(Q)$(GEN_VNFD_PKG) $< $@
-else
-$(BUILD_DIR)/$(PKG_BASE_NAME): src
-	$(Q)mkdir -p $@
-	$(Q)cp -rf $</. $@
-	$(Q)$(GEN_NSD_PKG) $< $@
-endif
-
-ifdef VNFD_CHARM
-$(BUILD_DIR)/$(PKG_NAME): $(DEP_FILES) $(CHARM_BUILD_DIR)/$(VNFD_CHARM)
-	$(Q)echo "building $(PKG_BASE_NAME) with charm $(VNFD_CHARM)"
-	$(Q)$(MAKE) --no-print-directory $(BUILD_DIR)/$(PKG_BASE_NAME)
-	$(Q)cp -rf $(CHARM_BUILD_DIR)/$(VNFD_CHARM) $(BUILD_DIR)/$(PKG_BASE_NAME)/charms
-	$(Q)$(GEN_PKG) --no-remove-files -d $(BUILD_DIR) $(BUILD_DIR)/$(PKG_BASE_NAME)
-else
-$(BUILD_DIR)/$(PKG_NAME): $(DEP_FILES)
-	$(Q)echo "building $(PKG_BASE_NAME) $(BUILD_DIR)"
-	$(Q)$(MAKE) --no-print-directory $(BUILD_DIR)/$(PKG_BASE_NAME)
-	$(Q)$(GEN_PKG) --no-remove-files -d $(BUILD_DIR) $(BUILD_DIR)/$(PKG_BASE_NAME)
-endif
-
-ifdef DOCKER_BUILD
-$(CHARM_BUILD_DIR)/%: $(CHARM_SRC_DIR)/%
-	$(Q)docker build -q -t $(CHARM_DOCKER_TAG) $(CHARM_DIR)/.
-	$(CHARM_DIR) $(CHARM_DOCKER_TAG) charm-build -o $(CHARM_DIR) $<
-else
-$(CHARM_BUILD_DIR)/%: $(CHARM_SRC_DIR)/%
-	$(Q)charm build -o $(CHARM_DIR) $<
-endif
-
-clean:
-	$(Q)rm -rf $(BUILD_DIR)
-	$(Q)rm -rf $(CHARM_BUILD_DIR)
-
-test:
-	$(Q)echo -n testing $(shell readlink -f src/*.yaml)  "             "
-	$(Q)$(TEST_PKG) src/*.yaml
-	$(Q)echo OK
-
-.DEFAULT_GOAL := all
diff --git a/descriptor-packages/nsd/Makefile b/descriptor-packages/nsd/Makefile
deleted file mode 100644
index fdd2045..0000000
--- a/descriptor-packages/nsd/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-SUBDIRS = $(wildcard */)
-TOPDIR ?= ../
-include $(TOPDIR)/mk/dirs.mk
diff --git a/descriptor-packages/nsd/VyOS_ns/Makefile b/descriptor-packages/nsd/VyOS_ns/Makefile
deleted file mode 100644
index c5f5f69..0000000
--- a/descriptor-packages/nsd/VyOS_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/VyOS_ns/src/VyOS_nsd.yaml b/descriptor-packages/nsd/VyOS_ns/src/VyOS_nsd.yaml
deleted file mode 100644
index b3f4611..0000000
--- a/descriptor-packages/nsd/VyOS_ns/src/VyOS_nsd.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-nsd-catalog:
-    nsd:
-    -   id: VyOS
-        name: VyOS
-        short-name: VyOS
-        description: VyOS NS Example NS
-        logo: osm_2x.png
-        constituent-vnfd:
-        -   member-vnf-index: '1'
-            vnfd-id-ref: VyOS
-        vld:
-        -   id: data
-            name: data
-            short-name: data
-            type: ELAN
-            vim-network-name: net-corp
-            vnfd-connection-point-ref:
-            -   member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: eth1
-                vnfd-id-ref: VyOS
-        -   id: management
-            name: management
-            short-name: management
-            mgmt-network: 'true'
-            type: ELAN
-            vim-network-name: net-mgmtOS
-            vnfd-connection-point-ref:
-            -   member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: eth0
-                vnfd-id-ref: VyOS
-        service-primitive:
-        -   name: Config VyOS
-            vnf-primitive-group:
-            -   member-vnf-index-ref: '1'
-                vnfd-id-ref: VyOS
-                vnfd-name: VyOS
-                primitive:
-                -   index: '1'
-                    name: config
-        -   name: ping
-            vnf-primitive-group:
-            -   member-vnf-index-ref: '1'
-                vnfd-id-ref: VyOS
-                vnfd-name: VyOS
-                primitive:
-                -   index: '1'
-                    name: ping
\ No newline at end of file
diff --git a/descriptor-packages/nsd/VyOS_ns/src/icons/osm_2x.png b/descriptor-packages/nsd/VyOS_ns/src/icons/osm_2x.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/nsd/VyOS_ns/src/icons/osm_2x.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/cirros_2vnf_ns/Makefile b/descriptor-packages/nsd/cirros_2vnf_ns/Makefile
deleted file mode 100644
index c5f5f69..0000000
--- a/descriptor-packages/nsd/cirros_2vnf_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/cirros_2vnf_ns/src/cirros_2vnf_nsd.yaml b/descriptor-packages/nsd/cirros_2vnf_ns/src/cirros_2vnf_nsd.yaml
deleted file mode 100644
index c573ab1..0000000
--- a/descriptor-packages/nsd/cirros_2vnf_ns/src/cirros_2vnf_nsd.yaml
+++ /dev/null
@@ -1,44 +0,0 @@
-nsd-catalog:
-    nsd:
-    -   id: cirros_2vnf_nsd
-        name: cirros_2vnf_ns
-        short-name: cirros_2vnf_ns
-        description: Generated by OSM pacakage generator
-        vendor: OSM
-        version: '1.0'
-
-        # Place the logo as png in icons directory and provide the name here
-        logo: osm_2x.png
-
-        # Specify the VNFDs that are part of this NSD
-        constituent-vnfd:
-            # The member-vnf-index needs to be unique, starting from 1
-            # vnfd-id-ref is the id of the VNFD
-            # Multiple constituent VNFDs can be specified
-        -   member-vnf-index: 1
-            vnfd-id-ref: cirros_vnfd
-        -   member-vnf-index: 2
-            vnfd-id-ref: cirros_vnfd
-
-
-        vld:
-        # Networks for the VNFs
-            -   id: cirros_2vnf_nsd_vld1
-                name: cirros_2vnf_nsd_vld1
-                short-name: cirros_2vnf_nsd_vld1
-                type: ELAN
-                mgmt-network: 'true'
-                # vim-network-name: <update>
-                # provider-network:
-                #     segmentation_id: <update>
-                vnfd-connection-point-ref:
-                # Specify the constituent VNFs
-                # member-vnf-index-ref - entry from constituent vnf
-                # vnfd-id-ref - VNFD id
-                # vnfd-connection-point-ref - connection point name in the VNFD
-                -   member-vnf-index-ref: 1
-                    vnfd-id-ref: cirros_vnfd
-                    vnfd-connection-point-ref: eth0
-                -   member-vnf-index-ref: 2
-                    vnfd-id-ref: cirros_vnfd
-                    vnfd-connection-point-ref: eth0
diff --git a/descriptor-packages/nsd/cirros_2vnf_ns/src/icons/osm_2x.png b/descriptor-packages/nsd/cirros_2vnf_ns/src/icons/osm_2x.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/nsd/cirros_2vnf_ns/src/icons/osm_2x.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/cirros_noportsecurity_2vnf_ns/Makefile b/descriptor-packages/nsd/cirros_noportsecurity_2vnf_ns/Makefile
deleted file mode 100644
index c5f5f69..0000000
--- a/descriptor-packages/nsd/cirros_noportsecurity_2vnf_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/cirros_noportsecurity_2vnf_ns/src/README b/descriptor-packages/nsd/cirros_noportsecurity_2vnf_ns/src/README
deleted file mode 100644
index e69de29..0000000
--- a/descriptor-packages/nsd/cirros_noportsecurity_2vnf_ns/src/README
+++ /dev/null
diff --git a/descriptor-packages/nsd/cirros_noportsecurity_2vnf_ns/src/cirros_noportsecurity_2vnf_nsd.yaml b/descriptor-packages/nsd/cirros_noportsecurity_2vnf_ns/src/cirros_noportsecurity_2vnf_nsd.yaml
deleted file mode 100644
index 9e5a23a..0000000
--- a/descriptor-packages/nsd/cirros_noportsecurity_2vnf_ns/src/cirros_noportsecurity_2vnf_nsd.yaml
+++ /dev/null
@@ -1,44 +0,0 @@
-nsd-catalog:
-    nsd:
-    -   id: cirros_noportsecurity_2vnf_nsd
-        name: cirros_noportsecurity_2vnf_ns
-        short-name: cirros_noportsecurity_2vnf_ns
-        description: Generated by OSM pacakage generator
-        vendor: OSM
-        version: '1.0'
-
-        # Place the logo as png in icons directory and provide the name here
-        logo: osm_2x.png
-
-        # Specify the VNFDs that are part of this NSD
-        constituent-vnfd:
-            # The member-vnf-index needs to be unique, starting from 1
-            # vnfd-id-ref is the id of the VNFD
-            # Multiple constituent VNFDs can be specified
-        -   member-vnf-index: 1
-            vnfd-id-ref: cirros_noportsecurity_vnfd
-        -   member-vnf-index: 2
-            vnfd-id-ref: cirros_noportsecurity_vnfd
-
-
-        vld:
-        # Networks for the VNFs
-            -   id: cirros_2vnf_nsd_vld1
-                name: cirros_2vnf_nsd_vld1
-                short-name: cirros_2vnf_nsd_vld1
-                type: ELAN
-                mgmt-network: 'true'
-                # vim-network-name: <update>
-                # provider-network:
-                #     segmentation_id: <update>
-                vnfd-connection-point-ref:
-                # Specify the constituent VNFs
-                # member-vnf-index-ref - entry from constituent vnf
-                # vnfd-id-ref - VNFD id
-                # vnfd-connection-point-ref - connection point name in the VNFD
-                -   member-vnf-index-ref: 1
-                    vnfd-id-ref: cirros_noportsecurity_vnfd
-                    vnfd-connection-point-ref: eth0
-                -   member-vnf-index-ref: 2
-                    vnfd-id-ref: cirros_noportsecurity_vnfd
-                    vnfd-connection-point-ref: eth0
diff --git a/descriptor-packages/nsd/cirros_noportsecurity_2vnf_ns/src/icons/osm_2x.png b/descriptor-packages/nsd/cirros_noportsecurity_2vnf_ns/src/icons/osm_2x.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/nsd/cirros_noportsecurity_2vnf_ns/src/icons/osm_2x.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/cirros_ns/Makefile b/descriptor-packages/nsd/cirros_ns/Makefile
deleted file mode 100644
index c5f5f69..0000000
--- a/descriptor-packages/nsd/cirros_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/cirros_ns/src/cirros_nsd.yaml b/descriptor-packages/nsd/cirros_ns/src/cirros_nsd.yaml
deleted file mode 100644
index 878eac0..0000000
--- a/descriptor-packages/nsd/cirros_ns/src/cirros_nsd.yaml
+++ /dev/null
@@ -1,67 +0,0 @@
-##
-# Copyright 2019 ETSI
-#
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-##
-
-nsd-catalog:
-    nsd:
-    -   id: cirros_nsd
-        name: cirros_ns
-        short-name: cirros_ns
-        description: Generated by OSM pacakage generator
-        vendor: OSM
-        version: '1.0'
-
-        # Place the logo as png in icons directory and provide the name here
-        logo: osm_2x.png
-
-        # Specify the VNFDs that are part of this NSD
-        constituent-vnfd:
-            # The member-vnf-index needs to be unique, starting from 1
-            # vnfd-id-ref is the id of the VNFD
-            # Multiple constituent VNFDs can be specified
-        -   member-vnf-index: 1
-            vnfd-id-ref: cirros_vnfd
-        scaling-group-descriptor:
-        -   name: "scaling_cirros"
-            vnfd-member:
-            -   count: 1
-                member-vnf-index-ref: 1
-            min-instance-count: 0
-            max-instance-count: 10
-            scaling-policy:
-            -   scaling-type: "manual"
-                cooldown-time: 10
-                threshold-time: 10
-                name: manual_scale
-        vld:
-        # Networks for the VNFs
-            -   id: mgmtnet
-                name: mgmtnet
-                type: ELAN
-                mgmt-network: 'true'
-                # vim-network-name: <update>
-                # provider-network:
-                #     segmentation_id: <update>
-                vnfd-connection-point-ref:
-                # Specify the constituent VNFs
-                # member-vnf-index-ref - entry from constituent vnf
-                # vnfd-id-ref - VNFD id
-                # vnfd-connection-point-ref - connection point name in the VNFD
-                -   member-vnf-index-ref: 1
-                    vnfd-id-ref: cirros_vnfd
-                    # NOTE: Validate the entry below
-                    vnfd-connection-point-ref: eth0
diff --git a/descriptor-packages/nsd/cirros_ns/src/icons/osm_2x.png b/descriptor-packages/nsd/cirros_ns/src/icons/osm_2x.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/nsd/cirros_ns/src/icons/osm_2x.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/cirros_set_vim_network_ns/Makefile b/descriptor-packages/nsd/cirros_set_vim_network_ns/Makefile
deleted file mode 100644
index c5f5f69..0000000
--- a/descriptor-packages/nsd/cirros_set_vim_network_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/cirros_set_vim_network_ns/src/cirros_set_vim_network_nsd.yaml b/descriptor-packages/nsd/cirros_set_vim_network_ns/src/cirros_set_vim_network_nsd.yaml
deleted file mode 100755
index 2fabb3b..0000000
--- a/descriptor-packages/nsd/cirros_set_vim_network_ns/src/cirros_set_vim_network_nsd.yaml
+++ /dev/null
@@ -1,50 +0,0 @@
-nsd-catalog:
-    nsd:
-    -   id: cirros_set_vim_network_ns
-        name: cirros_set_vim_network_ns
-        short-name: cirros_set_vim_network_ns
-        description: Generated by OSM pacakage generator
-        vendor: OSM
-        version: '1.0'
-
-        # Place the logo as png in icons directory and provide the name here
-        logo: osm_2x.png
-
-        # Specify the VNFDs that are part of this NSD
-        constituent-vnfd:
-            # The member-vnf-index needs to be unique, starting from 1
-            # vnfd-id-ref is the id of the VNFD
-            # Multiple constituent VNFDs can be specified
-        -   member-vnf-index: 1
-            vnfd-id-ref: cirros_vnfd
-        scaling-group-descriptor:
-        -   name: "scaling_cirros"
-            vnfd-member:
-            -   count: 1
-                member-vnf-index-ref: 1
-            min-instance-count: 0
-            max-instance-count: 10
-            scaling-policy:
-            -   scaling-type: "manual"
-                cooldown-time: 10
-                threshold-time: 10
-                name: manual_scale
-        vld:
-        # Networks for the VNFs
-            -   id: cirros_nsd_vld1
-                name: cirros_nsd_vld1
-                type: ELAN
-                mgmt-network: 'true'
-                # vim-network-name: <update>
-                # provider-network:
-                #     segmentation_id: <update>
-                vim-network-name: mgmt
-                vnfd-connection-point-ref:
-                # Specify the constituent VNFs
-                # member-vnf-index-ref - entry from constituent vnf
-                # vnfd-id-ref - VNFD id
-                # vnfd-connection-point-ref - connection point name in the VNFD
-                -   member-vnf-index-ref: 1
-                    vnfd-id-ref: cirros_vnfd
-                    # NOTE: Validate the entry below
-                    vnfd-connection-point-ref: eth0
diff --git a/descriptor-packages/nsd/cirros_set_vim_network_ns/src/icons/osm_2x.png b/descriptor-packages/nsd/cirros_set_vim_network_ns/src/icons/osm_2x.png
deleted file mode 100755
index 62012d2..0000000
--- a/descriptor-packages/nsd/cirros_set_vim_network_ns/src/icons/osm_2x.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/dns_aws_ns/Makefile b/descriptor-packages/nsd/dns_aws_ns/Makefile
deleted file mode 100644
index c5f5f69..0000000
--- a/descriptor-packages/nsd/dns_aws_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/dns_aws_ns/src/dns_aws_nsd.yaml b/descriptor-packages/nsd/dns_aws_ns/src/dns_aws_nsd.yaml
deleted file mode 100755
index a6b4a0d..0000000
--- a/descriptor-packages/nsd/dns_aws_ns/src/dns_aws_nsd.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-nsd:nsd-catalog:
-    nsd:
-    -   constituent-vnfd:
-        -   member-vnf-index: '1'
-            start-by-default: 'true'
-            vnfd-id-ref: dns_forwarder
-        id: dns_forwarder_ns
-        logo: dns.jpg
-        name: dns_forwarder_ns
-        vld:
-        -   id: management
-            mgmt-network: 'true'
-            name: management
-            vim-network-name: subnet-8a91b2c0
-            vnfd-connection-point-ref:
-            -   member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: eth0
-                vnfd-id-ref: dns_forwarder
diff --git a/descriptor-packages/nsd/dns_aws_ns/src/icons/dns.jpg b/descriptor-packages/nsd/dns_aws_ns/src/icons/dns.jpg
deleted file mode 100644
index 6cec5e1..0000000
--- a/descriptor-packages/nsd/dns_aws_ns/src/icons/dns.jpg
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/hackfest_ansible_ns/Makefile b/descriptor-packages/nsd/hackfest_ansible_ns/Makefile
deleted file mode 100644
index 9c18082..0000000
--- a/descriptor-packages/nsd/hackfest_ansible_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2018 Telefonica
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/hackfest_ansible_ns/src/ansiblecharm_nsd.yaml b/descriptor-packages/nsd/hackfest_ansible_ns/src/ansiblecharm_nsd.yaml
deleted file mode 100644
index 031ed4e..0000000
--- a/descriptor-packages/nsd/hackfest_ansible_ns/src/ansiblecharm_nsd.yaml
+++ /dev/null
@@ -1,26 +0,0 @@
-nsd:nsd-catalog:
-    nsd:
-    -   id: ansiblecharm_nsd
-        name: ansiblecharm_nsd
-        short-name: ansiblecharm_nsd
-        description: Generated by OSM package generator
-        vendor: OSM
-        logo: osm.png
-        version: '1.0'
-        constituent-vnfd:
-            # The member-vnf-index needs to be unique, starting from 1
-            # vnfd-id-ref is the id of the VNFD
-            # Multiple constituent VNFDs can be specified
-        -   member-vnf-index: 1
-            vnfd-id-ref: ansiblecharm_vnfd
-        vld:
-        # Networks for the VNFs
-        -   id: mgmtnet
-            name: mgmtnet
-            short-name: mgmtnet
-            type: ELAN
-            mgmt-network: 'true'
-            vnfd-connection-point-ref:
-            -   member-vnf-index-ref: 1
-                vnfd-id-ref: ansiblecharm_vnfd
-                vnfd-connection-point-ref: vnf-cp0
diff --git a/descriptor-packages/nsd/hackfest_ansible_ns/src/icons/osm.png b/descriptor-packages/nsd/hackfest_ansible_ns/src/icons/osm.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/nsd/hackfest_ansible_ns/src/icons/osm.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/hackfest_basic_ns/Makefile b/descriptor-packages/nsd/hackfest_basic_ns/Makefile
deleted file mode 100644
index 9c18082..0000000
--- a/descriptor-packages/nsd/hackfest_basic_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2018 Telefonica
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/hackfest_basic_ns/src/hackfest_basic_nsd.yaml b/descriptor-packages/nsd/hackfest_basic_ns/src/hackfest_basic_nsd.yaml
deleted file mode 100644
index 56c7d99..0000000
--- a/descriptor-packages/nsd/hackfest_basic_ns/src/hackfest_basic_nsd.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
-nsd:nsd-catalog:
-    nsd:
-    -   id: hackfest_basic-ns
-        name: hackfest_basic-ns
-        short-name: hackfest_basic-ns
-        description: Simple NS with a single VNF and a single VL
-        version: '1.0'
-        logo: osm.png
-        constituent-vnfd:
-        -   vnfd-id-ref: hackfest_basic-vnf
-            member-vnf-index: '1'
-        vld:
-        -   id: mgmtnet
-            name: mgmtnet
-            short-name: mgmtnet
-            type: ELAN
-            mgmt-network: 'true'
-            vnfd-connection-point-ref:
-            -   vnfd-id-ref: hackfest_basic-vnf
-                member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: vnf-cp0
-
diff --git a/descriptor-packages/nsd/hackfest_basic_ns/src/icons/osm.png b/descriptor-packages/nsd/hackfest_basic_ns/src/icons/osm.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/nsd/hackfest_basic_ns/src/icons/osm.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/hackfest_cloudinit_ns/Makefile b/descriptor-packages/nsd/hackfest_cloudinit_ns/Makefile
deleted file mode 100644
index 9c18082..0000000
--- a/descriptor-packages/nsd/hackfest_cloudinit_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2018 Telefonica
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/hackfest_cloudinit_ns/src/hackfest_cloudinit_nsd.yaml b/descriptor-packages/nsd/hackfest_cloudinit_ns/src/hackfest_cloudinit_nsd.yaml
deleted file mode 100755
index d676c59..0000000
--- a/descriptor-packages/nsd/hackfest_cloudinit_ns/src/hackfest_cloudinit_nsd.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-nsd:nsd-catalog:
-    nsd:
-    -   id: hackfest_cloudinit-ns
-        name: hackfest_cloudinit-ns
-        short-name: hackfest_cloudinit-ns
-        description: NS with 2 VNFs with cloudinit connected by datanet and mgmtnet VLs
-        version: '1.0'
-        logo: osm.png
-        constituent-vnfd:
-        -   vnfd-id-ref: hackfest_cloudinit-vnf
-            member-vnf-index: '1'
-        -   vnfd-id-ref: hackfest_cloudinit-vnf
-            member-vnf-index: '2'
-        vld:
-        -   id: mgmtnet
-            name: mgmtnet
-            short-name: mgmtnet
-            type: ELAN
-            mgmt-network: 'true'
-            vim-network-name: mgmt
-            vnfd-connection-point-ref:
-            -   vnfd-id-ref: hackfest_cloudinit-vnf
-                member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: vnf-mgmt
-            -   vnfd-id-ref: hackfest_cloudinit-vnf
-                member-vnf-index-ref: '2'
-                vnfd-connection-point-ref: vnf-mgmt
-        -   id: datanet
-            name: datanet
-            short-name: datanet
-            type: ELAN
-            vnfd-connection-point-ref:
-            -   vnfd-id-ref: hackfest_cloudinit-vnf
-                member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: vnf-data
-            -   vnfd-id-ref: hackfest_cloudinit-vnf
-                member-vnf-index-ref: '2'
-                vnfd-connection-point-ref: vnf-data
-
diff --git a/descriptor-packages/nsd/hackfest_cloudinit_ns/src/icons/osm.png b/descriptor-packages/nsd/hackfest_cloudinit_ns/src/icons/osm.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/nsd/hackfest_cloudinit_ns/src/icons/osm.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/hackfest_epasriov_ns/Makefile b/descriptor-packages/nsd/hackfest_epasriov_ns/Makefile
deleted file mode 100644
index 9c18082..0000000
--- a/descriptor-packages/nsd/hackfest_epasriov_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2018 Telefonica
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/hackfest_epasriov_ns/src/hackfest_epasriov_nsd.yaml b/descriptor-packages/nsd/hackfest_epasriov_ns/src/hackfest_epasriov_nsd.yaml
deleted file mode 100755
index cc14207..0000000
--- a/descriptor-packages/nsd/hackfest_epasriov_ns/src/hackfest_epasriov_nsd.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-nsd:nsd-catalog:
-    nsd:
-    -   id: hackfest_epasriov-ns
-        name: hackfest_epasriov-ns
-        short-name: hackfest_epasriov-ns
-        description: NS with 2 VNFs hackfest_epasriov-vnf connected by datanet and mgmtnet VLs
-        version: '1.0'
-        logo: osm.png
-        constituent-vnfd:
-        -   vnfd-id-ref: hackfest_epasriov-vnf
-            member-vnf-index: '1'
-        -   vnfd-id-ref: hackfest_epasriov-vnf
-            member-vnf-index: '2'
-        vld:
-        -   id: mgmtnet
-            name: mgmtnet
-            short-name: mgmtnet
-            type: ELAN
-            mgmt-network: 'true'
-            vim-network-name: mgmt
-            vnfd-connection-point-ref:
-            -   vnfd-id-ref: hackfest_epasriov-vnf
-                member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: vnf-mgmt
-            -   vnfd-id-ref: hackfest_epasriov-vnf
-                member-vnf-index-ref: '2'
-                vnfd-connection-point-ref: vnf-mgmt
-        -   id: datanet
-            name: datanet
-            short-name: datanet
-            type: ELAN
-            vnfd-connection-point-ref:
-            -   vnfd-id-ref: hackfest_epasriov-vnf
-                member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: vnf-data
-            -   vnfd-id-ref: hackfest_epasriov-vnf
-                member-vnf-index-ref: '2'
-                vnfd-connection-point-ref: vnf-data
-
diff --git a/descriptor-packages/nsd/hackfest_epasriov_ns/src/icons/osm.png b/descriptor-packages/nsd/hackfest_epasriov_ns/src/icons/osm.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/nsd/hackfest_epasriov_ns/src/icons/osm.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/hackfest_multivdu_ns/Makefile b/descriptor-packages/nsd/hackfest_multivdu_ns/Makefile
deleted file mode 100644
index 9c18082..0000000
--- a/descriptor-packages/nsd/hackfest_multivdu_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2018 Telefonica
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/hackfest_multivdu_ns/src/hackfest_multivdu_nsd.yaml b/descriptor-packages/nsd/hackfest_multivdu_ns/src/hackfest_multivdu_nsd.yaml
deleted file mode 100755
index c564846..0000000
--- a/descriptor-packages/nsd/hackfest_multivdu_ns/src/hackfest_multivdu_nsd.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-nsd:nsd-catalog:
-    nsd:
-    -   id: hackfest_multivdu-ns
-        name: hackfest_multivdu-ns
-        short-name: hackfest_multivdu-ns
-        description: NS with 2 VNFs connected by datanet and mgmtnet VLs
-        version: '1.0'
-        logo: osm.png
-        constituent-vnfd:
-        -   vnfd-id-ref: hackfest_multivdu-vnf
-            member-vnf-index: '1'
-        -   vnfd-id-ref: hackfest_multivdu-vnf
-            member-vnf-index: '2'
-        vld:
-        -   id: mgmtnet
-            name: mgmtnet
-            short-name: mgmtnet
-            type: ELAN
-            mgmt-network: 'true'
-            vim-network-name: mgmt
-            vnfd-connection-point-ref:
-            -   vnfd-id-ref: hackfest_multivdu-vnf
-                member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: vnf-mgmt
-            -   vnfd-id-ref: hackfest_multivdu-vnf
-                member-vnf-index-ref: '2'
-                vnfd-connection-point-ref: vnf-mgmt
-        -   id: datanet
-            name: datanet
-            short-name: datanet
-            type: ELAN
-            vnfd-connection-point-ref:
-            -   vnfd-id-ref: hackfest_multivdu-vnf
-                member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: vnf-data
-            -   vnfd-id-ref: hackfest_multivdu-vnf
-                member-vnf-index-ref: '2'
-                vnfd-connection-point-ref: vnf-data
-
diff --git a/descriptor-packages/nsd/hackfest_multivdu_ns/src/icons/osm.png b/descriptor-packages/nsd/hackfest_multivdu_ns/src/icons/osm.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/nsd/hackfest_multivdu_ns/src/icons/osm.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/hackfest_simplecharm_ns/Makefile b/descriptor-packages/nsd/hackfest_simplecharm_ns/Makefile
deleted file mode 100644
index 9c18082..0000000
--- a/descriptor-packages/nsd/hackfest_simplecharm_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2018 Telefonica
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/hackfest_simplecharm_ns/src/hackfest_simplecharm_nsd.yaml b/descriptor-packages/nsd/hackfest_simplecharm_ns/src/hackfest_simplecharm_nsd.yaml
deleted file mode 100644
index aebed0a..0000000
--- a/descriptor-packages/nsd/hackfest_simplecharm_ns/src/hackfest_simplecharm_nsd.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-nsd:nsd-catalog:
-    nsd:
-    -   id: hackfest-simplecharm-ns
-        name: hackfest-simplecharm-ns
-        short-name: hackfest-simplecharm-ns
-        description: NS with 2 VNFs hackfest-simplecharm-vnf connected by datanet and mgmtnet VLs
-        version: '1.0'
-        logo: osm.png
-        constituent-vnfd:
-        -   vnfd-id-ref: hackfest-simplecharm-vnf
-            member-vnf-index: '1'
-        -   vnfd-id-ref: hackfest-simplecharm-vnf
-            member-vnf-index: '2'
-        vld:
-        -   id: mgmtnet
-            name: mgmtnet
-            short-name: mgmtnet
-            type: ELAN
-            mgmt-network: 'true'
-            vim-network-name: mgmt
-            vnfd-connection-point-ref:
-            -   vnfd-id-ref: hackfest-simplecharm-vnf
-                member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: vnf-mgmt
-            -   vnfd-id-ref: hackfest-simplecharm-vnf
-                member-vnf-index-ref: '2'
-                vnfd-connection-point-ref: vnf-mgmt
-        -   id: datanet
-            name: datanet
-            short-name: datanet
-            type: ELAN
-            vnfd-connection-point-ref:
-            -   vnfd-id-ref: hackfest-simplecharm-vnf
-                member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: vnf-data
-            -   vnfd-id-ref: hackfest-simplecharm-vnf
-                member-vnf-index-ref: '2'
-                vnfd-connection-point-ref: vnf-data
-
diff --git a/descriptor-packages/nsd/hackfest_simplecharm_ns/src/icons/osm.png b/descriptor-packages/nsd/hackfest_simplecharm_ns/src/icons/osm.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/nsd/hackfest_simplecharm_ns/src/icons/osm.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/ims_allin1_corpa/Makefile b/descriptor-packages/nsd/ims_allin1_corpa/Makefile
deleted file mode 100644
index c5f5f69..0000000
--- a/descriptor-packages/nsd/ims_allin1_corpa/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/ims_allin1_corpa/src/IMS-corpA__nsd.yaml b/descriptor-packages/nsd/ims_allin1_corpa/src/IMS-corpA__nsd.yaml
deleted file mode 100644
index 3124886..0000000
--- a/descriptor-packages/nsd/ims_allin1_corpa/src/IMS-corpA__nsd.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-nsd-catalog:
-    nsd:
-    -   id: IMS-corpA
-        name: IMS-corpA
-        short-name: IMS-corpA
-        description: All in one Clearwater IMS for corporation A in MWC16
-        logo: osm_2x.png
-        constituent-vnfd:
-        -   member-vnf-index: '1'
-            vnfd-id-ref: IMS-ALLIN1_2p
-        vld:
-        -   id: data
-            name: data
-            short-name: data
-            type: ELAN
-            vim-network-name: net-corp:108
-            provider-network:
-                physical-network: net-corp
-                segmentation_id: '108'
-            vnfd-connection-point-ref:
-            -   member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: eth0
-                vnfd-id-ref: IMS-ALLIN1_2p
-        -   id: management
-            mgmt-network: 'true'
-            name: management
-            short-name: management
-            type: ELAN
-            vim-network-name: net-mgmtOS
-            vnfd-connection-point-ref:
-            -   member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: eth1
-                vnfd-id-ref: IMS-ALLIN1_2p
-        service-primitive:
-        -   name: Update Domain
-            vnf-primitive-group:
-            -   member-vnf-index-ref: '1'
-                vnfd-id-ref: IMS-ALLIN1_2p
-                vnfd-name: cwims_vnfd
-                primitive:
-                -   index: '1'
-                    name: config
-        -   name: Add User
-            vnf-primitive-group:
-            -   member-vnf-index-ref: '1'
-                vnfd-id-ref: IMS-ALLIN1_2p
-                vnfd-name: cwims_vnfd
-                primitive:
-                -   index: '1'
-                    name: create-update-user
-        -   name: Delete User
-            vnf-primitive-group:
-            -   member-vnf-index-ref: '1'
-                vnfd-id-ref: IMS-ALLIN1_2p
-                vnfd-name: cwims_vnfd
-                primitive:
-                -   index: '1'
-                    name: delete-user
\ No newline at end of file
diff --git a/descriptor-packages/nsd/ims_allin1_corpa/src/icons/osm_2x.png b/descriptor-packages/nsd/ims_allin1_corpa/src/icons/osm_2x.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/nsd/ims_allin1_corpa/src/icons/osm_2x.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/ims_allin1_corpa/src/vnf_config/IMS-ALLIN1_2p__1.yaml b/descriptor-packages/nsd/ims_allin1_corpa/src/vnf_config/IMS-ALLIN1_2p__1.yaml
deleted file mode 100644
index 33c5ef9..0000000
--- a/descriptor-packages/nsd/ims_allin1_corpa/src/vnf_config/IMS-ALLIN1_2p__1.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-initial_config_primitive:
-- name: config
-  parameter:
-    proxied_ip: <rw_mgmt_ip>
diff --git a/descriptor-packages/nsd/no_port_security_ns/Makefile b/descriptor-packages/nsd/no_port_security_ns/Makefile
deleted file mode 100644
index 91f8792..0000000
--- a/descriptor-packages/nsd/no_port_security_ns/Makefile
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-#   Copyright 2020 Tech Mahindra Limited
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-#   Author: Mrityunjay Yadav <MY00514913@TechMahindra.com>, Jayant Madavi
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/no_port_security_ns/src/icons/osm.png b/descriptor-packages/nsd/no_port_security_ns/src/icons/osm.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/nsd/no_port_security_ns/src/icons/osm.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/no_port_security_ns/src/no_port_security_nsd.yaml b/descriptor-packages/nsd/no_port_security_ns/src/no_port_security_nsd.yaml
deleted file mode 100644
index 097e615..0000000
--- a/descriptor-packages/nsd/no_port_security_ns/src/no_port_security_nsd.yaml
+++ /dev/null
@@ -1,41 +0,0 @@
-##
-# Copyright 2020 Tech Mahindra Limited
-#
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# Author: Mrityunjay Yadav <MY00514913@TechMahindra.com>, Jayant Madavi
-##
-
-
-nsd:nsd-catalog:
-    nsd:
-    -   id: no_port_security-ns
-        name: no_port_security-ns
-        short-name: no_port_security-ns
-        description: Simple NS with a single VNF and a single VL
-        version: '1.0'
-        logo: osm.png
-        constituent-vnfd:
-        -   vnfd-id-ref: hackfest_basic-vnf
-            member-vnf-index: '1'
-        vld:
-        -   id: noPortSecurity
-            name: noPortSecurity
-            short-name: noPortSecurity
-            type: ELAN
-            vnfd-connection-point-ref:
-            -   vnfd-id-ref: hackfest_basic-vnf
-                member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: vnf-cp0
diff --git a/descriptor-packages/nsd/ping_pong_ns/Makefile b/descriptor-packages/nsd/ping_pong_ns/Makefile
deleted file mode 100644
index c5f5f69..0000000
--- a/descriptor-packages/nsd/ping_pong_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/ping_pong_ns/src/icons/rift_logo.png b/descriptor-packages/nsd/ping_pong_ns/src/icons/rift_logo.png
deleted file mode 100644
index 09b47c7..0000000
--- a/descriptor-packages/nsd/ping_pong_ns/src/icons/rift_logo.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/ping_pong_ns/src/ping_pong_nsd.yaml b/descriptor-packages/nsd/ping_pong_ns/src/ping_pong_nsd.yaml
deleted file mode 100644
index bec5997..0000000
--- a/descriptor-packages/nsd/ping_pong_ns/src/ping_pong_nsd.yaml
+++ /dev/null
@@ -1,103 +0,0 @@
-#
-#   Copyright 2016 RIFT.io Inc
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-#
-
-nsd-catalog:
-    nsd:
-     -  id: rift_ping_pong_ns
-        logo: rift_logo.png
-        name: ping_pong_ns
-        short-name: ping_pong_ns
-        vendor: RIFT.io
-        version: '1.1'
-        description: RIFT.io sample ping pong network service
-        constituent-vnfd:
-        -   member-vnf-index: '1'
-            vnfd-id-ref: rift_ping_vnf
-        -   member-vnf-index: '2'
-            vnfd-id-ref: rift_pong_vnf
-        initial-service-primitive:
-        -   name: start traffic
-            parameter:
-            -   name: port
-                value: 5555
-            -   name: ssh-username
-                value: fedora
-            -   name: ssh-password
-                value: fedora
-            seq: '1'
-            user-defined-script: start_traffic.py
-        input-parameter-xpath:
-        -   xpath: /nsd:nsd-catalog/nsd:nsd/nsd:vendor
-        ip-profiles:
-        -   description: Inter VNF Link
-            ip-profile-params:
-                gateway-address: 31.31.31.210
-                ip-version: ipv4
-                subnet-address: 31.31.31.0/24
-                dhcp-params:
-                  count: 200
-                  start-address: 31.31.31.2
-            name: InterVNFLink
-        placement-groups:
-        -   member-vnfd:
-            -   member-vnf-index-ref: '1'
-                vnfd-id-ref: rift_ping_vnf
-            -   member-vnf-index-ref: '2'
-                vnfd-id-ref: rift_pong_vnf
-            name: Orcus
-            requirement: Place this VM on the Kuiper belt object Orcus
-            strategy: COLOCATION
-        -   member-vnfd:
-            -   member-vnf-index-ref: '1'
-                vnfd-id-ref: rift_ping_vnf
-            -   member-vnf-index-ref: '2'
-                vnfd-id-ref: rift_pong_vnf
-            name: Quaoar
-            requirement: Place this VM on the Kuiper belt object Quaoar
-            strategy: COLOCATION
-        vld:
-        -   id: mgmt_vl
-            description: Management VL
-            name: mgmt_vl
-            short-name: mgmt_vl
-            vim-network-name: mgmt
-            type: ELAN
-            vendor: RIFT.io
-            version: '1.0'
-            mgmt-network: 'true'
-            vnfd-connection-point-ref:
-            -   member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: ping_vnfd/cp0
-                vnfd-id-ref: rift_ping_vnf
-            -   member-vnf-index-ref: '2'
-                vnfd-connection-point-ref: pong_vnfd/cp0
-                vnfd-id-ref: rift_pong_vnf
-        -   id: ping_pong_vl1
-            description: Data VL
-            ip-profile-ref: InterVNFLink
-            name: data_vl
-            short-name: data_vl
-            type: ELAN
-            vendor: RIFT.io
-            version: '1.0'
-            vnfd-connection-point-ref:
-            -   member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: ping_vnfd/cp1
-                vnfd-id-ref: rift_ping_vnf
-            -   member-vnf-index-ref: '2'
-                vnfd-connection-point-ref: pong_vnfd/cp1
-                vnfd-id-ref: rift_pong_vnf
diff --git a/descriptor-packages/nsd/ping_pong_ns/src/scripts/start_traffic.py b/descriptor-packages/nsd/ping_pong_ns/src/scripts/start_traffic.py
deleted file mode 100755
index 87c309f..0000000
--- a/descriptor-packages/nsd/ping_pong_ns/src/scripts/start_traffic.py
+++ /dev/null
@@ -1,223 +0,0 @@
-#!/usr/bin/env python3
-
-############################################################################
-# Copyright 2016 RIFT.IO Inc                                               #
-#                                                                          #
-# Licensed under the Apache License, Version 2.0 (the "License");          #
-# you may not use this file except in compliance with the License.         #
-# You may obtain a copy of the License at                                  #
-#                                                                          #
-#     http://www.apache.org/licenses/LICENSE-2.0                           #
-#                                                                          #
-# Unless required by applicable law or agreed to in writing, software      #
-# distributed under the License is distributed on an "AS IS" BASIS,        #
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
-# See the License for the specific language governing permissions and      #
-# limitations under the License.                                           #
-############################################################################
-
-
-import argparse
-import logging
-import paramiko
-import os
-import subprocess
-import sys
-import time
-
-import yaml
-
-
-def ssh(cmd, host, user, password):
-    """ Run an arbitrary command over SSH. """
-
-    client = paramiko.SSHClient()
-    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
-
-    client.connect(host, port=22, username=user, password=password)
-
-    stdin, stdout, stderr = client.exec_command(cmd, get_pty=True)
-    retcode = stdout.channel.recv_exit_status()
-    client.close()
-
-    return (
-        retcode,
-        stdout.read().decode('utf-8').strip(),
-        stderr.read().decode('utf-8').strip()
-    )
-
-
-def start_traffic(yaml_cfg, logger):
-    '''Use curl and set admin status to enable on pong and ping vnfs'''
-
-    curl_fmt = 'curl -D /dev/stdout -H "Accept: application/vnd.yang.data' \
-                   '+xml" -H "Content-Type: application/vnd.yang.data+json" ' \
-                   '-X POST -d "{{ {data} }}" http://127.0.0.1:' \
-                   '{mgmt_port}/api/v1/{vnf_type}/{url}'
-
-    # Get userid and password for the VNF
-    user = yaml_cfg['parameter']['ssh-username']
-    passwd = yaml_cfg['parameter']['ssh-password']
-
-    # Get port from user parameter
-    service_port = yaml_cfg['parameter']['port']
-
-    service_ip = None
-
-    def exec_cmd(vnf_type, mgmt_ip, port, url, data):
-        curl_cmd = curl_fmt.format(
-            mgmt_port=port,
-            vnf_type=vnf_type,
-            data=data,
-            url=url
-        )
-
-        logger.debug("Executing cmd: %s", curl_cmd)
-        rc, out, err = ssh(curl_cmd, mgmt_ip, user, passwd)
-
-        if rc != 0:
-            logger.error("cmd={}, rc={}, stderr={}, stdout={}".
-                         format(curl_cmd, rc, err, out))
-        else:
-            logger.debug("cmd={}, rc={}, stderr={}, stdout={}".
-                         format(curl_cmd, rc, err, out))
-
-        return rc
-
-    def setup_service(mgmt_ip, port, vnf_type):
-        data = '\\"ip\\":\\"{}\\", \\"port\\":5555'.format(service_ip)
-        return exec_cmd(vnf_type, mgmt_ip, port, 'server', data)
-
-    def enable_service(mgmt_ip, port, vnf_type):
-        data='\\"enable\\":true'
-        url='adminstatus/state'
-        return exec_cmd(vnf_type, mgmt_ip, port, url, data)
-
-    # Enable pong service first
-    for index, vnfr in yaml_cfg['vnfr'].items():
-        logger.debug("VNFR {}: {}".format(index, vnfr))
-
-        def get_cp_ip(cp_name):
-            for cp in vnfr['connection_point']:
-                if cp['name'].endswith(cp_name):
-                    return cp['ip_address']
-
-        # Check if it is pong vnf
-        if 'pong_vnf' in vnfr['name']:
-            vnf_type = 'pong'
-            mgmt_ip = vnfr['mgmt_ip_address']
-            port = vnfr['mgmt_port']
-            service_ip = get_cp_ip('cp1')
-
-            max_tries = 60
-            tries = 0
-            while tries < max_tries:
-                rc = setup_service(mgmt_ip, port, vnf_type)
-                tries += 1
-                if rc != 0:
-                    logger.error("Setup service for pong failed ({}): {}".
-                                 format(tries, rc))
-                    if rc != 7:
-                        return rc
-                    else:
-                        time.sleep(1) # Sleep for 1 seconds
-                else:
-                    break
-
-            rc = enable_service(mgmt_ip, port, vnf_type)
-            if rc != 0:
-                logger.error("Enable service for pong failed: {}".
-                             format(rc))
-                return rc
-
-    # Add a delay to provide pong port to come up
-    time.sleep(1)
-
-    # Enable ping service next
-    for index, vnfr in yaml_cfg['vnfr'].items():
-        logger.debug("VNFR {}: {}".format(index, vnfr))
-
-        # Check if it is pong vnf
-        if 'ping_vnf' in vnfr['name']:
-            vnf_type = 'ping'
-            mgmt_ip = vnfr['mgmt_ip_address']
-            port = vnfr['mgmt_port']
-            if service_ip is None:
-                logger.error("Did not find pong ip!!")
-                return 1
-
-            max_tries = 30
-            tries = 0
-            while tries < max_tries:
-                rc = setup_service(mgmt_ip, port, vnf_type)
-                tries += 1
-                if rc != 0:
-                    logger.error("Setup service for ping failed ({}): {}".
-                                 format(tries, rc))
-                    if rc != 7:
-                        return rc
-                    else:
-                        time.sleep(1) # Sleep for 1 seconds
-                else:
-                    break
-
-            rc = enable_service(mgmt_ip, port, vnf_type)
-            if rc != 0:
-                logger.error("Enable service for ping failed: {}".
-                             format(rc))
-
-    return rc
-
-
-def main(argv=sys.argv[1:]):
-    try:
-        parser = argparse.ArgumentParser()
-        parser.add_argument("yaml_cfg_file", type=argparse.FileType('r'))
-        parser.add_argument("-q", "--quiet", dest="verbose", action="store_false")
-        args = parser.parse_args()
-
-        run_dir = os.path.join(os.environ['RIFT_INSTALL'], "var/run/rift")
-        if not os.path.exists(run_dir):
-            os.makedirs(run_dir)
-        log_file = "{}/ping_pong_start_traffic-{}.log".format(run_dir, time.strftime("%Y%m%d%H%M%S"))
-
-        # logging.basicConfig(filename=log_file, level=logging.DEBUG)
-        logger = logging.getLogger('ping-pong-start-traffic')
-        logger.setLevel(logging.DEBUG)
-
-        fh = logging.FileHandler(log_file)
-        fh.setLevel(logging.DEBUG)
-
-        ch = logging.StreamHandler()
-        if args.verbose:
-            ch.setLevel(logging.DEBUG)
-        else:
-            ch.setLevel(logging.INFO)
-
-        # create formatter and add it to the handlers
-        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
-        fh.setFormatter(formatter)
-        ch.setFormatter(formatter)
-        logger.addHandler(fh)
-        logger.addHandler(ch)
-
-    except Exception as e:
-        logger.exception("Exception in {}: {}".format(__file__, e))
-        sys.exit(1)
-
-    try:
-        logger.debug("Input file: {}".format(args.yaml_cfg_file.name))
-        yaml_str = args.yaml_cfg_file.read()
-        yaml_cfg = yaml.load(yaml_str)
-        logger.debug("Input YAML: {}".format(yaml_cfg))
-
-        rc = start_traffic(yaml_cfg, logger)
-        logger.info("Return code: {}".format(rc))
-        sys.exit(rc)
-
-    except Exception as e:
-        logger.exception("Exception in {}: {}".format(__file__, e))
-        sys.exit(1)
-
-if __name__ == "__main__":
-    main()
diff --git a/descriptor-packages/nsd/ref1_ns/Makefile b/descriptor-packages/nsd/ref1_ns/Makefile
deleted file mode 100644
index c5f5f69..0000000
--- a/descriptor-packages/nsd/ref1_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/ref1_ns/src/ref1_nsd.yaml b/descriptor-packages/nsd/ref1_ns/src/ref1_nsd.yaml
deleted file mode 100644
index d8c3813..0000000
--- a/descriptor-packages/nsd/ref1_ns/src/ref1_nsd.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
-nsd-catalog:
-    nsd:
-    -   constituent-vnfd:
-        -   member-vnf-index: '1'
-            start-by-default: 'true'
-            vnfd-id-ref: Ref_Vnf_11
-        -   member-vnf-index: '2'
-            vnfd-id-ref: Ref_Vnf_21
-        description: Reference NS 1
-        id: Ref_NS_1
-        name: Ref_NS_1
-        vendor: ETSI
-        vld:
-        -   description: Mgmt VL
-            mgmt-network: 'true'
-            id: 54c04
-            name: VL1
-            short-name: VL1
-            type: ELAN
-            vendor: ETSI
-            vnfd-connection-point-ref:
-            -   member-vnf-index-ref: '1'
-                vnfd-id-ref: Ref_Vnf_11
-                vnfd-connection-point-ref: mgmt0
-            -   member-vnf-index-ref: '2'
-                vnfd-id-ref: Ref_Vnf_21
-                vnfd-connection-point-ref: mgmt
-        -   description: Data VL
-            id: 54c03
-            name: VL2
-            short-name: VL2
-            type: ELAN
-            vendor: ETSI
-            vnfd-connection-point-ref:
-            -   member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: west
-                vnfd-id-ref: Ref_Vnf_11
-            -   member-vnf-index-ref: '2'
-                vnfd-connection-point-ref: data
-                vnfd-id-ref: Ref_Vnf_21
diff --git a/descriptor-packages/nsd/ref2_ns/Makefile b/descriptor-packages/nsd/ref2_ns/Makefile
deleted file mode 100644
index c5f5f69..0000000
--- a/descriptor-packages/nsd/ref2_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/ref2_ns/src/ref2_nsd.yaml b/descriptor-packages/nsd/ref2_ns/src/ref2_nsd.yaml
deleted file mode 100644
index 6f67ed2..0000000
--- a/descriptor-packages/nsd/ref2_ns/src/ref2_nsd.yaml
+++ /dev/null
@@ -1,41 +0,0 @@
-nsd-catalog:
-    nsd:
-    -   constituent-vnfd:
-        -   member-vnf-index: '1'
-            vnfd-id-ref: Ref_Vnf_12
-        -   member-vnf-index: '2'
-            vnfd-id-ref: Ref_Vnf_22
-        description: Reference NS2
-        id: Ref_NS_2
-        name: Ref_NS_2
-        vendor: ETSI
-        vld:
-        -   id: '97465'
-            mgmt-network: 'true'
-            name: VL1
-            vnfd-connection-point-ref:
-            -   member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: mgmt0
-                vnfd-id-ref: Ref_Vnf_12
-            -   member-vnf-index-ref: '2'
-                vnfd-connection-point-ref: mgmt
-                vnfd-id-ref: Ref_Vnf_22
-        -   id: f66e6
-            name: VL2
-            vnfd-connection-point-ref:
-            -   member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: east
-                vnfd-id-ref: Ref_Vnf_12
-            -   member-vnf-index-ref: '2'
-                vnfd-connection-point-ref: east
-                vnfd-id-ref: Ref_Vnf_22
-        -   id: b72e9
-            name: VL3
-            vnfd-connection-point-ref:
-            -   member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: west
-                vnfd-id-ref: Ref_Vnf_12
-            -   member-vnf-index-ref: '2'
-                vnfd-connection-point-ref: west
-                vnfd-id-ref: Ref_Vnf_22
-
diff --git a/descriptor-packages/nsd/simple_multi-charm_multi-vdu-ns/Makefile b/descriptor-packages/nsd/simple_multi-charm_multi-vdu-ns/Makefile
deleted file mode 100644
index 9c18082..0000000
--- a/descriptor-packages/nsd/simple_multi-charm_multi-vdu-ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2018 Telefonica
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/simple_multi-charm_multi-vdu-ns/src/icons/osm.png b/descriptor-packages/nsd/simple_multi-charm_multi-vdu-ns/src/icons/osm.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/nsd/simple_multi-charm_multi-vdu-ns/src/icons/osm.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/simple_multi-charm_multi-vdu-ns/src/simple_multi-charm_multi-vdu_nsd.yaml b/descriptor-packages/nsd/simple_multi-charm_multi-vdu-ns/src/simple_multi-charm_multi-vdu_nsd.yaml
deleted file mode 100644
index bd21706..0000000
--- a/descriptor-packages/nsd/simple_multi-charm_multi-vdu-ns/src/simple_multi-charm_multi-vdu_nsd.yaml
+++ /dev/null
@@ -1,38 +0,0 @@
-nsd:nsd-catalog:
-    nsd:
-    -   id: multicharmvdu-ns
-        name: multicharmvdu-ns
-        short-name: multicharmvdu-ns
-        description: NS with 2 VNFs multicharmvdu-vnf connected by datanet and mgmtnet VLs
-        version: '1.0'
-        logo: osm.png
-        constituent-vnfd:
-        -   vnfd-id-ref: multicharmvdu-vnf
-            member-vnf-index: '1'
-        -   vnfd-id-ref: multicharmvdu-vnf
-            member-vnf-index: '2'
-        vld:
-        -   id: mgmtnet
-            name: mgmtnet
-            short-name: mgmtnet
-            type: ELAN
-            mgmt-network: 'true'
-            vim-network-name: mgmt
-            vnfd-connection-point-ref:
-            -   vnfd-id-ref: multicharmvdu-vnf
-                member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: vnf-mgmt
-            -   vnfd-id-ref: multicharmvdu-vnf
-                member-vnf-index-ref: '2'
-                vnfd-connection-point-ref: vnf-mgmt
-        -   id: datanet
-            name: datanet
-            short-name: datanet
-            type: ELAN
-            vnfd-connection-point-ref:
-            -   vnfd-id-ref: multicharmvdu-vnf
-                member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: vnf-data
-            -   vnfd-id-ref: multicharmvdu-vnf
-                member-vnf-index-ref: '2'
-                vnfd-connection-point-ref: vnf-data
diff --git a/descriptor-packages/nsd/ubuntu-cloudinit_ns/Makefile b/descriptor-packages/nsd/ubuntu-cloudinit_ns/Makefile
deleted file mode 100644
index c5f5f69..0000000
--- a/descriptor-packages/nsd/ubuntu-cloudinit_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/ubuntu-cloudinit_ns/src/ubuntu-cloudinit_nsd.yaml b/descriptor-packages/nsd/ubuntu-cloudinit_ns/src/ubuntu-cloudinit_nsd.yaml
deleted file mode 100644
index 0264a72..0000000
--- a/descriptor-packages/nsd/ubuntu-cloudinit_ns/src/ubuntu-cloudinit_nsd.yaml
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright 2019 ETSI
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-# implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-nsd:nsd-catalog:
-    nsd:
-    -   id: ubuntu-cloudinit_nsd
-        name: ubuntu-cloudinit_nsd
-        short-name: ubuntu-cloudinit_nsd
-        description: Generated by OSM package generator
-        vendor: OSM
-        version: '1.0'
-
-
-        constituent-vnfd:
-        -   member-vnf-index: 1
-            vnfd-id-ref: ubuntu-cloudinit_vnfd
-
-        vld:
-        # Networks for the VNFs
-        -   id: mgmtnet
-            name: mgmtnet
-            short-name: mgmtnet
-            type: ELAN
-            mgmt-network: 'true'
-            # vim-network-name: <update>
-            vnfd-connection-point-ref:
-            -   member-vnf-index-ref: 1
-                vnfd-id-ref: ubuntu-cloudinit_vnfd
-                vnfd-connection-point-ref: vnf-cp0
diff --git a/descriptor-packages/nsd/ubuntu_cirros_multidisk_ns/Makefile b/descriptor-packages/nsd/ubuntu_cirros_multidisk_ns/Makefile
deleted file mode 100644
index c5f5f69..0000000
--- a/descriptor-packages/nsd/ubuntu_cirros_multidisk_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/ubuntu_cirros_multidisk_ns/src/icons/osm_2x.png b/descriptor-packages/nsd/ubuntu_cirros_multidisk_ns/src/icons/osm_2x.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/nsd/ubuntu_cirros_multidisk_ns/src/icons/osm_2x.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/ubuntu_cirros_multidisk_ns/src/ubuntu_cirros_multidisk_nsd.yaml b/descriptor-packages/nsd/ubuntu_cirros_multidisk_ns/src/ubuntu_cirros_multidisk_nsd.yaml
deleted file mode 100644
index 51cc963..0000000
--- a/descriptor-packages/nsd/ubuntu_cirros_multidisk_ns/src/ubuntu_cirros_multidisk_nsd.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-nsd-catalog:
-    nsd:
-    -   id: ubuntu_cirros_multidisk_nsd
-        name: ubuntu_cirros_multidisk_nsd
-        short-name: ubuntu_cirros_multidisk_nsd
-        description: Generated by OSM pacakage generator
-        vendor: OSM
-        version: '1.0'
-
-        # Place the logo as png in icons directory and provide the name here
-        logo: osm_2x.png
-
-        # Specify the VNFDs that are part of this NSD
-        constituent-vnfd:
-            # The member-vnf-index needs to be unique, starting from 1
-            # vnfd-id-ref is the id of the VNFD
-            # Multiple constituent VNFDs can be specified
-        -   member-vnf-index: 1
-            vnfd-id-ref: ubuntu_cirros_multidisk_vnfd
-
-        vld:
-        # Networks for the VNFs
-            -   id: ubuntu_cirros_multidisk_nsd_vld1
-                name: management
-                short-name: management
-                type: ELAN
-                mgmt-network: 'true'
-                vnfd-connection-point-ref:
-                # Specify the constituent VNFs
-                -   member-vnf-index-ref: 1
-                    vnfd-id-ref: ubuntu_cirros_multidisk_vnfd
-                    # NOTE: Validate the entry below
-                    vnfd-connection-point-ref: eth0
diff --git a/descriptor-packages/nsd/ubuntu_cloudinit_ns/Makefile b/descriptor-packages/nsd/ubuntu_cloudinit_ns/Makefile
deleted file mode 100644
index c5f5f69..0000000
--- a/descriptor-packages/nsd/ubuntu_cloudinit_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/ubuntu_cloudinit_ns/src/ubuntu_cloudinit_nsd.yaml b/descriptor-packages/nsd/ubuntu_cloudinit_ns/src/ubuntu_cloudinit_nsd.yaml
deleted file mode 100755
index fa9a567..0000000
--- a/descriptor-packages/nsd/ubuntu_cloudinit_ns/src/ubuntu_cloudinit_nsd.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-nsd-catalog:
-    nsd:
-    -   constituent-vnfd:
-        -   member-vnf-index: '1'
-            start-by-default: 'true'
-            vnfd-id-ref: ubuntu_1iface_cloudinit_newfile_vnfd
-        id: ubuntu_cloudinit
-        name: ubuntu_cloudinit
-        short-name: ubuntu_cloudinit
-        vld:
-        -   id: mgmt
-            mgmt-network: 'false'
-            name: mgmt
-            short-name: mgmt
-            mgmt-network: 'true'
-            vnfd-connection-point-ref:
-            -   member-vnf-index-ref: '1'
-                vnfd-connection-point-ref: eth0
-                vnfd-id-ref: ubuntu_1iface_cloudinit_newfile_vnfd
diff --git a/descriptor-packages/nsd/ubuntu_epa_virtio_ns/Makefile b/descriptor-packages/nsd/ubuntu_epa_virtio_ns/Makefile
deleted file mode 100644
index c5f5f69..0000000
--- a/descriptor-packages/nsd/ubuntu_epa_virtio_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/ubuntu_epa_virtio_ns/src/icons/tef.png b/descriptor-packages/nsd/ubuntu_epa_virtio_ns/src/icons/tef.png
deleted file mode 100644
index fcaaf88..0000000
--- a/descriptor-packages/nsd/ubuntu_epa_virtio_ns/src/icons/tef.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/ubuntu_epa_virtio_ns/src/ubuntu_epa_virtio_nsd.yaml b/descriptor-packages/nsd/ubuntu_epa_virtio_ns/src/ubuntu_epa_virtio_nsd.yaml
deleted file mode 100755
index 31378ef..0000000
--- a/descriptor-packages/nsd/ubuntu_epa_virtio_ns/src/ubuntu_epa_virtio_nsd.yaml
+++ /dev/null
@@ -1,25 +0,0 @@
-nsd-catalog:
-    nsd:
-    -   id: ubuntu_epa_virtio_ns
-        name: ubuntu_epa_virtio_ns
-        short-name: ubuntu_epa_virtio_ns
-        description: One VNF based on Ubuntu 16.04 with EPA and virtio connected to mgmt
-        vendor: OSM
-        version: '1.0'
-        logo: tef.png
-
-        constituent-vnfd:
-        -   member-vnf-index: 1
-            vnfd-id-ref: ubuntu_epa_virtio_vnf
-
-        vld:
-        -   id: mgmt
-            name: mgmt
-            short-name: mgmt
-            type: ELAN
-            mgmt-network: 'true'
-            vnfd-connection-point-ref:
-            -   member-vnf-index-ref: 1
-                vnfd-id-ref: ubuntu_epa_virtio_vnf
-                vnfd-connection-point-ref: eth0
-
diff --git a/descriptor-packages/nsd/ubuntu_xenial_ns/Makefile b/descriptor-packages/nsd/ubuntu_xenial_ns/Makefile
deleted file mode 100644
index c5f5f69..0000000
--- a/descriptor-packages/nsd/ubuntu_xenial_ns/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/nsd/ubuntu_xenial_ns/src/icons/osm_2x.png b/descriptor-packages/nsd/ubuntu_xenial_ns/src/icons/osm_2x.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/nsd/ubuntu_xenial_ns/src/icons/osm_2x.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/nsd/ubuntu_xenial_ns/src/ubuntu_xenial_nsd.yaml b/descriptor-packages/nsd/ubuntu_xenial_ns/src/ubuntu_xenial_nsd.yaml
deleted file mode 100644
index 6a46694..0000000
--- a/descriptor-packages/nsd/ubuntu_xenial_ns/src/ubuntu_xenial_nsd.yaml
+++ /dev/null
@@ -1,41 +0,0 @@
-nsd:nsd-catalog:
-    nsd:
-    -   id: ubuntu_xenial_nsd
-        name: ubuntu_xenial_ns
-        short-name: ubuntu_xenial_ns
-        description: Generated by OSM pacakage generator
-        vendor: OSM
-        version: '1.0'
-
-        # Place the logo as png in icons directory and provide the name here
-        logo: osm_2x.png
-
-        # Specify the VNFDs that are part of this NSD
-        constituent-vnfd:
-            # The member-vnf-index needs to be unique, starting from 1
-            # vnfd-id-ref is the id of the VNFD
-            # Multiple constituent VNFDs can be specified
-        -   member-vnf-index: 1
-            vnfd-id-ref: ubuntu_xenial_vnfd
-
-        vld:
-        # Networks for the VNFs
-            -   id: ubuntu_xenial_nsd_vld1
-                mgmt-network: 'true'
-                name: management
-                short-name: management
-                type: ELAN
-                vim-network-name: net-mgmtOS
-                # vim-network-name: <update>
-                # provider-network:
-                #     overlay-type: VLAN
-                #     segmentation_id: <update>
-                vnfd-connection-point-ref:
-                # Specify the constituent VNFs
-                # member-vnf-index-ref - entry from constituent vnf
-                # vnfd-id-ref - VNFD id
-                # vnfd-connection-point-ref - connection point name in the VNFD
-                -   member-vnf-index-ref: 1
-                    vnfd-id-ref: ubuntu_xenial_vnfd
-                    # NOTE: Validate the entry below
-                    vnfd-connection-point-ref: eth0
diff --git a/descriptor-packages/tools/charm-generator/LICENSE b/descriptor-packages/tools/charm-generator/LICENSE
deleted file mode 100644
index 76d751a..0000000
--- a/descriptor-packages/tools/charm-generator/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2019 Eduardo Sousa <esousa@whitestack.com>,
-                  Gianpietro Lavado <glavado@whitestack.com>
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/descriptor-packages/tools/charm-generator/README.md b/descriptor-packages/tools/charm-generator/README.md
deleted file mode 100644
index fd8d7e0..0000000
--- a/descriptor-packages/tools/charm-generator/README.md
+++ /dev/null
@@ -1,81 +0,0 @@
-Charm Generator
-===============
-
-This tool was designed to help bootstrap the process of charm creation.
-It should help beginners to have a charm working in a matter of minutes.
-
-The charm generator takes as input an initialized charm and some scripts
-or description of HTTP requests and transforms it into a functional charm
-with all the metadata filled in.
-
-The main flow is the following:
-
-1) charm create <name of the charm>
-2) copy the scripts or the requests definition into a specific directory
-3) run the generator
-4) charm build
-
-What types of charms can be generated?
---------------------------------------
-
-Currently, the Charm Generator only supports Ansible scripts.
-
-In the roadmap, the following charms are planned:
-
-* HTTP Requests
-* SOL002 Requests
-* Python Scripts
-
-How to run the Charm Generator?
--------------------------------
-
-To run the Charm Generator, you should do the following steps:
-
-1) Download the OSM Devops git repository
-2) Install the requirements.txt
-3) Run the generator.py in the charm that you want to generate
-
-The only mandatory parameter is what type of charm you want to
-generate:
-
-* Ansible (--ansible)
-* HTTP Requests (--http) - not implemented
-* SOL002 Requests (--sol002) - not implemented
-* Python Scripts (--scripts) - not implemented
-
-There are some recommended parameters, such as:
-
-* Summary - summary of what the charm does (--summary)
-* Maintainer - the name and email of the maintainer (--maintainer)
-* Description - description of what the charm does (--description)
-* Company - company name to be include in the license headers (--company)
-* Email - email of the company/developer to be included in the license headers (--email)
-
-Specifics of the Ansible option
--------------------------------
-
-In order to create an Ansible charm, you need to create a directory
-inside the charm and name it playbooks. Inside that directory, you 
-should put all the playbooks that are going to be executed in the charm.
-
-Note: the playbooks extension must be .yaml
-
-Your charm should look like this before running the generator:
-
-~~~
-.
-├── config.yaml
-├── icon.svg
-├── layer.yaml
-├── metadata.yaml
-├── playbooks
-│   ├── pb-1.yaml
-│   ├── playbook2.yaml
-│   └── playbook_3.yaml
-├── reactive
-│   └── testch.py
-├── README.ex
-└── tests
-    ├── 00-setup
-    └── 10-deploy
-~~~
\ No newline at end of file
diff --git a/descriptor-packages/tools/charm-generator/generator-runner.py b/descriptor-packages/tools/charm-generator/generator-runner.py
deleted file mode 100644
index 275156b..0000000
--- a/descriptor-packages/tools/charm-generator/generator-runner.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
-##
-
-from generator.generator import main
-
-if __name__ == '__main__':
-    main()
diff --git a/descriptor-packages/tools/charm-generator/generator/__init__.py b/descriptor-packages/tools/charm-generator/generator/__init__.py
deleted file mode 100644
index e584ee5..0000000
--- a/descriptor-packages/tools/charm-generator/generator/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
-##
diff --git a/descriptor-packages/tools/charm-generator/generator/__main__.py b/descriptor-packages/tools/charm-generator/generator/__main__.py
deleted file mode 100644
index 01143fb..0000000
--- a/descriptor-packages/tools/charm-generator/generator/__main__.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
-##
-
-from .generator import main
-
-main()
diff --git a/descriptor-packages/tools/charm-generator/generator/actions/__init__.py b/descriptor-packages/tools/charm-generator/generator/actions/__init__.py
deleted file mode 100644
index e584ee5..0000000
--- a/descriptor-packages/tools/charm-generator/generator/actions/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
-##
diff --git a/descriptor-packages/tools/charm-generator/generator/actions/templates/action.j2 b/descriptor-packages/tools/charm-generator/generator/actions/templates/action.j2
deleted file mode 100644
index c1727c6..0000000
--- a/descriptor-packages/tools/charm-generator/generator/actions/templates/action.j2
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/env python3
-{#-
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
--#}
-{%- if license is defined %}
-# Copyright {{ license.year }} {{ license.company }}
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: {{ license.email }}
-{%- endif %}
-
-import sys
-sys.path.append('lib')
-
-from charms.reactive import main
-from charms.reactive import set_state
-from charmhelpers.core.hookenv import action_fail, action_name
-
-"""
-`set_state` only works here because it's flushed to disk inside the `main()`
-loop. remove_state will need to be called inside the action method.
-"""
-set_state('actions.{}'.format(action_name()))
-
-try:
-    main()
-except Exception as e:
-    action_fail(repr(e))
-
diff --git a/descriptor-packages/tools/charm-generator/generator/actions/templates/actions.yaml.j2 b/descriptor-packages/tools/charm-generator/generator/actions/templates/actions.yaml.j2
deleted file mode 100644
index 994bcde..0000000
--- a/descriptor-packages/tools/charm-generator/generator/actions/templates/actions.yaml.j2
+++ /dev/null
@@ -1,44 +0,0 @@
-{#-
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
--#}
-{%- if license is defined -%}
-# Copyright {{ license.year }} {{ license.company }}
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: {{ license.email }}
-{% endif %}
-
-{%- for act in actions %}
-{{ act.action_name }}:
-  description: "Insert description for this playbook."
-  {#- TODO: Insert parameters -#}
-  {#- TODO: Insert required -#}
-{% endfor %}
-
diff --git a/descriptor-packages/tools/charm-generator/generator/ansible-charm/__init__.py b/descriptor-packages/tools/charm-generator/generator/ansible-charm/__init__.py
deleted file mode 100644
index e584ee5..0000000
--- a/descriptor-packages/tools/charm-generator/generator/ansible-charm/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
-##
diff --git a/descriptor-packages/tools/charm-generator/generator/ansible-charm/templates/ansible_charm.py.j2 b/descriptor-packages/tools/charm-generator/generator/ansible-charm/templates/ansible_charm.py.j2
deleted file mode 100644
index 016659f..0000000
--- a/descriptor-packages/tools/charm-generator/generator/ansible-charm/templates/ansible_charm.py.j2
+++ /dev/null
@@ -1,91 +0,0 @@
-{#-
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
--#}
-{%- if license is defined -%}
-# Copyright {{ license.year }} {{ license.company }}
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: {{ license.email }}
-{%- endif %}
-
-
-import sys
-import traceback
-
-from charmhelpers.core.hookenv import (
-    action_get,
-    action_fail,
-    action_set,
-    config,
-    status_set,
-)
-
-import charms.libansible
-
-from charms.reactive import (
-    remove_state as remove_flag,
-    set_state as set_flag,
-    when,
-)
-
-
-# Sets the status of the charm to show in OSM: configured
-@when('config.changed')
-def config_changed():
-    set_flag('{{ charm_name }}.configured')
-    status_set('active', 'ready!')
-    return
-
-
-# Edits ansible config files and executes ansible-playbook
-{% for pb in playbooks -%}
-@when('{{ charm_name }}.configured')
-@when('actions.{{ pb.action_name }}')
-def {{ pb.function_name }}():
-    try:
-        dict_vars = {}
-
-        # edit the following snippet to add your parameters
-        # Note: don't forget to edit actions.yaml to add the parameters
-        # param_variable = action_get('param-name')
-        # dict_vars['param-name'] = param_variable}
-
-        result = charms.libansible.execute_playbook('{{ pb.file }}', dict_vars)
-    except:
-        exc_type, exc_value, exc_traceback = sys.exc_info()
-        err = traceback.format_exception(exc_type, exc_value, exc_traceback)
-        action_fail('{{ pb.action_name }} failed: ' + str(err))
-    else:
-        action_set({'output': result})
-    finally:
-        remove_flag('actions.{{ pb.action_name }}')
-
-
-{% endfor -%}
\ No newline at end of file
diff --git a/descriptor-packages/tools/charm-generator/generator/ansible-charm/templates/ansible_lib.py.j2 b/descriptor-packages/tools/charm-generator/generator/ansible-charm/templates/ansible_lib.py.j2
deleted file mode 100644
index afbf162..0000000
--- a/descriptor-packages/tools/charm-generator/generator/ansible-charm/templates/ansible_lib.py.j2
+++ /dev/null
@@ -1,112 +0,0 @@
-{#-
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
--#}
-{%- if license is defined -%}
-# Copyright {{ license.year }} {{ license.company }}
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: {{ license.email }}
-{%- endif %}
-
-import fnmatch
-import os
-import yaml
-import subprocess
-
-from charmhelpers.core.hookenv import config
-
-
-def create_hosts(cfg, hosts):
-    inventory_path = '/etc/ansible/hosts'
-
-    with open(inventory_path, 'w') as f:
-        f.write('[{}]\n'.format(hosts))
-        h1 = '{0} ansible_connection=ssh ansible_ssh_user={1} ansible_ssh_pass={2} ' \
-             'ansible_ssh_private_key_file=~/.ssh/id_juju_sshproxy ' \
-             'ansible_python_interpreter=/usr/bin/python3\n'.format(cfg['ssh-hostname'], cfg['ssh-username'],
-                                                                    cfg['ssh-password'])
-        f.write(h1)
-
-
-def create_ansible_cfg():
-    ansible_config_path = '/etc/ansible/ansible.cfg'
-
-    with open(ansible_config_path, 'w') as f:
-        f.write('[defaults]\n')
-        f.write('host_key_checking = False\n')
-        # logs playbook execution attempts to the specified path
-        f.write('log_path = /var/log/ansible.log\n')
-
-        f.write('[ssh_connection]\n')
-        f.write('control_path=%(directory)s/%%h-%%r\n')
-        f.write('control_path_dir=~/.ansible/cp\n')
-
-
-# Function to find the playbook path
-def find(pattern, path):
-    result = ''
-    for root, dirs, files in os.walk(path):
-        for name in files:
-            if fnmatch.fnmatch(name, pattern):
-                result = os.path.join(root, name)
-    return result
-
-
-def execute_playbook(playbook_file, vars_dict=None):
-    playbook_path = find(playbook_file, '/var/lib/juju/agents/')
-
-    cfg = config()
-
-    with open(playbook_path, 'r') as f:
-        playbook_data = yaml.load(f)
-
-    hosts = 'all'
-    if 'hosts' in playbook_data[0].keys() and playbook_data[0]['hosts']:
-        hosts = playbook_data[0]['hosts']
-
-    create_ansible_cfg()
-    create_hosts(cfg, hosts)
-
-    call = 'ansible-playbook %s ' % playbook_path
-
-    if vars_dict and isinstance(vars_dict, dict) and len(vars_dict) > 0:
-        call += '--extra-vars '
-
-        string_var = ''
-        for v in vars_dict.items():
-            string_var += '%s=%s ' % v
-
-        string_var = string_var.strip()
-        call += '"%s"' % string_var
-
-    call = call.strip()
-    result = subprocess.check_output(call, shell=True)
-
-    return result
diff --git a/descriptor-packages/tools/charm-generator/generator/ansible-charm/templates/layer.yaml.j2 b/descriptor-packages/tools/charm-generator/generator/ansible-charm/templates/layer.yaml.j2
deleted file mode 100644
index 3b0fa83..0000000
--- a/descriptor-packages/tools/charm-generator/generator/ansible-charm/templates/layer.yaml.j2
+++ /dev/null
@@ -1,49 +0,0 @@
-{#-
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
--#}
-{%- if license is defined -%}
-# Copyright {{ license.year }} {{ license.company }}
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: {{ license.email }}
-{%- endif %}
-
-includes:
-{% for lr in layers -%}
-- "layer:{{ lr.name }}"
-{% endfor -%}
-options:
-{%- for lr in layers if lr.options is defined %}
-  {{ lr.name }}:
-    {%- for op in lr.options %}
-    {{ op.name }}: {{ op.value }}
-    {%- endfor -%}
-{% endfor %}
-
diff --git a/descriptor-packages/tools/charm-generator/generator/generator.py b/descriptor-packages/tools/charm-generator/generator/generator.py
deleted file mode 100644
index 0ef9d1d..0000000
--- a/descriptor-packages/tools/charm-generator/generator/generator.py
+++ /dev/null
@@ -1,169 +0,0 @@
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
-##
-
-__version__ = '1.0.0'
-
-import argparse
-import logging
-import sys
-
-from datetime import datetime
-
-from .generators.ansible_generator import AnsibleGenerator
-
-
-def configure_logger(args):
-    global logger
-    logger = logging.getLogger()
-
-    if args.verbose:
-        logger.setLevel(logging.DEBUG)
-    else:
-        logger.setLevel(logging.INFO)
-
-    handler = logging.StreamHandler(sys.stdout)
-
-    if args.verbose:
-        handler.setLevel(logging.DEBUG)
-    else:
-        handler.setLevel(logging.INFO)
-
-    formatter = logging.Formatter('[%(levelname)s] %(message)s')
-    handler.setFormatter(formatter)
-    logger.addHandler(handler)
-
-
-def verify_environment(args):
-    pass
-
-
-def input_processing():
-    parser = argparse.ArgumentParser(description='Charm generator for OSM VNFs')
-
-    # Setting logger from INFO to DEBUG
-    parser.add_argument('-v', '--verbose', required=False, action='store_true',
-                        help='increase output verbosity')
-
-    # Backend selection
-    backend_parser = parser.add_mutually_exclusive_group(required=True)
-
-    backend_parser.add_argument('--ansible', action='store_true',
-                                help='generate an Ansible charm')
-    backend_parser.add_argument('--http', action='store_true',
-                                help='generate a HTTP charm')
-    backend_parser.add_argument('--sol002', action='store_true',
-                                help='generate a SOL002 charm')
-    backend_parser.add_argument('--scripts', action='store_true',
-                                help='generate a Scripts charm')
-
-    # Metadata inputs
-    metadata_parser = parser.add_argument_group('metadata')
-
-    metadata_parser.add_argument('--summary', required=False, action='store',
-                                 help='summary to be included in the metadata.yaml')
-    metadata_parser.add_argument('--maintainer', required=False, action='store',
-                                 help='maintainer information to be included in the metadata.yaml')
-    metadata_parser.add_argument('--description', required=False, action='store',
-                                 help='description to be included in the metadata.yaml')
-
-    # License header inputs
-    license_header_group = parser.add_argument_group('license_header')
-
-    license_header_group.add_argument('--company', required=False, action='store',
-                                      help='company name to be included in the license headers')
-    license_header_group.add_argument('--email', required=False, action='store',
-                                      help='email to be included in the license headers')
-
-    return parser.parse_args()
-
-
-def process_args(args):
-    # Metadata information for metadata.yaml
-    metadata = {}
-
-    if args.summary:
-        metadata['summary'] = args.summary
-    if args.maintainer:
-        metadata['maintainer'] = args.maintainer
-    if args.description:
-        metadata['description'] = args.description
-
-    # Information for license headers
-    license = {
-        'year': datetime.now().year
-    }
-
-    if args.company:
-        license['company'] = args.company
-    if args.email:
-        license['email'] = args.email
-
-    # Options to configure the backends
-    options = {
-        'backend': None
-    }
-
-    if args.ansible:
-        options['backend'] = 'ansible'
-    elif args.http:
-        options['backend'] = 'http'
-    elif args.sol002:
-        options['backend'] = 'sol002'
-    elif args.scripts:
-        options['backend'] = 'scripts'
-
-    return metadata, license, options
-
-
-def main():
-    # getting the input from the user
-    args = input_processing()
-
-    # configure the logger
-    configure_logger(args)
-
-    logger.info('Starting generation process...')
-
-    # verify if the environment is correct and the args are valid
-    verify_environment(args)
-
-    # process data to input in generator
-    metadata, license, options = process_args(args)
-
-    logger.debug('Metadata: %s', metadata)
-    logger.debug('License: %s', license)
-    logger.debug('Options: %s', options)
-
-    if options['backend'] == 'ansible':
-        generator = AnsibleGenerator(metadata=metadata, license=license, options=options)
-    elif options['backend'] == 'http':
-        logger.error('HTTP backend not yet available. Available backends are: ansible')
-        sys.exit(-1)
-    elif options['backend'] == 'sol002':
-        logger.error('SOL002 backend not yet available. Available backends are: ansible')
-        sys.exit(-1)
-    elif options['backend'] == 'scripts':
-        logger.error('Scripts backend not yet available. Available backends are: ansible')
-        sys.exit(-1)
-    else:
-        logger.error('Undefined backend for generator. Available backends are: ansible')
-        sys.exit(-1)
-
-    generator.generate()
-
-    logger.info('Generation process complete.')
diff --git a/descriptor-packages/tools/charm-generator/generator/generators/__init__.py b/descriptor-packages/tools/charm-generator/generator/generators/__init__.py
deleted file mode 100644
index e584ee5..0000000
--- a/descriptor-packages/tools/charm-generator/generator/generators/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
-##
diff --git a/descriptor-packages/tools/charm-generator/generator/generators/actions_generator.py b/descriptor-packages/tools/charm-generator/generator/generators/actions_generator.py
deleted file mode 100644
index b3da7c3..0000000
--- a/descriptor-packages/tools/charm-generator/generator/generators/actions_generator.py
+++ /dev/null
@@ -1,130 +0,0 @@
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
-##
-
-import functools
-import logging
-import os
-import stat
-
-from jinja2 import Environment, PackageLoader
-
-
-class ActionsGenerator:
-    LOGGER = logging.getLogger()
-    ENV = Environment(loader=PackageLoader('generator.actions', 'templates'))
-
-    def __init__(self, metadata, actions, license=None, options=None):
-        """
-        Creates the object to generate the actions folder, actions files and actions.yaml.
-
-        Usage should be:
-
-        1) Create the object.
-        2) Run the generate method.
-
-        :param metadata: metadata information about the charm being generated.
-        :param actions: actions to be included in the charm.
-        :param license: information license to included in the charm being generated.
-        :param options: options to override the normal flow.
-        """
-        self.path = os.getcwd()
-        self.metadata = metadata
-        self.actions = actions
-        self.license = license
-        self.options = options
-
-    def generate(self):
-        """
-        Generates the actions folder, actions files and actions.yaml.
-        """
-        ActionsGenerator.LOGGER.info('Generating the actions...')
-
-        self._create_actions_folder()
-
-        for action in self.actions:
-            self._generate_action_file(action)
-
-        self._generate_actions_yaml_file()
-
-        ActionsGenerator.LOGGER.info('Generated the actions.')
-
-    def _create_actions_folder(self):
-        """
-        Creates the actions folder, where all the action files are placed.
-        These files are the entry point for the execution of the actions.
-        """
-        ActionsGenerator.LOGGER.debug('Creating the actions folder...')
-
-        actions_path = self.path + '/actions'
-
-        if not os.path.isdir(actions_path):
-            os.mkdir(actions_path)
-        else:
-            ActionsGenerator.LOGGER.warning('Actions folder already exists.')
-            return
-
-        ActionsGenerator.LOGGER.debug('Created actions folder.')
-
-    def _generate_action_file(self, action):
-        """
-        Generates the action file to act as entry point for a specific action.
-
-        Note: the action file is made executable during this function.
-
-        :param action: dictionary with information about the action
-        """
-        ActionsGenerator.LOGGER.debug('Creating action file: %s...', action['action_name'])
-
-        playbook_path = self.path + ('/actions/%s' % action['action_name'])
-        action_file_template = ActionsGenerator.ENV.get_template('action.j2')
-
-        with open(playbook_path, "w") as f:
-            f.write(action_file_template.render(license=self.license))
-            mode = os.fstat(f.fileno()).st_mode
-            mode |= stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
-            os.fchmod(f.fileno(), stat.S_IMODE(mode))
-
-        ActionsGenerator.LOGGER.debug('Created action file: %s.', action['action_name'])
-
-    def _generate_actions_yaml_file(self):
-        """
-        Generates the actions.yaml file from a template.
-        It takes all the playbook information and fills in the templates.
-
-        Note: renames the old actions.yaml file with a .bkp extension, so the history is preserved.
-        """
-        ActionsGenerator.LOGGER.debug('Creating actions.yaml...')
-
-        actions_yaml_path = self.path + '/actions.yaml'
-        actions_template = ActionsGenerator.ENV.get_template('actions.yaml.j2')
-
-        if os.path.isfile(actions_yaml_path):
-            ids = [int(f.split('.')[-1]) for f in os.listdir(self.path) if f.startswith('actions.yaml.bkp')]
-
-            id = 0
-            if ids:
-                id = functools.reduce(lambda x, y: x if (x > y) else y, ids)
-                id += 1
-
-            backup_actions_yaml_path = self.path + ('/actions.yaml.bkp.%02d' % id)
-            os.rename(actions_yaml_path, backup_actions_yaml_path)
-
-        with open(actions_yaml_path, 'w') as f:
-            f.write(actions_template.render(actions=self.actions, license=self.license))
-
-        ActionsGenerator.LOGGER.debug('Created actions.yaml.')
diff --git a/descriptor-packages/tools/charm-generator/generator/generators/ansible_generator.py b/descriptor-packages/tools/charm-generator/generator/generators/ansible_generator.py
deleted file mode 100644
index cefe422..0000000
--- a/descriptor-packages/tools/charm-generator/generator/generators/ansible_generator.py
+++ /dev/null
@@ -1,182 +0,0 @@
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
-##
-
-import functools
-import logging
-import os
-import sys
-
-from jinja2 import Environment, PackageLoader
-
-from generator.generators.actions_generator import ActionsGenerator
-from generator.generators.metadata_generator import MetadataGenerator
-
-
-class AnsibleGenerator:
-    LOGGER = logging.getLogger()
-    ENV = Environment(loader=PackageLoader('generator.ansible-charm', 'templates'))
-
-    def __init__(self, metadata, license=None, options=None):
-        """
-        Creates the object to generate the ansible charm from templates.
-
-        Usage should be:
-
-        1) Create the object.
-        2) Run the generate method.
-
-        :param metadata: metadata information about the charm being generated.
-        :param license: information license to included in the charm being generated.
-        :param options: options to override the normal flow.
-        """
-        self.path = os.getcwd()
-        self.metadata = metadata
-        self.license = license
-        self.options = options
-        self.playbooks = AnsibleGenerator._fetch_all_playbooks(self.path)
-
-        playbooks_name = [playbook['file'] for playbook in self.playbooks]
-        AnsibleGenerator.LOGGER.debug('Playbooks found: %s', playbooks_name)
-
-        self.metadata_generator = MetadataGenerator(metadata=self.metadata, license=self.license, options=self.options)
-        self.actions_generator = ActionsGenerator(metadata=self.metadata, actions=self.playbooks, license=self.license,
-                                                  options=self.options)
-
-    def generate(self):
-        """
-        Generates the Ansible Charm using templates.
-        """
-        AnsibleGenerator.LOGGER.info('Generating the Ansible Charm...')
-
-        # Generating metadata.yaml
-        self.metadata_generator.generate()
-        self.metadata = self.metadata_generator.get_metadata()
-
-        # Generating actions
-        self.actions_generator.generate()
-
-        self._generate_ansible_lib()
-        self._generate_layer_yaml_file()
-        self._generate_reactive_file()
-
-        AnsibleGenerator.LOGGER.info('Generated the Ansible Charm.')
-
-    @staticmethod
-    def _fetch_all_playbooks(path):
-        """
-        Walks over the playbooks directory, fetches the playbook's name.
-        It takes the file name and normalizes it to be used in the ansible charm.
-
-        :param path: path of the root of the charm.
-        :return: a list of dictionaries with the information about the playbooks.
-        """
-        playbooks_path = path + '/playbooks'
-
-        if os.path.isdir(playbooks_path) and len(os.listdir(playbooks_path)) != 0:
-            filenames = os.listdir(playbooks_path)
-
-            result = []
-            for file in filenames:
-                info = {
-                    'action_name': file.replace('_', '-').replace('.yaml', ''),
-                    'function_name': file.replace('-', '_').replace('.yaml', ''),
-                    'file': file
-                }
-                result.append(info)
-
-            return result
-        else:
-            AnsibleGenerator.LOGGER.error('Playbooks directory should exist and be populated.')
-            sys.exit(-1)
-
-    def _generate_ansible_lib(self):
-        """
-        Generates the ansible lib file from a template.
-        """
-        AnsibleGenerator.LOGGER.debug('Creating ansible.py lib...')
-
-        lib_folder_path = self.path + '/lib/charms'
-        ansible_lib_path = lib_folder_path + '/libansible.py'
-
-        if not os.path.isdir(lib_folder_path):
-            os.makedirs(lib_folder_path)
-
-        ansible_lib_template = AnsibleGenerator.ENV.get_template('ansible_lib.py.j2')
-
-        with open(ansible_lib_path, 'w') as f:
-            f.write(ansible_lib_template.render(license=self.license))
-
-        AnsibleGenerator.LOGGER.debug('Created anisble.py lib.')
-
-    def _generate_layer_yaml_file(self):
-        """
-        Generates the layer.yaml file from a template.
-
-        Note: disables the venv environment.
-        """
-        AnsibleGenerator.LOGGER.debug('Creating layer.yaml...')
-
-        layer_yaml_path = self.path + '/layer.yaml'
-
-        layers = [{
-            'name': 'basic',
-            'options': [{
-                'name': 'use_venv',
-                'value': 'false'
-            }]}, {
-            'name': 'ansible-base'
-        }, {
-            'name': 'vnfproxy'
-        }]
-
-        layer_template = AnsibleGenerator.ENV.get_template('layer.yaml.j2')
-
-        with open(layer_yaml_path, 'w') as f:
-            f.write(layer_template.render(layers=layers, license=self.license))
-
-        AnsibleGenerator.LOGGER.debug('Created layer.yaml.')
-
-    def _generate_reactive_file(self):
-        """
-        Generates the Ansible reactive file from a template.
-        It takes all the playbook information and fills in the templates.
-
-        Note: renames the old charm file with a .bkp extension, so the history is preserved.
-        """
-        AnsibleGenerator.LOGGER.debug('Creating ansible charm: %s...', self.metadata['file'])
-
-        reactive_folder_path = self.path + '/reactive'
-        charm_file_path = reactive_folder_path + ('/%s' % self.metadata['file'])
-        ansible_charm_template = AnsibleGenerator.ENV.get_template('ansible_charm.py.j2')
-
-        ids = [int(f.split('.')[-1]) for f in os.listdir(reactive_folder_path)
-               if f.startswith('%s.bkp' % self.metadata['file'])]
-
-        id = 0
-        if ids:
-            id = functools.reduce(lambda x, y: x if (x > y) else y, ids)
-            id += 1
-
-        backup_charm_file_path = reactive_folder_path + ('/%s.bkp.%02d' % (self.metadata['file'], id))
-        os.rename(charm_file_path, backup_charm_file_path)
-
-        with open(charm_file_path, 'w') as f:
-            f.write(ansible_charm_template.render(charm_name=self.metadata['name'], playbooks=self.playbooks,
-                                                  license=self.license))
-
-        AnsibleGenerator.LOGGER.debug('Created ansible charm: %s.', self.metadata['file'])
diff --git a/descriptor-packages/tools/charm-generator/generator/generators/metadata_generator.py b/descriptor-packages/tools/charm-generator/generator/generators/metadata_generator.py
deleted file mode 100644
index 6c9b000..0000000
--- a/descriptor-packages/tools/charm-generator/generator/generators/metadata_generator.py
+++ /dev/null
@@ -1,152 +0,0 @@
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
-##
-
-import functools
-import logging
-import os
-import sys
-
-import yaml
-
-from jinja2 import Environment, PackageLoader
-
-
-class MetadataGenerator:
-    LOGGER = logging.getLogger()
-    ENV = Environment(loader=PackageLoader('generator.metadata', 'templates'))
-
-    def __init__(self, metadata, license=None, options=None):
-        """
-        Creates the object to generate the metadata.yaml file from a template.
-
-        Usage should be:
-
-        1) Create the object.
-        2) Run the generate method.
-
-        :param metadata: metadata information about the charm being generated.
-        :param license: information license to included in the charm being generated.
-        :param options: options to override the normal flow.
-        """
-        self.path = os.getcwd()
-        self.metadata = metadata
-        self.license = license
-        self.options = options
-
-    def generate(self):
-        """
-        Generates the metadata.yaml using templates.
-        """
-        MetadataGenerator.LOGGER.info('Generating the metadata.yaml...')
-
-        standard_metadata = self._read_metadata_yaml()
-        self._update_metadata(standard_metadata)
-        self._rename_metadata_yaml_as_backup()
-        self._write_metadata_yaml()
-
-        MetadataGenerator.LOGGER.info('Generated the metadata.yaml.')
-
-    def get_metadata(self):
-        """
-        Gets the enhanced metadata.
-
-        :return: the enhanced metadata dictionary.
-        """
-        return self.metadata
-
-    def _read_metadata_yaml(self):
-        """
-        Reads the values from the old metadata.yaml and does a cleanup on undesired values.
-        """
-        MetadataGenerator.LOGGER.debug('Reading old metadata.yaml...')
-
-        metadata_yaml_path = self.path + '/metadata.yaml'
-
-        if not os.path.isfile(metadata_yaml_path):
-            MetadataGenerator.LOGGER.error('metadata.yaml must be present. Must be run in the root of the charm')
-            sys.exit(-1)
-
-        with open(metadata_yaml_path, 'r') as f:
-            metadata = yaml.load(f)
-
-        if 'tags' in metadata.keys():
-            del metadata['tags']
-        if 'provides' in metadata.keys():
-            del metadata['provides']
-        if 'requires' in metadata.keys():
-            del metadata['requires']
-        if 'peers' in metadata.keys():
-            del metadata['peers']
-
-        MetadataGenerator.LOGGER.debug('Read old metadata.yaml.')
-
-        return metadata
-
-    def _update_metadata(self, metadata):
-        """
-        Update internal metadata before writing the new metadata.yaml.
-
-        :param metadata: metadata values provided by the user.
-        """
-        MetadataGenerator.LOGGER.debug('Generating the Ansible Charm...')
-
-        if 'name' in metadata:
-            self.metadata['name'] = metadata['name']
-            self.metadata['file'] = '%s.py' % metadata['name'].replace('-', '_')
-
-        self.metadata['subordinate'] = False
-        self.metadata['tags'] = ['misc', 'osm', 'vnf']
-        self.metadata['series'] = ['xenial', 'trusty']
-
-        MetadataGenerator.LOGGER.debug('Generating the Ansible Charm...')
-
-    def _rename_metadata_yaml_as_backup(self):
-        """
-        Renames the metadata.yaml to metadata.yaml.bkp.*.
-        Preserves the history of the charm for the user.
-        """
-        MetadataGenerator.LOGGER.debug('Renaming the metadata.yaml to .bkp.*...')
-
-        metadata_yaml_path = self.path + '/metadata.yaml'
-
-        ids = [int(f.split('.')[-1]) for f in os.listdir(self.path)
-               if f.startswith('metadata.yaml.bkp')]
-
-        id = 0
-        if ids:
-            id = functools.reduce(lambda x, y: x if (x > y) else y, ids)
-            id += 1
-
-        backup_metadata_yaml_path = self.path + ('/metadata.yaml.bkp.%02d' % id)
-        os.rename(metadata_yaml_path, backup_metadata_yaml_path)
-
-        MetadataGenerator.LOGGER.debug('Renamed the metadata.yaml to .bkp.%02d.', id)
-
-    def _write_metadata_yaml(self):
-        """
-        Writes the enriched metadata to metadata.yaml.
-        """
-        MetadataGenerator.LOGGER.debug('Generating metadata.yaml...')
-
-        metadata_yaml_path = self.path + '/metadata.yaml'
-        metadata_yaml_template = MetadataGenerator.ENV.get_template('metadata.yaml.j2')
-
-        with open(metadata_yaml_path, 'w') as f:
-            f.write(metadata_yaml_template.render(metadata=self.metadata, license=self.license))
-
-        MetadataGenerator.LOGGER.debug('Generated metadata.yaml.')
diff --git a/descriptor-packages/tools/charm-generator/generator/metadata/__init__.py b/descriptor-packages/tools/charm-generator/generator/metadata/__init__.py
deleted file mode 100644
index e584ee5..0000000
--- a/descriptor-packages/tools/charm-generator/generator/metadata/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
-##
diff --git a/descriptor-packages/tools/charm-generator/generator/metadata/templates/metadata.yaml.j2 b/descriptor-packages/tools/charm-generator/generator/metadata/templates/metadata.yaml.j2
deleted file mode 100644
index e189244..0000000
--- a/descriptor-packages/tools/charm-generator/generator/metadata/templates/metadata.yaml.j2
+++ /dev/null
@@ -1,50 +0,0 @@
-{#-
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
--#}
-{%- if license is defined -%}
-# Copyright {{ license.year }} {{ license.company }}
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: {{ license.email }}
-{%- endif %}
-
-name: {{ metadata.name }}
-summary: {{ metadata.summary }}
-maintainer: {{ metadata.maintainer }}
-description: {{ metadata.description }}
-tags:
-{% for tag in metadata.tags -%}
-- {{ tag }}
-{% endfor -%}
-series:
-{% for serie in metadata.series -%}
-- {{ serie }}
-{% endfor -%}
-subordinate: {{ metadata.subordinate }}
diff --git a/descriptor-packages/tools/charm-generator/requirements.txt b/descriptor-packages/tools/charm-generator/requirements.txt
deleted file mode 100644
index f0aaeda..0000000
--- a/descriptor-packages/tools/charm-generator/requirements.txt
+++ /dev/null
@@ -1 +0,0 @@
-Jinja2>=2.10
diff --git a/descriptor-packages/tools/charm-generator/setup.py b/descriptor-packages/tools/charm-generator/setup.py
deleted file mode 100644
index 51df44c..0000000
--- a/descriptor-packages/tools/charm-generator/setup.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# Copyright 2019 Whitestack, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: esousa@whitestack.com or glavado@whitestack.com
-##
-
-import re
-import setuptools
-
-print(setuptools.find_packages())
-
-version = re.search(
-    r'^__version__\s*=\s*["\'](.*)["\']',
-    open('generator/generator.py').read(),
-    re.MULTILINE).group(1)
-
-with open('README.md', 'r') as f:
-    long_description = f.read()
-
-setuptools.setup(
-    name='osm-charm-generator',
-    packages=setuptools.find_packages(),
-    entry_points={
-        "console_scripts": ['osm-charm-generator = generator.generator:main']
-    },
-    version=version,
-    author='Eduardo Sousa',
-    author_email='esousa@whitestack.com',
-    description='OSM Charm Generator using Ansible',
-    long_description=long_description,
-    long_description_content_type='text/markdown',
-    url='https://osm.etsi.org',
-    install_requires=[
-        'Jinja2>=2.10'
-    ],
-    package_data={
-        'generator.actions': ['templates/*.j2'],
-        'generator.ansible-charm': ['templates/*.j2'],
-        'generator.metadata': ['templates/*.j2'],
-    },
-    include_package_data=True,
-    classifiers=[
-        'Programming Language :: Python :: 3 :: Only',
-        'License :: OSI Approved :: Apache Software License',
-        'Operating System :: POSIX :: Linux',
-        'Environment :: Console',
-        'Intended Audience :: Telecommunications Industry',
-        'Natural Language :: English',
-        'Topic :: Software Development :: Code Generators'
-    ]
-)
diff --git a/descriptor-packages/tools/gen_nsd_pkg.sh b/descriptor-packages/tools/gen_nsd_pkg.sh
deleted file mode 100755
index 4ac1ec4..0000000
--- a/descriptor-packages/tools/gen_nsd_pkg.sh
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/bin/bash
-#
-#   Copyright 2016 RIFT.IO Inc
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-# Author(s): Austin Cormier
-# Creation Date: 2016/05/23
-#
-
-# Generates a NSD descriptor package from a source directory
-# Usage:
-# gen_nsd_pkg.sh <pkg_src_dir> <pkg_dest_dir>
-
-set -o nounset
-
-if [ $# -ne 2 ]; then
-	echo "Error: Must provide 2 parameters" >@2
-	exit 1
-fi
-
-pkg_src_dir="$1"
-pkg_dest_dir="$2"
-
-if [ ! -e ${pkg_src_dir} ]; then
-    echo "Error: ${pkg_src_dir} does not exist"
-    exit 1
-fi
-
-if [ ! -e ${pkg_dest_dir} ]; then
-    echo "Error: ${pkg_src_dir} does not exist"
-    exit 1
-fi
-
-#echo "Generating package in directory: ${pkg_dest_dir}"
-
-# Create any missing directories/files so each package has
-# a complete hierachy
-nsd_dirs=( ns_config vnf_config icons scripts )
-nsd_files=( README )
-
-nsd_dir="${pkg_src_dir}"
-#echo $(pwd)
-
-mkdir -p "${pkg_dest_dir}"
-cp -rf ${nsd_dir}/* "${pkg_dest_dir}"
-for sub_dir in ${nsd_dirs[@]}; do
-    dir_path=${pkg_dest_dir}/${sub_dir}
-    mkdir -p ${dir_path}
-done
-
-for file in ${nsd_files[@]}; do
-    file_path=${pkg_dest_dir}/${file}
-    touch ${file_path}
-done
diff --git a/descriptor-packages/tools/gen_vnfd_pkg.sh b/descriptor-packages/tools/gen_vnfd_pkg.sh
deleted file mode 100755
index 185a6b4..0000000
--- a/descriptor-packages/tools/gen_vnfd_pkg.sh
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/bin/bash
-#
-#   Copyright 2016 RIFT.IO Inc
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-# Author(s): Austin Cormier
-# Creation Date: 2016/05/23
-#
-
-# Generates a NSD descriptor package from a source directory
-# Usage:
-# gen_vnfd_pkg.sh <pkg_src_dir> <pkg_dest_dir>
-
-set -o nounset
-
-if [ $# -ne 2 ]; then
-	echo "Error: Must provide 2 parameters" >@2
-	exit 1
-fi
-
-pkg_src_dir="$1"
-pkg_dest_dir="$2"
-
-if [ ! -e ${pkg_src_dir} ]; then
-    echo "Error: ${pkg_src_dir} does not exist"
-    exit 1
-fi
-
-if [ ! -e ${pkg_dest_dir} ]; then
-    echo "Error: ${pkg_src_dir} does not exist"
-    exit 1
-fi
-
-#echo "Generating package in directory: ${pkg_dest_dir}"
-
-# Create any missing directories/files so each package has
-# a complete hierachy
-vnfd_dirs=( charms icons scripts images )
-vnfd_files=( README )
-
-vnfd_dir="${pkg_src_dir}"
-#echo $(pwd)
-
-mkdir -p "${pkg_dest_dir}"
-cp -rf ${vnfd_dir}/* "${pkg_dest_dir}"
-for sub_dir in ${vnfd_dirs[@]}; do
-    dir_path=${pkg_dest_dir}/${sub_dir}
-    mkdir -p ${dir_path}
-done
-
-for file in ${vnfd_files[@]}; do
-    file_path=${pkg_dest_dir}/${file}
-    touch ${file_path}
-done
diff --git a/descriptor-packages/tools/generate_descriptor_pkg.sh b/descriptor-packages/tools/generate_descriptor_pkg.sh
deleted file mode 100755
index 1b9a9e0..0000000
--- a/descriptor-packages/tools/generate_descriptor_pkg.sh
+++ /dev/null
@@ -1,842 +0,0 @@
-#!/bin/bash
-
-############################################################################
-# Copyright 2016 RIFT.io Inc                                               #
-#                                                                          #
-# Licensed under the Apache License, Version 2.0 (the "License");          #
-# you may not use this file except in compliance with the License.         #
-# You may obtain a copy of the License at                                  #
-#                                                                          #
-#     http://www.apache.org/licenses/LICENSE-2.0                           #
-#                                                                          #
-# Unless required by applicable law or agreed to in writing, software      #
-# distributed under the License is distributed on an "AS IS" BASIS,        #
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
-# See the License for the specific language governing permissions and      #
-# limitations under the License.                                           #
-############################################################################
-
-#
-# This shell script is used to create a descriptor package
-# The main functions of this script include:
-# - Generate checksums.txt file
-# - Generate a tar.gz file
-# This script can be used to create the required folders for
-# a descriptor package and a template descriptor
-
-# Usage: generate_descriptor_pkg.sh <base-directory> <package-directory>
-
-# Descriptor names should be
-#   - (nsd|vnfd).(yaml|yml|json|xml)
-#   - *_(nsd|vnfd).(yaml|yml|json|xml)
-#   - *_(nsd|vnfd)_*.(yaml|yml|json|xml)
-#   - (nsd|vnfd)/*.(yaml|yml|json|xml)
-#
-
-SCRIPTNAME=`basename $0`
-
-# From https://osm.etsi.org/wikipub/index.php/Release_0_Data_Model_Details
-# Supported folders for VNFD
-# cloud_init - Rel 4.3, not yet part of OSM
-VNFD_FOLDERS=(images scripts icons charms cloud_init)
-
-# Supported folders for NSD
-# OSM document specifies (ns|vnf)-config folder, while Rel 4.3
-# is using (ns|vnf)_config.
-NSD_FOLDERS=(scripts charms icons ns_config vnf_config)
-
-# Other files allowed in the descriptor base directory
-ALLOWED_FILES=(README)
-ALLOWED_FILES_WILDCARDS=(README)
-
-DESC_TYPES=(vnfd nsd)
-DESC_EXTN=(yml yaml json xml)
-CHKSUM='checksums.txt'
-
-VERBOSE=false
-DRY_RUN=false
-CREATE=false
-RM="--remove-files"
-DEBUG=false
-
-ARCHIVE=false
-CREATE_NSD=false
-VENDOR='OSM'
-INTF_TYPE='PARAVIRT'
-VCPU=2
-MEMORY=4096
-STORAGE=10
-INTERFACES=1
-
-function usage() {
-    cat <<EOF
-Usage:
-     $SCRIPTNAME [-t <type>] [-N] [-c] [base-directory] <package-name>
-
-        -h|--help : show this message
-
-        -t|--package-type <nsd|vnfd> : Descriptor package type
-                                       is NSD or VNFD. Script will try to
-                                       determine the type if not provided.
-                                       Default is vnfd for create-folders.
-
-        -d|--destination-dir <destination directory>: Directory to create the
-                                                      archived file.
-                                                      Default is base-directory
-
-        -N|--no-remove-files : Do not remove the package files after creating
-                               archive
-
-        Options specifc for create descriptor:
-
-            -c|--create-folder : Create folder with the structure for the
-                                 package type using the base-dir and package-dir
-                                 and a descriptor template
-
-            -a|--archive: Create package for the descriptor
-
-            --nsd : Generate NSD descriptor package also.
-
-            --vendor : Vendor name for descriptor. Default OSM
-
-            --interface-type : Interface type [PARAVIRT|SR-IOV|PCI-PASSTHROUGH|E1000]
-                               Default PARAVIRT
-
-          VM Flavour options:
-
-            --vcpu : Virtual CPU count. Default 2
-
-            --memory : Memory for VM in MB. Default 4096MB
-
-            --storage : Storage size for VM in GB. Default 10GB
-
-          VDU Parameters:
-
-            --image : Location URI of the image
-
-            --cloud-init-file : Cloud init file
-
-            --cloud-init : Cloud init script. Will be ignored if
-                           cloud-init-file is specified
-
-            --interfaces : Number of external interfaces in additon to OM-MGMT. Default 1.
-
-        End of create descriptor specific options
-
-        -v| --verbose : Generate progress details
-
-        -n| --dry-run : Validate the package dir
-
-        base-dir : Directory where the archive file or folders are created,
-                   if destination directory is not specified.
-                   Default is current directory
-
-        package-name : The descriptor name (full path if base-dir not specified)
-EOF
-}
-
-CP_TYPE='VPORT'
-function get_cp_type() {
-    case ${INTF_TYPE} in
-        PARAVIRT ) CP_TYPE='VPORT';;
-        SR-IOV ) CP_TYPE='VPORT';;
-        PCI-PASSTHROUGH ) CP_TYPE='VPORT';;
-        OM-MGMT ) CP_TYPE='VPORT';;
-        E1000 ) CP_TYPE='VPORT';;
-        * ) echo "ERROR: Unknown interface type ${INTF_TYPE}"; exit 1;;
-    esac
-}
-
-# Get pci number starting from 0x0a
-get_pci() {
-   printf '%02x' $((10 + $1)) | tr '[:upper:]' '[:lower:]'
-}
-
-function write_readme() {
-    dir=$1
-    file=${dir}/README
-    date=$(date)
-
-    cat >$file <<EOF
-Descriptor created by OSM descriptor package generated
-Created on $date
-EOF
-
-}
-
-function write_vnfd_tmpl() {
-    name=$(basename $1)
-    desc_file="${name}.yaml"
-
-    cat >$desc_file <<EOF
-vnfd:vnfd-catalog:
-    vnfd:
-    -   id: ${name}
-        name: ${name}
-        short-name: ${name}
-        description: Generated by OSM package generator
-        vendor: ${VENDOR}
-        version: '1.0'
-
-        # Place the logo as png in icons directory and provide the name here
-        # logo: <update, optional>
-
-        # Management interface
-        mgmt-interface:
-            cp: vnf-cp0
-
-        # Atleast one VDU need to be specified
-        vdu:
-        # Additional VDUs can be created by copying the
-        # VDU descriptor below
-        -   id: ${name}-VM
-            name: ${name}-VM
-            description: ${name}-VM
-            count: 1
-
-            # Flavour of the VM to be instantiated for the VDU
-            vm-flavor:
-                vcpu-count: ${VCPU}
-                memory-mb: ${MEMORY}
-                storage-gb: ${STORAGE}
-
-            # Image including the full path
-            image: '${IMAGE}'
-
-EOF
-
-    # Add the cloud init file or script
-    if [[ -n ${CLOUD_INIT_FILE} ]]; then
-        cif=$(basename ${CLOUD_INIT_FILE})
-        cat >>$desc_file <<EOF
-            # Cloud init file
-            cloud-init-file: '${cif}'
-EOF
-    elif [[ -n ${CLOUD_INIT} ]]; then
-        cat >>$desc_file <<EOF
-            # Cloud init to use
-            cloud-init: '${CLOUD_INIT}'
-EOF
-    fi
-
-    # Add external interfaces
-    cat >>$desc_file <<EOF
-            interface:
-            # Specify the external interfaces
-            # There can be multiple interfaces defined
-EOF
-
-    # Add mgmt interface
-    cat >>$desc_file <<EOF
-            -   name: eth0
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: vnf-cp0
-EOF
-
-    # Add external interfaces
-    for i in `seq 1 ${INTERFACES}`; do
-        eth=$(($i))
-        cat >>$desc_file <<EOF
-            -   name: eth${eth}
-                type: EXTERNAL
-                virtual-interface:
-                    type: ${INTF_TYPE}
-                external-connection-point-ref: vnf-cp${eth}
-EOF
-    done
-
-    # Add connection points
-    cat >>$desc_file <<EOF
-
-        connection-point:
-EOF
-
-    for i in `seq 0 ${INTERFACES}`; do
-        eth=$(($i))
-        cat >>$desc_file <<EOF
-        -   name: vnf-cp${eth}
-EOF
-    done
-
-    cat >>$desc_file <<EOF
-
-        # Uncomment and update below to enable juju
-        # charm configuration for the VNF
-        # vnf-configuration:
-        #     juju:
-        #         charm: <charm name>
-        #     service-primitive:
-        #     -   name: config
-        #         parameter:
-        #         -   name: <config parameter>
-        #             data-type: [STRING|INTEGER]
-        #             mandatory: [true|false]
-        #             default-value: <value>
-        #     -   name: <action name>
-        #         parameter:
-        #         -   name: <action parameter>
-        #             data-type: [STRING|INTEGER]
-        #             mandatory: [true|false]
-        #             default-value: <value>
-        #     initial-config-primitive:
-        #     -   name: config
-        #         parameter:
-        #         -   name: <config name>
-        #             value: <value>
-        #     -   name: <action name>
-        #         parameter:
-        #         -   name: <action parameter>
-        #             value: <value>
-EOF
-
-    if [ $VERBOSE == true ]; then
-        echo "INFO: Created $desc_file"
-    fi
-}
-
-function write_nsd_tmpl() {
-    name=$(basename $1)
-    vnfd=$2
-    desc_file="${name}.yaml"
-
-    cat >$desc_file <<EOF
-nsd:nsd-catalog:
-    nsd:
-    -   id: ${name}
-        name: ${name}
-        short-name: ${name}
-        description: Generated by OSM package generator
-        vendor: ${VENDOR}
-        version: '1.0'
-
-        # Place the logo as png in icons directory and provide the name here
-        # logo: <update, optional>
-
-        # Specify the VNFDs that are part of this NSD
-        constituent-vnfd:
-            # The member-vnf-index needs to be unique, starting from 1
-            # vnfd-id-ref is the id of the VNFD
-            # Multiple constituent VNFDs can be specified
-        -   member-vnf-index: 1
-            vnfd-id-ref: ${vnfd}
-
-EOF
-
-    cat >>$desc_file <<EOF
-        vld:
-        # Networks for the VNFs
-EOF
-
-    # Add management VLD
-    cat >>$desc_file <<EOF
-        -   id: ${name}_vld0
-            name: management
-            short-name: management
-            type: ELAN
-            mgmt-network: 'true'
-            # vim-network-name: <update>
-            # provider-network:
-            #     overlay-type: VLAN
-            #     segmentation_id: <update>
-            vnfd-connection-point-ref:
-            # Specify the constituent VNFs
-            # member-vnf-index-ref - entry from constituent vnf
-            # vnfd-id-ref - VNFD id
-            # vnfd-connection-point-ref - connection point name in the VNFD
-            -   member-vnf-index-ref: 1
-                vnfd-id-ref: ${vnfd}
-                # NOTE: Validate the entry below
-                vnfd-connection-point-ref: vnf-cp0
-EOF
-
-    # Add rest of VLDs
-    for i in `seq 1 ${INTERFACES}`; do
-        eth=$(($i))
-        cat >>$desc_file <<EOF
-        -   id: ${name}_vld${i}
-            name: ${name}_vld${i}
-            short-name: ${name}_vld${i}
-            type: ELAN
-            # vim-network-name: <update>
-            # provider-network:
-            #     overlay-type: VLAN
-            #     segmentation_id: <update>
-            vnfd-connection-point-ref:
-            # Specify the constituent VNFs
-            # member-vnf-index-ref - entry from constituent vnf
-            # vnfd-id-ref - VNFD id
-            # vnfd-connection-point-ref - connection point name in the VNFD
-            -   member-vnf-index-ref: 1
-                vnfd-id-ref: ${vnfd}
-                # NOTE: Validate the entry below
-                vnfd-connection-point-ref: vnf-cp${eth}
-EOF
-    done
-
-    if [ $VERBOSE == true ]; then
-        echo "INFO: Created $desc_file"
-    fi
-}
-
-function write_nsd_config_tmpl() {
-    name=$(basename $1)
-    cfg_file="ns_config/$name.yaml"
-
-    cat >$cfg_file <<EOF
-
-EOF
-
-    if [ $VERBOSE == true ]; then
-        echo "INFO: Created $cfg_file"
-    fi
-}
-
-cur_dir=`pwd`
-
-# Check if the array contains a specific value
-# Taken from
-# http://stackoverflow.com/questions/3685970/check-if-an-array-contains-a-value
-function contains() {
-    local n=$#
-    local value=${!n}
-    for ((i=1;i < $#;i++)); do
-        if [ "${!i}" == "${value}" ]; then
-            echo "y"
-            return 0
-        fi
-    done
-    echo "n"
-    return 1
-}
-
-function check_type() {
-    type=$1
-    if [ $(contains "${DESC_TYPES[@]}" $type) == "y" ]; then
-        TYPE=$type
-    else
-        echo "ERROR: Unknown descriptor type $type!" >&2
-        exit 1
-    fi
-}
-
-function get_expr(){
-    # First argument is to specify if this is a negative match or not
-    # Rest are filename expressions without extension
-
-    local regex=" "
-    local n=$#
-    local neg="${1}"
-    local first="true"
-    for ((i=2;i <= $#;i++)); do
-        for extn in "${DESC_EXTN[@]}"; do
-            if [ $first == true ]; then
-                if [ $neg == true ]; then
-                    subexpr='! -name'
-                else
-                    subexpr='-name'
-                fi
-                first=false
-            else
-                if [ $neg == true ]; then
-                    subexpr=' -a ! -name'
-                else
-                    subexpr=' -o -name'
-                fi
-            fi
-
-            regex="$regex $subexpr ${!i}.$extn"
-        done
-    done
-
-    echo "$regex"
-}
-
-function generate_package(){
-    type=$1
-    name="${2}_${type}"
-    vnfd="${2}_vnfd" # Required for NSD
-    dest_dir=$3
-
-    dir="${dest_dir}/${name}"
-
-    # Create the folders for the descriptor
-    if [ $VERBOSE == true ]; then
-        echo "INFO: Creating folders for $PKG in $dest_dir"
-    fi
-
-    # Remove any existing directory
-    if [ -d $dir ]; then
-        rm -rf $dir >/dev/null 2>&1
-    fi
-
-    mkdir -p $dir && cd $dir
-    if [ $? -ne 0 ]; then
-        rc=$?
-        echo "ERROR: creating directory $dir ($rc)" >&2
-        exit $rc
-    fi
-
-    if [ $type == 'nsd' ]; then
-        folders=("${NSD_FOLDERS[@]}")
-    else
-        folders=("${VNFD_FOLDERS[@]}")
-    fi
-
-    for d in ${folders[@]}; do
-        mkdir -p $dir/$d
-        if [ $? -ne 0 ]; then
-            rc=$?
-            echo "ERROR: creating directory $dir/$d ($rc)" >&2
-            exit $rc
-        fi
-        if [ $VERBOSE == true ]; then
-            echo "Created folder $d in $dir"
-        fi
-    done
-
-    if [ $VERBOSE == true ]; then
-        echo "INFO: Created folders for in $dir"
-    fi
-
-    # Write a descriptor template file
-    if [ $type == 'vnfd' ]; then
-
-        # Copy cloud init file to correct folder
-        if [[ -n ${CLOUD_INIT_FILE} ]]; then
-            if [[ -e ${CLOUD_INIT_FILE} ]]; then
-                cp ${CLOUD_INIT_FILE} $dir/cloud_init
-            else
-                echo "ERROR: Unable to find cloud-init-file ${CLOUD_INIT_FILE}"
-                exit 1
-            fi
-        fi
-
-        write_vnfd_tmpl $dir
-    else
-        write_nsd_tmpl $dir $vnfd
-    fi
-
-    write_readme $dir
-
-    if [ $ARCHIVE == true ]; then
-        # Create archive of the package
-        cd $dest_dir
-        if [ $VERBOSE == true ]; then
-            tar zcvf ${name}.tar.gz ${name}
-            echo "Created package ${name}.tar.gz in $dest_dir"
-        else
-            tar zcvf ${name}.tar.gz ${name} >/dev/null 2>&1
-        fi
-
-        if [ $? -ne 0 ]; then
-            echo "ERROR: Creating archive for ${name} in $dest_dir" >&2
-            exit 1
-        fi
-
-        echo "$dest_dir/${name}.tar.gz" >&2
-
-        if [ $RM == true ]; then
-            rm -rf ${name}
-        fi
-    fi
-}
-
-OPTS=`getopt -o vhnt:d:caN --long verbose,dry-run,help,package-type:,destination-dir,create-folder,no-remove-files,archive,nsd,vendor:,interface-type:,vcpu:,memory:,storage:,image:,cloud-init-file:,cloud-init:,interfaces:,debug -n $SCRIPTNAME -- "$@"`
-
-if [ $? != 0 ] ; then
-    echo "ERROR: Failed parsing options ($?)." >&2
-    usage
-    exit 1
-fi
-
-#echo "$OPTS"
-eval set -- "$OPTS >/dev/null 2>&1"
-
-while true; do
-    case "$1" in
-        -v | --verbose ) VERBOSE=true; shift ;;
-        -h | --help )    usage; exit 0; shift ;;
-        -n | --dry-run ) DRY_RUN=true; shift ;;
-        -t | --package-type ) check_type "$2"; shift; shift ;;
-        -d | --destination-dir ) DEST_DIR=$2; shift; shift;;
-        -c | --create-folder ) CREATE=true; shift;;
-        -N | --no-remove-files ) RM=''; shift;;
-        -a | --archive ) ARCHIVE=true; shift;;
-        --nsd ) CREATE_NSD=true; shift;;
-        --vendor ) VENDOR=$2; shift; shift;;
-        --interface-type ) INTF_TYPE=$2; shift; shift;;
-        --vcpu ) VCPU=$2; shift; shift;;
-        --memory ) MEMORY=$2; shift; shift;;
-        --storage ) STORAGE=$2; shift; shift;;
-        --image ) IMAGE=$2; shift; shift;;
-        --cloud-init ) CLOUD_INIT=$2; shift; shift;;
-        --cloud-init-file ) CLOUD_INIT_FILE=$2; shift; shift;;
-        --interfaces ) INTERFACES=$2; shift; shift;;
-        --debug ) DEBUG=true; shift;;
-        -- ) shift; break ;;
-        * ) break ;;
-    esac
-done
-
-if [ $DEBUG == true ]; then
-    echo "INFO: Debugging ON"
-    set -x
-fi
-
-if [ $VERBOSE == true ]; then
-    echo "INFO: Descriptor type: $TYPE"
-fi
-
-# Dry run is to validate existing descriptor folders
-if [ $DRY_RUN == true ] && [ $CREATE == true ]; then
-    echo "ERROR: Option dry-run with create-folders not supported!" >&2
-    exit 1
-fi
-
-if [ $# -gt 1 ]; then
-    BASE_DIR=$1
-    PKG=$(basename $2)
-else
-    BASE_DIR=$(dirname $1)
-    PKG=$(basename $1)
-fi
-
-if [ $VERBOSE == true ]; then
-    echo "INFO: Using base dir: $BASE_DIR"
-fi
-
-if [ $VERBOSE == true ]; then
-    echo "INFO: Using package: $PKG"
-fi
-
-if [[ -z "$PKG" ]]; then
-    echo "ERROR: Need to specify the package name" >&2
-    usage >&2
-    exit 1
-fi
-
-if [[ ! -d $BASE_DIR ]]; then
-    if [ $CREATE == true ]; then
-        mkdir -p $BASE_DIR
-        if [ $? -ne 0 ]; then
-            echo "ERROR: Unable to create base directory $BASE_DIR" >&2
-            exit 1
-        fi
-    fi
-fi
-cd $BASE_DIR
-if [ $? -ne 0 ]; then
-    echo "ERROR: Unable to change to base directory $BASE_DIR!" >&2
-    exit 1
-fi
-
-# Get full base dir path
-BASE_DIR=`pwd`
-cd $cur_dir
-
-if [[ -z $DEST_DIR ]]; then
-    DEST_DIR=$BASE_DIR # Default to base directory
-fi
-
-mkdir -p $DEST_DIR
-
-cd $DEST_DIR
-if [ $? -ne 0 ]; then
-    echo "ERROR: Not able to access destination directory $DEST_DIR!" >&2
-    exit 1
-fi
-
-# Get the full destination dir path
-DEST_DIR=`pwd`
-cd $cur_dir
-
-dir=${BASE_DIR}/${PKG}
-
-function add_chksum() {
-    if [ $VERBOSE == true ]; then
-        echo "INFO: Add file $1 to $CHKSUM"
-    fi
-
-    md5sum $1 >> $CHKSUM
-}
-
-if [ $CREATE == false ]; then
-    if [ ! -d $dir ]; then
-        echo "INFO: Package folder $dir not found!" >&2
-        exit 1
-    fi
-
-    cd $dir
-    if [ $? -ne 0 ]; then
-        rc=$?
-        echo "ERROR: changing directory to $dir ($rc)" >&2
-        exit $rc
-    fi
-
-    # Remove checksum file, if present
-    rm -f $CHKSUM
-
-    # Check if the descriptor file is present
-    if [[ -z $TYPE ]]; then
-        # Desc type not specified, look for the desc file and guess the type
-        # Required for backward compatibility
-        for ty in ${DESC_TYPES[@]}; do
-            re=$(get_expr false "$ty" "*_$ty" "*_${ty}_*")
-            desc=$(find * -maxdepth 0 -type f $re 2>/dev/null)
-
-            if [[ -z $desc ]] || [ ${#desc[@]} -eq 0 ]; then
-                # Check the vnfd|nsd folder
-                if [ ! -d $ty ]; then
-                    continue
-                fi
-                re=$(get_expr false "*")
-                desc=$(find $ty/* -maxdepth 0 -type f $re 2>/dev/null)
-                if [[ -z $desc ]] || [ ${#desc[@]} -eq 0 ]; then
-                    continue
-                elif [ ${#desc[@]} -gt 1 ]; then
-                    echo "ERROR: Found multiple descriptor files: ${desc[@]}" >&2
-                    exit 1
-                fi
-                # Descriptor sub directory
-                desc_sub_dir=$ty
-            fi
-
-            TYPE=$ty
-            if [ $TYPE == 'nsd' ]; then
-                folders=("${NSD_FOLDERS[@]}")
-            else
-                folders=("${VNFD_FOLDERS[@]}")
-            fi
-
-            if [ $VERBOSE == true ]; then
-                echo "INFO: Determined descriptor is of type $TYPE"
-            fi
-            break
-        done
-
-        if [[ -z $TYPE ]]; then
-            echo "ERROR: Unable to determine the descriptor type!" >&2
-            exit 1
-        fi
-    else
-        if [ $TYPE == 'nsd' ]; then
-            folders=("${NSD_FOLDERS[@]}")
-        else
-            folders=("${VNFD_FOLDERS[@]}")
-        fi
-
-        # Check for descriptor of type provided on command line
-        re=$(get_expr false "$TYPE" "*_${TYPE}" "*_${TYPE}_*")
-        desc=$(find * -maxdepth 0 -type f $re 2>/dev/null)
-
-        if [[ -z $desc ]] || [ ${#desc[@]} -eq 0 ]; then
-            # Check if it is under vnfd/nsd subdirectory
-            # Backward compatibility support
-            re=$(get_expr false "*")
-            desc=$(find $TYPE/* -maxdepth 0 -type f $re 2>/dev/null)
-            if [[ -z $desc ]] || [ ${#desc[@]} -eq 0 ]; then
-                echo "ERROR: Did not find descriptor file of type $TYPE" \
-                     " in $dir" >&2
-                exit 1
-            fi
-            desc_sub_dir=$ty
-        fi
-    fi
-
-    if [ ${#desc[@]} -gt 1 ]; then
-        echo "ERROR: Found multiple files of type $TYPE in $dir: $desc" >&2
-        exit 1
-    fi
-
-    descriptor=${desc[0]}
-
-    # Check if there are files not supported
-    files=$(find * -maxdepth 0 -type f ! -name $descriptor 2>/dev/null)
-
-    for f in ${files[@]}; do
-        if [ $(contains "${ALLOWED_FILES[@]}" $f)  == "n" ]; then
-            for j in ${ALLOWED_FILES_WILDCARDS[@]}; do
-                if [[ $f != *"$j"* ]]; then
-                    echo "WARN: Unsupported file $f found"
-                fi
-            done
-        fi
-    done
-
-    if [ $VERBOSE == true ]; then
-        echo "INFO: Found descriptor package: ${desc_sub_dir} ${descriptor}"
-    fi
-
-    if [ $DRY_RUN == false ]; then
-        add_chksum ${descriptor}
-    fi
-
-    # Check the folders are supported ones
-    dirs=$( find * -maxdepth 0 -type d )
-
-    for d in ${dirs[@]}; do
-        if [ $(contains "${folders[@]}" $d) == "y" ]; then
-            if [ $DRY_RUN == false ]; then
-                find $d/* -type f  2>/dev/null|
-                    while read file; do
-                        add_chksum $file
-                    done
-            fi
-        elif [[ -z $desc_sub_dir ]] || [ $d != $desc_sub_dir ]; then
-            echo "WARN: $d is not part of standard folders " \
-                 "for descriptor type $TYPE in $PKG"
-        fi
-    done
-
-    if [ $VERBOSE == true ]; then
-        echo "INFO: Creating archive for $PKG"
-    fi
-
-    cd $BASE_DIR
-    # Mrityunjay Yadav: Validate descriptor
-    GEN_BASEDIR=$(dirname "$0")
-    python3 $GEN_BASEDIR/validate_descriptor.py $BASE_DIR/$PKG/$descriptor
-    if [ $? -ne 0 ]; then
-        rc=$?
-        echo "ERROR: validating descriptor for $PKG ($rc)" >&2
-        exit $rc
-    fi
-    if [ $DRY_RUN == false ]; then
-        if [ $VERBOSE == true ]; then
-            tar zcvf "$DEST_DIR/$PKG.tar.gz" "${PKG}" ${RM}
-        else
-            #tar zcvf ${name}.tar.gz ${name} >/dev/null 2>&1
-            tar zcvf "$DEST_DIR/$PKG.tar.gz" "${PKG}" ${RM} > /dev/null 2>&1
-        fi
-        if [ $? -ne 0 ]; then
-            rc=$?
-            echo "ERROR: creating archive for $PKG ($rc)" >&2
-            exit $rc
-        fi
-    fi
-else
-    # Create, default to VNFD if no type is defined
-    if [[ -z $TYPE ]]; then
-        TYPE=vnfd
-        if [ $VERBOSE == true ]; then
-            echo "WARNING: Defaulting to descriptor type $TYPE"
-        fi
-    fi
-
-    if [ $TYPE == 'vnfd' ]; then
-        if [[ -z $IMAGE ]]; then
-            echo "ERROR: Image file need to be specified for VNF"
-            exit 1
-        fi
-        generate_package vnfd $PKG $DEST_DIR
-    fi
-
-    if [ $TYPE == 'nsd' -o  $CREATE_NSD == true ]; then
-        generate_package nsd $PKG $DEST_DIR
-    fi
-
-fi
-
-cd $cur_dir
diff --git a/descriptor-packages/tools/launch_tests.sh b/descriptor-packages/tools/launch_tests.sh
deleted file mode 100755
index 066e35c..0000000
--- a/descriptor-packages/tools/launch_tests.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env bash
-
-function test_format
-{
- folder=$(dir -1)
-
- for file in $folder;
- do
-  if [ -n $file ]; then
-       if [ -d "$file" ]; then
-
-            cd $file
-            test_format
-            cd ..
-       else
-            extension=${file##*.}
-            name=${file%.*}
-            folder_file=`pwd`
-            if [ $extension == "yaml" ]; then
-                $tools_dir/upgrade_descriptor_version.py --test -i $folder_file"/"$name.$extension -o $folder_file"/"$name."output" 2> $folder_file"/"$name."error"
-                [ -s $folder_file"/"$name."output" ] || rm $folder_file"/"$name."output"
-                [ -s $folder_file"/"$name."error" ] || rm $folder_file"/"$name."error"
-            fi;
-       fi;
-  fi;
- done;
-}
-
-
-top_dir=`readlink -f .|sed -e 's/\/descriptor-packages\/.*//'`
-tools_dir=${top_dir}/tools
-
-if [ -f $tools_dir/upgrade_descriptor_version.py ]; then
-    cd ${top_dir}/
-    test_format ./
-else
-    print "Error: 'make' command should be called inside '/devops/descriptor-packages/' folder to work"
-    exit -1
-fi;
diff --git a/descriptor-packages/tools/upgrade_descriptor_version.py b/descriptor-packages/tools/upgrade_descriptor_version.py
deleted file mode 100755
index 7db1ec6..0000000
--- a/descriptor-packages/tools/upgrade_descriptor_version.py
+++ /dev/null
@@ -1,347 +0,0 @@
-#!/usr/bin/env python2
-# -*- coding: utf-8 -*-
-
-##
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-##
-from __future__ import print_function
-import json
-import yaml
-# import logging
-import sys
-import getopt
-
-"""
-Converts OSM VNFD, NSD descriptor from release TWO to release THREE format
-"""
-__author__ = "Alfonso Tierno, Guillermo Calvino"
-__date__ = "2017-10-14"
-__version__ = "0.0.2"
-version_date = "Nov 2017"
-
-
-class ArgumentParserError(Exception):
-    pass
-
-
-def usage():
-    print("Usage: {} [options] FILE".format(sys.argv[0]))
-    print(" EXPERIMENTAL: Upgrade vnfd, nsd descriptor from old versions to release THREE version")
-    print(" FILE: a yaml or json vnfd-catalog or nsd-catalog descriptor")
-    print(" OPTIONS:")
-    print("      -v|--version: prints current version")
-    print("      -h|--help: shows this help")
-    print("      -i|--input FILE: (same as param FILE) descriptor file to be upgraded")
-    print("      -o|--output FILE: where to write generated descriptor. By default stdout")
-    print("      --test: Content is tested to check wrong format or unknown keys")
-    return
-
-
-def remove_prefix(desc, prefix):
-    """
-    Recursively removes prefix from keys
-    :param desc: dictionary or list to change
-    :param prefix: prefix to remove. Must
-    :return: None, param desc is changed
-    """
-    prefix_len = len(prefix)
-    if isinstance(desc, dict):
-        prefixed_list=[]
-        for k,v in desc.items():
-            if isinstance(v, (list, tuple, dict)):
-                remove_prefix(v, prefix)
-            if isinstance(k, str) and k.startswith(prefix) and k != prefix:
-                prefixed_list.append(k)
-        for k in prefixed_list:
-            desc[k[prefix_len:]] = desc.pop(k)
-    elif isinstance(desc, (list, tuple)):
-        for i in desc:
-            if isinstance(desc, (list, tuple, dict)):
-                remove_prefix(i, prefix)
-
-
-if __name__=="__main__":
-    error_position = []
-    format_output_yaml = True
-    input_file_name = None
-    output_file_name = None
-    test_file = None
-    file_name = None
-    try:
-        # load parameters and configuration
-        opts, args = getopt.getopt(sys.argv[1:], "hvi:o:", ["input=", "help", "version", "output=", "test",])
-
-        for o, a in opts:
-            if o in ("-v", "--version"):
-                print ("upgrade descriptor version " + __version__ + ' ' + version_date)
-                sys.exit()
-            elif o in ("-h", "--help"):
-                usage()
-                sys.exit()
-            elif o in ("-i", "--input"):
-                input_file_name = a
-            elif o in ("-o", "--output"):
-                output_file_name = a
-            elif o == "--test":
-                test_file = True
-            else:
-                assert False, "Unhandled option"
-        if not input_file_name:
-            if not args:
-                raise ArgumentParserError("missing DESCRIPTOR_FILE parameter. Type --help for more info")
-            input_file_name = args[0]
-
-        # Open files
-        file_name = input_file_name
-        with open(file_name, 'r') as f:
-            descriptor_str = f.read()
-        if output_file_name:
-            file_name = output_file_name
-            output = open(file_name, 'w')
-        else:
-            output = sys.stdout
-        file_name = None
-
-        if input_file_name.endswith('.yaml') or input_file_name.endswith('.yml') or not \
-            (input_file_name.endswith('.json') or '\t' in descriptor_str):
-            data = yaml.load(descriptor_str)
-        else:   # json
-            data = json.loads(descriptor_str)
-            format_output_yaml = False
-
-        if test_file:
-            import osm_im.vnfd as vnfd_catalog
-            import osm_im.nsd as nsd_catalog
-            from pyangbind.lib.serialise import pybindJSONDecoder
-
-            if "vnfd:vnfd-catalog" in data or "vnfd-catalog" in data:
-                descriptor = "VNF"
-                #Check if mgmt-interface is defined:
-                remove_prefix(data, "vnfd:")
-                vnfd_descriptor = data["vnfd-catalog"]
-                vnfd_list = vnfd_descriptor["vnfd"]
-                mgmt_iface = False
-                for vnfd in vnfd_list:
-                    vdu_list = vnfd["vdu"]
-                    for vdu in vdu_list:
-                        interface_list = []
-                        external_interface_list = vdu.pop("external-interface", ())
-                        for external_interface in external_interface_list:
-                            if external_interface.get("virtual-interface", {}).get("type") == "OM-MGMT":
-                                raise KeyError(
-                                    "Wrong 'Virtual-interface type': Deprecated 'OM-MGMT' value. Please, use 'VIRTIO' instead")
-                        interface_list = vdu.pop("interface", ())
-                        for interface in interface_list:
-                            if interface.get("virtual-interface", {}).get("type") == "OM-MGMT":
-                                raise KeyError(
-                                    "Wrong 'Virtual-interface type': Deprecated 'OM-MGMT' value. Please, use 'VIRTIO' instead")
-                    if vnfd.get("mgmt-interface"):
-                        mgmt_iface = True
-                        if vnfd["mgmt-interface"].get("vdu-id"):
-                            raise KeyError("'mgmt-iface': Deprecated 'vdu-id' field. Please, use 'cp' field instead")
-                if not mgmt_iface:
-                    raise KeyError("'mgmt-iface' is a mandatory field and it is not defined")
-                myvnfd = vnfd_catalog.vnfd()
-                pybindJSONDecoder.load_ietf_json(data, None, None, obj=myvnfd)
-            elif "nsd:nsd-catalog" in data or "nsd-catalog" in data:
-                descriptor = "NS"
-                mynsd = nsd_catalog.nsd()
-                pybindJSONDecoder.load_ietf_json(data, None, None, obj=mynsd)
-            else:
-                descriptor = None
-                raise KeyError("This is not neither nsd-catalog nor vnfd-catalog descriptor")
-            exit(0)
-
-        # Convert version
-        if "vnfd:vnfd-catalog" in data or "vnfd-catalog" in data:
-            remove_prefix(data, "vnfd:")
-            error_position.append("vnfd-catalog")
-            vnfd_descriptor = data["vnfd-catalog"]
-            vnfd_list = vnfd_descriptor["vnfd"]
-            error_position.append("vnfd")
-            for vnfd in vnfd_list:
-                error_position[-1] = "vnfd[{}]".format(vnfd["id"])
-                # Remove vnf-configuration:config-attributes
-                if "vnf-configuration" in vnfd and "config-attributes" in vnfd["vnf-configuration"]:
-                    del vnfd["vnf-configuration"]["config-attributes"]
-                # Remove interval-vld:vendor
-                if "internal-vld" in vnfd:
-                    internal_vld_list = vnfd.get("internal-vld", ())
-                    for internal_vld in internal_vld_list:
-                        if "vendor" in internal_vld:
-                            del internal_vld["vendor"]
-                # Remove "rw-nsd:meta"
-                if "rw-vnfd:meta" in vnfd:
-                    del vnfd["rw-vnfd:meta"]
-                # Change vnf-configuration:service-primitive into vnf-configuration:config-primitive
-                if "vnf-configuration" in vnfd and "service-primitive" in vnfd["vnf-configuration"]:
-                    vnfd["vnf-configuration"]["config-primitive"] = vnfd["vnf-configuration"].pop("service-primitive")
-
-                # Convert to capital letters vnf-configuration:service-primitive:parameter:data-type
-                if "vnf-configuration" in vnfd and "config-primitive" in vnfd["vnf-configuration"]:
-                    error_position.append("vnf-configuration")
-                    error_position.append("config-primitive")
-                    primitive_list = vnfd["vnf-configuration"].get("config-primitive", ())
-
-                    for primitive in primitive_list:
-                        if "parameter" in primitive:
-                            parameter_list = primitive.get("parameter", ())
-                            for parameter in parameter_list:
-                                parameter["data-type"] = str(parameter["data-type"]).upper()
-
-                    vnfd["vnf-configuration"]["config-primitive"] = primitive_list
-                    error_position.pop()
-                    error_position.pop()
-                # Iterate with vdu:interfaces
-                vdu_list = vnfd["vdu"]
-                error_position.append("vdu")
-                vdu2mgmt_cp = {}  # internal dict to indicate management interface for each vdu
-                for vdu in vdu_list:
-                    error_position[-1] = "vdu[{}]".format(vdu["id"])
-                    # Change external/internal interface
-                    interface_list = []
-                    external_interface_list = vdu.pop("external-interface", ())
-                    error_position.append("external-interface")
-                    for external_interface in external_interface_list:
-                        error_position[-1] = "external-interface[{}]".format(external_interface["name"])
-                        if "rw-vnfd:floating-ip-needed" in external_interface:
-                            del external_interface["rw-vnfd:floating-ip-needed"]
-                        external_interface["type"] = "EXTERNAL"
-                        external_interface["external-connection-point-ref"] = \
-                            external_interface.pop("vnfd-connection-point-ref")
-                        if external_interface.get("virtual-interface", {}).get("type") == "OM-MGMT":
-                            external_interface["virtual-interface"]["type"] = "VIRTIO"
-                            if vdu["id"] not in vdu2mgmt_cp:
-                                vdu2mgmt_cp[vdu["id"]] = external_interface["external-connection-point-ref"]
-                        interface_list.append(external_interface)
-                    error_position.pop()
-                    internal_interface_list = vdu.pop("internal-interface", ())
-                    error_position.append("internal-interface")
-                    for internal_interface in internal_interface_list:
-                        error_position[-1] = "internal-interface[{}]".format(internal_interface["name"])
-                        internal_interface["type"] = "INTERNAL"
-                        internal_interface["internal-connection-point-ref"] = \
-                            internal_interface.pop("vdu-internal-connection-point-ref")
-                        interface_list.append(internal_interface)
-                    error_position.pop()
-
-                    #Removing "rw-vnfd:floating-ip-needed" items from V3 descriptors
-                    interfaces = vdu.pop("interface", ())
-                    for iface in interfaces:
-                        if "rw-vnfd:floating-ip-needed" in iface:
-                            del iface["rw-vnfd:floating-ip-needed"]
-                        interface_list.append(iface)
-
-                    # order interface alphabetically and set position
-                    if interface_list:
-                        interface_list = sorted(interface_list,
-                                                key=lambda k: k.get('external-connection-point-ref',
-                                                                    k.get('internal-connection-point-ref')))
-                        index = 1
-                        for i in interface_list:
-                            i["position"] = str(index)
-                            index += 1
-
-                        vdu["interface"] = interface_list
-                error_position.pop()
-                # change mgmt-interface
-                if vnfd.get("mgmt-interface"):
-                    error_position.append("mgmt-interface")
-                    vdu_id = vnfd["mgmt-interface"].pop("vdu-id", None)
-                    if vdu_id:
-                        error_position.append("vdu-id")
-                        vnfd["mgmt-interface"]["cp"] = vdu2mgmt_cp[vdu_id]
-                        error_position.pop()
-                    error_position.pop()
-            error_position = []
-        elif "nsd:nsd-catalog" in data or "nsd-catalog" in data:
-            remove_prefix(data, "nsd:")
-            error_position.append("nsd-catalog")
-            nsd_descriptor = data["nsd-catalog"]
-            nsd_list = nsd_descriptor["nsd"]
-            error_position.append("nsd")
-            for nsd in nsd_list:
-                error_position[-1] = "nsd[{}]".format(nsd["id"])
-                # set mgmt-network to true
-                error_position.append("vld")
-                vld_list = nsd.get("vld", ())
-                for vld in vld_list:
-                    error_position[-1] = "vld[{}]".format(vld["id"])
-                    if "mgmt" in vld["name"].lower() or "management" in vld["name"].lower():
-                        vld['mgmt-network'] = 'true'
-                        break
-                error_position.pop()
-                # Change initial-config-primitive into initial-service-primitive
-                if "initial-config-primitive" in nsd:
-                    nsd['initial-service-primitive'] = nsd.pop("initial-config-primitive")
-                # Remove "rw-nsd:meta"
-                if "rw-nsd:meta" in nsd:
-                    del nsd["rw-nsd:meta"]
-                # Remove "rw-meta"
-                if "rw-meta" in nsd:
-                    del nsd["rw-meta"]
-                # Iterate with vld:id
-                error_position.append("vld")
-                vld_list = nsd.get("vld",())
-                for vld in vld_list:
-                    error_position[-1] = "vld[{}]".format(vld["id"])
-                    if "provider-network" in vld and "overlay-type" in vld["provider-network"]:
-                        del vld["provider-network"]["overlay-type"]
-                error_position.pop()
-                if vld_list:
-                    nsd["vld"] = vld_list
-            error_position = []
-        else:
-            error_position = ["global"]
-            raise KeyError("This is not neither nsd-catalog nor vnfd-catalog descriptor")
-
-        if format_output_yaml:
-            yaml.dump(data, output, indent=4, default_flow_style=False)
-        else:
-            json.dump(data, output)
-        exit(0)
-
-    except yaml.YAMLError as exc:
-        error_pos = ""
-        if hasattr(exc, 'problem_mark'):
-            mark = exc.problem_mark
-            error_pos = "at line:%s column:%s" % (mark.line + 1, mark.column + 1)
-        print("Error loading file '{}'. yaml format error {}".format(input_file_name, error_pos), file=sys.stderr)
-
-#    except json.decoder.JSONDecodeError as e:
-#        print("Invalid field at configuration file '{file}' {message}".format(file=input_file_name, message=str(e)),
-#              file=sys.stderr)
-    except ArgumentParserError as e:
-        print(str(e), file=sys.stderr)
-    except IOError as e:
-            print("Error loading file '{}': {}".format(file_name, e), file=sys.stderr)
-    except ImportError as e:
-        print ("Package python-osm-im not installed: {}".format(e), file=sys.stderr)
-    except Exception as e:
-        if test_file:
-            if descriptor:
-                print("Error. Invalid {} descriptor format in '{}': {}".format(descriptor, input_file_name, str(e)), file=sys.stderr)
-            else:
-                print("Error. Invalid descriptor format in '{}': {}".format(input_file_name, str(e)),
-                      file=sys.stderr)
-        elif error_position:
-            print("Descriptor error at '{}': {}".format(":".join(error_position), e), file=sys.stderr)
-        elif file_name:
-            print ("Error loading file '{}': {}".format(file_name, str(e)), file=sys.stderr)
-        else:
-            raise
-            # print("Unexpected exception {}".format(e), file=sys.stderr)
-    exit(1)
diff --git a/descriptor-packages/tools/validate_descriptor.py b/descriptor-packages/tools/validate_descriptor.py
deleted file mode 100755
index de958fe..0000000
--- a/descriptor-packages/tools/validate_descriptor.py
+++ /dev/null
@@ -1,223 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-
-##
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-##
-from __future__ import print_function
-import json
-import yaml
-import sys
-import getopt
-import os
-
-"""
-Tests the format of OSM VNFD and NSD descriptors
-"""
-__author__ = "Alfonso Tierno, Guillermo Calvino"
-__date__ = "2018-04-16"
-__version__ = "0.0.1"
-version_date = "Apr 2018"
-
-
-class ArgumentParserError(Exception):
-    pass
-
-class DescriptorValidationError(Exception):
-    pass
-
-def usage():
-    print("Usage: {} [options] FILE".format(sys.argv[0]))
-    print(" Validates vnfd, nsd and nst descriptors format")
-    print(" FILE: a yaml or json vnfd-catalog, nsd-catalog or nst descriptor")
-    print(" OPTIONS:")
-    print("      -v|--version: prints current version")
-    print("      -h|--help: shows this help")
-    print("      -i|--input FILE: (same as param FILE) descriptor file to be upgraded")
-    print("      -c|--charms: looks for the charms folder and validates its coherency with the descriptor")
-    return
-
-
-def remove_prefix(desc, prefix):
-    """
-    Recursively removes prefix from keys
-    :param desc: dictionary or list to change
-    :param prefix: prefix to remove. Must
-    :return: None, param desc is changed
-    """
-    prefix_len = len(prefix)
-    if isinstance(desc, dict):
-        prefixed_list=[]
-        for k,v in desc.items():
-            if isinstance(v, (list, tuple, dict)):
-                remove_prefix(v, prefix)
-            if isinstance(k, str) and k.startswith(prefix) and k != prefix:
-                prefixed_list.append(k)
-        for k in prefixed_list:
-            desc[k[prefix_len:]] = desc.pop(k)
-    elif isinstance(desc, (list, tuple)):
-        for i in desc:
-            if isinstance(desc, (list, tuple, dict)):
-                remove_prefix(i, prefix)
-
-
-# Mrityunjay Yadav: Function to verify charm included in VNF Package
-def validate_charm(charm, desc_file):
-    """
-    Verify charm included in VNF Package and raised error if invalid
-    :param charm: vnf-configuration/vdu-configuration
-    :param desc_file: descriptor file
-    :return: None
-    """
-    check_list = ['layer.yaml', 'metadata.yaml', 'actions.yaml', 'actions', 'hooks']
-    charm_name = charm['juju']['charm']
-    charm_dir = os.path.join(os.path.abspath(os.path.dirname(desc_file)), 'charms', charm_name)
-
-    config_primitive = charm.get('config-primitive', [])
-    initial_config_primitive = charm.get('initial-config-primitive', [])
-
-    if charm.get('metrics'):
-        check_list.append('metrics.yaml')
-
-    if os.path.exists(charm_dir):
-        if not all(item in os.listdir(charm_dir) for item in check_list):
-            raise KeyError("Invalid charm {}".format(charm_name))
-    else:
-        raise KeyError("Provided charm:{} does not exist in descriptor.".format(charm_name))
-
-
-if __name__ == "__main__":
-    error_position = []
-    format_output_yaml = True
-    input_file_name = None
-    test_file = None
-    file_name = None
-    validate_charms = False
-    try:
-        # load parameters and configuration
-        opts, args = getopt.getopt(sys.argv[1:], "hvi:o:", ["input=", "help", "version",])
-
-        for o, a in opts:
-            if o in ("-v", "--version"):
-                print("test descriptor version THREE " + __version__ + ' ' + version_date)
-                sys.exit()
-            elif o in ("-h", "--help"):
-                usage()
-                sys.exit()
-            elif o in ("-i", "--input"):
-                input_file_name = a
-            elif o in ("-c", "--charms"):
-                validate_charms = True
-            else:
-                assert False, "Unhandled option"
-        if not input_file_name:
-            if not args:
-                raise ArgumentParserError("missing DESCRIPTOR_FILE parameter. Type --help for more info")
-            input_file_name = args[0]
-
-        # Open files
-        file_name = input_file_name
-        with open(file_name, 'r') as f:
-            descriptor_str = f.read()
-        file_name = None
-
-        if input_file_name.endswith('.yaml') or input_file_name.endswith('.yml') or not \
-            (input_file_name.endswith('.json') or '\t' in descriptor_str):
-            data = yaml.load(descriptor_str)
-        else:   # json
-            data = json.loads(descriptor_str)
-            format_output_yaml = False
-
-        import osm_im.vnfd as vnfd_catalog
-        import osm_im.nsd as nsd_catalog
-        import osm_im.nst as nst_catalog
-        from pyangbind.lib.serialise import pybindJSONDecoder
-
-        if "vnfd:vnfd-catalog" in data or "vnfd-catalog" in data:
-            descriptor = "VNF"
-            # Check if mgmt-interface is defined:
-            remove_prefix(data, "vnfd:")
-            vnfd_descriptor = data["vnfd-catalog"]
-            vnfd_list = vnfd_descriptor["vnfd"]
-            mgmt_iface = False
-            for vnfd in vnfd_list:
-                if "vdu" not in vnfd and "kdu" not in vnfd:
-                    raise DescriptorValidationError("vdu or kdu not present in the descriptor")
-                vdu_list = vnfd.get("vdu",[])
-                for vdu in vdu_list:
-                    interface_list = []
-                    external_interface_list = vdu.pop("external-interface", ())
-                    for external_interface in external_interface_list:
-                        if external_interface.get("virtual-interface", {}).get("type") == "OM-MGMT":
-                            raise KeyError(
-                                "Wrong 'Virtual-interface type': Deprecated 'OM-MGMT' value. Please, use 'PARAVIRT' instead")
-                    interface_list = vdu.get("interface", ())
-                    for interface in interface_list:
-                        if interface.get("virtual-interface", {}).get("type") == "OM-MGMT":
-                            raise KeyError(
-                                "Wrong 'Virtual-interface type': Deprecated 'OM-MGMT' value. Please, use 'PARAVIRT' instead")
-                    # Mrityunjay yadav: Verify charm if included in vdu
-                    if vdu.get("vdu-configuration", False) and validate_charms:
-                        validate_charm(vdu["vdu-configuration"], input_file_name)
-                if vnfd.get("mgmt-interface"):
-                    mgmt_iface = True
-                    if vnfd["mgmt-interface"].get("vdu-id"):
-                        raise KeyError("'mgmt-iface': Deprecated 'vdu-id' field. Please, use 'cp' field instead")
-                # Mrityunjay yadav: Verify charm if included in vnf
-                if vnfd.get("vnf-configuration", False) and validate_charms:
-                    validate_charm(vnfd["vnf-configuration"], input_file_name)
-                kdu_list = vnfd.get("kdu",[])
-
-            if not mgmt_iface:
-                raise KeyError("'mgmt-interface' is a mandatory field and it is not defined")
-            myvnfd = vnfd_catalog.vnfd()
-            pybindJSONDecoder.load_ietf_json(data, None, None, obj=myvnfd)
-        elif "nsd:nsd-catalog" in data or "nsd-catalog" in data:
-            descriptor = "NS"
-            mynsd = nsd_catalog.nsd()
-            pybindJSONDecoder.load_ietf_json(data, None, None, obj=mynsd)
-        elif "nst:nst" in data or "nst" in data:
-            descriptor = "NST"
-            mynst = nst_catalog.nst()
-            pybindJSONDecoder.load_ietf_json(data, None, None, obj=mynst)
-        else:
-            descriptor = None
-            raise KeyError("This is not neither nsd-catalog nor vnfd-catalog descriptor")
-        exit(0)
-
-    except yaml.YAMLError as exc:
-        error_pos = ""
-        if hasattr(exc, 'problem_mark'):
-            mark = exc.problem_mark
-            error_pos = "at line:%s column:%s" % (mark.line + 1, mark.column + 1)
-        print("Error loading file '{}'. yaml format error {}".format(input_file_name, error_pos), file=sys.stderr)
-    except DescriptorValidationError as e:
-        print(str(e), file=sys.stderr)
-    except ArgumentParserError as e:
-        print(str(e), file=sys.stderr)
-    except IOError as e:
-        print("Error loading file '{}': {}".format(file_name, e), file=sys.stderr)
-    except ImportError as e:
-        print ("Package python-osm-im not installed: {}".format(e), file=sys.stderr)
-    except Exception as e:
-        if file_name:
-            print("Error loading file '{}': {}".format(file_name, str(e)), file=sys.stderr)
-        else:
-            if descriptor:
-                print("Error. Invalid {} descriptor format in '{}': {}".format(descriptor, input_file_name, str(e)), file=sys.stderr)
-            else:
-                print("Error. Invalid descriptor format in '{}': {}".format(input_file_name, str(e)), file=sys.stderr)
-    exit(1)
diff --git a/descriptor-packages/vnfd/Makefile b/descriptor-packages/vnfd/Makefile
deleted file mode 100644
index fdd2045..0000000
--- a/descriptor-packages/vnfd/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-SUBDIRS = $(wildcard */)
-TOPDIR ?= ../
-include $(TOPDIR)/mk/dirs.mk
diff --git a/descriptor-packages/vnfd/VyOS_vnf/Makefile b/descriptor-packages/vnfd/VyOS_vnf/Makefile
deleted file mode 100644
index a08d588..0000000
--- a/descriptor-packages/vnfd/VyOS_vnf/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/VyOS_vnf/src/VyOS__vnfd.yaml b/descriptor-packages/vnfd/VyOS_vnf/src/VyOS__vnfd.yaml
deleted file mode 100644
index b49e42b..0000000
--- a/descriptor-packages/vnfd/VyOS_vnf/src/VyOS__vnfd.yaml
+++ /dev/null
@@ -1,108 +0,0 @@
-vnfd-catalog:
-    vnfd:
-    -   id: VyOS
-        name: VyOS
-        short-name: VyOS
-        description: VyOS Router
-        logo: osm_2x.png
-        mgmt-interface:
-            cp: eth0
-        vnf-configuration:
-            config-primitive:
-            -   name: config
-                parameter:
-                -   name: user
-                    data-type: STRING
-                    mandatory: 'true'
-                    default-value: vyos
-                -   name: pass
-                    data-type: STRING
-                    mandatory: 'true'
-                    default-value: vyos
-            -   name: ping
-                parameter:
-                -   name: destination
-                    data-type: STRING
-                    mandatory: 'true'
-                -   name: count
-                    data-type: INTEGER
-                    mandatory: 'false'
-                    default-value: 5
-            initial-config-primitive:
-            -   name: config
-                parameter:
-                -   name: hostname
-                    value: <rw_mgmt_ip>
-                -   name: pass
-                    value: vyos
-                seq: '1'
-            juju:
-                charm: vyos-proxy
-        connection-point:
-        -   name: eth0
-
-        -   name: eth1
-
-        -   name: eth2
-
-        -   name: eth3
-
-        -   name: eth4
-
-        vdu:
-        -   id: VyOS-VM
-            name: VyOS-VM
-            description: VyOS-VM
-            image: /mnt/powervault/virtualization/osm/VyOS/VyOS-1.1.7-signed-disk1.qcow2
-            vm-flavor:
-                memory-mb: '1024'
-                storage-gb: '40'
-                vcpu-count: '1'
-            mgmt-vpci: 0000:00:0a.0
-            interface:
-            -   name: eth0
-                type: EXTERNAL
-                virtual-interface:
-                    bandwidth: '0'
-                    type: PARAVIRT
-                    vpci: 0000:00:0a.0
-                external-connection-point-ref: eth0
-            -   name: eth1
-                type: EXTERNAL
-                virtual-interface:
-                    bandwidth: '0'
-                    type: PARAVIRT
-                    vpci: 0000:00:0b.0
-                external-connection-point-ref: eth1
-            -   name: eth2
-                type: EXTERNAL
-                virtual-interface:
-                    bandwidth: '0'
-                    type: PARAVIRT
-                    vpci: 0000:00:0c.0
-                external-connection-point-ref: eth2
-            -   name: eth3
-                type: EXTERNAL
-                virtual-interface:
-                    bandwidth: '0'
-                    type: PARAVIRT
-                    vpci: 0000:00:0d.0
-                external-connection-point-ref: eth3
-            -   name: eth4
-                type: EXTERNAL
-                virtual-interface:
-                    bandwidth: '0'
-                    type: PARAVIRT
-                    vpci: 0000:00:0e.0
-                external-connection-point-ref: eth4
-            guest-epa:
-                cpu-pinning-policy: DEDICATED
-                cpu-thread-pinning-policy: PREFER
-                mempage-size: LARGE
-                numa-node-policy:
-                    mem-policy: STRICT
-                    node:
-                    -   id: '0'
-                        paired-threads:
-                            num-paired-threads: '1'
-                    node-cnt: '1'
diff --git a/descriptor-packages/vnfd/VyOS_vnf/src/icons/osm_2x.png b/descriptor-packages/vnfd/VyOS_vnf/src/icons/osm_2x.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/vnfd/VyOS_vnf/src/icons/osm_2x.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/vnfd/cirros_noportsecurity_vnf/Makefile b/descriptor-packages/vnfd/cirros_noportsecurity_vnf/Makefile
deleted file mode 100644
index ad4b68c..0000000
--- a/descriptor-packages/vnfd/cirros_noportsecurity_vnf/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/cirros_noportsecurity_vnf/src/README b/descriptor-packages/vnfd/cirros_noportsecurity_vnf/src/README
deleted file mode 100755
index e69de29..0000000
--- a/descriptor-packages/vnfd/cirros_noportsecurity_vnf/src/README
+++ /dev/null
diff --git a/descriptor-packages/vnfd/cirros_noportsecurity_vnf/src/cirros_noportsecurity_vnfd.yaml b/descriptor-packages/vnfd/cirros_noportsecurity_vnf/src/cirros_noportsecurity_vnfd.yaml
deleted file mode 100755
index 2ee60f7..0000000
--- a/descriptor-packages/vnfd/cirros_noportsecurity_vnf/src/cirros_noportsecurity_vnfd.yaml
+++ /dev/null
@@ -1,49 +0,0 @@
-vnfd-catalog:
-    vnfd:
-    -   id: cirros_noportsecurity_vnfd
-        name: cirros_noportsecurity_vnf
-        short-name: cirros_noportsecurity_vnf
-        description: Simple VNF example with a cirros 
-        vendor: OSM
-        version: '1.0'
-
-        # Place the logo as png in icons directory and provide the name here
-        logo: cirros-64.png
-
-        # Management interface
-        mgmt-interface:
-            cp: eth0
-
-        # Atleast one VDU need to be specified
-        vdu:
-        -   id: cirros_vnfd-VM
-            name: cirros_vnfd-VM
-            description: cirros_vnfd-VM
-            count: 1
-
-            # Flavour of the VM to be instantiated for the VDU
-            # flavor below can fit into m1.micro
-            vm-flavor:
-                vcpu-count: 1
-                memory-mb: 256
-                storage-gb: 2
-
-            # Image/checksum or image including the full path
-            image: 'cirros034'
-            #checksum: 
-
-            interface:
-            # Specify the external interfaces
-            # There can be multiple interfaces defined
-            -   name: eth0
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                    bandwidth: '0'
-                    vpci: 0000:00:0a.0
-                external-connection-point-ref: eth0
-
-        connection-point:
-            -   name: eth0
-
-                port-security-enabled: "false"
diff --git a/descriptor-packages/vnfd/cirros_noportsecurity_vnf/src/icons/cirros-64.png b/descriptor-packages/vnfd/cirros_noportsecurity_vnf/src/icons/cirros-64.png
deleted file mode 100755
index 5725d29..0000000
--- a/descriptor-packages/vnfd/cirros_noportsecurity_vnf/src/icons/cirros-64.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/vnfd/cirros_vnf/Makefile b/descriptor-packages/vnfd/cirros_vnf/Makefile
deleted file mode 100644
index ad4b68c..0000000
--- a/descriptor-packages/vnfd/cirros_vnf/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/cirros_vnf/src/cirros_vnfd.yaml b/descriptor-packages/vnfd/cirros_vnf/src/cirros_vnfd.yaml
deleted file mode 100644
index 16b4989..0000000
--- a/descriptor-packages/vnfd/cirros_vnf/src/cirros_vnfd.yaml
+++ /dev/null
@@ -1,48 +0,0 @@
-vnfd-catalog:
-    vnfd:
-    -   id: cirros_vnfd
-        name: cirros_vnf
-        short-name: cirros_vnf
-        description: Simple VNF example with a cirros 
-        vendor: OSM
-        version: '1.0'
-
-        # Place the logo as png in icons directory and provide the name here
-        logo: cirros-64.png
-
-        # Management interface
-        mgmt-interface:
-            cp: eth0
-
-        # Atleast one VDU need to be specified
-        vdu:
-        -   id: cirros_vnfd-VM
-            name: cirros_vnfd-VM
-            description: cirros_vnfd-VM
-            count: 1
-
-            # Flavour of the VM to be instantiated for the VDU
-            # flavor below can fit into m1.micro
-            vm-flavor:
-                vcpu-count: 1
-                memory-mb: 256
-                storage-gb: 2
-
-            # Image/checksum or image including the full path
-            image: 'cirros-0.3.5-x86_64-disk.img'
-            #checksum:
-
-            interface:
-            # Specify the external interfaces
-            # There can be multiple interfaces defined
-            -   name: eth0
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                    bandwidth: '0'
-                    vpci: 0000:00:0a.0
-                external-connection-point-ref: eth0
-
-        connection-point:
-            -   name: eth0
-
diff --git a/descriptor-packages/vnfd/cirros_vnf/src/icons/cirros-64.png b/descriptor-packages/vnfd/cirros_vnf/src/icons/cirros-64.png
deleted file mode 100644
index 5725d29..0000000
--- a/descriptor-packages/vnfd/cirros_vnf/src/icons/cirros-64.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/vnfd/dns_aws_vnfd/Makefile b/descriptor-packages/vnfd/dns_aws_vnfd/Makefile
deleted file mode 100644
index ad4b68c..0000000
--- a/descriptor-packages/vnfd/dns_aws_vnfd/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/dns_aws_vnfd/src/cloud_init/cloud_init.cfg b/descriptor-packages/vnfd/dns_aws_vnfd/src/cloud_init/cloud_init.cfg
deleted file mode 100644
index 00c41b7..0000000
--- a/descriptor-packages/vnfd/dns_aws_vnfd/src/cloud_init/cloud_init.cfg
+++ /dev/null
@@ -1,23 +0,0 @@
-#cloud-config
-
-password: c0mpl3xp4ssw0rd
-chpasswd: { expire: False }
-ssh_pwauth: True
-
-write_files:
--   content: |
-        # My new helloworld file
-        sudo apt update
-        sudo apt install dnsmasq -y
-        sudo bash -c 'cat << EOF > /etc/dnsmasq.conf
-        strict-order
-        interface=eth0
-        no-dhcp-interface=eth0
-        EOF'
-    owner: root:root
-    permissions: '0774'
-    path: /tmp/configure_dns
-
-runcmd:
- - /tmp/configure_dns
-
diff --git a/descriptor-packages/vnfd/dns_aws_vnfd/src/dns_aws_vnfd.yaml b/descriptor-packages/vnfd/dns_aws_vnfd/src/dns_aws_vnfd.yaml
deleted file mode 100755
index 38e8a68..0000000
--- a/descriptor-packages/vnfd/dns_aws_vnfd/src/dns_aws_vnfd.yaml
+++ /dev/null
@@ -1,38 +0,0 @@
-vnfd-catalog:
-    vnfd:
-    -   connection-point:
-        -   name: eth0
-
-        description: Simple VNF example with a DNS forwarder
-        id: dns_forwarder
-        logo: dns.jpg
-        mgmt-interface:
-            cp: eth0
-        name: dns_forwarder
-        service-function-chain: UNAWARE
-        short-name: dns_forwarder
-        vdu:
-        -   count: '1'
-            description: dns_forwarder-VM
-            interface:
-            -   name: eth0
-                type: EXTERNAL
-                virtual-interface:
-                    bandwidth: '0'
-                    type: PARAVIRT
-                    vpci: 0000:00:0a.0
-                external-connection-point-ref: eth0
-            guest-epa:
-                cpu-pinning-policy: ANY
-            id: dns_forwarder-VM
-            image: ubuntu/images/hvm-ssd/ubuntu-zesty-17.04-amd64-server-20170619.1
-            cloud-init-file: cloud_init.cfg
-            name: dns_forwarder-VM
-            supplemental-boot-data:
-                boot-data-drive: 'false'
-            vm-flavor:
-                memory-mb: '1024'
-                storage-gb: '1'
-                vcpu-count: '1'
-        vendor: OSM
-        version: '1.0'
diff --git a/descriptor-packages/vnfd/dns_aws_vnfd/src/icons/dns.jpg b/descriptor-packages/vnfd/dns_aws_vnfd/src/icons/dns.jpg
deleted file mode 100644
index 6cec5e1..0000000
--- a/descriptor-packages/vnfd/dns_aws_vnfd/src/icons/dns.jpg
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/vnfd/hackfest_ansible_vnf/Makefile b/descriptor-packages/vnfd/hackfest_ansible_vnf/Makefile
deleted file mode 100644
index e989331..0000000
--- a/descriptor-packages/vnfd/hackfest_ansible_vnf/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-#   Copyright 2018 Telefonica
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-
-VNFD_CHARM = ansible-charm
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/hackfest_ansible_vnf/src/ansiblecharm_vnfd.yaml b/descriptor-packages/vnfd/hackfest_ansible_vnf/src/ansiblecharm_vnfd.yaml
deleted file mode 100644
index 0161482..0000000
--- a/descriptor-packages/vnfd/hackfest_ansible_vnf/src/ansiblecharm_vnfd.yaml
+++ /dev/null
@@ -1,55 +0,0 @@
-vnfd:vnfd-catalog:
-    vnfd:
-    -   id: ansiblecharm_vnfd
-        name: ansiblecharm_vnfd
-        short-name: ansiblecharm_vnfd
-        description: Generated by OSM package generator
-        vendor: OSM
-        logo: osm.png
-        version: '1.0'
-        connection-point:
-        -   name: vnf-cp0
-
-        mgmt-interface:
-            cp: vnf-cp0
-        vdu:
-        -   id: ansiblecharm_vnfd-VM
-            name: ansiblecharm_vnfd-VM
-            description: ansiblecharm_vnfd-VM
-            count: 1
-            vm-flavor:
-                vcpu-count: 1
-                memory-mb: 1024
-                storage-gb: 10
-            image: 'ubuntu1604'
-            interface:
-            -   name: vdu-eth0
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: vnf-cp0
-            cloud-init-file: cloud-config.txt
-        vnf-configuration:
-             juju:
-                 charm: ansible-charm
-             initial-config-primitive:
-             -   seq: 1
-                 name: config
-                 parameter:
-                 -   name: ssh-hostname
-                     value: <rw_mgmt_ip>
-                 -   name: ssh-username
-                     value: ubuntu
-                 -   name: ssh-password
-                     value: osm4u
-             -   seq: 2
-                 name: ansible-playbook
-                 parameter:
-                 -   name: filename
-                     value: '/home/ubuntu/first-touch'
-             config-primitive:
-             -   name: ansible-playbook
-                 parameter:
-                 -   name: filename
-                     data-type: STRING
-                     value: '/home/ubuntu/first-touch'
diff --git a/descriptor-packages/vnfd/hackfest_ansible_vnf/src/cloud_init/cloud-config.txt b/descriptor-packages/vnfd/hackfest_ansible_vnf/src/cloud_init/cloud-config.txt
deleted file mode 100644
index 36c8d1b..0000000
--- a/descriptor-packages/vnfd/hackfest_ansible_vnf/src/cloud_init/cloud-config.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-#cloud-config
-password: osm4u
-chpasswd: { expire: False }
-ssh_pwauth: True
-
-write_files:
--   content: |
-        # My new helloworld file
-
-    owner: root:root
-    permissions: '0644'
-    path: /root/helloworld.txt
diff --git a/descriptor-packages/vnfd/hackfest_ansible_vnf/src/icons/osm.png b/descriptor-packages/vnfd/hackfest_ansible_vnf/src/icons/osm.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/vnfd/hackfest_ansible_vnf/src/icons/osm.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/vnfd/hackfest_basic_vnf/Makefile b/descriptor-packages/vnfd/hackfest_basic_vnf/Makefile
deleted file mode 100644
index fadd46b..0000000
--- a/descriptor-packages/vnfd/hackfest_basic_vnf/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2018 Telefonica
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/hackfest_basic_vnf/src/hackfest_basic_vnfd.yaml b/descriptor-packages/vnfd/hackfest_basic_vnf/src/hackfest_basic_vnfd.yaml
deleted file mode 100644
index 998c2d8..0000000
--- a/descriptor-packages/vnfd/hackfest_basic_vnf/src/hackfest_basic_vnfd.yaml
+++ /dev/null
@@ -1,32 +0,0 @@
-vnfd:vnfd-catalog:
-    vnfd:
-    -   id: hackfest_basic-vnf
-        name: hackfest_basic-vnf
-        short-name: hackfest_basic-vnf
-        version: '1.0'
-        description: A basic VNF descriptor w/ one VDU
-        logo: osm.png
-        connection-point:
-        -   name: vnf-cp0
-
-        vdu:
-        -   id: hackfest_basic-VM
-            name: hackfest_basic-VM
-            image: ubuntu1604
-            alternative-images:
-            -   vim-type: aws
-                image: ubuntu/images/hvm-ssd/ubuntu-artful-17.10-amd64-server-20180509
-            count: '1'
-            vm-flavor:
-                vcpu-count: '1'
-                memory-mb: '1024'
-                storage-gb: '10'
-            interface:
-            -   name: vdu-eth0
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: vnf-cp0
-        mgmt-interface:
-            cp: vnf-cp0
-
diff --git a/descriptor-packages/vnfd/hackfest_basic_vnf/src/icons/osm.png b/descriptor-packages/vnfd/hackfest_basic_vnf/src/icons/osm.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/vnfd/hackfest_basic_vnf/src/icons/osm.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/vnfd/hackfest_cloudinit_vnf/Makefile b/descriptor-packages/vnfd/hackfest_cloudinit_vnf/Makefile
deleted file mode 100644
index fadd46b..0000000
--- a/descriptor-packages/vnfd/hackfest_cloudinit_vnf/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2018 Telefonica
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/hackfest_cloudinit_vnf/src/cloud_init/cloud-config.txt b/descriptor-packages/vnfd/hackfest_cloudinit_vnf/src/cloud_init/cloud-config.txt
deleted file mode 100755
index 36c8d1b..0000000
--- a/descriptor-packages/vnfd/hackfest_cloudinit_vnf/src/cloud_init/cloud-config.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-#cloud-config
-password: osm4u
-chpasswd: { expire: False }
-ssh_pwauth: True
-
-write_files:
--   content: |
-        # My new helloworld file
-
-    owner: root:root
-    permissions: '0644'
-    path: /root/helloworld.txt
diff --git a/descriptor-packages/vnfd/hackfest_cloudinit_vnf/src/hackfest_cloudinit_vnfd.yaml b/descriptor-packages/vnfd/hackfest_cloudinit_vnf/src/hackfest_cloudinit_vnfd.yaml
deleted file mode 100644
index 24a6548..0000000
--- a/descriptor-packages/vnfd/hackfest_cloudinit_vnf/src/hackfest_cloudinit_vnfd.yaml
+++ /dev/null
@@ -1,107 +0,0 @@
-# -*- coding: utf-8 -*-
-
-##
-# Copyright 2019 ETSI
-#
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-##
-
-## Change log:
-# 1. Feature 7829: Mrityunjay Yadav, Jayant Madavi : MY00514913@techmahindra.com
-# 19-aug-2019 : changed vdu image from hackfest3-mgmt to ubuntu1604
-##
-
-vnfd:vnfd-catalog:
-    vnfd:
-    -   id: hackfest_cloudinit-vnf
-        name: hackfest_cloudinit-vnf
-        short-name: hackfest_cloudinit-vnf
-        version: '1.0'
-        description: A VNF consisting of 2 VDUs connected to an internal VL, and one VDU with cloud-init
-        logo: osm.png
-        connection-point:
-        -   id: vnf-mgmt
-            name: vnf-mgmt
-            short-name: vnf-mgmt
-
-        -   id: vnf-data
-            name: vnf-data
-            short-name: vnf-data
-
-        mgmt-interface:
-            cp: vnf-mgmt
-        internal-vld:
-        -   id: internal
-            name: internal
-            short-name: internal
-            type: ELAN
-            internal-connection-point:
-            -   id-ref: mgmtVM-internal
-            -   id-ref: dataVM-internal
-        vdu:
-        -   id: mgmtVM
-            name: mgmtVM
-            image: ubuntu1604
-            count: '1'
-            vm-flavor:
-                vcpu-count: '1'
-                memory-mb: '1024'
-                storage-gb: '10'
-            interface:
-            -   name: mgmtVM-eth0
-                position: '1'
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: vnf-mgmt
-            -   name: mgmtVM-eth1
-                position: '2'
-                type: INTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                internal-connection-point-ref: mgmtVM-internal
-            internal-connection-point:
-            -   id: mgmtVM-internal
-                name: mgmtVM-internal
-                short-name: mgmtVM-internal
-
-            cloud-init-file: cloud-config.txt
-        -   id: dataVM
-            name: dataVM
-            image: ubuntu1604
-            count: '1'
-            vm-flavor:
-                vcpu-count: '1'
-                memory-mb: '1024'
-                storage-gb: '10'
-            interface:
-            -   name: dataVM-eth0
-                position: '1'
-                type: INTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                internal-connection-point-ref: dataVM-internal
-            -   name: dataVM-xe0
-                position: '2'
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: vnf-data
-            internal-connection-point:
-            -   id: dataVM-internal
-                name: dataVM-internal
-                short-name: dataVM-internal
-
-
diff --git a/descriptor-packages/vnfd/hackfest_cloudinit_vnf/src/icons/osm.png b/descriptor-packages/vnfd/hackfest_cloudinit_vnf/src/icons/osm.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/vnfd/hackfest_cloudinit_vnf/src/icons/osm.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/vnfd/hackfest_epasriov_vnf/Makefile b/descriptor-packages/vnfd/hackfest_epasriov_vnf/Makefile
deleted file mode 100644
index fadd46b..0000000
--- a/descriptor-packages/vnfd/hackfest_epasriov_vnf/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2018 Telefonica
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/hackfest_epasriov_vnf/src/cloud_init/cloud-config.txt b/descriptor-packages/vnfd/hackfest_epasriov_vnf/src/cloud_init/cloud-config.txt
deleted file mode 100755
index 36c8d1b..0000000
--- a/descriptor-packages/vnfd/hackfest_epasriov_vnf/src/cloud_init/cloud-config.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-#cloud-config
-password: osm4u
-chpasswd: { expire: False }
-ssh_pwauth: True
-
-write_files:
--   content: |
-        # My new helloworld file
-
-    owner: root:root
-    permissions: '0644'
-    path: /root/helloworld.txt
diff --git a/descriptor-packages/vnfd/hackfest_epasriov_vnf/src/hackfest_epasriov_vnfd.yaml b/descriptor-packages/vnfd/hackfest_epasriov_vnf/src/hackfest_epasriov_vnfd.yaml
deleted file mode 100644
index 476f126..0000000
--- a/descriptor-packages/vnfd/hackfest_epasriov_vnf/src/hackfest_epasriov_vnfd.yaml
+++ /dev/null
@@ -1,125 +0,0 @@
-# -*- coding: utf-8 -*-
-
-##
-# Copyright 2019 ETSI
-#
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-##
-
-## Change log:
-# 1. Feature 7829: Mrityunjay Yadav, Jayant Madavi : MY00514913@techmahindra.com
-# 19-aug-2019 : changed vdu image from hackfest3-mgmt & hackfest-pktgen to ubuntu1604
-##
-
-vnfd:vnfd-catalog:
-    vnfd:
-    -   id: hackfest_epasriov-vnf
-        name: hackfest_epasriov-vnf
-        short-name: hackfest_epasriov-vnf
-        version: '1.0'
-        description: A VNF consisting of 2 VDUs with EPA capabilities connected to an internal VL, mgmtVM VDU with cloud-init
-        logo: osm.png
-        connection-point:
-        -   id: vnf-mgmt
-            name: vnf-mgmt
-            short-name: vnf-mgmt
-
-        -   id: vnf-data
-            name: vnf-data
-            short-name: vnf-data
-
-        mgmt-interface:
-            cp: vnf-mgmt
-        internal-vld:
-        -   id: internal
-            name: internal
-            short-name: internal
-            type: ELAN
-            internal-connection-point:
-            -   id-ref: mgmtVM-internal
-            -   id-ref: dataVM-internal
-        vdu:
-        -   id: mgmtVM
-            name: mgmtVM
-            image: ubuntu1604
-            count: '1'
-            vm-flavor:
-                vcpu-count: '1'
-                memory-mb: '1024'
-                storage-gb: '10'
-            guest-epa:
-                cpu-pinning-policy: DEDICATED
-                cpu-thread-pinning-policy: PREFER
-                mempage-size: LARGE
-                numa-node-policy:
-                    mem-policy: STRICT
-                    node-cnt: '1'
-                    node:
-                    -   id: '1'
-            interface:
-            -   name: mgmtVM-eth0
-                position: '1'
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: vnf-mgmt
-            -   name: mgmtVM-eth1
-                position: '2'
-                type: INTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                internal-connection-point-ref: mgmtVM-internal
-            internal-connection-point:
-            -   id: mgmtVM-internal
-                name: mgmtVM-internal
-                short-name: mgmtVM-internal
-
-            cloud-init-file: cloud-config.txt
-        -   id: dataVM
-            name: dataVM
-            image: ubuntu1604
-            count: '1'
-            vm-flavor:
-                vcpu-count: '8'
-                memory-mb: '4096'
-                storage-gb: '10'
-            guest-epa:
-                cpu-pinning-policy: DEDICATED
-                cpu-thread-pinning-policy: PREFER
-                mempage-size: LARGE
-                numa-node-policy:
-                    mem-policy: STRICT
-                    node-cnt: '1'
-                    node:
-                    -   id: '1'
-            interface:
-            -   name: eth0
-                position: '1'
-                type: INTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                internal-connection-point-ref: dataVM-internal
-            -   name: xe0
-                position: '2'
-                type: EXTERNAL
-                virtual-interface:
-                    type: SR-IOV
-                external-connection-point-ref: vnf-data
-            internal-connection-point:
-            -   id: dataVM-internal
-                name: dataVM-internal
-                short-name: dataVM-internal
-
-
diff --git a/descriptor-packages/vnfd/hackfest_epasriov_vnf/src/icons/osm.png b/descriptor-packages/vnfd/hackfest_epasriov_vnf/src/icons/osm.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/vnfd/hackfest_epasriov_vnf/src/icons/osm.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/vnfd/hackfest_multivdu_vnf/Makefile b/descriptor-packages/vnfd/hackfest_multivdu_vnf/Makefile
deleted file mode 100644
index fadd46b..0000000
--- a/descriptor-packages/vnfd/hackfest_multivdu_vnf/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2018 Telefonica
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/hackfest_multivdu_vnf/src/hackfest_multivdu_vnfd.yaml b/descriptor-packages/vnfd/hackfest_multivdu_vnf/src/hackfest_multivdu_vnfd.yaml
deleted file mode 100644
index ff411e0..0000000
--- a/descriptor-packages/vnfd/hackfest_multivdu_vnf/src/hackfest_multivdu_vnfd.yaml
+++ /dev/null
@@ -1,106 +0,0 @@
-# -*- coding: utf-8 -*-
-
-##
-# Copyright 2019 ETSI
-#
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-##
-
-## Change log:
-# 1. Feature 7829: Mrityunjay Yadav, Jayant Madavi : MY00514913@techmahindra.com
-# 19-aug-2019 : changed vdu image from US1604 to ubuntu1604
-##
-
-vnfd:vnfd-catalog:
-    vnfd:
-    -   id: hackfest_multivdu-vnf
-        name: hackfest_multivdu-vnf
-        short-name: hackfest_multivdu-vnf
-        version: '1.0'
-        description: A VNF consisting of 2 VDUs connected to an internal VL
-        logo: osm.png
-        connection-point:
-        -   id: vnf-mgmt
-            name: vnf-mgmt
-            short-name: vnf-mgmt
-
-        -   id: vnf-data
-            name: vnf-data
-            short-name: vnf-data
-
-        mgmt-interface:
-            cp: vnf-mgmt
-        internal-vld:
-        -   id: internal
-            name: internal
-            short-name: internal
-            type: ELAN
-            internal-connection-point:
-            -   id-ref: mgmtVM-internal
-            -   id-ref: dataVM-internal
-        vdu:
-        -   id: mgmtVM
-            name: mgmtVM
-            image: ubuntu1604
-            count: '1'
-            vm-flavor:
-                vcpu-count: '1'
-                memory-mb: '1024'
-                storage-gb: '10'
-            interface:
-            -   name: mgmtVM-eth0
-                position: '1'
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: vnf-mgmt
-            -   name: mgmtVM-eth1
-                position: '2'
-                type: INTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                internal-connection-point-ref: mgmtVM-internal
-            internal-connection-point:
-            -   id: mgmtVM-internal
-                name: mgmtVM-internal
-                short-name: mgmtVM-internal
-
-        -   id: dataVM
-            name: dataVM
-            image: ubuntu1604
-            count: '1'
-            vm-flavor:
-                vcpu-count: '1'
-                memory-mb: '1024'
-                storage-gb: '10'
-            interface:
-            -   name: dataVM-eth0
-                position: '1'
-                type: INTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                internal-connection-point-ref: dataVM-internal
-            -   name: dataVM-xe0
-                position: '2'
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: vnf-data
-            internal-connection-point:
-            -   id: dataVM-internal
-                name: dataVM-internal
-                short-name: dataVM-internal
-
-
diff --git a/descriptor-packages/vnfd/hackfest_multivdu_vnf/src/icons/osm.png b/descriptor-packages/vnfd/hackfest_multivdu_vnf/src/icons/osm.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/vnfd/hackfest_multivdu_vnf/src/icons/osm.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/vnfd/hackfest_simplecharm_vnf/Makefile b/descriptor-packages/vnfd/hackfest_simplecharm_vnf/Makefile
deleted file mode 100644
index 3e88db7..0000000
--- a/descriptor-packages/vnfd/hackfest_simplecharm_vnf/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-#   Copyright 2018 Telefonica
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-
-VNFD_CHARM = simple
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/hackfest_simplecharm_vnf/src/cloud_init/cloud-config.txt b/descriptor-packages/vnfd/hackfest_simplecharm_vnf/src/cloud_init/cloud-config.txt
deleted file mode 100755
index f6c1b9d..0000000
--- a/descriptor-packages/vnfd/hackfest_simplecharm_vnf/src/cloud_init/cloud-config.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-#cloud-config
-password: osm4u
-chpasswd: { expire: False }
-ssh_pwauth: True
-
-write_files:
--   content: |
-        # My new helloworld file
-
-    owner: root:root
-    permissions: '0644'
-    path: /root/helloworld.txt
-
diff --git a/descriptor-packages/vnfd/hackfest_simplecharm_vnf/src/hackfest_simplecharm_vnfd.yaml b/descriptor-packages/vnfd/hackfest_simplecharm_vnf/src/hackfest_simplecharm_vnfd.yaml
deleted file mode 100644
index 7295c54..0000000
--- a/descriptor-packages/vnfd/hackfest_simplecharm_vnf/src/hackfest_simplecharm_vnfd.yaml
+++ /dev/null
@@ -1,131 +0,0 @@
-# -*- coding: utf-8 -*-
-
-##
-# Copyright 2019 ETSI
-#
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-##
-
-## Change log:
-# 1. Feature 7829: Mrityunjay Yadav, Jayant Madavi : MY00514913@techmahindra.com
-# 19-aug-2019 : changed vdu image from hackfest3-mgmt to ubuntu1604
-##
-
-vnfd:vnfd-catalog:
-    vnfd:
-    -   id: hackfest-simplecharm-vnf
-        name: hackfest-simplecharm-vnf
-        short-name: hackfest-simplecharm-vnf
-        version: '1.0'
-        description: A VNF consisting of 2 VDUs connected to an internal VL, and one VDU with cloud-init
-        logo: osm.png
-        connection-point:
-        -   id: vnf-mgmt
-            name: vnf-mgmt
-            short-name: vnf-mgmt
-
-        -   id: vnf-data
-            name: vnf-data
-            short-name: vnf-data
-
-        mgmt-interface:
-            cp: vnf-mgmt
-        internal-vld:
-        -   id: internal
-            name: internal
-            short-name: internal
-            type: ELAN
-            internal-connection-point:
-            -   id-ref: mgmtVM-internal
-            -   id-ref: dataVM-internal
-        vdu:
-        -   id: mgmtVM
-            name: mgmtVM
-            image: ubuntu1604
-            count: '1'
-            vm-flavor:
-                vcpu-count: '1'
-                memory-mb: '1024'
-                storage-gb: '10'
-            interface:
-            -   name: mgmtVM-eth0
-                position: '1'
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: vnf-mgmt
-            -   name: mgmtVM-eth1
-                position: '2'
-                type: INTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                internal-connection-point-ref: mgmtVM-internal
-            internal-connection-point:
-            -   id: mgmtVM-internal
-                name: mgmtVM-internal
-                short-name: mgmtVM-internal
-
-            cloud-init-file: cloud-config.txt
-        -   id: dataVM
-            name: dataVM
-            image: ubuntu1604
-            count: '1'
-            vm-flavor:
-                vcpu-count: '1'
-                memory-mb: '1024'
-                storage-gb: '10'
-            interface:
-            -   name: dataVM-eth0
-                position: '1'
-                type: INTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                internal-connection-point-ref: dataVM-internal
-            -   name: dataVM-xe0
-                position: '2'
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: vnf-data
-            internal-connection-point:
-            -   id: dataVM-internal
-                name: dataVM-internal
-                short-name: dataVM-internal
-
-        vnf-configuration:
-            juju:
-                charm: simple
-            initial-config-primitive:
-            -   seq: '1'
-                name: config
-                parameter:
-                -   name: ssh-hostname
-                    value: <rw_mgmt_ip>
-                -   name: ssh-username
-                    value: ubuntu
-                -   name: ssh-password
-                    value: osm4u
-            -   seq: '2'
-                name: touch
-                parameter:
-                -   name: filename
-                    value: '/home/ubuntu/first-touch'
-            config-primitive:
-            -   name: touch
-                parameter:
-                -   name: filename
-                    data-type: STRING
-                    default-value: '/home/ubuntu/touched'
-
diff --git a/descriptor-packages/vnfd/hackfest_simplecharm_vnf/src/icons/osm.png b/descriptor-packages/vnfd/hackfest_simplecharm_vnf/src/icons/osm.png
deleted file mode 100644
index 62012d2..0000000
--- a/descriptor-packages/vnfd/hackfest_simplecharm_vnf/src/icons/osm.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/vnfd/ims_allin1_2p_vnf/Makefile b/descriptor-packages/vnfd/ims_allin1_2p_vnf/Makefile
deleted file mode 100644
index 52d95b5..0000000
--- a/descriptor-packages/vnfd/ims_allin1_2p_vnf/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/ims_allin1_2p_vnf/src/IMS-ALLIN1__vnfd.yaml b/descriptor-packages/vnfd/ims_allin1_2p_vnf/src/IMS-ALLIN1__vnfd.yaml
deleted file mode 100644
index 27b2247..0000000
--- a/descriptor-packages/vnfd/ims_allin1_2p_vnf/src/IMS-ALLIN1__vnfd.yaml
+++ /dev/null
@@ -1,83 +0,0 @@
-vnfd-catalog:
-    vnfd:
-    -   id: IMS-ALLIN1_2p
-        name: IMS-ALLIN1_2p
-        short-name: IMS-ALLIN1_2p
-        description: IMS-ALLIN1_2p
-        logo: metaswitch_2x.png
-        mgmt-interface:
-            cp: eth1
-        vnf-configuration:
-            config-primitive:
-            -   name: config
-                parameter:
-                -   name: home_domain
-                    data-type: STRING
-                    mandatory: 'true'
-                    default-value: ims.com
-                -   name: password
-                    data-type: STRING
-                    mandatory: 'true'
-                    default-value: cw-aio
-            -   name: create-update-user
-                parameter:
-                -   name: number
-                    data-type: STRING
-                    mandatory: 'true'
-                -   name: password
-                    data-type: STRING
-                    mandatory: 'true'
-            -   name: delete-user
-                parameter:
-                -   name: number
-                    data-type: STRING
-                    mandatory: 'true'
-            initial-config-primitive:
-            -   name: config
-                parameter:
-                -   name: proxied_ip
-                    value: <rw_mgmt_ip>
-                seq: '1'
-            juju:
-                charm: clearwater-aio-proxy
-        connection-point:
-        -   name: eth0
-
-        -   name: eth1
-
-        vdu:
-        -   id: IMS-ALLIN1_2p-VM
-            name: IMS-ALLIN1_2p-VM
-            description: IMS-ALLIN1_2p-VM
-            image: /mnt/powervault/virtualization/vnfs/demos/mwc2016/allin1.qcow2
-            vm-flavor:
-                memory-mb: '4096'
-                storage-gb: '10'
-                vcpu-count: '2'
-            mgmt-vpci: 0000:00:0a.0
-            interface:
-            -   name: eth0
-                type: EXTERNAL
-                virtual-interface:
-                    bandwidth: '0'
-                    type: PARAVIRT
-                    vpci: 0000:00:0a.0
-                external-connection-point-ref: eth0
-            -   name: eth1
-                type: EXTERNAL
-                virtual-interface:
-                    bandwidth: '0'
-                    type: PARAVIRT
-                    vpci: 0000:00:0b.0
-                external-connection-point-ref: eth1
-            guest-epa:
-                cpu-pinning-policy: DEDICATED
-                cpu-thread-pinning-policy: PREFER
-                mempage-size: LARGE
-                numa-node-policy:
-                    mem-policy: STRICT
-                    node:
-                    -   id: '0'
-                        paired-threads:
-                            num-paired-threads: '1'
-                    node-cnt: '1'
diff --git a/descriptor-packages/vnfd/ims_allin1_2p_vnf/src/icons/metaswitch_2x.png b/descriptor-packages/vnfd/ims_allin1_2p_vnf/src/icons/metaswitch_2x.png
deleted file mode 100644
index a899bc8..0000000
--- a/descriptor-packages/vnfd/ims_allin1_2p_vnf/src/icons/metaswitch_2x.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/vnfd/ping_vnf/Makefile b/descriptor-packages/vnfd/ping_vnf/Makefile
deleted file mode 100644
index 8c50a0a..0000000
--- a/descriptor-packages/vnfd/ping_vnf/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-
-VNFD_CHARM = pingpong
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/ping_vnf/src/cloud_init/ping_cloud_init.cfg b/descriptor-packages/vnfd/ping_vnf/src/cloud_init/ping_cloud_init.cfg
deleted file mode 100644
index 81a13ed..0000000
--- a/descriptor-packages/vnfd/ping_vnf/src/cloud_init/ping_cloud_init.cfg
+++ /dev/null
@@ -1,4 +0,0 @@
-#cloud-config
-password: fedora
-chpasswd: { expire: False }
-ssh_pwauth: True
diff --git a/descriptor-packages/vnfd/ping_vnf/src/icons/rift_logo.png b/descriptor-packages/vnfd/ping_vnf/src/icons/rift_logo.png
deleted file mode 100644
index 09b47c7..0000000
--- a/descriptor-packages/vnfd/ping_vnf/src/icons/rift_logo.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/vnfd/ping_vnf/src/ping_vnfd.yaml b/descriptor-packages/vnfd/ping_vnf/src/ping_vnfd.yaml
deleted file mode 100644
index d73baf6..0000000
--- a/descriptor-packages/vnfd/ping_vnf/src/ping_vnfd.yaml
+++ /dev/null
@@ -1,120 +0,0 @@
-#
-#   Copyright 2016 RIFT.io Inc
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-#
-
-vnfd-catalog:
-    vnfd:
-     -  id: rift_ping_vnf
-        name: ping_vnf
-        short-name: ping_vnf
-        logo: rift_logo.png
-        vendor: RIFT.io
-        version: '1.1'
-        description: This is an example RIFT.ware VNF
-        connection-point:
-        -   name: ping_vnfd/cp0
-
-        -   name: ping_vnfd/cp1
-
-        http-endpoint:
-        -   path: api/v1/ping/stats
-            port: '18888'
-        mgmt-interface:
-            dashboard-params:
-                path: api/v1/ping/stats
-                port: '18888'
-            port: '18888'
-            cp: ping_vnfd/cp0
-        placement-groups:
-        -   member-vdus:
-            -   member-vdu-ref: iovdu_0
-            name: Eris
-            requirement: Place this VM on the Kuiper belt object Eris
-            strategy: COLOCATION
-        vdu:
-        -   cloud-init-file: ping_cloud_init.cfg
-            count: '1'
-            interface:
-            -   name: eth0
-                position: 0
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: ping_vnfd/cp0
-            -   name: eth1
-                position: 1
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: ping_vnfd/cp1
-            id: iovdu_0
-            image: Fedora-x86_64-20-20131211.1-sda-ping.qcow2
-            name: iovdu_0
-            vm-flavor:
-                memory-mb: '512'
-                storage-gb: '4'
-                vcpu-count: '1'
-        vnf-configuration:
-            config-primitive:
-            -   name: start
-            -   name: stop
-            -   name: restart
-            -   name: config
-                parameter:
-                -   data-type: STRING
-                    default-value: <rw_mgmt_ip>
-                    name: ssh-hostname
-                -   data-type: STRING
-                    default-value: fedora
-                    name: ssh-username
-                -   data-type: STRING
-                    default-value: fedora
-                    name: ssh-password
-                -   data-type: STRING
-                    name: ssh-private-key
-                -   data-type: STRING
-                    default-value: ping
-                    name: mode
-                    read-only: 'true'
-            -   name: set-server
-                parameter:
-                -   data-type: STRING
-                    name: server-ip
-                -   data-type: INTEGER
-                    name: server-port
-            -   name: set-rate
-                parameter:
-                -   data-type: INTEGER
-                    default-value: '5'
-                    name: rate
-            -   name: start-traffic
-            -   name: stop-traffic
-            initial-config-primitive:
-            -   name: config
-                parameter:
-                -   name: ssh-hostname
-                    value: <rw_mgmt_ip>
-                -   name: ssh-username
-                    value: fedora
-                -   name: ssh-password
-                    value: fedora
-                -   name: mode
-                    value: ping
-                seq: '1'
-            -   name: start
-                seq: '2'
-            juju:
-                charm: pingpong
diff --git a/descriptor-packages/vnfd/pong_vnf/Makefile b/descriptor-packages/vnfd/pong_vnf/Makefile
deleted file mode 100644
index 8c50a0a..0000000
--- a/descriptor-packages/vnfd/pong_vnf/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-
-VNFD_CHARM = pingpong
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/pong_vnf/src/cloud_init/pong_cloud_init.cfg b/descriptor-packages/vnfd/pong_vnf/src/cloud_init/pong_cloud_init.cfg
deleted file mode 100644
index 81a13ed..0000000
--- a/descriptor-packages/vnfd/pong_vnf/src/cloud_init/pong_cloud_init.cfg
+++ /dev/null
@@ -1,4 +0,0 @@
-#cloud-config
-password: fedora
-chpasswd: { expire: False }
-ssh_pwauth: True
diff --git a/descriptor-packages/vnfd/pong_vnf/src/icons/rift_logo.png b/descriptor-packages/vnfd/pong_vnf/src/icons/rift_logo.png
deleted file mode 100644
index 09b47c7..0000000
--- a/descriptor-packages/vnfd/pong_vnf/src/icons/rift_logo.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/vnfd/pong_vnf/src/pong_vnfd.yaml b/descriptor-packages/vnfd/pong_vnf/src/pong_vnfd.yaml
deleted file mode 100644
index f824f20..0000000
--- a/descriptor-packages/vnfd/pong_vnf/src/pong_vnfd.yaml
+++ /dev/null
@@ -1,115 +0,0 @@
-#
-#   Copyright 2016 RIFT.io Inc
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-#
-
-vnfd-catalog:
-    vnfd:
-     -  id: rift_pong_vnf
-        name: pong_vnf
-        short-name: pong_vnf
-        logo: rift_logo.png
-        vendor: RIFT.io
-        version: '1.1'
-        description: This is an example RIFT.ware VNF
-        connection-point:
-        -   name: pong_vnfd/cp0
-
-        -   name: pong_vnfd/cp1
-
-        http-endpoint:
-        -   path: api/v1/pong/stats
-            port: '18889'
-        mgmt-interface:
-            dashboard-params:
-                path: api/v1/pong/stats
-                port: '18889'
-            port: '18889'
-            cp: pong_vnfd/cp0
-        placement-groups:
-        -   member-vdus:
-            -   member-vdu-ref: iovdu_0
-            name: Weywot
-            requirement: Place this VM on the Kuiper belt object Weywot
-            strategy: COLOCATION
-        vdu:
-        -   cloud-init-file: pong_cloud_init.cfg
-            count: '1'
-            interface:
-            -   name: eth0
-                position: 0
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: pong_vnfd/cp0
-            -   name: eth1
-                position: 1
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: pong_vnfd/cp1
-            id: iovdu_0
-            image: Fedora-x86_64-20-20131211.1-sda-pong.qcow2
-            name: iovdu_0
-            vm-flavor:
-                memory-mb: '512'
-                storage-gb: '4'
-                vcpu-count: '1'
-        vnf-configuration:
-            config-primitive:
-            -   name: start
-            -   name: stop
-            -   name: restart
-            -   name: config
-                parameter:
-                -   data-type: STRING
-                    default-value: <rw_mgmt_ip>
-                    name: ssh-hostname
-                -   data-type: STRING
-                    default-value: fedora
-                    name: ssh-username
-                -   data-type: STRING
-                    default-value: fedora
-                    name: ssh-password
-                -   data-type: STRING
-                    name: ssh-private-key
-                -   data-type: STRING
-                    default-value: pong
-                    name: mode
-                    read-only: 'true'
-            -   name: set-server
-                parameter:
-                -   data-type: STRING
-                    name: server-ip
-                -   data-type: INTEGER
-                    name: server-port
-            -   name: start-traffic
-            -   name: stop-traffic
-            initial-config-primitive:
-            -   name: config
-                parameter:
-                -   name: ssh-hostname
-                    value: <rw_mgmt_ip>
-                -   name: ssh-username
-                    value: fedora
-                -   name: ssh-password
-                    value: fedora
-                -   name: mode
-                    value: pong
-                seq: '1'
-            -   name: start
-                seq: '2'
-            juju:
-                charm: pingpong
diff --git a/descriptor-packages/vnfd/ref11_vnf/Makefile b/descriptor-packages/vnfd/ref11_vnf/Makefile
deleted file mode 100644
index 52d95b5..0000000
--- a/descriptor-packages/vnfd/ref11_vnf/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/ref11_vnf/src/ref11_vnfd.yaml b/descriptor-packages/vnfd/ref11_vnf/src/ref11_vnfd.yaml
deleted file mode 100644
index cd11155..0000000
--- a/descriptor-packages/vnfd/ref11_vnf/src/ref11_vnfd.yaml
+++ /dev/null
@@ -1,69 +0,0 @@
-vnfd-catalog:
-    vnfd:
-    -   connection-point:
-        -   name: mgmt0
-
-        -   name: west
-
-        description: A simple VNF descriptor w/ VM1 and VM2
-        id: Ref_Vnf_11
-        name: Ref_VNF_11
-        short-name: Ref_VNF_11
-        mgmt-interface:
-            cp: mgmt0
-        internal-vld:
-        -   description: Internal VL
-            id: VL12
-            name: VL12
-            short-name: VL12
-            type: ELAN
-            internal-connection-point:
-            -   id-ref: 'iface11'
-            -   id-ref: 'iface21'
-        vdu:
-        -   interface:
-            -   name: iface10
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: mgmt0
-            -   name: iface11
-                type: INTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                internal-connection-point-ref: iface11
-            internal-connection-point:
-            -   name: iface11
-                id: iface11
-
-            id: Ref_VM1
-            image: ref_vm1.qcow2
-            name: Ref_VM1
-            vm-flavor:
-                memory-mb: '2048'
-                storage-gb: '8'
-                vcpu-count: '2'
-        -   interface:
-            -   name: iface22
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: west
-            -   name: iface21
-                type: INTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                internal-connection-point-ref: iface21
-            internal-connection-point:
-            -   name: iface21
-                id: iface21
-
-            id: Ref_VM2
-            image: ref_vm2.qcow2
-            name: Ref_VM2
-            vm-flavor:
-                memory-mb: '4096'
-                storage-gb: '16'
-                vcpu-count: '2'
-        vendor: ETSI
-        version: '1.0'
diff --git a/descriptor-packages/vnfd/ref12_vnf/Makefile b/descriptor-packages/vnfd/ref12_vnf/Makefile
deleted file mode 100644
index 52d95b5..0000000
--- a/descriptor-packages/vnfd/ref12_vnf/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/ref12_vnf/src/ref12_vnfd.yaml b/descriptor-packages/vnfd/ref12_vnf/src/ref12_vnfd.yaml
deleted file mode 100644
index 2374281..0000000
--- a/descriptor-packages/vnfd/ref12_vnf/src/ref12_vnfd.yaml
+++ /dev/null
@@ -1,77 +0,0 @@
-vnfd-catalog:
-    vnfd:
-    -   connection-point:
-        -   name: mgmt0
-
-        -   name: west
-
-        -   name: east
-
-        description: A simple VNF descriptor w/ two VDU
-        id: Ref_Vnf_12
-        name: Ref_Vnf_12
-        short-name: Ref_Vnf_12
-        mgmt-interface:
-            cp: mgmt0
-        internal-vld:
-        -   description: Internal VL
-            id: VL34
-            name: VL34
-            short-name: VL34
-            type: ELAN
-            internal-connection-point:
-            -   id-ref: 'iface31'
-            -   id-ref: 'iface41'
-        vdu:
-        -   description: Middlepoint
-            interface:
-            -   name: iface30
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: mgmt0
-            -   name: iface31
-                type: INTERNAL
-                internal-connection-point-ref: iface31
-                virtual-interface:
-                    type: PARAVIRT
-            guest-epa:
-                cpu-pinning-policy: DEDICATED
-                mempage-size: "LARGE"
-            id: a3a2f
-            image: ref_vm3.qcow2
-            internal-connection-point:
-            -   id: iface31
-                name: iface31
-
-            name: Ref_VM3
-            vm-flavor:
-                memory-mb: '2048'
-                storage-gb: '8'
-                vcpu-count: '2'
-        -   interface:
-            -   name: iface42
-                type: EXTERNAL
-                virtual-interface:
-                    type: PCI-PASSTHROUGH
-                external-connection-point-ref: west
-            -   name: iface43
-                type: EXTERNAL
-                virtual-interface:
-                    type: SR-IOV
-                external-connection-point-ref: east
-            -   name: iface41
-                type: INTERNAL
-                internal-connection-point-ref: iface41
-                virtual-interface:
-                    type: PARAVIRT
-            guest-epa:
-                cpu-pinning-policy: DEDICATED
-            id: e526e
-            internal-connection-point:
-            -   id: iface41
-                name: iface41
-
-            name: Ref_VM4
-        vendor: ETSI
-        version: '1.0'
diff --git a/descriptor-packages/vnfd/ref21_vnf/Makefile b/descriptor-packages/vnfd/ref21_vnf/Makefile
deleted file mode 100644
index a08d588..0000000
--- a/descriptor-packages/vnfd/ref21_vnf/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/ref21_vnf/src/ref21_vnfd.yaml b/descriptor-packages/vnfd/ref21_vnf/src/ref21_vnfd.yaml
deleted file mode 100644
index a36904e..0000000
--- a/descriptor-packages/vnfd/ref21_vnf/src/ref21_vnfd.yaml
+++ /dev/null
@@ -1,34 +0,0 @@
-vnfd-catalog:
-    vnfd:
-    -   connection-point:
-        -   name: mgmt
-
-        -   name: data
-
-        description: A simple VNF descriptor w/ one VDU
-        id: Ref_Vnf_21
-        name: Ref_Vnf_21
-        short-name: Ref_Vnf_21
-        mgmt-interface:
-            cp: mgmt
-        vdu:
-        -   interface:
-            -   name: iface50
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: mgmt
-            -   name: iface51
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: data
-            id: ref_vm21
-            image: ref_vm21.qcow2
-            name: Ref_VM_5
-            vm-flavor:
-                memory-mb: '1024'
-                storage-gb: '16'
-                vcpu-count: '1'
-        vendor: ETSI
-        version: '1.0'
diff --git a/descriptor-packages/vnfd/ref22_vnf/Makefile b/descriptor-packages/vnfd/ref22_vnf/Makefile
deleted file mode 100644
index a08d588..0000000
--- a/descriptor-packages/vnfd/ref22_vnf/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/ref22_vnf/src/ref22_vnfd.yaml b/descriptor-packages/vnfd/ref22_vnf/src/ref22_vnfd.yaml
deleted file mode 100644
index 43f3ac9..0000000
--- a/descriptor-packages/vnfd/ref22_vnf/src/ref22_vnfd.yaml
+++ /dev/null
@@ -1,44 +0,0 @@
-vnfd-catalog:
-    vnfd:
-    -   connection-point:
-        -   name: mgmt
-
-        -   name: west
-
-        -   name: east
-
-        description: A simple VNF descriptor w/ one VDU
-        id: Ref_Vnf_22
-        name: Ref_VNF_22
-        short-name: Ref_VNF_22
-        mgmt-interface:
-            cp: mgmt
-        vdu:
-        -   interface:
-            -   name: iface60
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: mgmt
-            -   name: iface61
-                type: EXTERNAL
-                virtual-interface:
-                    type: PCI-PASSTHROUGH
-                external-connection-point-ref: west
-            -   name: iface62
-                type: EXTERNAL
-                virtual-interface:
-                    type: SR-IOV
-                external-connection-point-ref: east
-            id: abd6831e-f811-4580-9aad-1de9c6424180
-            image: ref_vm22.qcow2
-            name: Ref_VM6
-            guest-epa:
-                cpu-pinning-policy: DEDICATED
-                mempage-size: "LARGE"
-            vm-flavor:
-                memory-mb: '1024'
-                storage-gb: '16'
-                vcpu-count: '1'
-        vendor: ETSI
-        version: '1.0'
diff --git a/descriptor-packages/vnfd/simple_multi-charm_multi-vdu_vnf/Makefile b/descriptor-packages/vnfd/simple_multi-charm_multi-vdu_vnf/Makefile
deleted file mode 100644
index 3e88db7..0000000
--- a/descriptor-packages/vnfd/simple_multi-charm_multi-vdu_vnf/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-#   Copyright 2018 Telefonica
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-
-VNFD_CHARM = simple
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/simple_multi-charm_multi-vdu_vnf/src/simple_multi-charm_multi-vdu_vnfd.yaml b/descriptor-packages/vnfd/simple_multi-charm_multi-vdu_vnf/src/simple_multi-charm_multi-vdu_vnfd.yaml
deleted file mode 100644
index c2f3561..0000000
--- a/descriptor-packages/vnfd/simple_multi-charm_multi-vdu_vnf/src/simple_multi-charm_multi-vdu_vnfd.yaml
+++ /dev/null
@@ -1,130 +0,0 @@
-vnfd:vnfd-catalog:
-    vnfd:
-    -   id: multicharmvdu-vnf
-        name: multicharmvdu-vnf
-        short-name: multicharmvdu-vnf
-        version: '1.0'
-        description: A VNF consisting of 2 VDUs w/charms connected to an internal VL, and one VDU with cloud-init
-        logo: osm.png
-        connection-point:
-        -   id: vnf-mgmt
-            name: vnf-mgmt
-            short-name: vnf-mgmt
-
-        -   id: vnf-data
-            name: vnf-data
-            short-name: vnf-data
-
-        mgmt-interface:
-            cp: vnf-mgmt
-        internal-vld:
-        -   id: internal
-            name: internal
-            short-name: internal
-            type: ELAN
-            internal-connection-point:
-            -   id-ref: mgmtVM-internal
-            -   id-ref: dataVM-internal
-        vdu:
-        -   id: mgmtVM
-            name: mgmtVM
-            image: xenial
-            count: '1'
-            vm-flavor:
-                vcpu-count: '1'
-                memory-mb: '1024'
-                storage-gb: '10'
-            interface:
-            -   name: mgmtVM-eth0
-                position: '1'
-                type: EXTERNAL
-                virtual-interface:
-                    type: VIRTIO
-                external-connection-point-ref: vnf-mgmt
-            -   name: mgmtVM-eth1
-                position: '2'
-                type: INTERNAL
-                virtual-interface:
-                    type: VIRTIO
-                internal-connection-point-ref: mgmtVM-internal
-            internal-connection-point:
-            -   id: mgmtVM-internal
-                name: mgmtVM-internal
-                short-name: mgmtVM-internal
-
-            cloud-init-file: cloud-config.txt
-            vdu-configuration:
-                juju:
-                    charm: simple
-                initial-config-primitive:
-                -   seq: '1'
-                    name: config
-                    parameter:
-                    -   name: ssh-hostname
-                        value: <rw_mgmt_ip>
-                    -   name: ssh-username
-                        value: ubuntu
-                    -   name: ssh-password
-                        value: osm4u
-                -   seq: '2'
-                    name: touch
-                    parameter:
-                    -   name: filename
-                        value: '/home/ubuntu/first-touch-mgmtVM'
-                config-primitive:
-                -   name: touch
-                    parameter:
-                    -   name: filename
-                        data-type: STRING
-                        default-value: '/home/ubuntu/touched'
-
-        -   id: dataVM
-            name: dataVM
-            image: xenial
-            count: '1'
-            vm-flavor:
-                vcpu-count: '1'
-                memory-mb: '1024'
-                storage-gb: '10'
-            interface:
-            -   name: dataVM-eth0
-                position: '1'
-                type: INTERNAL
-                virtual-interface:
-                    type: VIRTIO
-                internal-connection-point-ref: dataVM-internal
-            -   name: dataVM-xe0
-                position: '2'
-                type: EXTERNAL
-                virtual-interface:
-                    type: VIRTIO
-                external-connection-point-ref: vnf-data
-            internal-connection-point:
-            -   id: dataVM-internal
-                name: dataVM-internal
-                short-name: dataVM-internal
-
-            vdu-configuration:
-                juju:
-                    charm: simple
-                initial-config-primitive:
-                -   seq: '1'
-                    name: config
-                    parameter:
-                    -   name: ssh-hostname
-                        value: <rw_mgmt_ip>
-                    -   name: ssh-username
-                        value: ubuntu
-                    -   name: ssh-password
-                        value: osm4u
-                -   seq: '2'
-                    name: touch
-                    parameter:
-                    -   name: filename
-                        value: '/home/ubuntu/first-touch-dataVM'
-                config-primitive:
-                -   name: touch
-                    parameter:
-                    -   name: filename
-                        data-type: STRING
-                        default-value: '/home/ubuntu/touched'
diff --git a/descriptor-packages/vnfd/ubuntu-cloudinit_vnf/Makefile b/descriptor-packages/vnfd/ubuntu-cloudinit_vnf/Makefile
deleted file mode 100644
index a08d588..0000000
--- a/descriptor-packages/vnfd/ubuntu-cloudinit_vnf/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/ubuntu-cloudinit_vnf/src/cloud_init/cloud-init.cfg b/descriptor-packages/vnfd/ubuntu-cloudinit_vnf/src/cloud_init/cloud-init.cfg
deleted file mode 100644
index b7fa010..0000000
--- a/descriptor-packages/vnfd/ubuntu-cloudinit_vnf/src/cloud_init/cloud-init.cfg
+++ /dev/null
@@ -1,20 +0,0 @@
-#Copyright 2019 ETSI
-#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
-#
-#http://www.apache.org/licenses/LICENSE-2.0
-#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-#implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
-#cloud-config
-password: {{ password }}
-chpasswd: { expire: False }
-ssh_pwauth: True
-
diff --git a/descriptor-packages/vnfd/ubuntu-cloudinit_vnf/src/ubuntu-cloudinit_vnfd.yaml b/descriptor-packages/vnfd/ubuntu-cloudinit_vnf/src/ubuntu-cloudinit_vnfd.yaml
deleted file mode 100644
index b4e9236..0000000
--- a/descriptor-packages/vnfd/ubuntu-cloudinit_vnf/src/ubuntu-cloudinit_vnfd.yaml
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright 2019 ETSI
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-# implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-vnfd:vnfd-catalog:
-    vnfd:
-    -   id: ubuntu-cloudinit_vnfd
-        name: ubuntu-cloudinit_vnfd
-        short-name: ubuntu-cloudinit_vnfd
-        description: Generated by OSM package generator
-        vendor: OSM
-        version: '1.0'
-
-        # Management interface
-        mgmt-interface:
-            cp: vnf-cp0
-
-        vdu:
-        -   id: ubuntu-cloudinit_vnfd-VM
-            name: ubuntu-cloudinit_vnfd-VM
-            description: ubuntu-cloudinit_vnfd-VM
-            count: 1
-            cloud-init-file: cloud-init.cfg
-
-            vm-flavor:
-                vcpu-count: 2
-                memory-mb: 2048
-                storage-gb: 10
-
-            # Image including the full path
-            image: 'ubuntu1604'
-
-            interface:
-            -   name: eth0
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: vnf-cp0
-
-        connection-point:
-        -   name: vnf-cp0
-
diff --git a/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/Makefile b/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/Makefile
deleted file mode 100644
index ad4b68c..0000000
--- a/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/src/cloud_init/cloud_init.cfg b/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/src/cloud_init/cloud_init.cfg
deleted file mode 100644
index ddc6f93..0000000
--- a/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/src/cloud_init/cloud_init.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-#cloud-config
-
-# Add public key to the default user's authorized_keys file
-ssh_authorized_keys:
--   ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDXYVPzII6lwC/hb1PHsgJcf11mYKI1pEeHzcjQ8X8P7YwOj2ihikhy6IRtm38HzP7udMWjQolPUbIzNBmldt8fy6EFkZEpf7R3QziDbqw3FH6wIbQnLpCZWa9OCGRyPyPdBY//K0Ya5b/IBfG4t+KoIVwkJuSG+oYRGhCYhnAwRZ/IUwxhtbNVsS26wN+jGsaUKIWCEBbS5ccFeb9k3eovIFkELNDJVWVJsh2tyGrUd+HQ1+xQGtBUcnipJV75lwL2Z2rprnMIIuVc+A1tTNWArHccLSyfxf2kANy5jGCkwNAH1ETp3r8A5BgoFYd7NSLxK3ob3XycXvYvt/XMrUDP test4
-
-write_files:
--   content: |
-        # My new helloworld file
-
-    owner: root:root
-    permissions: '0644'
-    path: /root/helloworld.txt
-
diff --git a/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/src/icons/ubuntu-logo14.png b/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/src/icons/ubuntu-logo14.png
deleted file mode 100644
index e966783..0000000
--- a/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/src/icons/ubuntu-logo14.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/src/keys/test4.pem b/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/src/keys/test4.pem
deleted file mode 100644
index e31971f..0000000
--- a/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/src/keys/test4.pem
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEA12FT8yCOpcAv4W9Tx7ICXH9dZmCiNaRHh83I0PF/D+2MDo9o
-oYpIcuiEbZt/B8z+7nTFo0KJT1GyMzQZpXbfH8uhBZGRKX+0d0M4g26sNxR+sCG0
-Jy6QmVmvTghkcj8j3QWP/ytGGuW/yAXxuLfiqCFcJCbkhvqGERoQmIZwMEWfyFMM
-YbWzVbEtusDfoxrGlCiFghAW0uXHBXm/ZN3qLyBZBCzQyVVlSbIdrchq1Hfh0Nfs
-UBrQVHJ4qSVe+ZcC9mdq6a5zCCLlXPgNbUzVgKx3HC0sn8X9pADcuYxgpMDQB9RE
-6d6/AOQYKBWHezUi8St6G918nF72L7f1zK1AzwIDAQABAoIBAG7mNYS9odWk1MKe
-QSRU+zRHfH8niL5YHWDGy/0SLBu2c+RXYUe0XUOViAKsC0en/SgpRk6fBvapmTkW
-PZJeV9sWTY4Bex5EHFdAbIv4Y4Jk8iqc4BdAucHMVSC334iYDE5U++Umkg1teUd0
-EBfNz05FBx2yTP9XZcrOgfcXWhLwBNmd99+gV6cQB6NF0ZFVm6TLuA7gH3joyipi
-Kfhod7uonFRVXSg6vipXs3+oH6BkpgYxQ5EC9U21q7YS4/H5nyBJDQymf88Lvm0l
-IkZasKC8RKkHJupROyUUrORW0n6ZV5P3jPCtsav/n6QIQStqCniR1SluONHlI/Sm
-qy71VpECgYEA7APuEsSSR/AQtxMp057+jqx6VE+UjIyrtkLBFzHl6GxU4SRz9fIS
-LxvI8fTv3AMpJTIQcf78l8CNBs0lpxOxOhuoFQcwqZsMb/Hg5wdS6r0t6ggKMMhO
-ig0xITzGEW5cVMQ2t3mE1sHP92NT8BTx0eD8nG9b4hxDFujrNOoTMicCgYEA6Z4X
-sIm5LcFRPe/mNhasLxYuh+d5sat20Om2YtNXDA349qQ9e4mC33mKLR1/EVA5dDud
-yvjwOvwvefLEuC/1W8d8AxUaYUMQHtoPB4qG//D/cIGhm3YtvUuaJoXEP0kd47mq
-Pr6Nu/W5b7jO/rCIBOZN6T+h2dxClCLApZ9vrRkCgYEA2+VperkFZdspZ7mGHfKk
-UEApFcazrCQglIcrqrXF9MCCcOZq2Hr7MEMd/TluBbo4Kryzj9K4e5dejjizXTC+
-zloYR8dUMqIQe3iMSBSNz8IFNmjZPcxTSNKztLkP/guqIRxTsqyY9RLM9jzoZubM
-y/RoyEQFAu28IGtRQhLZYb8CgYBF6e8TARRvEgSbMZlGpKBg8xV3zJlJx5OmT9sq
-Vi8dx2yze1F/EBcfhAMLH2Gwr76R/2lonfle3avjpfijWo7mKZv+XClp5CUF5qJK
-0nU2UUxQwiq4GLT1ipOWZb/mZJ5SUXUWk/Zcwtv9CGTCKdh7BuVYIZfxWA6AwKnA
-pydHuQKBgQCMKBFNH0W5bXp+40xmm5CYuvR2hNrDlgjL0g4X4RBYEBcg6yCCq1fo
-gv0OBqNe1L72LWhI6oI2qlKPveN1fdh0jsAvPpQpce/16Y0f7xsl5N3upp+yHHNk
-xruDOG7npSCyHKfcQjDtaHOPKYiQ/3CuXp7OJOvjbNZFf0GJZA9XQA==
------END RSA PRIVATE KEY-----
diff --git a/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/src/keys/test4.pub b/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/src/keys/test4.pub
deleted file mode 100644
index d144710..0000000
--- a/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/src/keys/test4.pub
+++ /dev/null
@@ -1 +0,0 @@
-ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDXYVPzII6lwC/hb1PHsgJcf11mYKI1pEeHzcjQ8X8P7YwOj2ihikhy6IRtm38HzP7udMWjQolPUbIzNBmldt8fy6EFkZEpf7R3QziDbqw3FH6wIbQnLpCZWa9OCGRyPyPdBY//K0Ya5b/IBfG4t+KoIVwkJuSG+oYRGhCYhnAwRZ/IUwxhtbNVsS26wN+jGsaUKIWCEBbS5ccFeb9k3eovIFkELNDJVWVJsh2tyGrUd+HQ1+xQGtBUcnipJV75lwL2Z2rprnMIIuVc+A1tTNWArHccLSyfxf2kANy5jGCkwNAH1ETp3r8A5BgoFYd7NSLxK3ob3XycXvYvt/XMrUDP test4
diff --git a/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/src/ubuntu_1iface_cloudinit_newfile_vnfd.yaml b/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/src/ubuntu_1iface_cloudinit_newfile_vnfd.yaml
deleted file mode 100644
index ba7ab11..0000000
--- a/descriptor-packages/vnfd/ubuntu_1iface_cloudinit_new_vnf/src/ubuntu_1iface_cloudinit_newfile_vnfd.yaml
+++ /dev/null
@@ -1,49 +0,0 @@
-vnfd-catalog:
-    vnfd:
-    -   id: ubuntu_1iface_cloudinit_newfile_vnfd
-        name: ubuntu_1iface_cloudinit_newfile_vnf
-        short-name: ubuntu_1iface_cloudinit_newfile_vnf
-        description: Generated by OSM pacakage generator
-        vendor: OSM
-        version: '1.0'
-
-        # Place the logo as png in icons directory and provide the name here
-        logo: ubuntu-logo14.png
-
-        # Management interface
-        mgmt-interface:
-            cp: eth0
-
-        # Atleast one VDU need to be specified
-        vdu:
-        -   id: ubuntu_1iface_cloudinit_newfile_vnfd-VM
-            name: ubuntu_1iface_cloudinit_newfile_vnfd-VM
-            description: ubuntu_1iface_cloudinit_newfile_vnfd-VM
-            count: 1
-
-            # Flavour of the VM to be instantiated for the VDU
-            vm-flavor:
-                vcpu-count: 1
-                memory-mb: 1024
-                storage-gb: 10
-
-            # Image including the full path
-            image: 'ubuntu1604'
-
-            # User-data injection
-            cloud-init-file: cloud_init.cfg
-
-            interface:
-            # Specify the external interfaces
-            # There can be multiple interfaces defined
-            -   name: eth0
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                    bandwidth: '0'
-                    vpci: 0000:00:0a.0
-                external-connection-point-ref: eth0
-
-        connection-point:
-            -   name: eth0
-
diff --git a/descriptor-packages/vnfd/ubuntu_cirros_multidisk_vnf/Makefile b/descriptor-packages/vnfd/ubuntu_cirros_multidisk_vnf/Makefile
deleted file mode 100644
index a08d588..0000000
--- a/descriptor-packages/vnfd/ubuntu_cirros_multidisk_vnf/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/ubuntu_cirros_multidisk_vnf/src/cloud_init/cloud_init.cfg b/descriptor-packages/vnfd/ubuntu_cirros_multidisk_vnf/src/cloud_init/cloud_init.cfg
deleted file mode 100644
index d1c2188..0000000
--- a/descriptor-packages/vnfd/ubuntu_cirros_multidisk_vnf/src/cloud_init/cloud_init.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-#cloud-config
-password: ubuntu
-chpasswd: { expire: False }
-ssh_pwauth: True
-
diff --git a/descriptor-packages/vnfd/ubuntu_cirros_multidisk_vnf/src/ubuntu_cirros_multidisk_vnfd.yaml b/descriptor-packages/vnfd/ubuntu_cirros_multidisk_vnf/src/ubuntu_cirros_multidisk_vnfd.yaml
deleted file mode 100644
index 5b95440..0000000
--- a/descriptor-packages/vnfd/ubuntu_cirros_multidisk_vnf/src/ubuntu_cirros_multidisk_vnfd.yaml
+++ /dev/null
@@ -1,54 +0,0 @@
-vnfd-catalog:
-    vnfd:
-    -   id: ubuntu_cirros_multidisk_vnfd
-        name: ubuntu_cirros_multidisk_vnfd
-        short-name: ubuntu_cirros_multidisk_vnfd
-        description: Generated by OSM pacakage generator
-        vendor: OSM
-        version: '1.0'
-
-        # Management interface
-        mgmt-interface:
-            cp: eth0
-
-        # Atleast one VDU need to be specified
-        vdu:
-        -   id: ubuntu_cirros_multidisk_vnfd-VM
-            name: ubuntu_cirros_multidisk_vnfd-VM
-            description: ubuntu_cirros_multidisk_vnfd-VM
-            count: 1
-
-            # Flavour of the VM to be instantiated for the VDU
-            vm-flavor:
-                vcpu-count: 2
-                memory-mb: 4096
-                storage-gb: 10
-
-            # User-data injection
-            cloud-init-file: cloud_init.cfg
-
-            interface:
-            # Specify the external interfaces
-            # There can be multiple interfaces defined
-            -   name: eth0
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                external-connection-point-ref: eth0
-            # Specify the volume
-            # There can be multiple interfaces defined
-            volumes:
-            -   name: vda
-                device-type: disk
-                image: UbuntuXenial
-                image-checksum: 4a293322f18827af81a9450e3792947c
-                size: 10
-            -   name: vdb
-                device-type: disk
-                image: cirros-0.3.4-x86_64-disk.img
-                image-checksum: ee1eca47dc88f4879d8a229cc70a07c6
-                size: 8
-
-        connection-point:
-            -   name: eth0
-
diff --git a/descriptor-packages/vnfd/ubuntu_epa_virtio_vnf/Makefile b/descriptor-packages/vnfd/ubuntu_epa_virtio_vnf/Makefile
deleted file mode 100644
index ad4b68c..0000000
--- a/descriptor-packages/vnfd/ubuntu_epa_virtio_vnf/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-DESCRIPTORS_TOPDIR ?= ../..
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/ubuntu_epa_virtio_vnf/src/icons/ubuntu-logo14.png b/descriptor-packages/vnfd/ubuntu_epa_virtio_vnf/src/icons/ubuntu-logo14.png
deleted file mode 100644
index e966783..0000000
--- a/descriptor-packages/vnfd/ubuntu_epa_virtio_vnf/src/icons/ubuntu-logo14.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/vnfd/ubuntu_epa_virtio_vnf/src/ubuntu_epa_virtio_vnfd.yaml b/descriptor-packages/vnfd/ubuntu_epa_virtio_vnf/src/ubuntu_epa_virtio_vnfd.yaml
deleted file mode 100644
index 0a7f30f..0000000
--- a/descriptor-packages/vnfd/ubuntu_epa_virtio_vnf/src/ubuntu_epa_virtio_vnfd.yaml
+++ /dev/null
@@ -1,69 +0,0 @@
-vnfd-catalog:
-    vnfd:
-    -   id: ubuntu_epa_virtio_vnf
-        name: ubuntu_epa_virtio_vnf
-        short-name: ubuntu_epa_virtio
-        description: VNF based on Ubuntu 16.04 LTS with EPA, 1 virtio interface and user osm
-        vendor: OSM
-        version: '1.0'
-
-        # Place the logo as png in icons directory and provide the name here
-        logo: ubuntu-logo14.png
-
-        # Management interface
-        mgmt-interface:
-            cp: eth0
-
-        # Atleast one VDU need to be specified
-        vdu:
-        -   id: ubuntu_epa_virtio_vnf-VM
-            name: ubuntu_epa_virtio_vnf-VM
-            description: ubuntu_epa_virtio_vnf-VM
-            count: 1
-
-            # Flavour of the VM to be instantiated for the VDU
-            vm-flavor:
-                memory-mb: 2048
-                storage-gb: 10
-
-            # Image including the full path
-            image: 'ubuntu1604'
-
-            interface:
-            # Specify the external interfaces
-            # There can be multiple interfaces defined
-            -   name: eth0
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                    bandwidth: '0'
-                    vpci: 0000:00:0a.0
-                external-connection-point-ref: eth0
-            host-epa:
-                om-cpu-model-string: "Intel(R) Xeon(R) CPU E5-4620 0 @ 2.20GHz"
-                om-cpu-feature:
-                -   feature: "64b"
-                -   feature: "iommu"
-                -   feature: "lps"
-                -   feature: "tlbps"
-                -   feature: "hwsv"
-                -   feature: "dioc"
-                -   feature: "ht"
-            guest-epa:
-                numa-node-policy:
-                    node:
-                    -   id: 0
-                        paired-threads:
-                            num-paired-threads: 1
-                    mem-policy: "STRICT"
-                    node-cnt: 1
-                mempage-size: "LARGE"
-                cpu-pinning-policy: "DEDICATED"
-                cpu-thread-pinning-policy: "PREFER"
-            hypervisor-epa:
-                version: "10002|12001|2.6.32-358.el6.x86_64"
-                type: "REQUIRE_KVM"
-
-        connection-point:
-            -   name: eth0
-
diff --git a/descriptor-packages/vnfd/ubuntu_xenial_vnf/Makefile b/descriptor-packages/vnfd/ubuntu_xenial_vnf/Makefile
deleted file mode 100644
index a08d588..0000000
--- a/descriptor-packages/vnfd/ubuntu_xenial_vnf/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-#   Copyright 2017 Sandvine
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-#
-
-DESCRIPTORS_TOPDIR ?= ../..
-
-include $(DESCRIPTORS_TOPDIR)/mk/pkg.mk
-
-all: $(BUILD_DIR)/$(PKG_NAME)
diff --git a/descriptor-packages/vnfd/ubuntu_xenial_vnf/src/cloud_init/cloud_init.cfg b/descriptor-packages/vnfd/ubuntu_xenial_vnf/src/cloud_init/cloud_init.cfg
deleted file mode 100644
index d1c2188..0000000
--- a/descriptor-packages/vnfd/ubuntu_xenial_vnf/src/cloud_init/cloud_init.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-#cloud-config
-password: ubuntu
-chpasswd: { expire: False }
-ssh_pwauth: True
-
diff --git a/descriptor-packages/vnfd/ubuntu_xenial_vnf/src/icons/ubuntu-logo14.png b/descriptor-packages/vnfd/ubuntu_xenial_vnf/src/icons/ubuntu-logo14.png
deleted file mode 100644
index e966783..0000000
--- a/descriptor-packages/vnfd/ubuntu_xenial_vnf/src/icons/ubuntu-logo14.png
+++ /dev/null
Binary files differ
diff --git a/descriptor-packages/vnfd/ubuntu_xenial_vnf/src/ubuntu_xenial_vnfd.yaml b/descriptor-packages/vnfd/ubuntu_xenial_vnf/src/ubuntu_xenial_vnfd.yaml
deleted file mode 100644
index e246a04..0000000
--- a/descriptor-packages/vnfd/ubuntu_xenial_vnf/src/ubuntu_xenial_vnfd.yaml
+++ /dev/null
@@ -1,49 +0,0 @@
-vnfd-catalog:
-    vnfd:
-    -   id: ubuntu_xenial_vnfd
-        name: ubuntu_xenial_vnf
-        short-name: ubuntu_xenial_vnf
-        description: Generated by OSM pacakage generator
-        vendor: OSM
-        version: '1.0'
-
-        # Place the logo as png in icons directory and provide the name here
-        logo: ubuntu-logo14.png
-
-        # Management interface
-        mgmt-interface:
-            cp: eth0
-
-        # Atleast one VDU need to be specified
-        vdu:
-        -   id: ubuntu_xenial_vnfd-VM
-            name: ubuntu_xenial_vnfd-VM
-            description: ubuntu_xenial_vnfd-VM
-            count: 1
-
-            # Flavour of the VM to be instantiated for the VDU
-            vm-flavor:
-                vcpu-count: 2
-                memory-mb: 4096
-                storage-gb: 10
-
-            # Image including the full path
-            image: '/mnt/powervault/virtualization/vnfs/demos/ubuntu/ubuntu-16.04.img'
-
-            # User-data injection
-            cloud-init-file: cloud_init.cfg
-
-            interface:
-            # Specify the external interfaces
-            # There can be multiple interfaces defined
-            -   name: eth0
-                type: EXTERNAL
-                virtual-interface:
-                    type: PARAVIRT
-                    bandwidth: '0'
-                    vpci: 0000:00:0a.0
-                external-connection-point-ref: eth0
-
-        connection-point:
-            -   name: eth0
-
diff --git a/devops-stages/stage-build.sh b/devops-stages/stage-build.sh
index ef1151d..f7cc214 100755
--- a/devops-stages/stage-build.sh
+++ b/devops-stages/stage-build.sh
@@ -14,7 +14,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-PKG_DIRECTORIES="common jenkins installers systest charms descriptor-packages tools docker robot-systest"
+PKG_DIRECTORIES="common jenkins installers tools docker"
 MDG_NAME=devops
 DEB_INSTALL=debian/osm-$MDG_NAME.install
 export DEBEMAIL="OSM_TECH@LIST.ETSI.ORG"
diff --git a/jenkins/ci-pipelines/ci_stage_4.groovy b/jenkins/ci-pipelines/ci_stage_4.groovy
deleted file mode 100644
index 5e390e3..0000000
--- a/jenkins/ci-pipelines/ci_stage_4.groovy
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright 2017 Sandvine
- *
- * All Rights Reserved.
- * 
- *   Licensed under the Apache License, Version 2.0 (the "License"); you may
- *   not use this file except in compliance with the License. You may obtain
- *   a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- *   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- *   License for the specific language governing permissions and limitations
- *   under the License.
- */
-
-properties([
-    parameters([
-        string(defaultValue: '', description: '', name: 'CONTAINER_NAME' ),
-        string(defaultValue: 'osm-stage_3', description: '', name: 'UPSTREAM_PROJECT'),
-        string(defaultValue: 'pipeline', description: '', name: 'NODE'),
-        string(defaultValue: '/home/jenkins/hive/openstack-telefonica.rc', description: '', name: 'HIVE_VIM_1'),
-    ])
-])
-
-node("${params.NODE}") {
-
-    stage("checkout") {
-        checkout scm
-    }
-
-    ci_helper = load "jenkins/ci-pipelines/ci_helper.groovy"
-
-    if ( params.CONTAINER_NAME ) {
-        container_name = params.CONTAINER_NAME
-    }
-    else if ( params.UPSTREAM_PROJECT ) {
-        step ([$class: 'CopyArtifact',
-              projectName: "${params.UPSTREAM_PROJECT}/${BRANCH_NAME}"])
-        container_name = sh(returnStdout: true, script: 'cat build_version.txt').trim()
-    }
-    else {
-        println("no OSM container found")
-        currentBuild.result = 'FAILURE'
-        return
-    }
-    println("OSM container = ${container_name}")
-
-    if ( params.HIVE_VIM_1 ) {
-        stage( "${params.HIVE_VIM_1}" ) {
-            ci_helper.systest_run(container_name, 'cirros', params.HIVE_VIM_1)
-            ci_helper.systest_run(container_name, 'ns_scale', params.HIVE_VIM_1)
-            junit '*.xml'
-        }
-    }
-}
diff --git a/robot-systest/README.md b/robot-systest/README.md
deleted file mode 100644
index 084ef50..0000000
--- a/robot-systest/README.md
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-# Robot Framework: Test usage
-
-## Requirements
-
-- OSM client installed (<https://osm.etsi.org/docs/user-guide/03-installing-osm.html#installing-standalone-osm-client>)
-- devops repository cloned in home (<https://osm.etsi.org/gerrit/#/admin/projects/osm/devops>)
-- The descriptor packages used on each test are expected to be in `${PACKAGES_FOLDER}`.
-- A set of environment variables (there is an example file located at devops/robot-systest/environment.rc):
-  - `OSM_HOSTNAME`: IP address of target OSM.
-  - `OS_CLOUD`: Cloud credentialss.
-  - `VIM_TARGET`: VIM where tests will be run.
-  - `VIM_MGMT_NET`: VIM management network, reachable from robot.
-  - `PACKAGES_FOLDER`: Path where descriptor packages repository are cloned: https://osm.etsi.org/gitlab/vnf-onboarding/osm-packages/
-  - `ROBOT_DEVOPS_FOLDER`: Where the devops repository is located.
-  - `ROBOT_REPORT_FOLDER`: Where robot outpul will be placed.
-
-## Installation
-
-```bash
-sudo -H python3 -m pip install --ignore-installed haikunator requests pyvcloud progressbar pathlib robotframework robotframework-seleniumlibrary robotframework-requests robotframework-SSHLibrary
-sudo snap install yq
-sudo apt-get install -y python3-openstackclient  # Installs Queens by default
-```
-
-## Usage
-
-Example using hackfest basic test. 
-
-```bash
-
-# Set your environment variables in environment.rc as specified in requirements
-source environment.rc
-
-cd ~/devops/robot-systest
-robot -d ${ROBOT_REPORT_FOLDER} testsuite/hackfest_basic.robot
-```
diff --git a/robot-systest/environment.rc b/robot-systest/environment.rc
deleted file mode 100644
index 80673a8..0000000
--- a/robot-systest/environment.rc
+++ /dev/null
@@ -1,21 +0,0 @@
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-echo "Please set your environment variables."
-# export OSM_HOSTNAME=<OSM_HOSTNAME>
-# export OS_CLOUD=<OS_CLOUD>
-# export VIM_TARGET=<VIM_TARGET>
-# export VIM_MGMT_NET=<VIM_MGMT_NET>
-# export PACKAGES_FOLDER=<PACKAGES_FOLDER=>
-# export ROBOT_DEVOPS_FOLDER=<ROBOT_DEVOPS_FOLDER>
-# export ROBOT_REPORT_FOLDER=<ROBOT_REPORT_FOLDER>
-# export K8S_CREDENTIALS=<KUBECONFIG.yaml>
diff --git a/systest/.gitignore b/systest/.gitignore
deleted file mode 100644
index 1fae3e1..0000000
--- a/systest/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-pytest-output.xml
-*.pyc
-.cache
-descriptor-packages/
-*.xml
-images/*
diff --git a/systest/Dockerfile b/systest/Dockerfile
deleted file mode 100644
index 23ed1d0..0000000
--- a/systest/Dockerfile
+++ /dev/null
@@ -1,11 +0,0 @@
-FROM ubuntu:16.04
-
-RUN apt-get update && apt-get -y install python \
-    libcurl4-gnutls-dev libgnutls-dev \
-    python-setuptools python-pip git python-pytest \
-    charm-tools sudo
-
-# allow users to sudo.  This will allow packages to be installed
-# inside the container
-RUN echo "ALL ALL = NOPASSWD: ALL" > /etc/sudoers.d/user && \
-    chmod 0440 /etc/sudoers.d/user
diff --git a/systest/Makefile b/systest/Makefile
deleted file mode 100644
index a5b6303..0000000
--- a/systest/Makefile
+++ /dev/null
@@ -1,258 +0,0 @@
-# Copyright 2017 Sandvine
-# All Rights Reserved.
-# 
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-# 
-#         http://www.apache.org/licenses/LICENSE-2.0
-# 
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-#
-# These variables need to be defined in environment or passed in
-# the make invocation.
-# eg. 
-#    export OSM_HOSTNAME=1.2.3.4:8008
-#    export OS_AUTH_URL=https://<keystoneserver>:5000/v2.0
-#    export OS_USERNAME=admin
-#    export OS_PASSWORD=admin
-#    export OS_PROJECT_NAME=admin
-OSM_HOSTNAME ?=
-OSM_RO_HOSTNAME ?=
-OS_AUTH_URL ?=
-OS_USERNAME ?=
-OS_PASSWORD ?=
-OS_PROJECT_NAME ?=
-VIM_CONFIG ?=
-VCD_AUTH_URL ?=
-VCD_USERNAME ?=
-VCD_PASSWORD ?=
-VCD_TENANT_NAME ?=
-VCD_ORGANIZATION ?=
-VIM_EMU ?=
-
-TOPDIR=$(shell readlink -f .|sed -e 's/systest.*//')
-
-
-ifdef OS_AUTH_URL
-    OPTION_OS_AUTH_URL=--os-url $(OS_AUTH_URL)
-endif
-ifdef OS_USERNAME
-    OPTION_OS_USERNAME=--os-username $(OS_USERNAME)
-endif
-ifdef OS_PASSWORD
-    OPTION_OS_PASSWORD=--os-password $(OS_PASSWORD)
-endif
-ifdef OS_PROJECT_NAME
-    OPTION_OS_PROJECT_NAME=--os-project-name $(OS_PROJECT_NAME)
-endif
-
-ifdef TEST_VNFD_DESCRIPTORS
-    OPTION_TEST_VNFD_DESCRIPTORS=--osm-vnfd-descriptor-packages $(TEST_VNFD_DESCRIPTORS)
-endif
-ifdef TEST_NSD_DESCRIPTORS
-    OPTION_TEST_NSD_DESCRIPTORS=--osm-nsd-descriptor-packages $(TEST_NSD_DESCRIPTORS)
-endif
-ifdef OSM_RO_HOSTNAME
-    OPTION_RO_HOSTNAME=--osm_ro_host $(OSM_RO_HOSTNAME)
-else
-    OPTION_RO_HOSTNAME=--osm_ro_host $(OSM_HOSTNAME)
-endif
-
-ifdef VIM_CONFIG
-    OPTION_VIM_CONFIG=--vim-config "$(VIM_CONFIG)"
-endif
-
-ifdef VCD_AUTH_URL
-    OPTION_VCD_AUTH_URL=--vcd-url $(VCD_AUTH_URL)
-endif
-ifdef VCD_USERNAME
-    OPTION_VCD_USERNAME=--vcd-username $(VCD_USERNAME)
-endif
-ifdef VCD_PASSWORD
-    OPTION_VCD_PASSWORD=--vcd-password $(VCD_PASSWORD)
-endif
-ifdef VCD_TENANT_NAME
-    OPTION_VCD_TENANT_NAME=--vcd-tenant-name $(VCD_TENANT_NAME)
-endif
-ifdef VCD_ORGANIZATION
-    OPTION_VCD_ORGANIZATION=--vcd-org $(VCD_ORGANIZATION)
-endif
-
-
-DESCRIPTOR_DIR ?= $(TOPDIR)/descriptor-packages
-
-#TODO: Need to re-add this once charm application name length issue is resolved
-#TEST_OSM_NS_NAME_PREFIX=pytest-$(shell date +%D-%T)-
-#OPTION_TEST_OSM_NS_NAME_PREFIX=--osm-ns-name-prefix $(TEST_OSM_NS_NAME_PREFIX)
-
-JUNITXML_DIR = reports
-
-JUNITXML ?= pytest-output.xml
-
-PYTEST_OPTIONS=
-Q=@
-
-TEST_VNFD_DESCRIPTORS ?= None
-TEST_NSD_DESCRIPTORS  ?= None
-
-.NOTPARALLEL:
-all: smoke cirros ping_pong
-
-define check_env_var
-	$(Q)if [ -z "$($(1))" ]; then echo "error: $(1) not set"; exit 1; fi
-endef
-
-check_OSM_HOSTNAME:
-	$(call check_env_var,OSM_HOSTNAME)
-
-check_openstack_env:
-	$(call check_env_var,OS_AUTH_URL)
-	$(call check_env_var,OS_USERNAME)
-	$(call check_env_var,OS_PASSWORD)
-	$(call check_env_var,OS_PROJECT_NAME)
-
-check_vcd_env:
-	$(call check_env_var,VCD_AUTH_URL)
-	$(call check_env_var,VCD_USERNAME)
-	$(call check_env_var,VCD_PASSWORD)
-	$(call check_env_var,VCD_TENANT_NAME)
-	$(call check_env_var,VCD_ORGANIZATION)
-
-.PHONY: check_openstack_env check_vcd_env check_OSM_HOSTNAME
-
-report_dir:
-	@mkdir -p reports
-
-_run_test: report_dir
-	-$(Q)py.test \
-        --osmhost $(OSM_HOSTNAME) --sol005 \
-        $(OPTION_RO_HOSTNAME) \
-        $(OPTION_OS_AUTH_URL) \
-        $(OPTION_OS_USERNAME) \
-        $(OPTION_OS_PASSWORD) \
-        $(OPTION_VIM_CONFIG) \
-        $(OPTION_OS_PROJECT_NAME) \
-        $(OPTION_VCD_AUTH_URL) \
-        $(OPTION_VCD_USERNAME) \
-        $(OPTION_VCD_PASSWORD) \
-        $(OPTION_VCD_TENANT_NAME) \
-        $(OPTION_TEST_VNFD_DESCRIPTORS) \
-        $(OPTION_TEST_NSD_DESCRIPTORS) \
-        $(OPTION_DESCRIPTOR_BUILD_DIR) \
-        $(OPTION_TEST_OSM_NS_NAME_PREFIX) \
-        --junitxml $(JUNITXML_DIR)/$(JUNITXML) \
-        $(PYTEST_OPTIONS)
-
-$(DESCRIPTOR_DIR)/vnfd/cirros_vnf/build/%.tar.gz:
-	$(MAKE) -C $(DESCRIPTOR_DIR)/vnfd/cirros_vnf
-
-$(DESCRIPTOR_DIR)/nsd/cirros_ns/build/%.tar.gz:
-	$(MAKE) -C $(DESCRIPTOR_DIR)/nsd/cirros_ns
-
-images/cache/cirros-0.3.5-x86_64-disk.img:
-	$(Q)mkdir -p images/cache
-	$(Q)wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img -O $@
-
-images/cache/Fedora-x86_64-20-20131211.1-sda-ping.qcow2:
-	$(Q)mkdir -p images/cache
-	$(Q)wget ftp://osm-download.etsi.org/examples/ping_pong_ns/images/Fedora-x86_64-20-20131211.1-sda-ping.qcow2 -O $@
-
-images/cache/Fedora-x86_64-20-20131211.1-sda-pong.qcow2:
-	$(Q)mkdir -p images/cache
-	$(Q)wget ftp://osm-download.etsi.org/examples/ping_pong_ns/images/Fedora-x86_64-20-20131211.1-sda-pong.qcow2 -O $@
-
-# images are prefixed with 'osm/' to separate osm uploaded images from VIM installed images
-OSM_IMAGE_PREFIX ?=
-sys_path ?= $(TOPDIR)systest
-
-ifdef VIM_EMU 
-# VIM emulator does not need images pushed to glance.
-else
-ifdef OS_AUTH_URL
-images/%.qcow2 images/%.img:
-	$(Q)openstack image show $(OSM_IMAGE_PREFIX)$(shell basename $@) || \
-          sh -c "make images/cache/$(shell basename $@) && openstack image create --file images/cache/$(shell basename $@) $(OSM_IMAGE_PREFIX)$(shell basename $@)"
-endif
-endif
-
-ifdef VCD_AUTH_URL
-images/%.img:
-	ovf_converter images/cache/$(OSM_IMAGE_PREFIX)$(shell basename $@) -n cirros
-	python $(TOPDIR)tools/vmware_ovf_upload.py $(VCD_AUTH_URL) $(VCD_USERNAME) $(VCD_PASSWORD) $(VCD_ORGANIZATION) $(sys_path)/images/cache/cirros.ovf
-else
-images/%.img:
-	echo "No method selected to upload image to VIM"
-endif
-
-%.openstack: check_openstack_env
-	$(Q)$(MAKE) $*
-
-%.vcd: check_vcd_env
-	$(Q)$(MAKE) $*
-
-cirros: check_OSM_HOSTNAME \
-        $(DESCRIPTOR_DIR)/vnfd/cirros_vnf/build/cirros_vnf.tar.gz \
-        $(DESCRIPTOR_DIR)/nsd/cirros_ns/build/cirros_ns.tar.gz \
-        images/cirros-0.3.5-x86_64-disk.img
-	$(Q)$(MAKE) \
-        TEST_VNFD_DESCRIPTORS=$(DESCRIPTOR_DIR)/vnfd/cirros_vnf/build/cirros_vnf.tar.gz \
-        TEST_NSD_DESCRIPTORS=$(DESCRIPTOR_DIR)/nsd/cirros_ns/build/cirros_ns.tar.gz \
-        JUNITXML=pytest-$@.xml \
-        PYTEST_OPTIONS="$(PYTEST_OPTIONS) -m vnf" _run_test
-
-ns_scale: check_OSM_HOSTNAME \
-        $(DESCRIPTOR_DIR)/vnfd/cirros_vnf/build/cirros_vnf.tar.gz \
-        $(DESCRIPTOR_DIR)/nsd/cirros_ns/build/cirros_ns.tar.gz \
-        images/cirros-0.3.5-x86_64-disk.img
-	$(Q)$(MAKE) \
-        TEST_VNFD_DESCRIPTORS=$(DESCRIPTOR_DIR)/vnfd/cirros_vnf/build/cirros_vnf.tar.gz \
-        TEST_NSD_DESCRIPTORS=$(DESCRIPTOR_DIR)/nsd/cirros_ns/build/cirros_ns.tar.gz \
-        JUNITXML=pytest-$@.xml \
-        PYTEST_OPTIONS="$(PYTEST_OPTIONS) -m ns_scale" _run_test
-
-smoke: check_OSM_HOSTNAME \
-        $(DESCRIPTOR_DIR)/vnfd/cirros_vnf/build/cirros_vnf.tar.gz \
-        $(DESCRIPTOR_DIR)/nsd/cirros_ns/build/cirros_ns.tar.gz
-	$(Q)$(MAKE) \
-        JUNITXML=pytest-$@.xml \
-        PYTEST_OPTIONS="$(PYTEST_OPTIONS) -m smoke" _run_test \
-        TEST_VNFD_DESCRIPTORS=$(DESCRIPTOR_DIR)/vnfd/cirros_vnf/build/cirros_vnf.tar.gz \
-        TEST_NSD_DESCRIPTORS=$(DESCRIPTOR_DIR)/nsd/cirros_ns/build/cirros_ns.tar.gz
-
-vim: check_OSM_HOSTNAME check_openstack_env
-	$(Q)$(MAKE) \
-        JUNITXML=pytest-$@.xml \
-        PYTEST_OPTIONS="$(PYTEST_OPTIONS) -m vim" _run_test
-
-$(DESCRIPTOR_DIR)/vnfd/ping_vnf/build/%.tar.gz:
-	$(MAKE) -C $(DESCRIPTOR_DIR)/vnfd/ping_vnf
-
-$(DESCRIPTOR_DIR)/vnfd/pong_vnf/build/%.tar.gz:
-	$(MAKE) -C $(DESCRIPTOR_DIR)/vnfd/pong_vnf
-
-$(DESCRIPTOR_DIR)/nsd/ping_pong_ns/build/%.tar.gz:
-	$(MAKE) -C $(DESCRIPTOR_DIR)/nsd/ping_pong_ns
-
-ping_pong: check_OSM_HOSTNAME check_openstack_env \
-    $(DESCRIPTOR_DIR)/vnfd/ping_vnf/build/ping_vnf.tar.gz \
-    $(DESCRIPTOR_DIR)/vnfd/pong_vnf/build/pong_vnf.tar.gz \
-    $(DESCRIPTOR_DIR)/nsd/ping_pong_ns/build/ping_pong_ns.tar.gz \
-    images/Fedora-x86_64-20-20131211.1-sda-ping.qcow2 \
-    images/Fedora-x86_64-20-20131211.1-sda-pong.qcow2
-	$(Q)$(MAKE) \
-        TEST_VNFD_DESCRIPTORS="$(DESCRIPTOR_DIR)/vnfd/ping_vnf/build/ping_vnf.tar.gz,$(DESCRIPTOR_DIR)/vnfd/pong_vnf/build/pong_vnf.tar.gz" \
-        TEST_NSD_DESCRIPTORS=$(DESCRIPTOR_DIR)/nsd/ping_pong_ns/build/ping_pong_ns.tar.gz \
-        JUNITXML=pytest-$@.xml \
-        PYTEST_OPTIONS="$(PYTEST_OPTIONS) -m vnf" _run_test
-
-stage_4_tests = cirros
-
-openstack_stage_4: $(stage_4_tests)
-
-.PHONY: report_dir cirros vim smoke ping_pong openstack_stage_4 stage_4_tests
diff --git a/systest/conftest.py b/systest/conftest.py
deleted file mode 100644
index 4611f27..0000000
--- a/systest/conftest.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright 2017 Sandvine
-#
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-from lib.osm.fixtures import osm_add_options
-from lib.openstack.fixtures import openstack_add_options
-from lib.vim.fixtures import vim_add_options
-from lib.vmware.fixtures import vmware_add_options
-
-def pytest_addoption(parser):
-    osm_add_options(parser)
-    openstack_add_options(parser)
-    vmware_add_options(parser)
-    vim_add_options(parser)
diff --git a/systest/lib/__init__.py b/systest/lib/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/systest/lib/__init__.py
+++ /dev/null
diff --git a/systest/lib/openstack/__init__.py b/systest/lib/openstack/__init__.py
deleted file mode 100644
index 2bf7fed..0000000
--- a/systest/lib/openstack/__init__.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2017 Sandvine
-#
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
diff --git a/systest/lib/openstack/fixtures.py b/systest/lib/openstack/fixtures.py
deleted file mode 100644
index 5b654a9..0000000
--- a/systest/lib/openstack/fixtures.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright 2017 Sandvine
-#
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-import pytest
-import json
-
-
-def openstack_add_options(parser):
-    parser.addoption("--os-url", default="", help="openstack identity url")
-    parser.addoption("--os-username", default="", help="openstack username")
-    parser.addoption("--os-password", default="", help="openstack password")
-    parser.addoption("--os-project-name", default="", help="openstack project name")
-    parser.addoption("--vim-config", default="", help="vim/openstack specific configuration")
-
-@pytest.fixture
-def openstack(request):
-    from lib.openstack import openstack
-    access = {}
-    access['vim-url'] = request.config.getoption("--os-url")
-    access['vim-username'] = request.config.getoption("--os-username")
-    access['vim-password'] = request.config.getoption("--os-password")
-    access['vim-tenant-name'] = request.config.getoption("--os-project-name")
-    access['vim-type'] = 'openstack'
-    access['description'] = 'pytest system test'
-    access['config'] = request.config.getoption("--vim-config")
-
-    return openstack.Openstack(access)
diff --git a/systest/lib/openstack/openstack.py b/systest/lib/openstack/openstack.py
deleted file mode 100644
index 9f5c304..0000000
--- a/systest/lib/openstack/openstack.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 2017 Sandvine
-#
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-
-class Openstack():
-    def __init__(self,access):
-        self._os_access = access
-
-    def get_access(self):
-        return self._os_access
diff --git a/systest/lib/osm/__init__.py b/systest/lib/osm/__init__.py
deleted file mode 100644
index 2bf7fed..0000000
--- a/systest/lib/osm/__init__.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2017 Sandvine
-#
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
diff --git a/systest/lib/osm/fixtures.py b/systest/lib/osm/fixtures.py
deleted file mode 100644
index c1becc8..0000000
--- a/systest/lib/osm/fixtures.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright 2017 Sandvine
-#
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-import pytest
-import json
-
-
-def osm_add_options(parser):
-    parser.addoption("--osmhost", default="", help="osm hostname")
-    parser.addoption("--sol005",action="store_true", help="enable sol005 API")
-    parser.addoption("--osm_ro_host", default="", help="osm ro_host")
-    parser.addoption("--osm-descriptor-packages", default="", help="location of descriptor packages")
-    parser.addoption("--osm-vnfd-descriptor-packages", default="", help="vnfd packages to test")
-    parser.addoption("--osm-nsd-descriptor-packages", default="", help="nsd package to test")
-    parser.addoption("--osmfile", action="store", default="", help="osm json data file")
-    parser.addoption("--osm-ns-name-prefix", action="store", default="", help="ns name prefix to apply")
-
-'''
-@pytest.fixture
-def osm(request):
-    from osmclient.common import OsmAPI
-    with open(request.config.getoption("--osm")) as json_data:
-        osmdict=json.load(json_data)
-        return OsmAPI.OsmAPI(osmdict['ip'])
-
-'''
-
-@pytest.fixture
-def osm(request):
-    from lib.osm import osm
-    osmhost=request.config.getoption("--osmhost")
-    sol005=request.config.getoption("--sol005")
-    osm_ro_host=request.config.getoption("--osm_ro_host")
-    descriptors_dir=request.config.getoption("--osm-descriptor-packages")
-    vnfd_descriptors_list=request.config.getoption("--osm-vnfd-descriptor-packages").split(',')
-    nsd_descriptors_list=request.config.getoption("--osm-nsd-descriptor-packages").split(',')
-    ns_name_prefix=request.config.getoption("--osm-ns-name-prefix")
-    return osm.Osm(osmhost,
-                   ro_host=osm_ro_host,
-                   sol005=sol005,
-                   descriptors_dir=descriptors_dir,
-                   vnfd_descriptors_list=vnfd_descriptors_list,
-                   nsd_descriptors_list=nsd_descriptors_list,
-                   ns_name_prefix=ns_name_prefix)
diff --git a/systest/lib/osm/osm.py b/systest/lib/osm/osm.py
deleted file mode 100644
index a354994..0000000
--- a/systest/lib/osm/osm.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright 2017 Sandvine
-#
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-
-from osmclient import client
-
-class Osm():
-    def __init__(self,osmhost,sol005=None,ro_host=None,descriptors_dir=None,vnfd_descriptors_list=None,nsd_descriptors_list=None,ns_name_prefix=None):
-        self._OsmApi=client.Client(host=osmhost,sol005=sol005,ro_host=ro_host, verbose=2)
-        self._descriptors_dir = descriptors_dir
-        self.vnfd_descriptors_list = vnfd_descriptors_list
-        self.nsd_descriptors_list  = nsd_descriptors_list 
-        self.ns_name_prefix = ns_name_prefix
-
-    def get_api(self):
-        return self._OsmApi
-
-    def get_descriptors_dir(self):
-        return self._descriptors_dir
diff --git a/systest/lib/vim/__init__.py b/systest/lib/vim/__init__.py
deleted file mode 100644
index 2bf7fed..0000000
--- a/systest/lib/vim/__init__.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2017 Sandvine
-#
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
diff --git a/systest/lib/vim/fixtures.py b/systest/lib/vim/fixtures.py
deleted file mode 100644
index 6b4404d..0000000
--- a/systest/lib/vim/fixtures.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 2017 Sandvine
-#
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-import pytest
-import json
-
-
-def vim_add_options(parser):
-    pass
-
-@pytest.fixture
-def vim(request,osm,openstack,vmware):
-    from lib.vim import vim 
-    return vim.Vim(osm,openstack,vmware)
diff --git a/systest/lib/vim/vim.py b/systest/lib/vim/vim.py
deleted file mode 100644
index 0ac9525..0000000
--- a/systest/lib/vim/vim.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright 2017 Sandvine
-#
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-from osmclient.common.exceptions import ClientException
-
-
-class Vim():
-    def __init__(self,osm,openstack,vmware):
-        self.vim_name='pytest'
-        try:
-            osm.get_api().vim.get(self.vim_name)
-        except ClientException:
-            if vmware._os_access['vim-url'] and vmware._os_access['vim-type'] == 'vmware':
-                osm.get_api().vim.create(self.vim_name,vmware.get_access())
-            else:
-                osm.get_api().vim.create(self.vim_name,openstack.get_access())
diff --git a/systest/lib/vmware/__init__.py b/systest/lib/vmware/__init__.py
deleted file mode 100644
index 861d0b2..0000000
--- a/systest/lib/vmware/__init__.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-
-##
-# Copyright 2016-2017 VMware Inc.
-# This file is part of ETSI OSM
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact:  osslegalrouting@vmware.com
-##
-
diff --git a/systest/lib/vmware/fixtures.py b/systest/lib/vmware/fixtures.py
deleted file mode 100644
index cb6cc7b..0000000
--- a/systest/lib/vmware/fixtures.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# -*- coding: utf-8 -*-
-
-##
-# Copyright 2016-2017 VMware Inc.
-# This file is part of ETSI OSM
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact:  osslegalrouting@vmware.com
-##
-
-import pytest
-import json
-
-
-def vmware_add_options(parser):
-    parser.addoption("--vcd-url", default="", help="VMware vCloud identity url")
-    parser.addoption("--vcd-username", default="", help="VMware vCloud username")
-    parser.addoption("--vcd-password", default="", help="VMware vCloud password")
-    parser.addoption("--vcd-tenant-name", default="", help="VMware vCloud tenant name")
-    parser.addoption("--vcd-org", default="", help="VMware vCloud Organization name")
-
-@pytest.fixture
-def vmware(request):
-    from lib.vmware import vmware
-    access = {}
-    access['vim-url'] = request.config.getoption("--vcd-url")
-    access['vim-username'] = request.config.getoption("--vcd-username")
-    access['vim-password'] = request.config.getoption("--vcd-password")
-    access['vim-tenant-name'] = request.config.getoption("--vcd-tenant-name")
-    access['vcd-org'] = request.config.getoption("--vcd-org")
-    access['config'] = request.config.getoption("--vim-config")
-    access['vim-type'] = 'vmware'
-    access['description'] = 'pytest system test'
-
-    return vmware.Vmware(access)
diff --git a/systest/lib/vmware/vmware.py b/systest/lib/vmware/vmware.py
deleted file mode 100644
index 76c5412..0000000
--- a/systest/lib/vmware/vmware.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- coding: utf-8 -*-
-
-##
-# Copyright 2016-2017 VMware Inc.
-# This file is part of ETSI OSM
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact:  osslegalrouting@vmware.com
-##
-
-
-class Vmware():
-    def __init__(self,access):
-        self._os_access = access
-
-    def get_access(self):
-        return self._os_access
diff --git a/systest/testcases/conftest.py b/systest/testcases/conftest.py
deleted file mode 100644
index 481ce91..0000000
--- a/systest/testcases/conftest.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2017 Sandvine
-#
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-from lib.osm.fixtures import osm
-from lib.openstack.fixtures import openstack
-from lib.vmware.fixtures import vmware
-from lib.vim.fixtures import vim
diff --git a/systest/testcases/smoke/test_smoke.py b/systest/testcases/smoke/test_smoke.py
deleted file mode 100644
index 650cf05..0000000
--- a/systest/testcases/smoke/test_smoke.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# Copyright 2017 Sandvine
-#
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-import pytest
-import pprint
-import time
-
-
-@pytest.mark.smoke
-class TestClass(object):
-
-    def test_empty_vnf(self,osm):
-        assert not osm.get_api().vnf.list()
-
-    def test_empty_vnf_catalog(self,osm):
-        assert not osm.get_api().vnfd.list()
-
-    def test_empty_ns(self,osm):
-        assert not osm.get_api().ns.list()
-
-    def test_empty_ns_catalog(self,osm):
-        assert not osm.get_api().nsd.list()
-
-    def vnf_upload_packages(self, osm, descriptor_file_list ):
-        for file in descriptor_file_list:
-            assert not osm.get_api().package.upload(file)
-            assert not osm.get_api().package.wait_for_upload(file)
-            desc = osm.get_api().package.get_key_val_from_pkg(file)
-            assert desc
-
-    def delete_all_packages(self, osm):
-        for nsd in osm.get_api().nsd.list(): 
-            assert not osm.get_api().nsd.delete(nsd['name'])
-
-        for vnfd in osm.get_api().vnfd.list(): 
-            assert not osm.get_api().vnfd.delete(vnfd['name'])
-            
-    def test_upload_vnf_package(self, osm):
-        vnfd_file_list = osm.vnfd_descriptors_list
-        nsd_file_list = osm.nsd_descriptors_list
-        # upload vnfd's
-        self.vnf_upload_packages(osm, vnfd_file_list )
-        # upload nsd's
-        self.vnf_upload_packages(osm, nsd_file_list )
-
-        # now delete all packages
-        self.delete_all_packages(osm)
diff --git a/systest/testcases/vim/test_vim.py b/systest/testcases/vim/test_vim.py
deleted file mode 100644
index a80ae70..0000000
--- a/systest/testcases/vim/test_vim.py
+++ /dev/null
@@ -1,102 +0,0 @@
-# Copyright 2017 Sandvine
-#
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-import pytest
-import time
-
-
-@pytest.mark.vim
-@pytest.mark.openstack
-@pytest.mark.vmware
-class TestClass(object):
-
-    def test_empty_vim(self,osm):
-        assert not osm.get_api().vim.list()
-
-    @pytest.fixture(scope='function')
-    def cleanup_test_add_vim_account(self,osm,request):
-        def teardown():
-            try:
-                for vim in osm.get_api().vim.list(False):
-                    osm.get_api().vim.delete(vim['name'])
-            except:
-                pass
-        request.addfinalizer(teardown)
- 
-    @pytest.mark.openstack
-    @pytest.mark.smoke
-    def test_add_vim_account(self,osm,openstack,cleanup_test_add_vim_account):
-        os_access = {}
-        vim_name = 'helloworld-os'
-        os_access['vim-url'] = 'https://169.254.169.245/'
-        os_access['vim-username'] = 'pytest2'
-        os_access['vim-password'] = 'fred'
-        os_access['vim-tenant-name'] = 'pytest3'
-        os_access['vim-type'] = 'openstack'
-        os_access['description'] = 'a test vim'
-        assert not osm.get_api().vim.create(vim_name,os_access)
-
-        resp=osm.get_api().vim.get(vim_name)
-        assert resp['name'] == vim_name
-        assert resp['vim_type'] == 'openstack'
-        assert resp['vim_url'] == os_access['vim-url']
-        assert resp['vim_user'] == os_access['vim-username']
-        assert resp['vim_tenant_name'] == os_access['vim-tenant-name']
-        assert not osm.get_api().vim.delete(vim_name)
-
-    @pytest.mark.vmware
-    #@pytest.mark.smoke
-    def test_add_vim_account_vmware(self,osm,vmware,cleanup_test_add_vim_account):
-        os_access = {}
-        vim_name = 'helloworld-vmware'
-        os_access['vim-url'] = 'https://169.254.169.245/'
-        os_access['vim-username'] = 'pytest2'
-        os_access['vim-password'] = 'fred'
-        os_access['vim-tenant-name'] = 'pytest3'
-        os_access['vim-type'] = 'vmware'
-        os_access['description'] = 'a test vim'
-        assert not osm.get_api().vim.create(vim_name,os_access)
-
-        resp=osm.get_api().vim.get(vim_name)
-        assert resp['name'] == vim_name
-        assert resp['vim_type'] == 'vmware'
-        assert resp['vim_url'] == os_access['vim-url']
-        assert resp['vim_user'] == os_access['vim-username']
-        assert resp['vim_tenant_name'] == os_access['vim-tenant-name']
-        assert not osm.get_api().vim.delete(vim_name)
-
-    #@pytest.mark.smoke
-    def test_add_multiple_accounts(self,osm,cleanup_test_add_vim_account):
-        os_access = {}
-        vims = [ {'name': 'testvim1', 'vim-type': 'openstack'}, {'name': 'testvim2','vim-type': 'vmware'} ]
-        os_access['vim-url'] = 'https://169.254.169.245/'
-        os_access['vim-username'] = 'pytest2'
-        os_access['vim-password'] = 'fred'
-        os_access['vim-tenant-name'] = 'pytest3'
-        os_access['description'] = 'a test vim'
-
-        for vim in vims:
-            os_access['vim-type'] = vim['vim-type']
-            assert not osm.get_api().vim.create(vim['name'],os_access)
-            resp=osm.get_api().vim.get(vim['name'])
-            assert resp['name'] == vim['name'] 
-            assert resp['vim_type'] == vim['vim-type']
-            assert resp['vim_url'] == os_access['vim-url']
-            assert resp['vim_user'] == os_access['vim-username']
-            assert resp['vim_tenant_name'] == os_access['vim-tenant-name']
-
-        for vim in osm.get_api().vim.list(False):
-            osm.get_api().vim.delete(vim['name'])
diff --git a/systest/testcases/vnfs/test_vnfs.py b/systest/testcases/vnfs/test_vnfs.py
deleted file mode 100644
index 58fc240..0000000
--- a/systest/testcases/vnfs/test_vnfs.py
+++ /dev/null
@@ -1,156 +0,0 @@
-# Copyright 2017 Sandvine
-#
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-import pytest
-import pprint
-import time
-from osmclient.common import utils
-
-
-class TestClass(object):
-
-    @pytest.fixture(scope='function')
-    def cleanup_test_vnf(self,osm,request):
-        vnfd_file_list = osm.vnfd_descriptors_list
-        nsd_file_list = osm.nsd_descriptors_list
-
-        # cleanup all ns/packages that might have been left around
-        def teardown():
-
-            # first delete all nsd's
-            for file in nsd_file_list:
-                try:
-                    desc = osm.get_api().package.get_key_val_from_pkg(file)
-                    ns_name=osm.ns_name_prefix+desc['name']
-                    osm.get_api().ns.delete(ns_name)
-                except:
-                    pass
-
-            # delete all nsd packages
-            for file in nsd_file_list:
-                try:
-                    desc = osm.get_api().package.get_key_val_from_pkg(file)
-                    osm.get_api().nsd.delete(desc['name'])
-                except: 
-                    pass
-
-            # delete all vnfd packages
-            for file in vnfd_file_list:
-                try:
-                    desc = osm.get_api().package.get_key_val_from_pkg(file)
-                    osm.get_api().vnfd.delete(desc['name'])
-                except: 
-                    pass
-
-        request.addfinalizer(teardown)
-
-    def vnf_upload_packages(self, osm, vnfd_file_list, nsd_file_list ):
-        vnfd_descriptors=[]
-        for file in vnfd_file_list:
-            assert not osm.get_api().package.upload(file)
-            assert not osm.get_api().package.wait_for_upload(file)
-            desc = osm.get_api().package.get_key_val_from_pkg(file)
-            assert desc
-            vnfd_descriptors.append(desc)
-
-        nsd_descriptors=[]
-        for file in nsd_file_list:
-            assert not osm.get_api().package.upload(file)
-            assert not osm.get_api().package.wait_for_upload(file)
-            desc = osm.get_api().package.get_key_val_from_pkg(file)
-            assert desc
-            nsd_descriptors.append(desc)
-        # TODO/HACK: need to figure out why this is necessary. 
-        # vnfd/nsd is there (seen on ping_pong), but the ns fails that nsd is not there, 
-        # another way to check if the nsd is really ready via API?
-        time.sleep(5)
-
-    def vnf_test(self,osm, openstack, vim, vmware, vnfd_file_list, nsd_file_list, ns_scale=False):
-
-        # FIXME: need sleep after vim creation. Need a way to validate vim is ready to handle requests
-        time.sleep(20)
-
-        for file in nsd_file_list:
-            nsd_desc = osm.get_api().package.get_key_val_from_pkg(file)
-
-            ns_name=osm.ns_name_prefix+nsd_desc['name']
-
-            assert osm.get_api().ns.create(nsd_desc['name'],ns_name,vim.vim_name)
-           # commenting the init check as sometime it is going to running state very fast
-           
-           # if not utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='init', wait_time=30):
-            #    nsr=osm.get_api().ns.get(ns_name)
-            #    pprint.pprint(nsr)
-            #    assert True, "operational-status != init"
-
-            # make sure ns is running
-            if not utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='running',wait_time=240):
-                nsr=osm.get_api().ns.get(ns_name)
-                pprint.pprint(nsr)
-                assert True, "operational-status != running"
-
-            if ns_scale:
-                # for each descriptor, scale it
-                for scale in nsd_desc['scaling-group-descriptor']:
-                    # scale it.
-                    assert not osm.get_api().ns.scale(ns_name, scale['name'], 1)
-
-                    # ensure ns is scaling-out
-                    assert utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='scaling-out',wait_time=120)
-
-                    # wait for ns to be in running-state
-                    assert utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='running',wait_time=300)
-
-            time.sleep(10)
-
-            assert not osm.get_api().ns.delete(ns_name, wait=True)
-
-            #wait for the ns to delete
-            #try:
-            #    utils.wait_for_value( lambda: osm.get_api().ns.get(ns_name), result=False, wait_time=180)
-            #except:
-            #    print("Exception: Failed to get NAME after NS DELETE ... ")
-            
-            #TODO find the reason for 502 exception from osmclient/nbi            
-            try:
-                assert not osm.get_api().nsd.delete(nsd_desc['name'])
-            except:
-                print("Exception: NSD Delete exception ...due to 502 error")
-                time.sleep(10)
-                
-        for file in vnfd_file_list:
-            vnfd_desc = osm.get_api().package.get_key_val_from_pkg(file)
-            assert not osm.get_api().vnfd.delete(vnfd_desc['name'])
-
-    @pytest.mark.openstack
-    @pytest.mark.vnf
-    @pytest.mark.vmware
-    def test_vnf(self,osm, vim, openstack, vmware, cleanup_test_vnf):
-        vnfd_file_list = osm.vnfd_descriptors_list
-        nsd_file_list = osm.nsd_descriptors_list
-
-        self.vnf_upload_packages(osm, vnfd_file_list, nsd_file_list )
-        self.vnf_test(osm,openstack, vim, vmware, vnfd_file_list, nsd_file_list)
-
-    @pytest.mark.openstack
-    @pytest.mark.ns_scale
-    @pytest.mark.vmware
-    def test_scale_vnf(self,osm, vim, openstack, vmware, cleanup_test_vnf):
-        vnfd_file_list = osm.vnfd_descriptors_list
-        nsd_file_list = osm.nsd_descriptors_list
-
-        self.vnf_upload_packages(osm, vnfd_file_list, nsd_file_list )
-        self.vnf_test(osm,openstack, vim, vmware, vnfd_file_list, nsd_file_list, ns_scale=True)
diff --git a/test/certs.py b/test/certs.py
deleted file mode 100644
index e33a536..0000000
--- a/test/certs.py
+++ /dev/null
@@ -1,43 +0,0 @@
-#   Copyright 2016 RIFT.IO Inc
-#   Copyright 2016 Telefónica Investigación y Desarrollo S.A.U.
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-import os
-
-class BootstrapSslMissingException(Exception):
-    pass
-
-# True if the environment variable is unset, otherwise False
-USE_SSL = os.environ.get("RIFT_BOOT_WITHOUT_HTTPS", None) is None
-
-def get_bootstrap_cert_and_key():
-    '''
-    Lookup the bootstrap certificate and key and return their paths
-    '''
-
-    user_cert = os.path.join("/", "etc", "ssl", "current.cert")
-    user_key = os.path.join("/", "etc", "ssl", "current.key")
-
-    if os.path.isfile(user_cert) and os.path.isfile(user_key):
-        return USE_SSL, user_cert, user_key
-
-    rift_install = os.environ["RIFT_INSTALL"]
-    rift_cert = os.path.join(rift_install, "etc", "ssl", "current.cert")
-    rift_key = os.path.join(rift_install, "etc", "ssl", "current.key")
-
-    if os.path.isfile(rift_cert) and os.path.isfile(rift_key):
-        return USE_SSL, rift_cert, rift_key
-
-    raise BootstrapSslMissingException()
-
diff --git a/test/conftest.py b/test/conftest.py
deleted file mode 100644
index eb49b79..0000000
--- a/test/conftest.py
+++ /dev/null
@@ -1,64 +0,0 @@
-import pytest
-
-def pytest_addoption(parser):
-    parser.addoption('--so-host', action='store', default='127.0.0.1')
-    parser.addoption('--so-port', action='store', default='8008')
-    parser.addoption('--so-user', action='store', default='admin')
-    parser.addoption('--so-pass', action='store', default='admin')
-    parser.addoption('--vim-type', action='store')
-    parser.addoption('--vim-host', action='store')
-    parser.addoption('--vim-user', action='store')
-    parser.addoption('--vim-tenant', action='store')
-    parser.addoption('--vim-pass', action='store')
-    parser.addoption('--package-location', action='store')
-    return parser
-
-@pytest.fixture(scope='session')
-def so_host(request):
-    """Fixture that returns --so-host option value"""
-    return request.config.getoption("--so-host")
-
-@pytest.fixture(scope='session')
-def so_port(request):
-    """Fixture that returns --so-port option value"""
-    return request.config.getoption("--so-port")
- 
-@pytest.fixture(scope='session')
-def so_user(request):
-    """Fixture that returns --so-user option value"""
-    return request.config.getoption("--so-user")
-
-@pytest.fixture(scope='session')
-def so_pass(request):
-    """Fixture that returns --so-pass option value"""
-    return request.config.getoption("--so-pass")
- 
-@pytest.fixture(scope='session')
-def vim_type(request):
-    """Fixture that returns --vim-type option value"""
-    return request.config.getoption("--vim-type")
-    
-@pytest.fixture(scope='session')
-def vim_host(request):
-    """Fixture that returns --vim-host option value"""
-    return request.config.getoption("--vim-host")
-    
-@pytest.fixture(scope='session')
-def vim_user(request):
-    """Fixture that returns --vim-user option value"""
-    return request.config.getoption("--vim-user")
-
-@pytest.fixture(scope='session')
-def vim_pass(request):
-    """Fixture that returns --vim-pass option value"""
-    return request.config.getoption("--vim-pass")
-
-@pytest.fixture(scope='session')
-def vim_tenant(request):
-    """Fixture that returns --vim-tenant option value"""
-    return request.config.getoption("--vim-tenant")
-
-@pytest.fixture(scope='session')
-def package_location(request):
-    """Fixture that returns --package-location option value"""
-    return request.config.getoption("--package-location")
diff --git a/test/example/config.yaml b/test/example/config.yaml
deleted file mode 100644
index b6b6176..0000000
--- a/test/example/config.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-so_host:
-    type: 'string'
-    default: '127.0.0.1'
-    description: 'Host name or ip of the SO'
-so_port:
-    type: int
-    default: 80
-    description: 'Port'
diff --git a/test/example/conftest.py b/test/example/conftest.py
deleted file mode 100644
index 3798a15..0000000
--- a/test/example/conftest.py
+++ /dev/null
@@ -1,22 +0,0 @@
-import yaml
-
-
-config = None
-with open('config.yaml') as f:
-    config = yaml.load(f)
-
-
-def pytest_addoption(parser):
-    for param in config:
-        parser.addoption("--{}".format(param),
-                         action="store",
-                         type="{}".format(config[param]["type"]),
-                         default="{}".format(config[param]["default"]),
-                         help="{}".format(config[param]["description"])
-                         )
-
-
-def pytest_generate_tests(metafunc):
-    for param in config:
-        if param in metafunc.fixturenames:
-            metafunc.parametrize(param, [metafunc.config.getoption(param)])
diff --git a/test/example/test_strings.py b/test/example/test_strings.py
deleted file mode 100644
index c156dc9..0000000
--- a/test/example/test_strings.py
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-def test_host(so_host):
-    assert so_host == '127.0.0.1'
-
-
-def test_port(so_host, so_port):
-    assert so_host == '127.0.0.1'
-    assert so_port == 80
diff --git a/test/test_cirros.py b/test/test_cirros.py
deleted file mode 100644
index 1451d11..0000000
--- a/test/test_cirros.py
+++ /dev/null
@@ -1,185 +0,0 @@
-#!/usr/bin/env python3
-#   Copyright 2016 RIFT.IO Inc
-#   Copyright 2016 Telefónica Investigación y Desarrollo S.A.U.
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-import json
-import logging
-import pytest
-import requests
-import subprocess
-import time
-import yaml
-import certs
-
-logger = logging.getLogger(__name__)
-
-
-def chomp_json(string):
-    return ''.join([line.strip() for line in string.splitlines()])
-
-
-@pytest.fixture(scope='session')
-def session(request, so_user, so_pass):
-    client_session = requests.session()
-    client_session.auth = (so_user, so_pass)
-    client_session.headers = {
-        "Accept": "application/vnd.yang.data+json",
-        "Content-Type": "application/vnd.yang.data+json",
-    }
-    client_session.verify = False
-    _, cert, key = certs.get_bootstrap_cert_and_key()
-    client_session.cert = (cert, key)
-    return client_session
-
-
-@pytest.fixture(scope='session')
-def fetch_packages():
-    """ Fetch NSD/VNFD packages"""
-    wget_command = 'wget --no-parent -r https://osm-download.etsi.org/ftp/osm-1.0-one/vnf-packages'
-    subprocess.check_call(wget_command, shell=True)
-
-
-@pytest.fixture(scope='session')
-def rest_endpoint(so_host, so_port):
-    return 'https://{host}:{port}'.format(host=so_host, port=so_port)
-
-
-def test_so_started(session, rest_endpoint):
-    ''' Get contents of /vcs/info/components and verify all components have started successfully
-    '''
-    uri = "{endpoint}/api/operational/vcs/info/components".format(endpoint=rest_endpoint)
-    response = session.request("GET", uri)
-    vcs_info = json.loads(response.text)
-    for component in vcs_info['rw-base:components']['component_info']:
-        assert component['state'] == 'RUNNING'
-
-
-@pytest.fixture(scope='session')
-def cirros_vnfd_pkg(package_location):
-    '''cirros vnfd package location'''
-    return "%s/cirros_vnf.tar.gz" % (package_location)
-
-
-@pytest.fixture(scope='session')
-def cirros_nsd_pkg(package_location):
-    '''cirros  nsd package location'''
-    return "%s/cirros_2vnf_ns.tar.gz" % (package_location)
-
-
-def test_onboard_cirros_descriptors(session, so_host, cirros_vnfd_pkg,
-                                    cirros_nsd_pkg, rest_endpoint):
-    ''' Onboard Cirros NSD/VNFD descriptors
-    '''
-    onboard_command = 'onboard_pkg -s {host} -u {cirros_vnfd_pkg}'.format(
-        host=so_host,
-        cirros_vnfd_pkg=cirros_vnfd_pkg,
-    )
-    subprocess.check_call(onboard_command, shell=True)
-
-    onboard_command = 'onboard_pkg -s {host} -u {cirros_nsd_pkg}'.format(
-        host=so_host,
-        cirros_nsd_pkg=cirros_nsd_pkg,
-    )
-    subprocess.check_call(onboard_command, shell=True)
-
-
-def test_instantiate_cirros(session, so_host, data_center_id, rest_endpoint):
-    ''' Instantiate an instance of cirros from descriptors
-    '''
-    uri = "{endpoint}/api/operational/nsd-catalog".format(endpoint=rest_endpoint)
-    response = session.request("GET", uri)
-    catalog = json.loads(response.text)
-    cirros_nsd = None
-    for nsd in catalog['nsd:nsd-catalog']['nsd']:
-        if nsd['name'] == 'cirros_2vnf_nsd':
-            cirros_nsd = nsd
-            break
-    assert cirros_nsd is not None
-
-    instantiate_command = 'onboard_pkg -s {host} -i instance-0 -d {nsd_id} -D {data_center_id}'.format(
-        host=so_host,
-        nsd_id=cirros_nsd['id'],
-        data_center_id=data_center_id
-    )
-    subprocess.check_call(instantiate_command, shell=True)
-
-    def wait_for_cirros_ns(instance_name, timeout=600, retry_interval=5):
-        start_time = time.time()
-        while True:
-            uri = "{endpoint}/api/operational/ns-instance-opdata".format(endpoint=rest_endpoint)
-            response = session.request("GET", uri)
-            print(response, response.text)
-            opdata = json.loads(response.text)
-
-            nsr = None
-            for instance in opdata['nsr:ns-instance-opdata']['nsr']:
-                if instance['name-ref'] == instance_name:
-                    nsr = instance
-
-            assert nsr is not None, response.text
-            assert nsr['operational-status'] not in ['failed']
-            assert nsr['config-status'] not in ['failed']
-
-            if nsr['operational-status'] in ['running'] and nsr['config-status'] in ['configured']:
-                break
-
-            time_elapsed = time.time() - start_time
-            time_remaining = timeout - time_elapsed
-            assert time_remaining > 0
-            time.sleep(min(time_remaining, retry_interval))
-
-    wait_for_cirros_ns('instance-0')
-
-
-@pytest.fixture(scope='session')
-def test_add_datacenter(name, url, vim_type, tenant_id=None, tenant_name=None, user=None, password=None,
-                        description=None, config=None):
-    ''' Add a datacenter to RO
-    '''
-    onboard_command = \
-        'lxc exec RO --env OPENMANO_TENANT=osm -- openmano datacenter-create "{name}" "{url}" --type={vimtype}'.format(
-            name=name, url=url, vimtype=vim_type)
-    if description:
-        onboard_command += ' --description="{}"'.format(description)
-    out = subprocess.check_output(onboard_command, shell=True)
-    assert out
-    datacenter_id = out.split()[0]
-
-    onboard_command = 'lxc exec RO --env OPENMANO_TENANT=osm -- openmano datacenter-attach {id}'.format(
-        id=datacenter_id)
-    if tenant_id:
-        onboard_command += " --vim_tenant_id=" + tenant_id
-    if tenant_name:
-        onboard_command += " --vim_tenant_name=" + tenant_name
-    if user:
-        onboard_command += " --user=" + user
-    if password:
-        onboard_command += " --password=" + password
-    if config:
-        onboard_command += " --config=" + yaml.safe_dump(config)
-
-    subprocess.check_call(onboard_command, shell=True)
-    return datacenter_id
-
-@pytest.fixture(scope='session')
-def get_datacenter_id(name):
-    ''' Get the id of a datacenter
-    '''
-    onboard_command = \
-        'lxc exec RO --env OPENMANO_TENANT=osm -- openmano datacenter-list {name}'.format(name=name)
-    out = subprocess.check_output(onboard_command, shell=True)
-    assert(out)
-    datacenter_id = out.split()[0]
-    return datacenter_id
diff --git a/test/test_pingpong_osm.py b/test/test_pingpong_osm.py
deleted file mode 100644
index ca4ba09..0000000
--- a/test/test_pingpong_osm.py
+++ /dev/null
@@ -1,182 +0,0 @@
-#   Copyright 2016 RIFT.IO Inc
-#   Copyright 2016 Telefónica Investigación y Desarrollo S.A.U.
-#
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-#!/usr/bin/env python3
-
-import json
-import logging
-import os
-import pytest
-import requests
-import requests_toolbelt
-import subprocess
-import time
-
-import certs
-
-logger = logging.getLogger(__name__)
-
-def chomp_json(string):
-    return ''.join([line.strip() for line in string.splitlines()])
-
-@pytest.fixture(scope='session')
-def session(request, so_user, so_pass):
-    client_session = requests.session()
-    client_session.auth = (so_user, so_pass)
-    client_session.headers = {
-        "Accept" : "application/vnd.yang.data+json",
-        "Content-Type" : "application/vnd.yang.data+json",
-    }
-    client_session.verify = False
-    _, cert, key = certs.get_bootstrap_cert_and_key()
-    client_session.cert = (cert, key)
-    return client_session
-
-@pytest.fixture(scope='session')
-def rest_endpoint(so_host, so_port):
-    return 'https://{host}:{port}'.format(host=so_host, port=so_port)
-
-def test_so_started(session, rest_endpoint):
-    ''' Get contents of /vcs/info/components and verify all components have started successfully
-    '''
-    uri = "{endpoint}/api/operational/vcs/info/components".format(endpoint=rest_endpoint)
-    response = session.request("GET", uri)
-    vcs_info = json.loads(response.text)
-    for component in vcs_info['rw-base:components']['component_info']:
-        assert component['state'] == 'RUNNING'
-
-def test_configure_vim_account(session, rest_endpoint, vim_type, vim_host, vim_user, vim_tenant, vim_pass):
-    ''' Configure an openstack vim account
-    '''
-    uri = "{endpoint}/api/config/cloud/account".format(
-        endpoint=rest_endpoint,
-    )
-    account = '''
-    {
-        "account":{
-            "name":"vim-0",
-            "account-type":"openstack",
-            "openstack":{
-                "admin":"True",
-                "key": "%s",
-                "secret": "%s",
-                "auth_url": "http://%s:5000/v3/",
-                "tenant": "%s",
-                "mgmt-network": "private"
-            }
-        }
-    }
-    ''' % (vim_user, vim_pass, vim_host, vim_tenant)
-    response = session.request("POST", uri, data=chomp_json(account))
-
-    uri = "{endpoint}/api/operational/cloud/account".format(endpoint=rest_endpoint)
-    response = session.request("GET", uri)
-    assert 'error' not in response.text
-    vim_accounts = json.loads(response.text)
-    assert vim_accounts
-
-    found_account = False
-    for account in vim_accounts['rw-cloud:account']:
-        if account['name'] == 'vim-0':
-            found_account = True
-            break
-    assert found_account == True
-
-
-@pytest.fixture(scope='session')
-def ping_pkg(package_location):
-    '''ping vnfd package location'''
-    return "%s/ping_vnfd.tar.gz" % (package_location)
-
-
-@pytest.fixture(scope='session')
-def pong_pkg(package_location):
-    '''pong vnfd package location'''
-    return "%s/pong_vnfd.tar.gz" % (package_location)
-
-
-@pytest.fixture(scope='session')
-def ping_pong_pkg(package_location):
-    '''ping pong nsd package location'''
-    return "%s/ping_pong_nsd.tar.gz" % (package_location)
-
-
-def test_onboard_pingpong_descriptors(session, so_host, ping_pkg, pong_pkg, ping_pong_pkg, rest_endpoint):
-    ''' Onboard ping_pong descriptors
-    '''
-    onboard_command = 'onboard_pkg -s {host} -u {ping_pkg}'.format(
-        host=so_host,
-        ping_pkg=ping_pkg,
-    )
-    subprocess.check_call(onboard_command, shell=True)
-
-    onboard_command = 'onboard_pkg -s {host} -u {pong_pkg}'.format(
-        host=so_host,
-        pong_pkg=pong_pkg,
-    )
-    subprocess.check_call(onboard_command, shell=True)
-
-    onboard_command = 'onboard_pkg -s {host} -u {ping_pong_pkg}'.format(
-        host=so_host,
-        ping_pong_pkg=ping_pong_pkg,
-    )
-    subprocess.check_call(onboard_command, shell=True)
-
-
-def test_instantiate_ping_pong(session, so_host, rest_endpoint):
-    ''' Instantiate an instance of ping pong from descriptors
-    '''
-    uri = "{endpoint}/api/operational/nsd-catalog".format(endpoint=rest_endpoint)
-    response = session.request("GET", uri)
-    catalog = json.loads(response.text)
-    ping_pong_nsd = None
-    for nsd in catalog['nsd:nsd-catalog']['nsd']:
-        if nsd['name'] == 'ping_pong_nsd':
-            ping_pong_nsd = nsd
-            break
-    assert ping_pong_nsd is not None
-
-    instantiate_command = 'onboard_pkg -s {host} -i instance-0 -d {nsd_id} -c vim-0'.format(
-        host=so_host,
-        nsd_id=ping_pong_nsd['id']
-    )
-    subprocess.check_call(instantiate_command, shell=True)
-
-    def wait_for_ping_pong(instance_name, timeout=600, retry_interval=5):
-        start_time = time.time()
-        while True:
-            uri = "{endpoint}/api/operational/ns-instance-opdata".format(endpoint=rest_endpoint)
-            response = session.request("GET", uri)
-            print(response, response.text)
-            opdata = json.loads(response.text)
-
-            nsr = None
-            for instance in opdata['nsr:ns-instance-opdata']['nsr']:
-                if instance['name-ref'] == instance_name:
-                    nsr = instance
-
-            assert nsr is not None, response.text
-            assert nsr['operational-status'] not in ['failed']
-            assert nsr['config-status'] not in ['failed']
-
-            if nsr['operational-status'] in ['running'] and nsr['config-status'] in ['configured']:
-                break
-
-            time_elapsed = time.time() - start_time
-            time_remaining = timeout - time_elapsed
-            assert time_remaining > 0
-            time.sleep(min(time_remaining, retry_interval))
-
-    wait_for_ping_pong('instance-0')
diff --git a/tools/OVF_converter/Usage.txt b/tools/OVF_converter/Usage.txt
deleted file mode 100644
index 67671b1..0000000
--- a/tools/OVF_converter/Usage.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-##
-# Copyright 2016-2019 VMware Inc.
-# This file is part of ETSI OSM
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact:  osslegalrouting@vmware.com
-##
-
-The following two tools are provided to help simplify VMware based image
-management:
-
-o  ovf_converter - converts libvirt .qcow2 files to VMware .vmdk format.
-o  ovf_uploader  - uploads .ovf and .vmdk files to vCD, similar to
-                      openstack image upload command.
-
-OVF Converter Usage
-===================
-
-This utility can be used for both VMware Integrated Openstack (VIO) or
-vCloud Director (vCD).  It converts libvirt images, such as files that end
-in .qcow2 or .img to VMware .vmdk format.  Both an .ovf and .vmdk file are
-created and can be used as needed.
-
-OVF Uploader Usage
-==================
-
-This utility is only used for vCD, as there is no equivalent CLI that provides
-the ability to upload images into vCD.  It takes the output OVF from the
-converter and uploads both it and the VMDK file to the vCD catalog.
-
-Examples:
-=========
-
-o  Upload a CentOS .qcow2 file to VIO
-
-   $ ovf_converter CentOS-7-x86_64-GenericCloud.qcow2
-   $ openstack image create --public \
-     --file CentOS-7-x86_64-GenericCloud.vmdk \
-     --disk-format vmdk CentOS-7
-
-o  Upload a CentOS .qcow2 file to vCD
-
-   $ ovf_converter CentOS-7-x86_64-GenericCloud.qcow2
-   $ ovf_uploader -u orgadmin -p password -o osm -l https://vcd \
-     CentOS-7-x86_64-GenericCloud.ovf
-
-Both commands suport -h to display help options.
-
diff --git a/tools/OVF_converter/config/disk_controller.yaml b/tools/OVF_converter/config/disk_controller.yaml
deleted file mode 100644
index b090232..0000000
--- a/tools/OVF_converter/config/disk_controller.yaml
+++ /dev/null
@@ -1,30 +0,0 @@
-##
-# Copyright 2016-2017 VMware Inc.
-# This file is part of ETSI OSM
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact:  osslegalrouting@vmware.com
-##
- 
----
-SATA Controller:
-  ResourceType: 20
-  ResourceSubTypes: ["vmware.sata.ahci"]
-IDE Controller:
-  ResourceType: 5
-SCSI Controller:
-  ResourceType: 6
-  ResourceSubTypes: ["VirtualSCSI", "lsilogic", "buslogic", "lsilogicsas"]
\ No newline at end of file
diff --git a/tools/OVF_converter/config/os_type.yaml b/tools/OVF_converter/config/os_type.yaml
deleted file mode 100644
index 385cd7b..0000000
--- a/tools/OVF_converter/config/os_type.yaml
+++ /dev/null
@@ -1,138 +0,0 @@
-##
-# Copyright 2016-2017 VMware Inc.
-# This file is part of ETSI OSM
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact:  osslegalrouting@vmware.com
-##
-
----
-'0': Unknown
-'1': Other (32-bit)
-'2': MACOS
-'3': ATTUNIX
-'4': DGUX
-'5': DECNT
-'6': Tru64 UNIX
-'7': OpenVMS
-'8': HPUX
-'9': AIX
-'10': MVS
-'11': OS400
-'12': OS/2
-'13': JavaVM
-'14': MSDOS
-'15': WIN3x
-'16': WIN95
-'17': WIN98
-'18': WINNT
-'19': WINCE
-'20': NCR3000
-'21': NetWare
-'22': OSF
-'23': DC/OS
-'24': Reliant UNIX
-'25': SCO UnixWare
-'26': SCO OpenServer
-'27': Sequent
-'28': IRIX
-'29': Solaris
-'30': SunOS
-'31': U6000
-'32': ASERIES
-'33': HP NonStop OS
-'34': HP NonStop OSS
-'35': BS2000
-'36': LINUX
-'37': Lynx
-'38': XENIX
-'39': VM
-'40': Interactive UNIX
-'41': BSDUNIX
-'42': FreeBSD
-'43': NetBSD
-'44': GNU Hurd
-'45': OS9
-'46': MACH Kernel
-'47': Inferno
-'48': QNX
-'49': EPOC
-'50': IxWorks
-'51': VxWorks
-'52': MiNT
-'53': BeOS
-'54': HP MPE
-'55': NextStep
-'56': PalmPilot
-'57': Rhapsody
-'58': Windows 2000
-'59': Dedicated
-'60': OS/390
-'61': VSE
-'62': TPF
-'63': Windows (R) Me
-'64': Caldera Open UNIX
-'65': OpenBSD
-'66': Not Applicable
-'67': Windows XP
-'68': z/OS
-'69': Microsoft Windows Server 2003
-'70': Microsoft Windows Server 2003 64-Bit
-'71': Windows XP 64-Bit
-'72': Windows XP Embedded
-'73': Windows Vista
-'74': Windows Vista 64-Bit
-'75': Windows Embedded for Point of Service
-'76': Microsoft Windows Server 2008
-'77': Microsoft Windows Server 2008 64-Bit
-'78': FreeBSD 64-Bit
-'79': RedHat Enterprise Linux
-'80': RedHat Enterprise Linux 64-Bit
-'81': Solaris 64-Bit
-'82': SUSE
-'83': SUSE 64-Bit
-'84': SLES
-'85': SLES 64-Bit
-'86': Novell OES
-'87': Novell Linux Desktop
-'88': Sun Java Desktop System
-'89': Mandriva
-'90': Mandriva 64-Bit
-'91': TurboLinux
-'92': TurboLinux 64-Bit
-'93': Ubuntu
-'94': Ubuntu 64-Bit
-'95': Debian
-'96': Debian 64-Bit
-'97': Linux 2.4.x
-'98': Linux 2.4.x 64-Bit
-'99': Linux 2.6.x
-'100': Linux 2.6.x 64-Bit
-'101': Linux 64-Bit
-'102': Other 64-Bit
-'103': Microsoft Windows Server 2008 R2
-'104': VMware ESXi
-'105': Microsoft Windows 7
-'106': CentOS 32-bit
-'107': CentOS 64-bit
-'108': Oracle Linux 32-bit
-'109': Oracle Linux 64-bit
-'110': eComStation 32-bitx
-'111': Microsoft Windows Server 2011
-'113': Microsoft Windows Server 2012
-'114': Microsoft Windows 8
-'115': Microsoft Windows 8 64-bit
-'116': Microsoft Windows Server 2012 R2
diff --git a/tools/OVF_converter/converter.py b/tools/OVF_converter/converter.py
deleted file mode 100644
index 8c68947..0000000
--- a/tools/OVF_converter/converter.py
+++ /dev/null
@@ -1,587 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-
-# #
-# Copyright 2016-2017 VMware Inc.
-# This file is part of ETSI OSM
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact:  osslegalrouting@vmware.com
-# #
-
-import logging
-import os
-import subprocess
-import yaml
-from lxml import etree as ET
-
-# file paths
-MODULE_DIR = os.path.dirname(__file__)
-OVF_TEMPLATE_PATH = os.path.join(MODULE_DIR,
-                                 "ovf_template/template.xml")
-IDE_CDROM_XML_PATH = os.path.join(MODULE_DIR,
-                                  "ovf_template/ide_cdrom.xml")
-OS_INFO_FILE_PATH = os.path.join(MODULE_DIR,
-                                 "config/os_type.yaml")
-DISK_CONTROLLER_INFO_FILE_PATH = os.path.join(MODULE_DIR,
-                                              "config/disk_controller.yaml")
-
-# Set logger
-LOG_FILE = os.path.join(MODULE_DIR, "logs/ovf_converter.log")
-os.makedirs(os.path.dirname(LOG_FILE), exist_ok=True)
-logger = logging.getLogger(__name__)
-hdlr = logging.FileHandler(LOG_FILE)
-formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
-hdlr.setFormatter(formatter)
-logger.addHandler(hdlr)
-logger.setLevel(10)
-
-__version__ = "1.2"
-__description__ = "OVF Hardware Version 14 compatible"
-
-
-def get_version(*args, **kwargs):
-    """ get version of this application"""
-    version = str(__version__) + " - " + str(__description__)
-    return version
-
-
-# converter class
-class OVFConverter(object):
-    """ Class to convert input image into OVF format """
-
-    def __init__(self, source_img_path, output_location=None, output_ovf_name=None,
-                 memory=None, cpu=None, disk=None, os_type=None,
-                 disk_controller=None, cdrom=None, hwversion=14):
-        """
-            Constructor to initialize object of class OVFConverter
-            Args:
-            source_img_path - absolute path to source image which will get convert into ovf
-            output_location - location where created OVF will be kept. This location
-                              should have write access. If not given file will get
-                              created at source location  (optional)
-            output_ovf_name - name of output ovf.If not given source image name will
-                              be used (optional)
-            memory -          required memory for VM in MB (optional)
-            cpu -             required number of virtual cpus for VM (optional)
-            disk -            required size of disk for VM in GB (optional)
-            os_type-          required operating system type as specified in user document
-                              (default os type other 32 bit) (optional)
-            disk_controller - required disk controller type
-                              (default controller SCSI with lsilogicsas)
-                              (SATA, IDE, Paravirtual, Buslogic, Lsilogic, Lsilogicsas) (optional)
-            hwversion -       VMware ESXi hardware family version (optional)
-
-            Returns:
-                Nothing.
-        """
-        self.logger = logger
-        self.ovf_template_path = OVF_TEMPLATE_PATH
-
-        self.source_img_path = source_img_path
-        self.source_img_filename, file_extension = os.path.splitext(os.path.basename(self.source_img_path))
-        self.source_img_location = os.path.dirname(self.source_img_path)
-        self.source_format = file_extension[1:]
-
-        self.output_format = "ovf"
-        self.output_ovf_name = output_ovf_name.split('.')[0] if output_ovf_name else self.source_img_filename
-        self.output_location = output_location if output_location else "."
-        self.output_ovf_name_ext = self.output_ovf_name + "." + self.output_format
-        self.output_path = os.path.join(self.output_location, self.output_ovf_name_ext)
-
-        self.output_diskimage_format = "vmdk"
-        self.output_diskimage_name = self.source_img_filename + "." + self.output_diskimage_format
-        self.output_diskimage_path = os.path.join(self.output_location, self.output_diskimage_name)
-
-        self.logger.info("Input parameters to Converter: \n ovf_template_path = {}, \n source_img_path = {}, \n"
-                         "source_img_location ={} , \n source_format = {}, \n source_img_filename = {}".format(
-                             self.ovf_template_path,
-                             self.source_img_path, self.source_img_location,
-                             self.source_format, self.source_img_filename))
-
-        self.logger.info("Output parameters to Converter: \n output_format = {}, \n output_ovf_name = {}, \n"
-                         "output_location ={} , \n output_path = {}, \n output_diskimage_name = {} , \n"
-                         " output_diskimage_path = {} ".format(self.output_format, self.output_ovf_name,
-                                                               self.output_location, self.output_path,
-                                                               self.output_diskimage_name, self.output_diskimage_path))
-
-        self.disk_capacity = 1
-        self.disk_populated_size = 0
-
-        self.vm_name = self.output_ovf_name
-        self.memory = str(memory) if memory is not None else None
-        self.cpu = str(cpu) if cpu is not None else None
-        self.os_type = str(os_type).strip() if os_type else None
-        self.cdrom = cdrom
-        self.hwversion = hwversion
-
-        if self.os_type:
-            self.osID, self.osType = self.__get_osType()
-            if self.osID is None or self.osType is None:
-                error_msg = "ERROR: Invalid input can not find OS type {} ".format(self.os_type)
-                self.__raise_exception(error_msg)
-
-        self.disk_controller = str(disk_controller).strip() if disk_controller else None
-
-        if self.disk_controller:
-            self.disk_controller_info = self.__get_diskcontroller()
-
-            if not self.disk_controller_info:
-                error_msg = "ERROR: Invalid input can not find Disk Controller {} ".format(self.disk_controller)
-                self.__raise_exception(error_msg)
-
-        if disk is not None:
-            # convert disk size from GB to bytes
-            self.disk_size = int(disk) * 1024 * 1024 * 1024
-        else:
-            self.disk_size = None
-
-        self.logger.info("Other input parameters to Converter: \n vm_name = {}, \n memory = {}, \n"
-                         "disk_size ={} \n os type = {} \n disk controller = {}".format(
-                             self.vm_name, self.memory, self.disk_size, self.os_type, self.disk_controller))
-
-        # check access for read input location and write output location return none if no access
-        if not os.access(self.source_img_path, os.F_OK):
-            error_msg = "ERROR: Source image file {} not present".format(self.source_img_path)
-            self.__raise_exception(error_msg, exception_type="IO")
-
-        elif not os.access(self.source_img_path, os.R_OK):
-            error_msg = "ERROR: Cannot read source image file {}".format(self.source_img_path)
-            self.__raise_exception(error_msg, exception_type="IO")
-
-        if not os.access(self.output_location, os.W_OK):
-            error_msg = "ERROR: No write access to location {} to write output OVF ".format(self.output_location)
-            self.__raise_exception(error_msg, exception_type="IO")
-
-    def __get_image_info(self):
-        """
-            Private method to get information about source imager.
-            Args  : None
-            Return : True on success else False
-        """
-        try:
-            print("Getting source image information")
-            command = "qemu-img info \t " + self.source_img_path
-            output, error, returncode = self.__execute_command(command)
-
-            if error or returncode:
-                self.logger.error("ERROR: Error occurred while getting information about source image : {} \n "
-                                  "return code : {} ".format(error, returncode))
-                return False
-
-            elif output:
-                self.logger.info("Get Image Info Output : {} \n ".format(output))
-                split_output = output.decode().split("\n")
-                for line in split_output:
-                    line = line.strip()
-                    if "virtual size" in line:
-                        virtual_size_info = line.split(":")[1].split()
-                        if len(virtual_size_info) == 3 and virtual_size_info[2].strip(")") == "bytes":
-                            self.disk_capacity = int(virtual_size_info[1].strip("("))
-                        else:
-                            self.disk_capacity = self.__convert_size(virtual_size_info[0])
-
-                    elif "disk size" in line:
-                        size = line.split(":")[1].split()[0]
-                        self.disk_populated_size = self.__convert_size(size)
-                    elif "file format" in line:
-                        self.source_format = line.split(":")[1]
-
-                self.logger.info("Updated source image virtual disk capacity : {} ,"
-                                 "Updated source image populated size: {}".format(self.disk_capacity,
-                                                                                  self.disk_populated_size))
-                return True
-        except Exception as exp:
-            error_msg = "ERROR: Error occurred while getting information about source image : {}".format(exp)
-            self.logger.error(error_msg)
-            print(error_msg)
-            return False
-
-    def __convert_image(self):
-        """
-            Private method to convert source disk image into .vmdk disk image.
-            Args  : None
-            Return : True on success else False
-        """
-
-        print("Converting source disk image to .vmdk ")
-
-        command = "qemu-img convert -p -f " + self.source_format + " -O " + self.output_diskimage_format + \
-            " -o subformat=streamOptimized " + self.source_img_path + " " + self.output_diskimage_path
-
-        _, error, returncode = self.__execute_command(command, show_output=True)
-
-        if error or returncode:
-            error_msg = "ERROR: Error occurred while converting source disk image into vmdk: {}\n" + \
-                "return code : {} ".format(error, returncode)
-            self.logger.error(error_msg)
-            print(error_msg)
-            return False
-        else:
-            if os.path.isfile(self.output_diskimage_path):
-                self.logger.info("Successfully converted source image {} into {} \n "
-                                 "return code : {} ".format(self.source_img_path,
-                                                            self.output_diskimage_path,
-                                                            returncode))
-                result = self.__make_image_bootable()
-                if result:
-                    self.logger.info("Made {} bootable".format(self.output_diskimage_path))
-                    print("Output VMDK is at: {}".format(self.output_diskimage_path))
-                    return True
-                else:
-                    self.logger.error("Cannot make {} bootable".format(self.output_diskimage_path))
-                    print("ERROR: Fail to convert source image into .vmdk")
-                    return False
-            else:
-                self.logger.error("Converted vmdk disk file {} is not present \n ".format(
-                    self.output_diskimage_path))
-                print("Fail to convert source image into .vmdk")
-                return False
-
-    def __make_image_bootable(self):
-        """
-            Private method to make source disk image bootable.
-            Args  : None
-            Return : True on success else False
-        """
-        command = "printf '\x03' | dd conv=notrunc of=" + self.output_diskimage_path + "\t bs=1 seek=$((0x4))"
-        output, error, returncode = self.__execute_command(command)
-
-        if error and returncode:
-            error_msg = "ERROR:Error occurred while making source disk image bootable : {} \n "\
-                "return code : {} ".format(error, returncode)
-            self.logger.error(error_msg)
-            print(error_msg)
-            return False
-        else:
-            self.logger.info("Make Image Bootable Output : {} ".format(output))
-            return True
-
-    def __edit_ovf_template(self):
-        """
-            Private method to create new OVF file by editing OVF template
-            Args  : None
-            Return : True on success else False
-        """
-        try:
-            print("Creating OVF")
-            # Read OVF template file
-            OVF_tree = ET.parse(self.ovf_template_path)
-            root = OVF_tree.getroot()
-
-            # Collect namespaces
-            nsmap = {k: v for k, v in root.nsmap.items() if k}
-            nsmap["xmlns"] = "http://schemas.dmtf.org/ovf/envelope/1"
-
-            # Edit OVF template
-            references = root.find('xmlns:References', nsmap)
-            if references is not None:
-                file_tag = references.find('xmlns:File', nsmap)
-                if file_tag is not None:
-                    file_tag.attrib['{' + nsmap['ovf'] + '}href'] = self.output_diskimage_name
-
-            disksection = root.find('xmlns:DiskSection', nsmap)
-            if disksection is not None:
-                diak_tag = disksection.find('xmlns:Disk', nsmap)
-                if diak_tag is not None:
-                    if self.disk_size and self.disk_size > self.disk_capacity:
-                        self.disk_capacity = self.disk_size
-
-                    diak_tag.attrib['{' + nsmap['ovf'] + '}capacity'] = str(self.disk_capacity)
-                    diak_tag.attrib['{' + nsmap['ovf'] + '}populatedSize'] = str(self.disk_populated_size)
-
-            virtuasystem = root.find('xmlns:VirtualSystem', nsmap)
-            if virtuasystem is not None:
-                name_tag = virtuasystem.find('xmlns:Name', nsmap)
-                if name_tag is not None:
-                    name_tag.text = self.vm_name
-
-                if self.os_type is not None:
-                    operatingSystemSection = virtuasystem.find('xmlns:OperatingSystemSection', nsmap)
-                    if self.osID and self.osType:
-                        operatingSystemSection.attrib['{' + nsmap['ovf'] + '}id'] = self.osID
-                        os_discription_tag = operatingSystemSection.find('xmlns:Description', nsmap)
-                        os_discription_tag.text = self.osType
-
-                virtualHardwareSection = virtuasystem.find('xmlns:VirtualHardwareSection', nsmap)
-                system = virtualHardwareSection.find('xmlns:System', nsmap)
-                virtualSystemIdentifier = system.find('vssd:VirtualSystemIdentifier', nsmap)
-                if virtualSystemIdentifier is not None:
-                    virtualSystemIdentifier.text = self.vm_name
-                VirtualSystemType = system.find('vssd:VirtualSystemType', nsmap)
-                if VirtualSystemType is not None:
-                    VirtualSystemType.text = "vmx-{}".format(self.hwversion)
-
-                if self.memory is not None or self.cpu is not None or self.disk_controller is not None:
-                    for item in virtualHardwareSection.iterfind('xmlns:Item', nsmap):
-                        description = item.find("rasd:Description", nsmap)
-
-                        if self.cpu is not None:
-                            if description is not None and description.text == "Number of Virtual CPUs":
-                                cpu_item = item.find("rasd:VirtualQuantity", nsmap)
-                                name_item = item.find("rasd:ElementName", nsmap)
-                                if cpu_item is not None:
-                                    cpu_item.text = self.cpu
-                                    name_item.text = self.cpu + " virtual CPU(s)"
-
-                        if self.memory is not None:
-                            if description is not None and description.text == "Memory Size":
-                                mem_item = item.find("rasd:VirtualQuantity", nsmap)
-                                name_item = item.find("rasd:ElementName", nsmap)
-                                if mem_item is not None:
-                                    mem_item.text = self.memory
-                                    name_item.text = self.memory + " MB of memory"
-
-                        if self.disk_controller is not None:
-                            if description is not None and description.text == "SCSI Controller":
-                                if self.disk_controller_info is not None:
-                                    name_item = item.find("rasd:ElementName", nsmap)
-                                    name_item.text = str(self.disk_controller_info["controllerName"]) + "0"
-
-                                    resource_type = item.find("rasd:ResourceType", nsmap)
-                                    resource_type.text = self.disk_controller_info["resourceType"]
-
-                                    description.text = self.disk_controller_info["controllerName"]
-                                    resource_subtype = item.find("rasd:ResourceSubType", nsmap)
-                                    if self.disk_controller_info["controllerName"] == "IDE Controller":
-                                        # Remove resource subtype item
-                                        resource_subtype.getparent().remove(resource_subtype)
-                                    if "resourceSubType" in self.disk_controller_info:
-                                        resource_subtype.text = self.disk_controller_info["resourceSubType"]
-                if self.cdrom:
-                    last_item = list(virtualHardwareSection.iterfind('xmlns:Item', nsmap))[-1]
-                    ide_cdrom_items_etree = ET.parse(IDE_CDROM_XML_PATH)
-                    ide_cdrom_items = list(ide_cdrom_items_etree.iterfind('Item'))
-                    for item in ide_cdrom_items:
-                        last_item.addnext(item)
-
-            # Save output OVF
-            OVF_tree.write(self.output_path, xml_declaration=True, encoding='utf-8',
-                           method="xml")
-
-            if os.path.isfile(self.output_path):
-                logger.info("Successfully written output OVF at {}".format(self.output_path))
-                print("Output OVF is at: {}".format(self.output_path))
-                return self.output_path
-            else:
-                error_msg = "ERROR: Error occurred while creating OVF file"
-                print(error_msg)
-                return False
-
-        except Exception as exp:
-            error_msg = "ERROR: Error occurred while editing OVF template : {}".format(exp)
-            self.logger.error(error_msg)
-            print(error_msg)
-            return False
-
-    def __convert_size(self, size):
-        """
-            Private method to convert disk size from GB,MB to bytes.
-            Args :
-                size  : disk size with prefix 'G' for GB and 'M' for MB
-            Return :  disk size in bytes
-        """
-        byte_size = 0
-        try:
-            if not size:
-                self.logger.error("No size {} to convert in bytes".format(size))
-            else:
-                size = str(size)
-                disk_size = float(size[:-1])
-                input_type = size[-1].strip()
-
-                self.logger.info("Disk size : {} , size type : {} ".format(disk_size, input_type))
-
-                if input_type == "G":
-                    byte_size = disk_size * 1024 * 1024 * 1024
-                elif input_type == "M":
-                    byte_size = disk_size * 1024 * 1024
-
-                self.logger.info("Disk size in bytes: {} ".format(byte_size))
-
-            return int(byte_size)
-
-        except Exception as exp:
-            error_msg = "ERROR:Error occurred while converting disk size in bytes : {}".format(exp)
-            self.logger.error(error_msg)
-            print(error_msg)
-            return False
-
-    def __get_osType(self):
-        """
-            Private method to get OS ID and Type
-            Args :
-                None
-            Return :
-                osID : OS ID
-                osType: OS Type
-        """
-        osID = None
-        osType = None
-        os_info = self.__read_yaml_file(OS_INFO_FILE_PATH)
-
-        try:
-            if self.os_type and os_info:
-                for os_id, os_type in os_info.items():
-                    if self.os_type.lower() == os_type.lower():
-                        osID = os_id
-                        osType = os_type
-                        break
-        except Exception as exp:
-            error_msg = "ERROR:Error occurred while getting OS details : {}".format(exp)
-            self.logger.error(error_msg)
-            print(error_msg)
-
-        return osID, osType
-
-    def __get_diskcontroller(self):
-        """
-            Private method to get details of Disk Controller
-            Args :
-                None
-            Return :
-                disk_controller : dict with details of Disk Controller
-        """
-        disk_controller = {}
-        scsi_subtype = None
-        if self.disk_controller.lower() in ["paravirtual", "lsilogic", "buslogic", "lsilogicsas"]:
-            scsi_subtype = self.disk_controller
-            self.disk_controller = "SCSI"
-
-        disk_controller_info = self.__read_yaml_file(DISK_CONTROLLER_INFO_FILE_PATH)
-        try:
-            if self.disk_controller and disk_controller_info:
-                for key, value in disk_controller_info.items():
-                    if self.disk_controller.lower() in key.lower():
-                        disk_controller['controllerName'] = key
-                        disk_controller['resourceType'] = str(value["ResourceType"])
-                        resourceSubTypes = value["ResourceSubTypes"] if "ResourceSubTypes" in value else None
-                        if key == "SATA Controller":
-                            disk_controller["resourceSubType"] = resourceSubTypes[0]
-                        elif key == "SCSI Controller":
-                            if scsi_subtype:
-                                if scsi_subtype.lower() == "paravirtual":
-                                    scsi_subtype = "VirtualSCSI"
-                                for subtype in resourceSubTypes:
-                                    if scsi_subtype.lower() == subtype.lower():
-                                        disk_controller["resourceSubType"] = subtype
-                                        break
-                                else:
-                                    error_msg = "ERROR: Invalid inputs can not "\
-                                        "find SCSI subtype {}".format(scsi_subtype)
-                                    self.__raise_exception(error_msg)
-
-        except KeyError as exp:
-            error_msg = "ERROR:Error occurred while getting Disk Controller details : {}".format(exp)
-            self.logger.error(error_msg)
-            print(error_msg)
-
-        return disk_controller
-
-    def __read_yaml_file(self, file_path):
-        """
-            Private method to execute command
-            Args :
-                command  : command to execute
-            Return :
-                Dict of yaml data
-        """
-        with open(file_path) as data_file:
-            data = yaml.load(data_file, Loader=yaml.SafeLoader)
-        return data
-
-    def __raise_exception(self, error_msg, exception_type="Generic"):
-        """
-            Private method to execute command
-            Args :
-                command  : command to execute
-            Return :
-               None
-        """
-        if error_msg:
-            self.logger.debug(error_msg)
-            print(error_msg)
-            if exception_type == "Generic":
-                raise Exception(error_msg)
-            elif exception_type == "IO":
-                raise Exception(error_msg)
-
-    def __execute_command(self, command, show_output=False):
-        """
-            Private method to execute command
-            Args :
-                command  : command to execute
-            Return :
-                stdout : output of command
-                stderr: error occurred while executing command if any
-                returncode : return code of command execution
-        """
-        try:
-            self.logger.info("Execute command: {} ".format(command))
-
-            proc = subprocess.Popen(command, stdout=subprocess.PIPE, stdin=subprocess.PIPE,
-                                    stderr=subprocess.PIPE, shell=True, bufsize=1)
-
-            stdout = b''
-            stderr = b''
-
-            while True:
-                output = proc.stdout.read(1)
-                stdout += output
-                if show_output:
-                    print(output.decode(), end='')
-                returncode = proc.poll()
-                if returncode is not None:
-                    for output in proc.stdout.readlines():
-                        stdout += output
-                        if show_output:
-                            print(output.decode(), end='')
-                    break
-
-            for output in proc.stderr.readlines():
-                stderr += output
-
-        except Exception as exp:
-            self.logger.error("Error {} occurred while executing command {} ".format(exp, command))
-
-        return stdout, stderr, returncode
-
-    def create_ovf(self):
-        """
-            Method to convert source image into OVF
-            Args : None
-            Return : True on success else False
-        """
-        # check output format
-        if self.source_format == self.output_format:
-            self.logger.info("Source format is OVF. No need to convert: {} ")
-            return self.source_img_path
-
-        # Get source img properties
-        img_info = self.__get_image_info()
-        if img_info:
-
-            # Create vmdk disk image
-            disk_img = self.__convert_image()
-            if disk_img:
-
-                # Edit OVF tempalte
-                ovf_path = self.__edit_ovf_template()
-                return ovf_path
-        else:
-            self.logger.error("Error in getting image information cannot convert image")
-            raise Exception("Error in getting image information cannot convert image")
-            return False
diff --git a/tools/OVF_converter/install.sh b/tools/OVF_converter/install.sh
deleted file mode 100755
index d25c1f6..0000000
--- a/tools/OVF_converter/install.sh
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/usr/bin/env bash
-
-##
-# Copyright 2016-2017 VMware Inc.
-# This file is part of ETSI OSM
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact:  osslegalrouting@vmware.com
-##
-
-echo '
- ################################################################
- #####             Installing Required Packages             #####
- ################################################################'
-
-# Paths to copy application files
-Install_dir="/usr/local/bin"
-App_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-Converter_App_CLI_path="${App_dir}/ovf_converter_cli.py"
-Converter_Install_CLI_path="${Install_dir}/OVF_converter/ovf_converter_cli.py"
-Uploader_App_CLI_path="${App_dir}/ovf_uploader_cli.py"
-Uploader_Install_CLI_path="${Install_dir}/OVF_converter/ovf_uploader_cli.py"
-Logs_Folder="${Install_dir}/OVF_converter/logs"
-
-#Function to install packages using apt-get
-function install_packages(){
-      [ -x /usr/bin/apt-get ] && apt-get install -y $*
-
-       #check properly installed
-       for PACKAGE in $*
-       do
-           PACKAGE_INSTALLED="no"
-           [ -x /usr/bin/apt-get ] && dpkg -l $PACKAGE            &>> /dev/null && PACKAGE_INSTALLED="yes"
-           if [ "$PACKAGE_INSTALLED" = "no" ]
-           then
-               echo "failed to install package '$PACKAGE'. Revise network connectivity and try again" >&2
-               exit 1
-          fi
-       done
-   }
-
-apt-get update  # To get the latest package lists
-install_packages "libxml2-dev libxslt-dev python-dev python-pip python-lxml python-yaml"
-install_packages "qemu-utils"
-
-#apt-get install <package name> -y
-
-#Move OVF Converter to usr/bin
-cp -R "${App_dir}"   "${Install_dir}"
-
-#Create logs folder and file
-mkdir "${Logs_Folder}"
-
-#Change permission
-chmod -R 777 ${Converter_Install_CLI_path}
-chmod -R 777 ${Uploader_Install_CLI_path}
-chmod -R 777 ${Logs_Folder}
-
-touch "${Install_dir}/ovf_converter"
-echo  "#!/bin/sh" > "${Install_dir}/ovf_converter"
-echo  "python3 ${Converter_Install_CLI_path} \"\$@\"" >> "${Install_dir}/ovf_converter"
-chmod a+x "${Install_dir}/ovf_converter"
-
-touch "${Install_dir}/ovf_uploader"
-echo  "#!/bin/sh" > "${Install_dir}/ovf_uploader"
-echo  "python3 ${Uploader_Install_CLI_path} \"\$@\"" >> "${Install_dir}/ovf_uploader"
-chmod a+x "${Install_dir}/ovf_uploader"
-
-echo "Installation complete.  More information can be found at:"
-echo "  ${Install_dir}/OVF_converter/Usage.txt"
diff --git a/tools/OVF_converter/ovf_converter_cli.py b/tools/OVF_converter/ovf_converter_cli.py
deleted file mode 100644
index 6caba88..0000000
--- a/tools/OVF_converter/ovf_converter_cli.py
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-
-##
-# Copyright 2016-2017 VMware Inc.
-# This file is part of ETSI OSM
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact:  osslegalrouting@vmware.com
-##
-
-import argparse
-import yaml
-
-from converter import OVFConverter, get_version, OS_INFO_FILE_PATH
-
-
-def execute_cli():
-
-    """
-        Method to parse CLI arguments and execute commands accordingly
-        Args : None
-        Return : None
-    """
-
-    with open(OS_INFO_FILE_PATH) as data_file:
-        os_info = yaml.load(data_file, Loader=yaml.SafeLoader)
-
-    valid_os_strings = "Valid values for osType are:\n"
-    for os_name in os_info.values():
-        valid_os_strings += os_name + ", "
-
-    valid_os_strings = valid_os_strings[:-2]
-
-    parser = argparse.ArgumentParser(description='OVF converter to convert .qcow2 or raw image into OVF')
-
-    parser.add_argument("-v", "--version", action="version", version=str(get_version()),
-                        help="shows version of OVF Converter tool")
-
-    parser.add_argument("path", action="store",
-                        help="absolute path to source image which will get converted into ovf")
-
-    parser.add_argument("-o", "--output_location", action="store",
-                        help="location where created OVF will be kept. This location "
-                        "should have write access. If not given file will get "
-                        "created at source location  (optional)")
-
-    parser.add_argument("-n", "--ovf_name", action="store",
-                        help="name of output ovf file. If not given source image name will "
-                        " be used (optional)")
-
-    parser.add_argument("-m", "--memory", action="store",
-                        help="required memory for VM in MB (default 1 GB)(optional)")
-
-    parser.add_argument("-c", "--cpu", action="store",
-                        help="required number of virtual cpus for VM (default 1 cpu) (optional)")
-
-    parser.add_argument("-d", "--disk", action="store",
-                        help="required size of disk for VM in GB "
-                        "(default as in source disk img) (optional)")
-
-    parser.add_argument("-s", "--osType", action="store",
-                        help="required operating system type as specified "
-                        "in user document (default os type other 32 bit) (optional) " + valid_os_strings)
-
-    parser.add_argument("-dc", "--disk_Controller", action="store",
-                        help="required disk controller type "
-                        "(default controller SCSI with lsilogicsas) "
-                        "(SATA, IDE, Paravirtual, Buslogic, Lsilogic, Lsilogicsas) (optional)")
-
-    parser.add_argument("--cdrom", action="store_true", default=False,
-                        help="whether to include a cd/dvd device (optional)")
-
-    parser.add_argument("-hw", "--hwversion", action="store", default=14,
-                        help="Virtual hardware version (default 14)")
-
-    args = parser.parse_args()
-
-    if args.path:
-        con = OVFConverter(args.path,
-                           output_location=args.output_location,
-                           output_ovf_name=args.ovf_name,
-                           memory=args.memory,
-                           cpu=args.cpu,
-                           disk=args.disk,
-                           os_type=args.osType,
-                           disk_controller=args.disk_Controller,
-                           cdrom=args.cdrom,
-                           hwversion=args.hwversion,
-                           )
-
-        con.create_ovf()
-
-
-if __name__ == "__main__":
-    execute_cli()
diff --git a/tools/OVF_converter/ovf_template/ide_cdrom.xml b/tools/OVF_converter/ovf_template/ide_cdrom.xml
deleted file mode 100644
index 431f38a..0000000
--- a/tools/OVF_converter/ovf_template/ide_cdrom.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<!--
- Copyright 2016-2019 VMware Inc.
- This file is part of ETSI OSM
- All Rights Reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License"); you may
- not use this file except in compliance with the License. You may obtain
- a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- License for the specific language governing permissions and limitations
- under the License.
-
- For those usages not covered by the Apache License, Version 2.0 please
- contact:  osslegalrouting@vmware.com
--->
-<Items>
-        <Item xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">
-            <rasd:AddressOnParent>0</rasd:AddressOnParent>
-            <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
-            <rasd:Description>CD/DVD Drive</rasd:Description>
-            <rasd:ElementName>CD/DVD Drive 1</rasd:ElementName>
-            <rasd:HostResource/>
-            <rasd:InstanceID>3002</rasd:InstanceID>
-            <rasd:Parent>50</rasd:Parent>
-            <rasd:ResourceType>15</rasd:ResourceType>
-        </Item>
-        <Item xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">
-            <rasd:Address>1</rasd:Address>
-            <rasd:Description>IDE Controller</rasd:Description>
-            <rasd:ElementName>IDE Controller 1</rasd:ElementName>
-            <rasd:InstanceID>50</rasd:InstanceID>
-            <rasd:ResourceType>5</rasd:ResourceType>
-        </Item>
-</Items>
diff --git a/tools/OVF_converter/ovf_template/template.xml b/tools/OVF_converter/ovf_template/template.xml
deleted file mode 100644
index 6382cef..0000000
--- a/tools/OVF_converter/ovf_template/template.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright 2016-2019 VMware Inc.
- This file is part of ETSI OSM
- All Rights Reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License"); you may
- not use this file except in compliance with the License. You may obtain
- a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- License for the specific language governing permissions and limitations
- under the License.
-
- For those usages not covered by the Apache License, Version 2.0 please
- contact:  osslegalrouting@vmware.com
--->
-<Envelope xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vmw="http://www.vmware.com/schema/ovf" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <References>
-     <File ovf:href="disk_img_filename.vmdk" ovf:id="file1" />
-  </References>
-   <DiskSection>
-    <Info>Virtual disk information</Info>
-    <Disk ovf:capacity="1" ovf:capacityAllocationUnits="byte" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" ovf:populatedSize="0"/>
-  </DiskSection>
-
-  <NetworkSection>
-    <Info>List of logical networks used in the package</Info>
-  </NetworkSection>
-
-  <VirtualSystem ovf:id="vm">
-    <Info>A virtual machine</Info>
-    <Name>Virtual machine name</Name>
-
-    <OperatingSystemSection ovf:id="1">
-      <Info>The kind of installed guest operating system</Info>
-      <Description>Other (32-bit)</Description>
-    </OperatingSystemSection>
-
-    <VirtualHardwareSection>
-      <Info>Virtual hardware requirements</Info>
-      <System>
-        <vssd:ElementName>Virtual Hardware Family</vssd:ElementName>
-        <vssd:InstanceID>0</vssd:InstanceID>
-        <vssd:VirtualSystemIdentifier>Test1</vssd:VirtualSystemIdentifier>
-        <vssd:VirtualSystemType>vmx-14</vssd:VirtualSystemType>
-      </System>
-
-      <Item>
-        <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits>
-        <rasd:Description>Number of Virtual CPUs</rasd:Description>
-        <rasd:ElementName>1 virtual CPU(s)</rasd:ElementName>
-        <rasd:InstanceID>1</rasd:InstanceID>
-        <rasd:ResourceType>3</rasd:ResourceType>
-        <rasd:VirtualQuantity>1</rasd:VirtualQuantity>
-      </Item>
-      <Item>
-        <rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits>
-        <rasd:Description>Memory Size</rasd:Description>
-        <rasd:ElementName>1GB of memory</rasd:ElementName>
-        <rasd:InstanceID>2</rasd:InstanceID>
-        <rasd:ResourceType>4</rasd:ResourceType>
-        <rasd:VirtualQuantity>1024</rasd:VirtualQuantity>
-      </Item>
-      <Item>
-        <rasd:Address>0</rasd:Address>
-        <rasd:Description>SCSI Controller</rasd:Description>
-        <rasd:ElementName>scsiController0</rasd:ElementName>
-        <rasd:InstanceID>3</rasd:InstanceID>
-        <rasd:ResourceSubType>lsilogicsas</rasd:ResourceSubType>
-        <rasd:ResourceType>6</rasd:ResourceType>
-      </Item>
-      <Item>
-        <rasd:AddressOnParent>0</rasd:AddressOnParent>
-        <rasd:ElementName>disk0</rasd:ElementName>
-        <rasd:HostResource>ovf:/disk/vmdisk1</rasd:HostResource>
-        <rasd:InstanceID>4</rasd:InstanceID>
-        <rasd:Parent>3</rasd:Parent>
-        <rasd:ResourceType>17</rasd:ResourceType>
-      </Item>
-      <Item ovf:required="false">
-        <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
-        <rasd:ElementName>video</rasd:ElementName>
-        <rasd:InstanceID>5</rasd:InstanceID>
-        <rasd:ResourceType>24</rasd:ResourceType>
-      </Item>
-      <Item ovf:required="false">
-        <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
-        <rasd:ElementName>vmci</rasd:ElementName>
-        <rasd:InstanceID>6</rasd:InstanceID>
-        <rasd:ResourceSubType>vmware.vmci</rasd:ResourceSubType>
-        <rasd:ResourceType>1</rasd:ResourceType>
-      </Item>
-      <vmw:Config ovf:required="false" vmw:key="cpuHotAddEnabled" vmw:value="true"/>
-      <vmw:Config ovf:required="false" vmw:key="powerOpInfo.powerOffType" vmw:value="soft"/>
-      <vmw:Config ovf:required="false" vmw:key="powerOpInfo.resetType" vmw:value="soft"/>
-      <vmw:Config ovf:required="false" vmw:key="powerOpInfo.suspendType" vmw:value="soft"/>
-      <vmw:Config ovf:required="false" vmw:key="tools.syncTimeWithHost" vmw:value="true"/>
-      <vmw:Config ovf:required="false" vmw:key="tools.toolsUpgradePolicy" vmw:value="upgradeAtPowerCycle"/>
-    </VirtualHardwareSection>
-
-  </VirtualSystem>
-</Envelope>
diff --git a/tools/OVF_converter/ovf_uploader_cli.py b/tools/OVF_converter/ovf_uploader_cli.py
deleted file mode 100644
index e487877..0000000
--- a/tools/OVF_converter/ovf_uploader_cli.py
+++ /dev/null
@@ -1,75 +0,0 @@
-##
-# Copyright 2019 VMware Inc.
-# This file is part of ETSI OSM
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact:  osslegalrouting@vmware.com
-##
-
-import argparse
-from uploader import OVFUploader, get_version
-
-
-def execute_cli():
-
-    """
-        Method to parse CLI arguments and execute commands accordingly
-        Args : None
-        Return : None
-    """
-    parser = argparse.ArgumentParser(description='Utility to upload an OVF package to vCD')
-
-    parser.add_argument("-v", "--version", action="version", version=str(get_version()),
-                        help="shows version of vCD Uploader tool")
-
-    parser.add_argument("ovf_file", action="store",
-                        help="filename of OVF file to upload to vCD")
-
-    parser.add_argument("-l", "--vcd_url", action="store",
-                        required=True,
-                        help="URL for vCD login (ie: https://vcd.local/")
-
-    parser.add_argument("-u", "--username", action="store",
-                        required=True,
-                        help="Username for vCD login")
-
-    parser.add_argument("-p", "--password", action="store",
-                        required=True,
-                        help="Password for vCD login")
-
-    parser.add_argument("-o", "--orgname", action="store",
-                        required=True,
-                        help="Organization name for vCD login")
-
-    args = parser.parse_args()
-
-    if args.ovf_file:
-        try:
-            uploader = OVFUploader(args.ovf_file,
-                                   vcd_url=args.vcd_url,
-                                   username=args.username,
-                                   password=args.password,
-                                   orgname=args.orgname)
-            uploader.make_catalog()
-            uploader.upload_ovf()
-            uploader.wait_for_task_completion()
-        except Exception as exp:
-            print(exp)
-            exit(1)
-
-
-if __name__ == "__main__":
-    execute_cli()
diff --git a/tools/OVF_converter/readme.txt b/tools/OVF_converter/readme.txt
deleted file mode 100644
index 1804a1d..0000000
--- a/tools/OVF_converter/readme.txt
+++ /dev/null
@@ -1,200 +0,0 @@
-##
-# Copyright 2016-2019 VMware Inc.
-# This file is part of ETSI OSM
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact:  osslegalrouting@vmware.com
-##
-
-
-This README file explains how to use OVF Converter Tool to generate OVF file from .qcow2, .img (raw) disk images.
-
-CONTENTS OF THIS FILE
-=====================
-This readme file contains the following sections:
-
-o Introduction
-o Tool Requirements
-o Installation
-o Usage
-o Trouble shooting
-o Release History
-
-
-Introduction
-==================
-OVF Converter Tool is a Command Line Interface (CLI) basically designed to generate OVF files from disk image such as
-.qcow2, and .img (raw format) which are other than .vmdk.  Given a path to .qcow2 image this tool can generate .vmdk
-and .ovf files.
-
-The user can optionally specify name and location of ovf file. Also, one can use command line options to give disk
-size (GB), memory (MB), number of cpus, OS type, disk controller required for VM which will get deployed using
-generated OVF.
-
-Generated OVF file can be used to deploy VM in Vmware vSphere or vCloud Director.
-
-Note- Currently this tool supports only Ubuntu platform.
-
-
-Tool Requirements
-==================
-
-This tool requires the following software package:
-o    apt-get package manager
-o    qemu-utils
-o    python 2.7
-o    python-lxml
-o    libxml2-dev
-o    libxslt-dev
-o    python-dev
-o    python-pip
-
-Install.sh script in this folder will install all of these software packages.
-
-
-Installation
-==================
-User needs root privileges to install OVF Generator Tool.
-Follow below setups for installation of OVF Converter Tool.
-1. Make install.sh script in this folder executable by running below command
-   chmod a+x install.sh
-2. Run install.sh script as:
-   ./install.sh
-
-   Sample output -
-        #################################################################
-        #####             Installing Require Packages             #####
-        #################################################################
-        Hit:1 http://us.archive.ubuntu.com/ubuntu xenial InRelease
-        Get:2 http://us.archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
-        Get:3 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
-        Get:4 http://us.archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB]
-        Fetched 306 kB in 1s (286 kB/s)
-        Reading package lists... Done
-        Reading package lists... Done
-        Building dependency tree
-        Reading state information... Done
-        Note, selecting 'libxslt1-dev' instead of 'libxslt-dev'
-        libxslt1-dev is already the newest version (1.1.28-2.1).
-        python-dev is already the newest version (2.7.11-1).
-        python-lxml is already the newest version (3.5.0-1build1).
-        libxml2-dev is already the newest version (2.9.3+dfsg1-1ubuntu0.1).
-
-        t version (1:2.5+dfsg-5ubuntu10.6).
-        0 upgraded, 0 newly installed, 0 to remove and 72 not upgraded.
-
-        #################################################################
-        #####             Done                                #####
-        #################################################################
-        root@ubuntu:/home/vmware/OVF_converter#
-        root@ubuntu:/home/vmware/OVF_converter#
-
-3. Now tool is installed at /usr/local/bin and available for all users
-4. User can access commands of OVF Generator Tool as:
-    ovf_converter path [output location] [ovf name][memory][cpu][disk][ostype][disk_controller]
-
-
-Usage
-===================
-o    Get version of tool as:
-
-    Command -      ovf_converter -v
-    Sample output -
-                root@ubuntu:/home/vmware/OVF_converter# ovf_converter -v
-                1.0 - Initial Realse
-                root@ubuntu:/home/vmware/OVF_converter#
-
-o    See all command line options of tool as:
-    Command -       ovf_converter -h
-    Sample output -
-                root@ubuntu:/home/vmware/OVF_converter#
-                root@ubuntu:/home/vmware/OVF_converter# ovf_converter -h
-                Usage: ovf_converter_cli.py [-h] [-v] [-o OUTPUT_LOCATION] [-n OVF_NAME]
-                            [-m MEMORY] [-c CPU] [-d DISK] [-s OSTYPE]
-                            [-dc DISK_CONTROLLER] [--cdrom] [-w 14]
-                            path
-
-                OVF converter to convert .qcow2 or raw image into OVF
-
-                positional arguments:
-                  path                  absolute path to source image which will get convert
-                                        into ovf
-
-                optional arguments:
-                  -h, --help            show this help message and exit
-                  -v, --version         shows version of OVF Converter tool
-                  -o OUTPUT_LOCATION, --output_location OUTPUT_LOCATION
-                                        location where created OVF will be kept. This location
-                                        should have write access. If not given file will get
-                                        created at source location (optional)
-                  -n OVF_NAME, --ovf_name OVF_NAME
-                                        name of output ovf file. If not given source image
-                                        name will be used (optional)
-                  -m MEMORY, --memory MEMORY
-                                        required memory for VM in MB (default 1 GB)(optional)
-                  -c CPU, --cpu CPU     required number of virtual cpus for VM (default 1 cpu)
-                                        (optional)
-                  -d DISK, --disk DISK  required size of disk for VM in GB (default as
-                                        in source disk img) (optional)
-                  -s OSTYPE, --osType OSTYPE
-                                        required operating system type as specified in user
-                                        document (default os type other 32 bit) (optional)
-                  -dc DISK_CONTROLLER, --disk_Controller DISK_CONTROLLER
-                                        required disk controller type (default controller SCSI
-                                        with lsilogicsas) (SATA, IDE, Paravirtual, Buslogic,
-                                        lsilogic, lsilogicsas) (optional)
-                  --cdrom               whether to include a cd/dvd device (optional)
-                  -hw VERSION, --hwversion VERSION
-                                        VMware ESXi hardware family version (optional)
-
-
-o    Create OVF file from qcow2 or raw disk image as:
-    Command -     ovf_converter /home/vmware/centos_ovf/CentOS-7-x86_64-GenericCloud-1503.qcow2 -n centos_qcow2.ovf -m 2048 -c 4 -d 10 -s "Centos 32-bit" -dc "SATA"
-    Sample output -
-                root@ubuntu:/home/vmware/OVF_converter# ovf_converter /home/vmware/centos_ovf/CentOS-7-x86_64-GenericCloud-1503.qcow2 -n centos_qcow2.ovf -m 2048 -c 4 -d 10
-                #### Start OVF conversion ####
-                Getting source image information
-                Converting source disk image to .vmdk
-                .....................................................
-                Creating OVF
-                Output OVF is at:  /home/vmware/centos_ovf/centos_qcow2.ovf
-                #### Completed OVF conversion ####
-
-
-Trouble shooting
-==================
-After installation of tool logs will get created at /usr/local/bin/OVF_converter/logs/ovf_converter.log file.
-User can use these logs for debugging or trouble shooting.
-
-
-Release History
-===============
-
-Version 1.0
--------------
-
-Initial release
-
-Version 1.1
--------------
-
-Adds support for cdrom
-
-Version 1.2
--------------
-
-Adds support for hardware version
-Improves progress indicator
diff --git a/tools/OVF_converter/uploader.py b/tools/OVF_converter/uploader.py
deleted file mode 100644
index 7cb168f..0000000
--- a/tools/OVF_converter/uploader.py
+++ /dev/null
@@ -1,229 +0,0 @@
-# #
-# Copyright 2019 VMware Inc.
-# This file is part of ETSI OSM
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact:  osslegalrouting@vmware.com
-# #
-
-import logging
-from lxml import etree
-import os
-from pyvcloud.vcd.client import BasicLoginCredentials, Client, QueryResultFormat, ResourceType, TaskStatus, ApiVersion
-from pyvcloud.vcd.exceptions import EntityNotFoundException, InternalServerException
-from pyvcloud.vcd.org import Org
-import sys
-import tarfile
-import time
-
-MODULE_DIR = os.path.dirname(__file__)
-
-# Set logger
-LOG_FILE = os.path.join(MODULE_DIR, "logs/ovf_uploader.log")
-os.makedirs(os.path.dirname(LOG_FILE), exist_ok=True)
-logger = logging.getLogger(__name__)
-file_handler = logging.FileHandler(LOG_FILE)
-file_handler.setLevel(logging.DEBUG)
-formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
-file_handler.setFormatter(formatter)
-logger.addHandler(file_handler)
-stdout_handler = logging.StreamHandler(sys.stdout)
-stdout_handler.setLevel(logging.INFO)
-logger.addHandler(stdout_handler)
-logger.setLevel(10)
-logging.captureWarnings(True)
-
-__version__ = "1.0"
-__description__ = "Initial Release"
-
-
-def get_version():
-    """ get version of this application"""
-    version = str(__version__) + " - " + str(__description__)
-    return version
-
-
-def report_progress(bytes_written, total_size):
-    percent_complete = int((bytes_written * 100) / total_size)
-    print("{}% complete  \r".format(percent_complete), end='')
-
-
-class OVFUploader(object):
-    """ Class to convert input image into OVF format """
-
-    def __init__(self, ovf_file, vcd_url=None, username=None, password=None, orgname=None):
-        self.ovf_file = os.path.abspath(ovf_file)
-        self.vcd_url = vcd_url
-        self.username = username
-        self.password = password
-        self.orgname = orgname
-        try:
-            client = Client(self.vcd_url, verify_ssl_certs=False, api_version=ApiVersion.VERSION_32.value,
-                            log_requests=True,
-                            log_headers=True,
-                            log_bodies=True,
-                            log_file=LOG_FILE)
-            # sclient.set_highest_supported_version()
-            client.set_credentials(BasicLoginCredentials(self.username, self.orgname,
-                                                         self.password))
-            logger.info("Logged into {} using version {}".format(self.vcd_url, client.get_api_version()))
-            self.client = client
-            self.org = Org(self.client, resource=self.client.get_org())
-
-        except Exception as exp:
-            problem = Exception("Failed to connect to vCD at {}, org {}, username {}:\n{}".format(
-                self.vcd_url, self.orgname, self.username, exp))
-            logger.error(problem)
-            raise problem
-
-        try:
-            # Retrieve the VM name from the OVF.  We will use this as both the image and catalog name
-            OVF_tree = etree.parse(self.ovf_file)
-            root = OVF_tree.getroot()
-            nsmap = {k: v for k, v in root.nsmap.items() if k}
-            nsmap["xmlns"] = "http://schemas.dmtf.org/ovf/envelope/1"
-
-            virtuasystem = root.find('xmlns:VirtualSystem', nsmap)
-            name_tag = virtuasystem.find('xmlns:Name', nsmap)
-            self.image_name = name_tag.text
-            info_tag = virtuasystem.find('xmlns:Info', nsmap)
-            self.image_description = info_tag.text
-
-            references = root.find('xmlns:References', nsmap)
-            file = references.find('xmlns:File', nsmap)
-            self.vmdk_file = "{}/{}".format(
-                os.path.dirname(self.ovf_file),
-                file.attrib['{http://schemas.dmtf.org/ovf/envelope/1}href'])
-            logger.info("Loaded VM {}: {}".format(self.image_name, self.image_description))
-
-        except Exception as exp:
-            problem = Exception("Failed to fetch VirtualSystem Name element from OVF {}:\n{}".format(
-                self.ovf_file, exp))
-            logger.error(problem)
-            raise problem
-
-    def make_catalog(self):
-        self.catalog_id = None
-        try:
-            for catalog in self.org.list_catalogs():
-                if catalog['name'] == self.image_name:
-                    self.catalog_id = catalog['id']
-            if self.catalog_id is None:
-                logger.info("Creating a new catalog entry {} in vCD".format(self.image_name))
-                result = self.org.create_catalog(self.image_name, self.image_description)
-                if result is None:
-                    raise Exception("Failed to create new catalog entry")
-                self.catalog_id = result.attrib['id'].split(':')[-1]
-                self.org.reload()
-
-            logger.debug("Using catalog {}, id {}".format(self.image_name, self.catalog_id))
-
-        except Exception as exp:
-            problem = Exception("Failed to fetch catalog for {}:\n{} ".format(self.image_name, exp))
-            logger.error(problem)
-            raise problem
-
-    def upload_ovf(self):
-
-        ova_tarfilename, _ = os.path.splitext(self.ovf_file)
-        ova_tarfilename += '.ova'
-        try:
-            # Check if the content already exists:
-            resource_type = ResourceType.CATALOG_ITEM.value
-            q = self.client.get_typed_query(
-                resource_type,
-                query_result_format=QueryResultFormat.ID_RECORDS,
-                equality_filter=('catalogName', self.image_name))
-            for item in list(q.execute()):
-                if item.get('name') == self.image_name:
-                    logger.info("Removing old version from catalog")
-                    try:
-                        self.org.delete_catalog_item(self.image_name, self.image_name)
-                    except InternalServerException as exp:
-                        problem = Exception(
-                            "Cannot delete vAppTemplate {}. Please check in vCD if "
-                            "the content is still being imported into the catalog".format(
-                                self.image_name))
-                        raise problem
-
-            # Create a single OVA bundle
-            ova = tarfile.open(name=ova_tarfilename,
-                               mode='w')
-            ova.add(self.ovf_file, arcname=os.path.basename(self.ovf_file))
-            ova.add(self.vmdk_file, arcname=os.path.basename(self.vmdk_file))
-            ova.close()
-            logger.info("Uploading content to vCD")
-            self.org.upload_ovf(self.image_name,
-                                ova_tarfilename,
-                                item_name=self.image_name,
-                                description=self.image_description,
-                                callback=report_progress)
-        except Exception as exp:
-            problem = Exception("Failed to upload OVF {}:\n{} ".format(self.ovf_file, exp))
-            logger.error(problem)
-            raise problem
-        finally:
-            if os.path.exists(ova_tarfilename):
-                os.remove(ova_tarfilename)
-
-    def wait_for_task_completion(self):
-
-        logger.info("Importing content to vCD")
-        try:
-
-            query = self.client.get_typed_query(
-                query_type_name=ResourceType.TASK.value,
-                qfilter='ownerName==' + self.username + ';(status==queued,status==preRunning,status==running)',
-                query_result_format=QueryResultFormat.REFERENCES)
-
-            upload_task = None
-            tasks = list(query.execute())
-            for task in tasks:
-                if task.get('name') == 'VDC_UPLOAD_OVF_CONTENTS':
-                    upload_task = self.client.get_resource(task.get('href'))
-                    break
-
-            bad_statuses = [
-                TaskStatus.ABORTED,
-                TaskStatus.CANCELED,
-                TaskStatus.ERROR
-            ]
-
-        except Exception as exp:
-            problem = Exception("Failed to import OVF {}:\n{} ".format(self.ovf_file, exp))
-            logger.error(problem)
-            raise problem
-
-        while(True):
-            task_status = upload_task.get('status').lower()
-            if(hasattr(upload_task, 'Progress')):
-                print("{}% complete  \r".format(upload_task.Progress), end='')
-
-            for status in bad_statuses:
-                if task_status == status.value.lower():
-                    problem = Exception(
-                        "vCD failed to import OVF {}:\n{}: {} ".format(self.ovf_file,
-                                                                       task_status,
-                                                                       upload_task.Error.get('Message')))
-                    logger.error(problem)
-                    raise problem
-            if task_status == str(TaskStatus.SUCCESS.value).lower():
-                break
-
-            time.sleep(2)
-            upload_task = self.client.get_resource(upload_task.get('href'))
-
-        logger.info("OVF upload and import complete, content is ready to use")
diff --git a/tools/vmware_ovf_upload.py b/tools/vmware_ovf_upload.py
deleted file mode 100755
index 834068d..0000000
--- a/tools/vmware_ovf_upload.py
+++ /dev/null
@@ -1,329 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# #
-# Copyright 2016-2017 VMware Inc.
-# This file is part of ETSI OSM
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact:  osslegalrouting@vmware.com
-# #
-
-import logging
-import os
-from progressbar import Percentage, Bar, ETA, FileTransferSpeed, ProgressBar
-from pyvcloud.vcd.client import BasicLoginCredentials, Client
-from pyvcloud.vcd.org import Org
-import re
-import requests
-import sys
-import time
-from xml.etree import ElementTree as XmlElementTree
-
-API_VERSION = '5.6'
-
-
-class vCloudconfig(object):
-
-    def __init__(self, host=None, user=None, password=None, orgname=None, logger=None):
-        self.url = host
-        self.user = user
-        self.password = password
-        self.org = orgname
-        self.logger = logging.getLogger('vmware_ovf_upload')
-        self.logger.setLevel(10)
-
-    def connect(self):
-        """ Method connect as normal user to vCloud director.
-
-            Returns:
-                The return vca object that letter can be used to connect to vCloud director as admin for VDC
-        """
-
-        try:
-            self.logger.debug("Logging in to a vcd {} as user {}".format(self.org,
-                                                                         self.user))
-            client = Client(self.url, verify_ssl_certs=False)
-            client.set_credentials(BasicLoginCredentials(self.user, self.org, self.password))
-        except Exception:
-            raise Exception("Can't connect to a vCloud director org: "
-                            "{} as user: {}".format(self.org, self.user))
-
-        return client
-
-    def get_catalog_id_from_path(self, catalog_name=None, path=None, progress=False):
-        """
-        Args
-            catalog - catalog name to be created
-            path: - valid path to OVF file.
-            progress - boolean progress bar show progress bar.
-
-        Return: if image uploaded correct method will provide image catalog UUID.
-        """
-        if not path:
-            raise Exception("Image path can't be None.")
-
-        if not os.path.isfile(path):
-            raise Exception("Can't read file. File not found.")
-
-        if not os.access(path, os.R_OK):
-            raise Exception("Can't read file. Check file permission to read.")
-
-        self.logger.debug("get_catalog_id_from_path() client requesting {} ".format(path))
-
-        _, filename = os.path.split(path)
-        _, file_extension = os.path.splitext(path)
-        if file_extension != '.ovf':
-            self.logger.debug("Wrong file extension {} connector support only OVF container.".format(file_extension))
-            raise Exception("Wrong container.  vCloud director supports only OVF.")
-
-        self.logger.debug("File name {} Catalog Name {} file path {} ".format(filename,
-                                                                              catalog_name,
-                                                                              path))
-        try:
-            client = self.connect()
-            if not client:
-                raise Exception("Failed to connect vCD")
-            org = Org(client, resource=client.get_org())
-            catalogs = org.list_catalogs()
-        except Exception as exp:
-            self.logger.debug("Failed get catalogs() with Exception {} ".format(exp))
-            raise Exception("Failed get catalogs() with Exception {} ".format(exp))
-
-        if len(catalogs) == 0:
-            self.logger.info("Creating a new catalog entry {} in vcloud director".format(catalog_name))
-            result = org.create_catalog(catalog_name, catalog_name)
-            if result is None:
-                raise Exception("Failed to create new catalog {} ".format(catalog_name))
-            result = self.upload_ovf(org=org, catalog_name=catalog_name, image_name=filename.split(".")[0],
-                                     media_file_name=path, description='medial_file_name', progress=progress)
-            if not result:
-                raise Exception("Failed to create vApp template for catalog {} ".format(catalog_name))
-            return self.get_catalogid(catalog_name, catalogs)
-        else:
-            for catalog in catalogs:
-                # search for existing catalog if we find same name we return ID
-                if catalog['name'] == catalog_name:
-                    self.logger.debug("Found existing catalog entry for {} "
-                                      "catalog id {}".format(catalog_name,
-                                                             self.get_catalogid(catalog_name, catalogs)))
-                    return self.get_catalogid(catalog_name, catalogs)
-
-        # if we didn't find existing catalog we create a new one and upload image.
-        self.logger.debug("Creating new catalog entry {} - {}".format(catalog_name, catalog_name))
-        result = org.create_catalog(catalog_name, catalog_name)
-        if result is None:
-            raise Exception("Failed to create new catalog {} ".format(catalog_name))
-
-        result = self.upload_ovf(org=org, catalog_name=catalog_name, image_name=filename.split(".")[0],
-                                 media_file_name=path, description='medial_file_name', progress=progress)
-        if not result:
-            raise Exception("Failed create vApp template for catalog {} ".format(catalog_name))
-
-    def get_catalogid(self, catalog_name=None, catalogs=None):
-        """  Method check catalog and return catalog ID in UUID format.
-
-        Args
-            catalog_name: catalog name as string
-            catalogs:  list of catalogs.
-
-        Return: catalogs uuid
-        """
-
-        for catalog in catalogs:
-            if catalog['name'] == catalog_name:
-                catalog_id = catalog['id']
-                return catalog_id
-        return None
-
-    def upload_ovf(self, org=None, catalog_name=None, image_name=None, media_file_name=None,
-                   description='', progress=False, chunk_bytes=128 * 1024):
-        """
-        Uploads a OVF file to a vCloud catalog
-
-        org : organization object
-        catalog_name: (str): The name of the catalog to upload the media.
-        media_file_name: (str): The name of the local media file to upload.
-        return: (bool) True if the media file was successfully uploaded, false otherwise.
-        """
-        client = self.connect()
-        if not client:
-            raise Exception("Failed to connect vCD!")
-
-        os.path.isfile(media_file_name)
-        statinfo = os.stat(media_file_name)
-
-        #  find a catalog entry where we upload OVF.
-        #  create vApp Template and check the status if vCD able to read OVF it will respond with appropirate
-        #  status change.
-        #  if VCD can parse OVF we upload VMDK file
-        try:
-            for catalog in org.list_catalogs():
-                if catalog_name != catalog['name']:
-                    continue
-                catalog_href = "{}/api/catalog/{}/action/upload".format(self.url, catalog['id'])
-                data = """
-                <UploadVAppTemplateParams name="{}" xmlns="http://www.vmware.com/vcloud/v1.5"
-                xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1">
-                <Description>{} vApp Template</Description></UploadVAppTemplateParams>
-                """.format(catalog_name, description)
-
-                if client:
-                    headers = {'Accept': 'application/*+xml;version=' + API_VERSION,
-                               'x-vcloud-authorization': client._session.headers['x-vcloud-authorization']}
-                    headers['Content-Type'] = 'application/vnd.vmware.vcloud.uploadVAppTemplateParams+xml'
-
-                response = requests.post(url=catalog_href,
-                                         headers=headers,
-                                         data=data,
-                                         verify=False)
-                if response.status_code != 201:
-                    self.logger.debug("Failed to create vApp template")
-                    raise Exception("Failed to create vApp template")
-
-                if response.status_code == requests.codes.created:
-                    catalogItem = XmlElementTree.fromstring(response.content)
-                    entity = [child for child in catalogItem if
-                              child.get("type") == "application/vnd.vmware.vcloud.vAppTemplate+xml"][0]
-                    href = entity.get('href')
-                    template = href
-
-                    response = requests.get(url=href,
-                                            headers=headers,
-                                            verify=False)
-                    if response.status_code == requests.codes.ok:
-                        headers['Content-Type'] = 'Content-Type text/xml'
-                        result = re.search('rel="upload:default"\shref="(.*?\/descriptor.ovf)"', response.content)
-                        if result:
-                            transfer_href = result.group(1)
-
-                        response = requests.put(url=transfer_href, headers=headers,
-                                                data=open(media_file_name, 'rb'),
-                                                verify=False)
-
-                        if response.status_code != requests.codes.ok:
-                            self.logger.debug(
-                                "Failed create vApp template for catalog name {} and image {}".format(
-                                    catalog_name,
-                                    media_file_name))
-                            return False
-
-                    # TODO fix this with aync block
-                    time.sleep(5)
-
-                    self.logger.debug("vApp template for catalog name {} and image {}".format(
-                        catalog_name,
-                        media_file_name))
-
-                    # uploading VMDK file
-                    # check status of OVF upload and upload remaining files.
-
-                    response = requests.get(url=template,
-                                            headers=headers,
-                                            verify=False)
-
-                    if response.status_code == requests.codes.ok:
-                        result = re.search('rel="upload:default"\s*href="(.*?vmdk)"', response.content)
-                        if result:
-                            link_href = result.group(1)
-                        # we skip ovf since it already uploaded.
-                        if 'ovf' in link_href:
-                            continue
-                        # The OVF file and VMDK must be in a same directory
-                        head, _ = os.path.split(media_file_name)
-                        file_vmdk = head + '/' + link_href.split("/")[-1]
-                        if not os.path.isfile(file_vmdk):
-                            return False
-                        statinfo = os.stat(file_vmdk)
-                        if statinfo.st_size == 0:
-                            return False
-                        hrefvmdk = link_href
-                        if progress:
-                            widgets = ['Uploading file: ', Percentage(), ' ', Bar(), ' ', ETA(), ' ',
-                                       FileTransferSpeed()]
-                            progress_bar = ProgressBar(widgets=widgets, maxval=statinfo.st_size).start()
-
-                        bytes_transferred = 0
-                        f = open(file_vmdk, 'rb')
-                        while bytes_transferred < statinfo.st_size:
-                            my_bytes = f.read(chunk_bytes)
-                            if len(my_bytes) <= chunk_bytes:
-                                headers['Content-Range'] = 'bytes %s-%s/%s' % (
-                                    bytes_transferred, len(my_bytes) - 1, statinfo.st_size)
-                                headers['Content-Length'] = str(len(my_bytes))
-                                response = requests.put(url=hrefvmdk,
-                                                        headers=headers,
-                                                        data=my_bytes,
-                                                        verify=False)
-                                if response.status_code == requests.codes.ok:
-                                    bytes_transferred += len(my_bytes)
-                                    if progress:
-                                        progress_bar.update(bytes_transferred)
-                                else:
-                                    self.logger.debug(
-                                        'file upload failed with error: [%s] %s' % (response.status_code,
-                                                                                    response.content))
-
-                                    f.close()
-                                    return False
-                        f.close()
-                        if progress:
-                            progress_bar.finish()
-                            time.sleep(60)
-                    return True
-                else:
-                    self.logger.debug("Failed retrieve vApp template for catalog name {} for OVF {}".
-                                      format(catalog_name, media_file_name))
-                    return False
-        except Exception as exp:
-            self.logger.debug("Failed while uploading OVF to catalog {} for OVF file {} with Exception {}"
-                              .format(catalog_name, media_file_name, exp))
-            raise Exception(
-                "Failed while uploading OVF to catalog {} for OVF file {} with Exception {}"
-                .format(catalog_name, media_file_name, exp))
-        self.logger.debug("Failed to retrieve catalog name {} for OVF file {}".format(catalog_name, media_file_name))
-        return False
-
-
-if __name__ == "__main__":
-
-    print("This file is deprecated.  Please use ovf_uplader_cli instead.")
-
-    # vmware vcloud director credentials
-    vcd_hostname = sys.argv[1]
-    vcd_username = sys.argv[2]
-    vcd_password = sys.argv[3]
-    orgname = sys.argv[4]
-    # OVF image path to be upload to vCD
-    ovf_file_path = sys.argv[5]
-
-    logging.basicConfig(filename='ovf_upload.log', level=logging.DEBUG)
-    logger = logging.getLogger(__name__)
-
-    obj = vCloudconfig(vcd_hostname, vcd_username, vcd_password, orgname, logger)
-
-    dirpath, filename = os.path.split(ovf_file_path)
-    filename_name, file_extension = os.path.splitext(filename)
-
-    # Get image name from cirros vnfd
-    cirros_yaml = '../descriptor-packages/vnfd/cirros_vnf/src/cirros_vnfd.yaml'
-    rh = open(cirros_yaml, 'r')
-    match = re.search("image:\s'(.*?)'\n", rh.read())
-    if match:
-        catalog = match.group(1)
-
-    if file_extension == '.ovf':
-        obj.get_catalog_id_from_path(catalog_name=catalog, path=ovf_file_path,
-                                     progress=True)
