Merge "Metricbeat: removing unused metrics"
diff --git a/juju-charms/.gitignore b/charms/.gitignore
similarity index 100%
rename from juju-charms/.gitignore
rename to charms/.gitignore
diff --git a/juju-charms/Dockerfile b/charms/Dockerfile
similarity index 100%
rename from juju-charms/Dockerfile
rename to charms/Dockerfile
diff --git a/juju-charms/Makefile b/charms/Makefile
similarity index 100%
rename from juju-charms/Makefile
rename to charms/Makefile
diff --git a/juju-charms/README.md b/charms/README.md
similarity index 100%
rename from juju-charms/README.md
rename to charms/README.md
diff --git a/juju-charms/juju-env.sh b/charms/juju-env.sh
similarity index 100%
rename from juju-charms/juju-env.sh
rename to charms/juju-env.sh
diff --git a/juju-charms/layers/ansible-charm/LICENSE b/charms/layers/ansible-charm/LICENSE
similarity index 100%
rename from juju-charms/layers/ansible-charm/LICENSE
rename to charms/layers/ansible-charm/LICENSE
diff --git a/juju-charms/layers/ansible-charm/README.md b/charms/layers/ansible-charm/README.md
similarity index 100%
rename from juju-charms/layers/ansible-charm/README.md
rename to charms/layers/ansible-charm/README.md
diff --git a/juju-charms/layers/ansible-charm/actions.yaml b/charms/layers/ansible-charm/actions.yaml
similarity index 91%
rename from juju-charms/layers/ansible-charm/actions.yaml
rename to charms/layers/ansible-charm/actions.yaml
index 37ef945..8807303 100755
--- a/juju-charms/layers/ansible-charm/actions.yaml
+++ b/charms/layers/ansible-charm/actions.yaml
@@ -1,5 +1,5 @@
 #
-# OSM devops/juju-charms - Ansible charm inside OSM devops
+# OSM devops/charms - Ansible charm inside OSM devops
 #
 # Copyright 2017-2018 Universidad Carlos III de Madrid
 #
diff --git a/juju-charms/layers/ansible-charm/actions/ansible-playbook b/charms/layers/ansible-charm/actions/ansible-playbook
similarity index 94%
rename from juju-charms/layers/ansible-charm/actions/ansible-playbook
rename to charms/layers/ansible-charm/actions/ansible-playbook
index 6133ca5..67f581f 100755
--- a/juju-charms/layers/ansible-charm/actions/ansible-playbook
+++ b/charms/layers/ansible-charm/actions/ansible-playbook
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 #
-# OSM devops/juju-charms - Ansible charm inside OSM devops
+# OSM devops/charms - Ansible charm inside OSM devops
 #
 # Copyright 2017-2018 Universidad Carlos III de Madrid
 #
diff --git a/juju-charms/layers/ansible-charm/icon.svg b/charms/layers/ansible-charm/icon.svg
similarity index 100%
rename from juju-charms/layers/ansible-charm/icon.svg
rename to charms/layers/ansible-charm/icon.svg
diff --git a/juju-charms/layers/ansible-charm/layer.yaml b/charms/layers/ansible-charm/layer.yaml
similarity index 84%
rename from juju-charms/layers/ansible-charm/layer.yaml
rename to charms/layers/ansible-charm/layer.yaml
index 6a0704c..788e67c 100755
--- a/juju-charms/layers/ansible-charm/layer.yaml
+++ b/charms/layers/ansible-charm/layer.yaml
@@ -1,5 +1,5 @@
 #
-# OSM devops/juju-charms - Ansible charm inside OSM devops
+# OSM devops/charms - Ansible charm inside OSM devops
 #
 # Copyright 2017-2018 Universidad Carlos III de Madrid
 #
@@ -16,4 +16,4 @@
 # limitations under the License.
 #
 
-includes: ['layer:ansible-base', 'layer:vnfproxy']  
+includes: ['layer:ansible-base', 'layer:vnfproxy']
diff --git a/juju-charms/layers/ansible-charm/metadata.yaml b/charms/layers/ansible-charm/metadata.yaml
similarity index 93%
rename from juju-charms/layers/ansible-charm/metadata.yaml
rename to charms/layers/ansible-charm/metadata.yaml
index acce785..2837b35 100755
--- a/juju-charms/layers/ansible-charm/metadata.yaml
+++ b/charms/layers/ansible-charm/metadata.yaml
@@ -1,5 +1,5 @@
 #
-# OSM devops/juju-charms - Ansible charm inside OSM devops
+# OSM devops/charms - Ansible charm inside OSM devops
 #
 # Copyright 2017-2018 Universidad Carlos III de Madrid
 #
diff --git a/juju-charms/layers/ansible-charm/playbook/playbook.yaml b/charms/layers/ansible-charm/playbook/playbook.yaml
similarity index 92%
rename from juju-charms/layers/ansible-charm/playbook/playbook.yaml
rename to charms/layers/ansible-charm/playbook/playbook.yaml
index 2c7b54b..67a3493 100755
--- a/juju-charms/layers/ansible-charm/playbook/playbook.yaml
+++ b/charms/layers/ansible-charm/playbook/playbook.yaml
@@ -1,5 +1,5 @@
 #
-# OSM devops/juju-charms - Ansible charm inside OSM devops
+# OSM devops/charms - Ansible charm inside OSM devops
 #
 # Copyright 2017-2018 Universidad Carlos III de Madrid
 #
diff --git a/juju-charms/layers/ansible-charm/reactive/ansible_charm.py b/charms/layers/ansible-charm/reactive/ansible_charm.py
similarity index 97%
rename from juju-charms/layers/ansible-charm/reactive/ansible_charm.py
rename to charms/layers/ansible-charm/reactive/ansible_charm.py
index a129df3..61425f3 100755
--- a/juju-charms/layers/ansible-charm/reactive/ansible_charm.py
+++ b/charms/layers/ansible-charm/reactive/ansible_charm.py
@@ -1,4 +1,4 @@
-# OSM devops/juju-charms - Ansible charm inside OSM devops
+# OSM devops/charms - Ansible charm inside OSM devops
 #
 # Copyright 2017-2018 Universidad Carlos III de Madrid
 # Copyright 2018 Altran
diff --git a/juju-charms/layers/ansible-charm/tests/00-setup b/charms/layers/ansible-charm/tests/00-setup
similarity index 92%
rename from juju-charms/layers/ansible-charm/tests/00-setup
rename to charms/layers/ansible-charm/tests/00-setup
index 5088c72..8c0ff38 100755
--- a/juju-charms/layers/ansible-charm/tests/00-setup
+++ b/charms/layers/ansible-charm/tests/00-setup
@@ -1,6 +1,6 @@
 #!/bin/bash
 #
