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)