-# OSM devops/juju-charms - Ansible charm inside OSM devops
+# OSM devops/charms - Ansible charm inside OSM devops
 #
 # Copyright 2017-2018 Universidad Carlos III de Madrid
 #
diff --git a/juju-charms/layers/ansible-charm/tests/10-deploy b/charms/layers/ansible-charm/tests/10-deploy
similarity index 96%
rename from juju-charms/layers/ansible-charm/tests/10-deploy
rename to charms/layers/ansible-charm/tests/10-deploy
index 8f3fb36..35e0918 100755
--- a/juju-charms/layers/ansible-charm/tests/10-deploy
+++ b/charms/layers/ansible-charm/tests/10-deploy
@@ -1,6 +1,6 @@
 #!/usr/bin/python3
 #
-# OSM devops/juju-charms - Ansible charm inside OSM devops
+# OSM devops/charms - Ansible charm inside OSM devops
 #
 # Copyright 2017-2018 Universidad Carlos III de Madrid
 #
@@ -47,6 +47,6 @@
         # - .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/juju-charms/layers/netutils/LICENSE b/charms/layers/netutils/LICENSE
similarity index 100%
rename from juju-charms/layers/netutils/LICENSE
rename to charms/layers/netutils/LICENSE
diff --git a/juju-charms/layers/netutils/README.md b/charms/layers/netutils/README.md
similarity index 100%
rename from juju-charms/layers/netutils/README.md
rename to charms/layers/netutils/README.md
diff --git a/juju-charms/layers/netutils/actions.yaml b/charms/layers/netutils/actions.yaml
similarity index 100%
rename from juju-charms/layers/netutils/actions.yaml
rename to charms/layers/netutils/actions.yaml
diff --git a/juju-charms/layers/netutils/actions/dig b/charms/layers/netutils/actions/dig
similarity index 100%
rename from juju-charms/layers/netutils/actions/dig
rename to charms/layers/netutils/actions/dig
diff --git a/juju-charms/layers/netutils/actions/iperf b/charms/layers/netutils/actions/iperf
similarity index 100%
rename from juju-charms/layers/netutils/actions/iperf
rename to charms/layers/netutils/actions/iperf
diff --git a/juju-charms/layers/netutils/actions/nmap b/charms/layers/netutils/actions/nmap
similarity index 100%
rename from juju-charms/layers/netutils/actions/nmap
rename to charms/layers/netutils/actions/nmap
diff --git a/juju-charms/layers/netutils/actions/ping b/charms/layers/netutils/actions/ping
similarity index 100%
rename from juju-charms/layers/netutils/actions/ping
rename to charms/layers/netutils/actions/ping
diff --git a/juju-charms/layers/netutils/actions/traceroute b/charms/layers/netutils/actions/traceroute
similarity index 100%
rename from juju-charms/layers/netutils/actions/traceroute
rename to charms/layers/netutils/actions/traceroute
diff --git a/juju-charms/layers/netutils/config.yaml b/charms/layers/netutils/config.yaml
similarity index 100%
rename from juju-charms/layers/netutils/config.yaml
rename to charms/layers/netutils/config.yaml
diff --git a/juju-charms/layers/netutils/icon.svg b/charms/layers/netutils/icon.svg
similarity index 100%
rename from juju-charms/layers/netutils/icon.svg
rename to charms/layers/netutils/icon.svg
diff --git a/juju-charms/layers/netutils/layer.yaml b/charms/layers/netutils/layer.yaml
similarity index 100%
rename from juju-charms/layers/netutils/layer.yaml
rename to charms/layers/netutils/layer.yaml
diff --git a/juju-charms/layers/netutils/metadata.yaml b/charms/layers/netutils/metadata.yaml
similarity index 100%
rename from juju-charms/layers/netutils/metadata.yaml
rename to charms/layers/netutils/metadata.yaml
diff --git a/juju-charms/layers/netutils/reactive/layer_netutils.py b/charms/layers/netutils/reactive/layer_netutils.py
similarity index 100%
rename from juju-charms/layers/netutils/reactive/layer_netutils.py
rename to charms/layers/netutils/reactive/layer_netutils.py
diff --git a/juju-charms/layers/netutils/tests/00-setup b/charms/layers/netutils/tests/00-setup
similarity index 100%
rename from juju-charms/layers/netutils/tests/00-setup
rename to charms/layers/netutils/tests/00-setup
diff --git a/juju-charms/layers/netutils/tests/10-deploy b/charms/layers/netutils/tests/10-deploy
similarity index 100%
rename from juju-charms/layers/netutils/tests/10-deploy
rename to charms/layers/netutils/tests/10-deploy
diff --git a/juju-charms/layers/pingpong/README.md b/charms/layers/pingpong/README.md
similarity index 100%
rename from juju-charms/layers/pingpong/README.md
rename to charms/layers/pingpong/README.md
diff --git a/juju-charms/layers/pingpong/actions.yaml b/charms/layers/pingpong/actions.yaml
similarity index 100%
rename from juju-charms/layers/pingpong/actions.yaml
rename to charms/layers/pingpong/actions.yaml
diff --git a/juju-charms/layers/pingpong/actions/get-rate b/charms/layers/pingpong/actions/get-rate
similarity index 100%
rename from juju-charms/layers/pingpong/actions/get-rate
rename to charms/layers/pingpong/actions/get-rate
diff --git a/juju-charms/layers/pingpong/actions/get-server b/charms/layers/pingpong/actions/get-server
similarity index 100%
rename from juju-charms/layers/pingpong/actions/get-server
rename to charms/layers/pingpong/actions/get-server
diff --git a/juju-charms/layers/pingpong/actions/get-state b/charms/layers/pingpong/actions/get-state
similarity index 100%
rename from juju-charms/layers/pingpong/actions/get-state
rename to charms/layers/pingpong/actions/get-state
diff --git a/juju-charms/layers/pingpong/actions/get-stats b/charms/layers/pingpong/actions/get-stats
similarity index 100%
rename from juju-charms/layers/pingpong/actions/get-stats
rename to charms/layers/pingpong/actions/get-stats
diff --git a/juju-charms/layers/pingpong/actions/set-rate b/charms/layers/pingpong/actions/set-rate
similarity index 100%
rename from juju-charms/layers/pingpong/actions/set-rate
rename to charms/layers/pingpong/actions/set-rate
diff --git a/juju-charms/layers/pingpong/actions/set-server b/charms/layers/pingpong/actions/set-server
similarity index 100%
rename from juju-charms/layers/pingpong/actions/set-server
rename to charms/layers/pingpong/actions/set-server
diff --git a/juju-charms/layers/pingpong/actions/start-traffic b/charms/layers/pingpong/actions/start-traffic
similarity index 100%
rename from juju-charms/layers/pingpong/actions/start-traffic
rename to charms/layers/pingpong/actions/start-traffic
diff --git a/juju-charms/layers/pingpong/actions/stop-traffic b/charms/layers/pingpong/actions/stop-traffic
similarity index 100%
rename from juju-charms/layers/pingpong/actions/stop-traffic
rename to charms/layers/pingpong/actions/stop-traffic
diff --git a/juju-charms/layers/pingpong/config.yaml b/charms/layers/pingpong/config.yaml
similarity index 100%
rename from juju-charms/layers/pingpong/config.yaml
rename to charms/layers/pingpong/config.yaml
diff --git a/juju-charms/layers/pingpong/icon.svg b/charms/layers/pingpong/icon.svg
similarity index 100%
rename from juju-charms/layers/pingpong/icon.svg
rename to charms/layers/pingpong/icon.svg
diff --git a/juju-charms/layers/pingpong/layer.yaml b/charms/layers/pingpong/layer.yaml
similarity index 100%
rename from juju-charms/layers/pingpong/layer.yaml
rename to charms/layers/pingpong/layer.yaml
diff --git a/juju-charms/layers/pingpong/metadata.yaml b/charms/layers/pingpong/metadata.yaml
similarity index 100%
rename from juju-charms/layers/pingpong/metadata.yaml
rename to charms/layers/pingpong/metadata.yaml
diff --git a/juju-charms/layers/pingpong/reactive/pingpong.py b/charms/layers/pingpong/reactive/pingpong.py
similarity index 100%
rename from juju-charms/layers/pingpong/reactive/pingpong.py
rename to charms/layers/pingpong/reactive/pingpong.py
diff --git a/juju-charms/layers/pingpong/tests/00-setup b/charms/layers/pingpong/tests/00-setup
similarity index 100%
rename from juju-charms/layers/pingpong/tests/00-setup
rename to charms/layers/pingpong/tests/00-setup
diff --git a/juju-charms/layers/pingpong/tests/10-deploy b/charms/layers/pingpong/tests/10-deploy
similarity index 100%
rename from juju-charms/layers/pingpong/tests/10-deploy
rename to charms/layers/pingpong/tests/10-deploy
diff --git a/juju-charms/layers/simple/README.md b/charms/layers/simple/README.md
similarity index 100%
rename from juju-charms/layers/simple/README.md
rename to charms/layers/simple/README.md
diff --git a/juju-charms/layers/simple/actions.yaml b/charms/layers/simple/actions.yaml
similarity index 100%
rename from juju-charms/layers/simple/actions.yaml
rename to charms/layers/simple/actions.yaml
diff --git a/juju-charms/layers/simple/actions/touch b/charms/layers/simple/actions/touch
similarity index 100%
rename from juju-charms/layers/simple/actions/touch
rename to charms/layers/simple/actions/touch
diff --git a/juju-charms/layers/simple/config.yaml b/charms/layers/simple/config.yaml
similarity index 100%
rename from juju-charms/layers/simple/config.yaml
rename to charms/layers/simple/config.yaml
diff --git a/juju-charms/layers/simple/icon.svg b/charms/layers/simple/icon.svg
similarity index 100%
rename from juju-charms/layers/simple/icon.svg
rename to charms/layers/simple/icon.svg
diff --git a/juju-charms/layers/simple/layer.yaml b/charms/layers/simple/layer.yaml
similarity index 100%
rename from juju-charms/layers/simple/layer.yaml
rename to charms/layers/simple/layer.yaml
diff --git a/juju-charms/layers/simple/metadata.yaml b/charms/layers/simple/metadata.yaml
similarity index 100%
rename from juju-charms/layers/simple/metadata.yaml
rename to charms/layers/simple/metadata.yaml
diff --git a/juju-charms/layers/simple/metrics.yaml b/charms/layers/simple/metrics.yaml
similarity index 100%
rename from juju-charms/layers/simple/metrics.yaml
rename to charms/layers/simple/metrics.yaml
diff --git a/juju-charms/layers/simple/reactive/simple.py b/charms/layers/simple/reactive/simple.py
similarity index 100%
rename from juju-charms/layers/simple/reactive/simple.py
rename to charms/layers/simple/reactive/simple.py
diff --git a/juju-charms/layers/simple/tests/00-setup b/charms/layers/simple/tests/00-setup
similarity index 100%
rename from juju-charms/layers/simple/tests/00-setup
rename to charms/layers/simple/tests/00-setup
diff --git a/juju-charms/layers/simple/tests/10-deploy b/charms/layers/simple/tests/10-deploy
similarity index 100%
rename from juju-charms/layers/simple/tests/10-deploy
rename to charms/layers/simple/tests/10-deploy
diff --git a/juju-charms/layers/vyos-proxy/Makefile b/charms/layers/vyos-proxy/Makefile
similarity index 100%
rename from juju-charms/layers/vyos-proxy/Makefile
rename to charms/layers/vyos-proxy/Makefile
diff --git a/juju-charms/layers/vyos-proxy/README.md b/charms/layers/vyos-proxy/README.md
similarity index 100%
rename from juju-charms/layers/vyos-proxy/README.md
rename to charms/layers/vyos-proxy/README.md
diff --git a/juju-charms/layers/vyos-proxy/actions.yaml b/charms/layers/vyos-proxy/actions.yaml
similarity index 100%
rename from juju-charms/layers/vyos-proxy/actions.yaml
rename to charms/layers/vyos-proxy/actions.yaml
diff --git a/juju-charms/layers/vyos-proxy/actions/ping b/charms/layers/vyos-proxy/actions/ping
similarity index 100%
rename from juju-charms/layers/vyos-proxy/actions/ping
rename to charms/layers/vyos-proxy/actions/ping
diff --git a/juju-charms/layers/vyos-proxy/config.yaml b/charms/layers/vyos-proxy/config.yaml
similarity index 100%
rename from juju-charms/layers/vyos-proxy/config.yaml
rename to charms/layers/vyos-proxy/config.yaml
diff --git a/juju-charms/layers/vyos-proxy/copyright b/charms/layers/vyos-proxy/copyright
similarity index 100%
rename from juju-charms/layers/vyos-proxy/copyright
rename to charms/layers/vyos-proxy/copyright
diff --git a/juju-charms/layers/vyos-proxy/icon.svg b/charms/layers/vyos-proxy/icon.svg
similarity index 100%
rename from juju-charms/layers/vyos-proxy/icon.svg
rename to charms/layers/vyos-proxy/icon.svg
diff --git a/juju-charms/layers/vyos-proxy/layer.yaml b/charms/layers/vyos-proxy/layer.yaml
similarity index 100%
rename from juju-charms/layers/vyos-proxy/layer.yaml
rename to charms/layers/vyos-proxy/layer.yaml
diff --git a/juju-charms/layers/vyos-proxy/metadata.yaml b/charms/layers/vyos-proxy/metadata.yaml
similarity index 100%
rename from juju-charms/layers/vyos-proxy/metadata.yaml
rename to charms/layers/vyos-proxy/metadata.yaml
diff --git a/juju-charms/layers/vyos-proxy/reactive/__init__.py b/charms/layers/vyos-proxy/reactive/__init__.py
similarity index 100%
rename from juju-charms/layers/vyos-proxy/reactive/__init__.py
rename to charms/layers/vyos-proxy/reactive/__init__.py
diff --git a/juju-charms/layers/vyos-proxy/reactive/vyos_proxy.py b/charms/layers/vyos-proxy/reactive/vyos_proxy.py
similarity index 100%
rename from juju-charms/layers/vyos-proxy/reactive/vyos_proxy.py
rename to charms/layers/vyos-proxy/reactive/vyos_proxy.py
diff --git a/juju-charms/layers/vyos-proxy/requirements.txt b/charms/layers/vyos-proxy/requirements.txt
similarity index 100%
rename from juju-charms/layers/vyos-proxy/requirements.txt
rename to charms/layers/vyos-proxy/requirements.txt
diff --git a/juju-charms/layers/vyos-proxy/revision b/charms/layers/vyos-proxy/revision
similarity index 100%
rename from juju-charms/layers/vyos-proxy/revision
rename to charms/layers/vyos-proxy/revision
diff --git a/juju-charms/layers/vyos-proxy/tox.ini b/charms/layers/vyos-proxy/tox.ini
similarity index 100%
rename from juju-charms/layers/vyos-proxy/tox.ini
rename to charms/layers/vyos-proxy/tox.ini
diff --git a/juju-charms/layers/vyos-proxy/wheelhouse.txt b/charms/layers/vyos-proxy/wheelhouse.txt
similarity index 100%
rename from juju-charms/layers/vyos-proxy/wheelhouse.txt
rename to charms/layers/vyos-proxy/wheelhouse.txt
diff --git a/descriptor-packages/mk/pkg.mk b/descriptor-packages/mk/pkg.mk
index 07c0ed8..4226ebf 100644
--- a/descriptor-packages/mk/pkg.mk
+++ b/descriptor-packages/mk/pkg.mk
@@ -20,7 +20,7 @@
 PKG_BASE_NAME := $(shell basename $(shell pwd))
 PKG_NAME      := $(addsuffix .tar.gz, $(PKG_BASE_NAME))
 
-CHARM_DIR        := $(TOPDIR)/juju-charms
+CHARM_DIR        := $(TOPDIR)/charms
 CHARM_SRC_DIR    := $(CHARM_DIR)/layers
 CHARM_DOCKER_TAG := charm-tools
 CHARM_BUILD_DIR  := $(CHARM_DIR)/builds
@@ -69,14 +69,14 @@
 $(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)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/simple_multi-charm_multi-vdu-ns/Makefile b/descriptor-packages/nsd/simple_multi-charm_multi-vdu-ns/Makefile
new file mode 100644
index 0000000..9c18082
--- /dev/null
+++ b/descriptor-packages/nsd/simple_multi-charm_multi-vdu-ns/Makefile
@@ -0,0 +1,20 @@
+#
+#   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
new file mode 100644
index 0000000..62012d2
--- /dev/null
+++ b/descriptor-packages/nsd/simple_multi-charm_multi-vdu-ns/src/icons/osm.png
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
new file mode 100644
index 0000000..bd21706
--- /dev/null
+++ b/descriptor-packages/nsd/simple_multi-charm_multi-vdu-ns/src/simple_multi-charm_multi-vdu_nsd.yaml
@@ -0,0 +1,38 @@
+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/vnfd/hackfest_basic_vnf/src/hackfest_basic_vnfd.yaml b/descriptor-packages/vnfd/hackfest_basic_vnf/src/hackfest_basic_vnfd.yaml
index 3c18d79..4051eb3 100644
--- a/descriptor-packages/vnfd/hackfest_basic_vnf/src/hackfest_basic_vnfd.yaml
+++ b/descriptor-packages/vnfd/hackfest_basic_vnf/src/hackfest_basic_vnfd.yaml
@@ -13,6 +13,9 @@
         -   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'
diff --git a/descriptor-packages/vnfd/simple_multi-charm_multi-vdu_vnf/Makefile b/descriptor-packages/vnfd/simple_multi-charm_multi-vdu_vnf/Makefile
new file mode 100644
index 0000000..3e88db7
--- /dev/null
+++ b/descriptor-packages/vnfd/simple_multi-charm_multi-vdu_vnf/Makefile
@@ -0,0 +1,21 @@
+#
+#   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
new file mode 100644
index 0000000..6957e18
--- /dev/null
+++ b/descriptor-packages/vnfd/simple_multi-charm_multi-vdu_vnf/src/simple_multi-charm_multi-vdu_vnfd.yaml
@@ -0,0 +1,130 @@
+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
+            type: VPORT
+        -   id: vnf-data
+            name: vnf-data
+            short-name: vnf-data
+            type: VPORT
+        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
+                type: VPORT
+            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
+                type: VPORT
+            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/devops-stages/stage-archive.sh b/devops-stages/stage-archive.sh
index e1b4713..160b1a3 100755
--- a/devops-stages/stage-archive.sh
+++ b/devops-stages/stage-archive.sh
@@ -14,7 +14,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-PKG_DIRECTORIES="jenkins installers systest juju-charms descriptor-packages tools docker"
+PKG_DIRECTORIES="jenkins installers systest charms descriptor-packages tools docker"
 MDG_NAME=devops
 DEB_INSTALL=debian/osm-$MDG_NAME.install
 export DEBEMAIL="mmarchetti@sandvine.com"
@@ -45,7 +45,7 @@
 
 cd $PKG_DIR
 dh_make -y --indep --createorig --a -c apache
-dpkg-buildpackage -uc -us -tc -rfakeroot 
+dpkg-buildpackage -uc -us -tc -rfakeroot
 cd -
 
 rm -rf pool
diff --git a/docker/MON/Dockerfile b/docker/MON/Dockerfile
index ae93274..c276000 100644
--- a/docker/MON/Dockerfile
+++ b/docker/MON/Dockerfile
@@ -30,18 +30,23 @@
  && apt-get --yes install git python python-pip python3 python3-pip libmysqlclient-dev libssl-dev libffi-dev \
  && pip3 install pip==9.0.3
 
+RUN pip3 install  'macaroonbakery>=1.1,<2.0' 'pyRFC3339>=1.0,<2.0' \
+      'pyyaml>=3.0,<4.0' 'theblues>=0.3.8,<1.0' 'websockets>=4.0,<5.0' \
+      'paramiko'   # PyNaCl
+
 ARG REPOSITORY_BASE=http://osm-download.etsi.org/repository/osm/debian
 ARG RELEASE=ReleaseFOUR-daily
 ARG REPOSITORY_KEY=OSM%20ETSI%20Release%20Key.gpg
 ARG REPOSITORY=testing
 
 RUN curl ${REPOSITORY_BASE}/${RELEASE}/${REPOSITORY_KEY} | apt-key add -
-RUN add-apt-repository -y "deb ${REPOSITORY_BASE}/${RELEASE} ${REPOSITORY} MON common" && apt update
+RUN add-apt-repository -y "deb ${REPOSITORY_BASE}/${RELEASE} ${REPOSITORY} MON N2VC common" && apt update
 
 ARG MON_VERSION
 ARG COMMON_VERSION
+ARG N2VC_VERSION
 
-RUN apt-get --yes update  && apt-get -y install python3-osm-common${COMMON_VERSION} python3-osm-mon${MON_VERSION}
+RUN apt-get --yes update  && apt-get -y install python3-osm-common${COMMON_VERSION} python3-osm-mon${MON_VERSION} python3-n2vc${N2VC_VERSION}
 
 COPY scripts/ scripts/
 
diff --git a/docker/mk/Makefile.include b/docker/mk/Makefile.include
index 2be4d29..ced304a 100644
--- a/docker/mk/Makefile.include
+++ b/docker/mk/Makefile.include
@@ -35,7 +35,7 @@
 	$Q$(MKINCLUDE)/get_version.sh -r $(REPOSITORY) -R $(RELEASE) -k $(REPOSITORY_KEY) -u $(REPOSITORY_BASE) -m $* > $@
 
 build: $(MKBUILD) $(DEPS_TARGETS)
-	$Qdocker build -t osm/$(LOWER_MDG):$(TAG) \
+	$Qdocker build -t opensourcemano/$(LOWER_MDG):$(TAG) \
                    --build-arg RELEASE=$(RELEASE) \
                    --build-arg REPOSITORY=$(REPOSITORY) \
                    --build-arg REPOSITORY_KEY=$(REPOSITORY_KEY) \
@@ -57,7 +57,7 @@
 	rm -f $(MKBUILD)/.dep*
 
 tag:
-	docker tag osm/$(CONTAINER_NAME):$(INPUT_TAG) opensourcemano/$(LOWER_MDG):$(TAG)
+	docker tag opensourcemano/$(CONTAINER_NAME):$(INPUT_TAG) opensourcemano/$(LOWER_MDG):$(TAG)
 
 push: tag
 	docker push opensourcemano/$(LOWER_MDG):$(TAG)
diff --git a/installers/docker/docker-compose.yaml b/installers/docker/docker-compose.yaml
index 29b7857..5342b30 100644
--- a/installers/docker/docker-compose.yaml
+++ b/installers/docker/docker-compose.yaml
@@ -69,7 +69,7 @@
 #    ports:
 #      - "3306:3306"
   keystone:
-    image: ${DOCKER_USER:-osm}/keystone:${TAG:-latest}
+    image: ${DOCKER_USER:-opensourcemano}/keystone:${TAG:-latest}
     networks:
       - netOSM
     environment:
@@ -79,7 +79,7 @@
     ports:
       - "${OSM_KEYSTONE_PORTS:-5000:5000}"
   nbi:
-    image: ${DOCKER_USER:-osm}/nbi:${TAG:-latest}
+    image: ${DOCKER_USER:-opensourcemano}/nbi:${TAG:-latest}
     networks:
       - netOSM
     volumes:
@@ -95,7 +95,7 @@
     #  - kafka
     #  - mongo
   lcm:
-    image: ${DOCKER_USER:-osm}/lcm:${TAG:-latest}
+    image: ${DOCKER_USER:-opensourcemano}/lcm:${TAG:-latest}
     networks:
       - netOSM
     volumes:
@@ -121,7 +121,7 @@
 #    ports:
 #      - "3306:3306"
   ro:
-    image: ${DOCKER_USER:-osm}/ro:${TAG:-latest}
+    image: ${DOCKER_USER:-opensourcemano}/ro:${TAG:-latest}
     networks:
       - netOSM
     environment:
@@ -133,7 +133,7 @@
     ports:
       - "${OSM_RO_PORTS:-9090:9090}"
   mon:
-    image: ${DOCKER_USER:-osm}/mon:${TAG:-latest}
+    image: ${DOCKER_USER:-opensourcemano}/mon:${TAG:-latest}
     networks:
       - netOSM
     volumes:
@@ -148,7 +148,7 @@
     #depends_on:
     #  - kafka
   pol:
-    image: ${DOCKER_USER:-osm}/pol:${TAG:-latest}
+    image: ${DOCKER_USER:-opensourcemano}/pol:${TAG:-latest}
     networks:
       - netOSM
     volumes:
@@ -160,7 +160,7 @@
     #  - kafka
     #  - mon
   light-ui:
-    image: ${DOCKER_USER:-osm}/light-ui:${TAG:-latest}
+    image: ${DOCKER_USER:-opensourcemano}/light-ui:${TAG:-latest}
     networks:
       - netOSM
     environment:
diff --git a/installers/full_install_osm.sh b/installers/full_install_osm.sh
index f67ba08..e1f2ff2 100755
--- a/installers/full_install_osm.sh
+++ b/installers/full_install_osm.sh
@@ -167,14 +167,14 @@
         remove_stack osm_metrics
         echo "Now osm docker images and volumes will be deleted"
         newgrp docker << EONG
-        docker image rm ${DOCKERUSER}/ro
-        docker image rm ${DOCKERUSER}/lcm
-        docker image rm ${DOCKERUSER}/light-ui
-        docker image rm ${DOCKERUSER}/keystone
-        docker image rm ${DOCKERUSER}/nbi
-        docker image rm ${DOCKERUSER}/mon
-        docker image rm ${DOCKERUSER}/pm
-        docker image rm ${DOCKERUSER}/kafka-exporter
+        docker image rm ${DOCKER_USER}/ro
+        docker image rm ${DOCKER_USER}/lcm
+        docker image rm ${DOCKER_USER}/light-ui
+        docker image rm ${DOCKER_USER}/keystone
+        docker image rm ${DOCKER_USER}/nbi
+        docker image rm ${DOCKER_USER}/mon
+        docker image rm ${DOCKER_USER}/pm
+        docker image rm ${DOCKER_USER}/kafka-exporter
 EONG
         remove_volumes $OSM_STACK_NAME
         remove_network $OSM_STACK_NAME
@@ -673,7 +673,7 @@
     elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MON ; then
         git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/MON
         git -C ${LWTEMPDIR}/MON checkout ${COMMIT_ID}
-        sg docker -c "docker build ${LWTEMPDIR}/MON -f ${LWTEMPDIR}/MON/docker/Dockerfile -t osm/mon --no-cache" || FATAL "cannot build MON docker image"
+        sg docker -c "docker build ${LWTEMPDIR}/MON -f ${LWTEMPDIR}/MON/docker/Dockerfile -t ${DOCKER_USER}/mon --no-cache" || FATAL "cannot build MON docker image"
     fi
 
     if [ -n "$PULL_IMAGES" ]; then
@@ -681,7 +681,7 @@
     elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MON ; then
         git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/POL
         git -C ${LWTEMPDIR}/POL checkout ${COMMIT_ID}
-        sg docker -c "docker build ${LWTEMPDIR}/POL -f ${LWTEMPDIR}/POL/docker/Dockerfile -t osm/pol --no-cache" || FATAL "cannot build PM docker image"
+        sg docker -c "docker build ${LWTEMPDIR}/POL -f ${LWTEMPDIR}/POL/docker/Dockerfile -t ${DOCKER_USER}/pol --no-cache" || FATAL "cannot build PM docker image"
     fi
 
     if [ -n "$PULL_IMAGES" ]; then
@@ -690,8 +690,8 @@
     elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI ; then
         git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NBI
         git -C ${LWTEMPDIR}/NBI checkout ${COMMIT_ID}
-        sg docker -c "docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t osm/nbi --no-cache" || FATAL "cannot build NBI docker image"
-        sg docker -c "docker build ${LWTEMPDIR}/NBI/keystone -f ${LWTEMPDIR}/NBI/keystone/Dockerfile -t osm/keystone --no-cache" || FATAL "cannot build KEYSTONE docker image"
+        sg docker -c "docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t ${DOCKER_USER}/nbi --no-cache" || FATAL "cannot build NBI docker image"
+        sg docker -c "docker build ${LWTEMPDIR}/NBI/keystone -f ${LWTEMPDIR}/NBI/keystone/Dockerfile -t ${DOCKER_USER}/keystone --no-cache" || FATAL "cannot build KEYSTONE docker image"
     fi
 
     if [ -n "$PULL_IMAGES" ]; then
@@ -700,7 +700,7 @@
         sg docker -c "docker pull mysql:5" || FATAL "cannot get mysql docker image"
         git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/RO
         git -C ${LWTEMPDIR}/RO checkout ${COMMIT_ID}
-        sg docker -c "docker build ${LWTEMPDIR}/RO -f ${LWTEMPDIR}/RO/docker/Dockerfile-local -t osm/ro --no-cache" || FATAL "cannot build RO docker image"
+        sg docker -c "docker build ${LWTEMPDIR}/RO -f ${LWTEMPDIR}/RO/docker/Dockerfile-local -t ${DOCKER_USER}/ro --no-cache" || FATAL "cannot build RO docker image"
     fi
 
     if [ -n "$PULL_IMAGES" ]; then
@@ -708,7 +708,7 @@
     elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LCM ; then
         git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LCM
         git -C ${LWTEMPDIR}/LCM checkout ${COMMIT_ID}
-        sg docker -c "docker build ${LWTEMPDIR}/LCM -f ${LWTEMPDIR}/LCM/Dockerfile.local -t osm/lcm --no-cache" || FATAL "cannot build LCM docker image"
+        sg docker -c "docker build ${LWTEMPDIR}/LCM -f ${LWTEMPDIR}/LCM/Dockerfile.local -t ${DOCKER_USER}/lcm --no-cache" || FATAL "cannot build LCM docker image"
     fi
 
     if [ -n "$PULL_IMAGES" ]; then
@@ -716,13 +716,13 @@
     elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-UI ; then
         git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LW-UI
         git -C ${LWTEMPDIR}/LW-UI checkout ${COMMIT_ID}
-        sg docker -c "docker build ${LWTEMPDIR}/LW-UI -t osm/light-ui -f ${LWTEMPDIR}/LW-UI/docker/Dockerfile --no-cache" || FATAL "cannot build LW-UI docker image"
+        sg docker -c "docker build ${LWTEMPDIR}/LW-UI -f ${LWTEMPDIR}/LW-UI/docker/Dockerfile -t ${DOCKER_USER}/light-ui --no-cache" || FATAL "cannot build LW-UI docker image"
     fi
 
     if [ -n "$PULL_IMAGES" ]; then
         sg docker -c "docker pull ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}" || FATAL "cannot pull osmclient docker image"
     elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-osmclient; then
-        sg docker -c "docker build -t osm/osmclient ${BUILD_ARGS[@]} -f $OSM_DEVOPS/docker/osmclient ."
+        sg docker -c "docker build -t ${DOCKER_USER}/osmclient ${BUILD_ARGS[@]} -f $OSM_DEVOPS/docker/osmclient ."
     fi
     echo "Finished generation of docker images"
 }
@@ -881,8 +881,6 @@
     echo "export PROMETHEUS_TAG=${PROMETHEUS_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
     echo "export KEYSTONEDB_TAG=${KEYSTONEDB_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
 
-
-
     pushd $OSM_DOCKER_WORK_DIR
     sg docker -c "source ./osm_ports.sh; docker stack deploy -c $OSM_DOCKER_WORK_DIR/docker-compose.yaml $OSM_STACK_NAME"
     popd
@@ -954,7 +952,7 @@
 }
 
 function install_lightweight() {
-    OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
+    [ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
     [ ! -d "$OSM_DOCKER_WORK_DIR" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR
 
     [ "$USER" == "root" ] && FATAL "You are running the installer as root. The installer is prepared to be executed as a normal user with sudo privileges."
@@ -1077,11 +1075,23 @@
     echo "TO_REBUILD=$TO_REBUILD"
     echo "INSTALL_NOLXD=$INSTALL_NOLXD"
     echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
+    echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
     echo "RELEASE=$RELEASE"
     echo "REPOSITORY=$REPOSITORY"
     echo "REPOSITORY_BASE=$REPOSITORY_BASE"
     echo "REPOSITORY_KEY=$REPOSITORY_KEY"
     echo "NOCONFIGURE=$NOCONFIGURE"
+    echo "OSM_DEVOPS=$OSM_DEVOPS"
+    echo "OSM_VCA_HOST=$OSM_VCA_HOST"
+    echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
+    echo "NO_HOST_PORTS=$NO_HOST_PORTS"
+    echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
+    echo "WORKDIR_SUDO=$WORKDIR_SUDO"
+    echo "OSM_WORK_DIR=$OSM_STACK_NAME"
+    echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
+    echo "DOCKER_USER=$DOCKER_USER"
+    echo "OSM_STACK_NAME=$OSM_STACK_NAME"
+    echo "PULL_IMAGES=$PULL_IMAGES"
     echo "SHOWOPTS=$SHOWOPTS"
     echo "Install from specific refspec (-b): $COMMIT_ID"
 }
@@ -1125,6 +1135,7 @@
 INSTALL_NOLXD=""
 INSTALL_NODOCKER=""
 INSTALL_NOJUJU=""
+INSTALL_NOHOSTCLIENT=""
 NOCONFIGURE=""
 RELEASE_DAILY=""
 SESSION_ID=`date +%s`
@@ -1135,24 +1146,27 @@
 NO_HOST_PORTS=""
 DOCKER_NOBUILD=""
 REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
-REPOSITORY_BASE="http://osm-download.etsi.org/repository/osm/debian"
+REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
 WORKDIR_SUDO=sudo
 OSM_WORK_DIR="/etc/osm"
+OSM_DOCKER_WORK_DIR="/etc/osm/docker"
 OSM_DOCKER_TAG=latest
-DOCKER_USER=osm
+DOCKER_USER=opensourcemano
+PULL_IMAGES="y"
 KAFKA_TAG=2.11-1.0.2
 PROMETHEUS_TAG=v2.4.3
 KEYSTONEDB_TAG=10
 OSM_DATABASE_COMMONKEY=
 ELASTIC_VERSION=6.4.2
 
-while getopts ":hy-:b:r:k:u:R:l:p:D:o:m:H:S:s:w:t:" o; do
+while getopts ":hy-:b:r:k:u:R:l:p:D:o:m:H:S:s:w:t:U:" o; do
     case "${o}" in
         h)
             usage && exit 0
             ;;
         b)
             COMMIT_ID=${OPTARG}
+            PULL_IMAGES=""
             ;;
         r)
             REPOSITORY="${OPTARG}"
@@ -1170,6 +1184,9 @@
             REPOSITORY_BASE="${OPTARG}"
             REPO_ARGS+=(-u "$REPOSITORY_BASE")
             ;;
+        U)
+            DOCKER_USER="${OPTARG}"
+            ;;
         l)
             LXD_REPOSITORY_BASE="${OPTARG}"
             ;;
@@ -1214,7 +1231,7 @@
             ;;
         -)
             [ "${OPTARG}" == "help" ] && usage && exit 0
-            [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && continue
+            [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
             [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
             [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
             [ "${OPTARG}" == "nat" ] && NAT="y" && continue
@@ -1237,7 +1254,7 @@
             [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
             [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
             [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
-            [ "${OPTARG}" == "pullimages" ] && DOCKER_USER="opensourcemano" && PULL_IMAGES=true && continue
+            [ "${OPTARG}" == "pullimages" ] && continue
             echo -e "Invalid option: '--$OPTARG'\n" >&2
             usage && exit 1
             ;;
diff --git a/installers/install_osm.sh b/installers/install_osm.sh
index 899adb1..bc1adfa 100755
--- a/installers/install_osm.sh
+++ b/installers/install_osm.sh
@@ -31,4 +31,4 @@
 add_repo "deb [arch=amd64] $REPOSITORY_BASE/$RELEASE $REPOSITORY devops"
 sudo DEBIAN_FRONTEND=noninteractive apt-get -q update
 sudo DEBIAN_FRONTEND=noninteractive apt-get install osm-devops
-/usr/share/osm-devops/installers/full_install_osm.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D /usr/share/osm-devops -t releasefive-daily --pullimages "$@"
+/usr/share/osm-devops/installers/full_install_osm.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D /usr/share/osm-devops -t releasefive-daily "$@"
diff --git a/jenkins/ci-pipelines/ci_stage_3.groovy b/jenkins/ci-pipelines/ci_stage_3.groovy
index 6d0d00e..38b255b 100644
--- a/jenkins/ci-pipelines/ci_stage_3.groovy
+++ b/jenkins/ci-pipelines/ci_stage_3.groovy
@@ -60,7 +60,7 @@
         sh(script: "touch ${tempdir}/env")
         envfile="${tempdir}/env"
     }
-    sh "docker run --network net${stackName} --env-file ${envfile} -v ${tempdir}:/usr/share/osm-devops/systest/reports osm/osmclient:${tagName} make -C /usr/share/osm-devops/systest ${testName}"
+    sh "docker run --network net${stackName} --env-file ${envfile} -v ${tempdir}:/usr/share/osm-devops/systest/reports opensourcemano/osmclient:${tagName} make -C /usr/share/osm-devops/systest ${testName}"
     sh "cp ${tempdir}/* ."
     junit  '*.xml'
 }
@@ -225,6 +225,11 @@
                         release = "-R ${params.RELEASE}"
                     }
              
+                    if ( params.REPOSITORY_BASE )
+                    {
+                        repo_base_url = "-u ${params.REPOSITORY_BASE}"
+                    }
+             
                     sh """
                         export PATH=$PATH:/snap/bin
                         installers/full_install_osm.sh -y -s ${container_name} --test --nolxd --nodocker --nojuju --nohostports --nohostclient \
diff --git a/systest/Makefile b/systest/Makefile
index 75ab556..a5b6303 100644
--- a/systest/Makefile
+++ b/systest/Makefile
@@ -193,7 +193,7 @@
 %.openstack: check_openstack_env
 	$(Q)$(MAKE) $*
 
-%s.vcd: check_vcd_env
+%.vcd: check_vcd_env
 	$(Q)$(MAKE) $*
 
 cirros: check_OSM_HOSTNAME \
diff --git a/systest/lib/vim/vim.py b/systest/lib/vim/vim.py
index f3d1753..0ac9525 100644
--- a/systest/lib/vim/vim.py
+++ b/systest/lib/vim/vim.py
@@ -23,4 +23,7 @@
         try:
             osm.get_api().vim.get(self.vim_name)
         except ClientException:
-            osm.get_api().vim.create(self.vim_name,openstack.get_access())
+            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/tools/vmware_ovf_upload.py b/tools/vmware_ovf_upload.py
index 4737415..4f3f0e7 100755
--- a/tools/vmware_ovf_upload.py
+++ b/tools/vmware_ovf_upload.py
@@ -22,19 +22,20 @@
 ##
 
 
-from pyvcloud.vcloudair import VCA
-from pyvcloud import Http
 from xml.etree import ElementTree as XmlElementTree
-from pyvcloud.schema.vcd.v1_5.schemas.vcloud import mediaType
+from pyvcloud.vcd.client import BasicLoginCredentials,Client
+from pyvcloud.vcd.vdc import VDC
+from pyvcloud.vcd.org import Org
 import sys,os
 import logging
 import requests
 import time
 import re
+import hashlib
+from progressbar import Percentage, Bar, ETA, FileTransferSpeed, ProgressBar
 
 
-STANDALONE = 'standalone'
-VCAVERSION = '5.9'
+API_VERSION = '5.6'
 
 class vCloudconfig(object):
     def __init__(self, host=None, user=None, password=None,orgname=None, logger=None):
@@ -42,7 +43,8 @@
         self.user = user
         self.password = password
         self.org = orgname
-        self.logger = logger
+        self.logger = logging.getLogger('vmware_ovf_upload')
+        self.logger.setLevel(10)
 
     def connect(self):
         """ Method connect as normal user to vCloud director.
@@ -52,87 +54,164 @@
         """
 
         try:
-            self.logger.debug("Logging in to a vca {} as {} to datacenter {}.".format(self.org,
-                                                                                      self.user,
-                                                                                      self.org))
-            vca = VCA(host=self.url,
-                      username=self.user,
-                      service_type=STANDALONE,
-                      version=VCAVERSION,
-                      verify=False,
-                      log=False)
-
-            result = vca.login(password=self.password, org=self.org)
-            if not result:
-                raise vimconn.vimconnConnectionException("Can't connect to a vCloud director as: {}".format(self.user))
-            result = vca.login(token=vca.token, org=self.org, org_url=vca.vcloud_session.org_url)
-            if result is True:
-                self.logger.info(
-                    "Successfully logged to a vcloud direct org: {} as user: {}".format(self.org, self.user))
-
+            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:
-            raise vimconn.vimconnConnectionException("Can't connect to a vCloud director org: "
+            raise Exception("Can't connect to a vCloud director org: "
                                                      "{} as user: {}".format(self.org, self.user))
 
-        return vca
+        return client
 
-    def upload_ovf(self, catalog_name=None, image_name=None, media_file_name=None,
+    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))
+
+        dirpath, filename = os.path.split(path)
+        flname, 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.
         """
-        vca = self.connect()   
-
-        # Creating new catalog in vCD
-        task = vca.create_catalog(catalog_name, catalog_name)
-        result = vca.block_until_completed(task)
-        if not result:
-            return False
+        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 vca.get_catalogs():
-                if catalog_name != catalog.name:
+            for catalog in org.list_catalogs():
+                if catalog_name != catalog['name']:
                     continue
-                link = filter(lambda link: link.get_type() == "application/vnd.vmware.vcloud.media+xml" and
-                                           link.get_rel() == 'add', catalog.get_Link())
-                assert len(link) == 1
+                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, catalog_name)
-                headers = vca.vcloud_session.get_vcloud_headers()
-                headers['Content-Type'] = 'application/vnd.vmware.vcloud.uploadVAppTemplateParams+xml'
-                response = Http.post(link[0].get_href(), headers=headers, data=data, verify=vca.verify, logger=self.logger)
+                """.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 = Http.get(href, headers=vca.vcloud_session.get_vcloud_headers(),
-                                        verify=vca.verify, logger=self.logger)
 
+                    response = requests.get(url=href,
+                                    headers=headers,
+                                       verify=False)
                     if response.status_code == requests.codes.ok:
-                        media = mediaType.parseString(response.content, True)
-                        link = filter(lambda link: link.get_rel() == 'upload:default',
-                                      media.get_Files().get_File()[0].get_Link())[0]
-                        headers = vca.vcloud_session.get_vcloud_headers()
                         headers['Content-Type'] = 'Content-Type text/xml'
-                        response = Http.put(link.get_href(),
-                                            data=open(media_file_name, 'rb'),
-                                            headers=headers,
-                                            verify=vca.verify, logger=self.logger)
+                        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,
@@ -146,80 +225,72 @@
 
                     # uploading VMDK file
                     # check status of OVF upload and upload remaining files.
-                    response = Http.get(template,
-                                        headers=vca.vcloud_session.get_vcloud_headers(),
-                                        verify=vca.verify,
-                                        logger=self.logger)
+
+                    response = requests.get(url=template,
+                                         headers=headers,
+                                            verify=False)
 
                     if response.status_code == requests.codes.ok:
-                        media = mediaType.parseString(response.content, True)
-                        number_of_files = len(media.get_Files().get_File())
-                        for index in xrange(0, number_of_files):
-                            links_list = filter(lambda link: link.get_rel() == 'upload:default',
-                                                media.get_Files().get_File()[index].get_Link())
-                            for link in links_list:
-                                # we skip ovf since it already uploaded.
-                                if 'ovf' in link.get_href():
-                                    continue
-                                # The OVF file and VMDK must be in a same directory
-                                head, tail = os.path.split(media_file_name)
-                                file_vmdk = head + '/' + link.get_href().split("/")[-1]
-                                if not os.path.isfile(file_vmdk):
+                        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, tail = 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
-                                statinfo = os.stat(file_vmdk)
-                                if statinfo.st_size == 0:
-                                    return False
-                                hrefvmdk = link.get_href()
-
-                                if progress:
-                                    print("Uploading file: {}".format(file_vmdk))
-                                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 = vca.vcloud_session.get_vcloud_headers()
-                                        headers['Content-Range'] = 'bytes %s-%s/%s' % (
-                                            bytes_transferred, len(my_bytes) - 1, statinfo.st_size)
-                                        headers['Content-Length'] = str(len(my_bytes))
-                                        response = Http.put(hrefvmdk,
-                                                            headers=headers,
-                                                            data=my_bytes,
-                                                            verify=vca.verify,
-                                                            logger=None)
-
-                                        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(15)
-                        self.logger.debug("OVF image sucessfully uploaded to the VMware vCloud Director")
-                        return True
-                    else:
-                        self.logger.debug("Failed retrieve vApp template for catalog name {} for OVF {}".
-                                          format(catalog_name, media_file_name))
-                        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))
-
+            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__":
 
@@ -255,10 +326,6 @@
     match = re.search("image:\s'(.*?)'\n",rh.read())
     if match: catalog = match.group(1)
 
-
     if file_extension == '.ovf':
-        result = obj.upload_ovf(catalog_name=catalog, image_name='linux',
-                                                media_file_name=ovf_file_path,
-                                               description='', progress=False,
-                                                       chunk_bytes=128 * 1024)
-    
+        obj.get_catalog_id_from_path(catalog_name=catalog, path=ovf_file_path,
+                                                               progress=True)