<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://osm.etsi.org/wikipub/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ramonsalguer</id>
	<title>OSM Public Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://osm.etsi.org/wikipub/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ramonsalguer"/>
	<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php/Special:Contributions/Ramonsalguer"/>
	<updated>2026-05-06T16:34:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=How_to_install_OSM_on_VirtualBox&amp;diff=6381</id>
		<title>How to install OSM on VirtualBox</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=How_to_install_OSM_on_VirtualBox&amp;diff=6381"/>
		<updated>2021-09-29T13:49:56Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Deprecated:&#039;&#039;&#039; Please refer to https://osm.etsi.org/docs/user-guide/&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
VirtualBox has different networking setup modes (see [https://www.virtualbox.org/manual/ch06.html Table 6.1])&lt;br /&gt;
&lt;br /&gt;
In case we want to install OSM on VirtualBox, it needs an IP address that remains the same across reboots.&lt;br /&gt;
&lt;br /&gt;
If the host is attached to DHCP and you cannot access the router to assign the same IP to your VMs, &amp;quot;bridged&amp;quot; mode could be difficult to manage. So, a possible alternative is to have two network adapters: one NAT that allows the VMs to access Internet + one Host-Only that allows static address on the VM and traffic from Host to VM.&lt;br /&gt;
&lt;br /&gt;
OSM can be configured like that using the procedure below, tested on OSM Rel THREE.&lt;br /&gt;
&lt;br /&gt;
1) Create a VM on VirtualBox (e.g. 8GB RAM, 40GB DISK)&lt;br /&gt;
&lt;br /&gt;
2) Configure network with 2 adapters: NAT + Host-Only&lt;br /&gt;
&lt;br /&gt;
3) Install OpenSSH server (sudo apt-get install openssh-server) and update Ubuntu (sudo apt-get update)&lt;br /&gt;
&lt;br /&gt;
4) Add a static address to the &amp;quot;Host-only&amp;quot; adapter (e.g. enp0s8 with static IP 10.20.0.90), e.g. appending the following to &amp;quot;/etc/network/interfaces&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 auto enp0s8&lt;br /&gt;
 iface enp0s8 inet static&lt;br /&gt;
 address 10.20.0.90&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
 network 10.20.0.0&lt;br /&gt;
 broadcast 10.20.0.255&lt;br /&gt;
&lt;br /&gt;
5) Restart the network services, then the VM should be reachable in ssh from the host using the static IP address&lt;br /&gt;
 sudo service networking restart&lt;br /&gt;
6) Configure LXD following the instructions: [https://osm.etsi.org/wikipub/index.php/LXD_configuration_for_OSM_Release_THREE OSM Release THREE LXD config]&lt;br /&gt;
&lt;br /&gt;
7) Install OSM following the instructions: [https://osm.etsi.org/wikipub/index.php/OSM_Release_THREE OSM Three install]&lt;br /&gt;
 wget https://osm-download.etsi.org/ftp/osm-3.0-three/install_osm.sh&lt;br /&gt;
 chmod +x install_osm.sh&lt;br /&gt;
8) Before launching the installation, modify install_osm.sh, find export_ips (2 times!), and add a line afterwards with:&lt;br /&gt;
 export DEFAULT_IP=10.20.0.90 &lt;br /&gt;
where DEFAULT_IP is the static IP address configured for host-only network)&lt;br /&gt;
&lt;br /&gt;
9) Install OSM&lt;br /&gt;
 ./install_osm.sh &lt;br /&gt;
10) When the installation is over, a final step to configure NAT&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/devops.git temp&lt;br /&gt;
 vi temp/installers/export_ips&lt;br /&gt;
 #Change the DEFAULT_IF to DEFAULT_IF=enp0s8 (the interface used for Host-only network configuration)&lt;br /&gt;
 sudo ./temp/installers/nat_osm      # in order to apply NAT rules&lt;br /&gt;
11) Check NAT rules in &amp;quot;/etc/iptables/rules.v4&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
12) Access OSM GUI using https://10.20.0.90:8443 (admin/admin). You can also ssh to the Virtualbox VM running OSM (ssh ubuntu@10.20.0.90)&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_E2E_tests&amp;diff=6111</id>
		<title>OSM E2E tests</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_E2E_tests&amp;diff=6111"/>
		<updated>2021-02-17T17:24:16Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM Tester Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/gitlab/osm-doc/osm-tester-guide&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= OSM packages and images for E2E tests =&lt;br /&gt;
&lt;br /&gt;
All VNF and NS packages as well as VM images required for the tests can be found here: &#039;&#039;&#039;[http://osm-download.etsi.org/ftp/e2e-tests/ http://osm-download.etsi.org/ftp/e2e-tests/]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Test 1. Sanity check with simple NS =&lt;br /&gt;
Objectives:&lt;br /&gt;
&lt;br /&gt;
* Sanity check of correct E2E behaviour.&lt;br /&gt;
* Validate VM image management.&lt;br /&gt;
* Test access to the console from OSM UI&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
* Onboard and deploy the Cirros NS, as described in [https://osm.etsi.org/wikipub/index.php/OSM_Release_TWO#Deploying_your_first_Network_Service https://osm.etsi.org/wikipub/index.php/OSM_Release_TWO#Deploying_your_first_Network_Service]&lt;br /&gt;
* Access the console via OSM UI (user: “&amp;lt;tt&amp;gt;cirros&amp;lt;/tt&amp;gt;”, pwd: “&amp;lt;tt&amp;gt;cubswin:)&amp;lt;/tt&amp;gt;”)&lt;br /&gt;
* Check that the VMs are up and running and connected via the common link.&lt;br /&gt;
&lt;br /&gt;
Images:&lt;br /&gt;
&lt;br /&gt;
* cirros034.qcow2&lt;br /&gt;
&lt;br /&gt;
Descriptors:&lt;br /&gt;
&lt;br /&gt;
* cirros_vnf&lt;br /&gt;
* cirros_2vnf_ns&lt;br /&gt;
&lt;br /&gt;
= Test 2a. Failed deployment of scenario when the checksum is invalid =&lt;br /&gt;
Objective:&lt;br /&gt;
&lt;br /&gt;
* Testing that a wrong checksum prevents a successful deployment&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
* Modify the checksum in the VNF descriptor (using the UI VNF catalog) to add a wrong but format-valid checksum (e.g.: “aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”). Same images are used.&lt;br /&gt;
* Deploy the same NS as in test1&lt;br /&gt;
* Check that the system refuses to deploy the NS due to a checksum error (“VIM Exception vimconnException Image not found at VIM with filter…”)&lt;br /&gt;
&lt;br /&gt;
Images:&lt;br /&gt;
&lt;br /&gt;
* cirros034.qcow2&lt;br /&gt;
&lt;br /&gt;
Descriptors:&lt;br /&gt;
&lt;br /&gt;
* cirros_vnf&lt;br /&gt;
* cirros_2vnf_ns&lt;br /&gt;
&lt;br /&gt;
= Test 2b. Successful deployment of scenario when the descriptor has a checksum =&lt;br /&gt;
Objective:&lt;br /&gt;
&lt;br /&gt;
* Testing that a valid checksum in the VNF descriptor leads to a successful deployment&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
* Modify the checksum in the VNF descriptor (using the UI VNF catalog) to add the valid checksum for the image (“ee1eca47dc88f4879d8a229cc70a07c6” for the cirros034 image).&lt;br /&gt;
* Deploy the same NS as in test1&lt;br /&gt;
* Check that the NS is successfully instantiated.&lt;br /&gt;
* Access the console via OSM UI (user: “&amp;lt;tt&amp;gt;cirros&amp;lt;/tt&amp;gt;”, pwd: “&amp;lt;tt&amp;gt;cubswin:)&amp;lt;/tt&amp;gt;”)&lt;br /&gt;
* Check that the VMs are up and running and connected via the common link.&lt;br /&gt;
&lt;br /&gt;
Images:&lt;br /&gt;
&lt;br /&gt;
* cirros034.qcow2&lt;br /&gt;
&lt;br /&gt;
Descriptors:&lt;br /&gt;
&lt;br /&gt;
* cirros_vnf&lt;br /&gt;
* cirros_2vnf_ns&lt;br /&gt;
&lt;br /&gt;
= Test 3a. Instantiation time of large NS based on Cirros images =&lt;br /&gt;
Objective:&lt;br /&gt;
&lt;br /&gt;
* Check that instantiation time is bounded to avoid spurious timeouts.&lt;br /&gt;
* Measure delay in the deployment, and evaluate potential issues in the connector.&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
* Onboard a “large NS” consisting of:&lt;br /&gt;
** 2 types of VNFs based on Cirros VM. VNF#1 should have 5 interfaces (+management), while VNF#2 would only require 1 interface (+management)&lt;br /&gt;
** Star topology, with 1 VNF in the middle and 5 instances of the other VNF connected to that one (+ the corresponding management interfaces)&lt;br /&gt;
* Launch NS instantiation, specifying the right mgmt network to be used&lt;br /&gt;
* Check that the UI reports a successful deployment&lt;br /&gt;
* Connect to each VNF via SSH (user: “&amp;lt;tt&amp;gt;cirros&amp;lt;/tt&amp;gt;”, pwd: “&amp;lt;tt&amp;gt;cubswin:)&amp;lt;/tt&amp;gt;”)&lt;br /&gt;
&lt;br /&gt;
Images:&lt;br /&gt;
&lt;br /&gt;
* cirros034.qcow2&lt;br /&gt;
&lt;br /&gt;
Descriptors:&lt;br /&gt;
&lt;br /&gt;
* cirros_2ifaces_vnf&lt;br /&gt;
* cirros_6ifaces_vnf&lt;br /&gt;
* test3a_ns&lt;br /&gt;
&lt;br /&gt;
= Test 3b. Instantiation time of large NS based on Cirros images using IP profiles =&lt;br /&gt;
Objective:&lt;br /&gt;
&lt;br /&gt;
* Check that instantiation time is bounded to avoid spurious timeouts.&lt;br /&gt;
* Measure delay in the deployment, and evaluate potential issues in the connector.&lt;br /&gt;
&lt;br /&gt;
* Check that IP profiles work properly in a large NS&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
* Onboard a “large NS” consisting of:&lt;br /&gt;
** 2 types of VNFs based on Cirros VM. VNF#1 should have 5 interfaces (+management), while VNF#2 would only require 1 interface (+management)&lt;br /&gt;
** Star topology, with 1 VNF in the middle and 5 instances of the other VNF connected to that one (+ the corresponding management interfaces)&lt;br /&gt;
** Networks will have an IP profile so that DHCP is enabled&lt;br /&gt;
* Launch NS instantiation, specifying the right mgmt network to be used&lt;br /&gt;
* Check that the UI reports a successful deployment&lt;br /&gt;
* Connect to each VNF via SSH (user: “&amp;lt;tt&amp;gt;cirros&amp;lt;/tt&amp;gt;”, pwd: “&amp;lt;tt&amp;gt;cubswin:)&amp;lt;/tt&amp;gt;”) and configure the interfaces to use DHCP, e.g. by changing /etc/network/interfaces and running “ifup ethX”&lt;br /&gt;
* Check that connectivity is appropriate via ping from the different VMs&lt;br /&gt;
&lt;br /&gt;
Images:&lt;br /&gt;
&lt;br /&gt;
* cirros034.qcow2&lt;br /&gt;
&lt;br /&gt;
Descriptors:&lt;br /&gt;
&lt;br /&gt;
* cirros_2ifaces_vnf&lt;br /&gt;
* cirros_6ifaces_vnf&lt;br /&gt;
* test3b_ns&lt;br /&gt;
&lt;br /&gt;
= Test 3c. Instantiation time of large NS based on Ubuntu images using IP profiles =&lt;br /&gt;
Objective:&lt;br /&gt;
&lt;br /&gt;
* Check that instantiation time is bounded to avoid spurious timeouts, even with large images (Ubuntu vs CirrOS).&lt;br /&gt;
* Measure delay in the deployment, and evaluate potential issues in the connector.&lt;br /&gt;
* Check that IP profiles work properly in a large NS&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
* Onboard a “large NS” consisting of:&lt;br /&gt;
** 2 types of VNFs based on Ubuntu VM. VNF#1 should have 5 interfaces (+management), while VNF#2 would only require 1 interface (+management)&lt;br /&gt;
** Star topology, with 1 VNF in the middle and 5 instances of the other VNF connected to that one (+ the corresponding management interfaces)&lt;br /&gt;
** Networks will have an IP profile so that DHCP is enabled&lt;br /&gt;
* Launch NS instantiation, specifying the right mgmt network to be used&lt;br /&gt;
* Check that the UI reports a successful deployment&lt;br /&gt;
* Connect to each VNF via SSH (user: “&amp;lt;tt&amp;gt;osm&amp;lt;/tt&amp;gt;”, pwd: “&amp;lt;tt&amp;gt;osm4u&amp;lt;/tt&amp;gt;”).&lt;br /&gt;
* Check that connectivity is appropriate via ping from the different VMs&lt;br /&gt;
&lt;br /&gt;
Images:&lt;br /&gt;
&lt;br /&gt;
* US1604&lt;br /&gt;
&lt;br /&gt;
Descriptors:&lt;br /&gt;
&lt;br /&gt;
* ubuntu_2ifaces_vnf&lt;br /&gt;
* ubuntu_6ifaces_vnf&lt;br /&gt;
* test3c_ns&lt;br /&gt;
&lt;br /&gt;
= Test 4a. Day 0 configuration: SSH key injection to the default user =&lt;br /&gt;
Objective:&lt;br /&gt;
&lt;br /&gt;
* Testing SSH key injection to the default user&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
* Onboard a variant of the NS of Test #1, but with Ubuntu VNFs.&lt;br /&gt;
* Add an SSH key through the UI (Launchpad &amp;gt; SSH Keys), where the key to be added is the public key.&lt;br /&gt;
* Instantiate the NS via UI, requesting the injection of a given SSH key for the default user. Specify also the right mgmt network to be used.&lt;br /&gt;
* Check that the UI reports a successful deployment&lt;br /&gt;
* Check that the VMs are accessible via SSH, using the private SSH key, from the management network.&lt;br /&gt;
&lt;br /&gt;
Images:&lt;br /&gt;
&lt;br /&gt;
* ubuntu1604&lt;br /&gt;
&lt;br /&gt;
Descriptors:&lt;br /&gt;
&lt;br /&gt;
* ubuntu_1iface_vnf&lt;br /&gt;
* test4a_ns&lt;br /&gt;
&lt;br /&gt;
= Test 4b. Day 0 configuration: user addition =&lt;br /&gt;
Objective:&lt;br /&gt;
&lt;br /&gt;
* Testing creation of new user and SSH key injection to that user&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
* Onboard a the variant of the NS of Test #4a (test4b_ns), where the NS includes a user “osm” and SSH public key to be injected to every VNF.&lt;br /&gt;
* Launch NS instantiation via UI, specifying the right mgmt network to be used.&lt;br /&gt;
* Check that the UI reports a successful deployment.&lt;br /&gt;
* Check that the VMs are accessible from the management network via the new user “osm” using its private SSH key (the private key is stored in the folder &amp;quot;test4b_ns/keys&amp;quot; inside the NS package).&lt;br /&gt;
&lt;br /&gt;
Images:&lt;br /&gt;
&lt;br /&gt;
* ubuntu1604&lt;br /&gt;
&lt;br /&gt;
Descriptors:&lt;br /&gt;
&lt;br /&gt;
* ubuntu_1iface_vnf&lt;br /&gt;
* test4b_ns&lt;br /&gt;
&lt;br /&gt;
= Test 4c. Day 0 configuration: custom user script with cloud-init =&lt;br /&gt;
Objective:&lt;br /&gt;
&lt;br /&gt;
* Testing injection of cloud-init custom user script&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
* Onboard a variant of the NS of Test #4a (test4c_ns), where the VNF includes a cloud-config custom script that creates a file in the VM and injects a SSH public key to the default user.&lt;br /&gt;
* Launch NS instantiation via UI, specifying the right mgmt network to be used&lt;br /&gt;
* Check that the UI reports a successful deployment.&lt;br /&gt;
* Access the VM via SSH and check that the file has been successfully created. The private key is &amp;quot;test4.pem&amp;quot;, stored in the folder &amp;quot;ubuntu_1iface_cloudinit_newfile_vnf/keys&amp;quot; inside the VNF package.&lt;br /&gt;
&lt;br /&gt;
Images:&lt;br /&gt;
&lt;br /&gt;
* ubuntu1604&lt;br /&gt;
&lt;br /&gt;
Descriptors:&lt;br /&gt;
&lt;br /&gt;
* ubuntu_1iface_cloudinit_newfile_vnf&lt;br /&gt;
* test4c_ns&lt;br /&gt;
&lt;br /&gt;
= Test 5. Port security disabled =&lt;br /&gt;
Objective:&lt;br /&gt;
&lt;br /&gt;
* Testing the ability to disable port security on demand&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
* Onboard a variant of the NS of Test #4 (test5_ns), but with a VNF whose single interface has port security disabled.&lt;br /&gt;
* Launch NS instantiation via UI, specifying the right mgmt network to be used&lt;br /&gt;
* Check that the UI reports a successful deployment.&lt;br /&gt;
* Connect to each VNF via SSH (user: “&amp;lt;tt&amp;gt;osm&amp;lt;/tt&amp;gt;”, pwd: “&amp;lt;tt&amp;gt;osm4u&amp;lt;/tt&amp;gt;”).&lt;br /&gt;
* Configure both VNFs with an additional IP address of the same subnet, e.g.: 192.168.50.X/24&lt;br /&gt;
** Do not remove the mgmt IP address.&lt;br /&gt;
** Add an additional IP address to the single interfaces using the command &amp;quot;ip addr add 192.168.50.X/24 dev eth0&amp;quot; and ping from one VNF to the other one.&lt;br /&gt;
* If port security and security groups have been properly disabled, the ping between both VNFs using the added IP addresses should work.&lt;br /&gt;
&lt;br /&gt;
Images:&lt;br /&gt;
&lt;br /&gt;
* US1604&lt;br /&gt;
&lt;br /&gt;
Descriptors:&lt;br /&gt;
&lt;br /&gt;
* ubuntu_1iface_noportsecurity_vnf&lt;br /&gt;
* test5_ns&lt;br /&gt;
&lt;br /&gt;
= Test 6a. Assignment of public IP addresses to management interfaces of single-interface VNFs =&lt;br /&gt;
Objective:&lt;br /&gt;
&lt;br /&gt;
* Testing the assignment of IP addresses from a pool to VNF management interfaces&lt;br /&gt;
&lt;br /&gt;
Prerequisites:&lt;br /&gt;
&lt;br /&gt;
* Configure the VIM to allow the dynamic assignment of public addresses from a pool&lt;br /&gt;
* Configure a VIM network (e.g. “public”) to use the appropriate pool, to allow external access via “public” IP addresses.&lt;br /&gt;
* Configure the datacenter in the RO to assign public IP addresses to VNF management interfaces (use_floating_ip: true)&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
* Onboard and deploy a NS consisting of 2 Ubuntu VNFs interconnected by a single network (mgmt).&lt;br /&gt;
* Instantiate the NS via UI, specifying that the NS network “mgmt” must be mapped to the VIM network name “public”, so that a “public” IP address will be assigned from the pool.&lt;br /&gt;
* Check that the UI reports a successful deployment.&lt;br /&gt;
* Connect to each VNF via SSH (user: “&amp;lt;tt&amp;gt;osm&amp;lt;/tt&amp;gt;”, pwd: “&amp;lt;tt&amp;gt;osm4u&amp;lt;/tt&amp;gt;”) using the public IP address.&lt;br /&gt;
&lt;br /&gt;
Images:&lt;br /&gt;
&lt;br /&gt;
* US1604&lt;br /&gt;
&lt;br /&gt;
Descriptors:&lt;br /&gt;
&lt;br /&gt;
* ubuntu_1iface_userosm_vnf&lt;br /&gt;
* test6a_ns&lt;br /&gt;
&lt;br /&gt;
= Test 6b. Assignment of public IP addresses to management interfaces of multi-interface VNFs =&lt;br /&gt;
Objective:&lt;br /&gt;
&lt;br /&gt;
* Testing the assignment of IP addresses from a pool to VNF management interfaces in the case of multi-interface VNFs. The intention is to check that a single default route is injected.&lt;br /&gt;
&lt;br /&gt;
Prerequisites:&lt;br /&gt;
&lt;br /&gt;
* Configure the VIM to allow the dynamic assignment of public addresses from a pool&lt;br /&gt;
* Configure a VIM network (e.g. “public”) to use the appropriate pool, to allow external access via “public” IP addresses.&lt;br /&gt;
* Configure the datacenter in the RO to assign public IP addresses to VNF management interfaces (use_floating_ip: true)&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
* Onboard and deploy a NS consisting of 2 Ubuntu VNFs interconnected by two networks (management and data).&lt;br /&gt;
* Instantiate the NS via UI, specifying that the NS network “mgmt” must be mapped to the VIM network name “public”, so that a “public” IP address will be assigned from the pool.&lt;br /&gt;
* Check that the UI reports a successful deployment.&lt;br /&gt;
* Connect to each VNF via SSH (user: “&amp;lt;tt&amp;gt;osm&amp;lt;/tt&amp;gt;”, pwd: “&amp;lt;tt&amp;gt;osm4u&amp;lt;/tt&amp;gt;”) using the public IP address.&lt;br /&gt;
&lt;br /&gt;
Images:&lt;br /&gt;
&lt;br /&gt;
* US1604&lt;br /&gt;
&lt;br /&gt;
Descriptors:&lt;br /&gt;
&lt;br /&gt;
* ubuntu_2ifaces_vnf&lt;br /&gt;
* test6b_ns&lt;br /&gt;
&lt;br /&gt;
= Test 6c. Assignment of public IP addresses to management interfaces of multi-interface VNFs even when IP profiles are used =&lt;br /&gt;
Objective:&lt;br /&gt;
&lt;br /&gt;
* Testing the assignment of IP addresses from a pool to VNF management interfaces in the case of multi-interface VNFs even when IP profiles are used. The intention is to check again that a single default route is injected and that IP profiles do not affect that single route.&lt;br /&gt;
&lt;br /&gt;
Prerequisites:&lt;br /&gt;
&lt;br /&gt;
* Configure the VIM to allow the dynamic assignment of public addresses from a pool&lt;br /&gt;
* Configure a VIM network (e.g. “public”) to use the appropriate pool, to allow external access via “public” IP addresses.&lt;br /&gt;
* Configure the datacenter in the RO to assign public IP addresses to VNF management interfaces (use_floating_ip: true)&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
* Onboard and deploy the NS used in Test 3c, consisting of a star topology, with 1 VNF in the middle and 5 instances of the other VNF connected to that one (+ the corresponding management interfaces), where all the inter-VNF networks have an IP profile so that DHCP is enabled, but with no default gateway.&lt;br /&gt;
* Instantiate the NS via UI, specifying that the NS network “mgmt” must be mapped to the VIM network name “public”, so that a “public” IP address will be assigned from the pool. This is the only change with respect to Test 3c.&lt;br /&gt;
* Check that the UI reports a successful deployment.&lt;br /&gt;
* Connect to each VNF via SSH (user: “&amp;lt;tt&amp;gt;osm&amp;lt;/tt&amp;gt;”, pwd: “&amp;lt;tt&amp;gt;osm4u&amp;lt;/tt&amp;gt;”) using the public IP address.&lt;br /&gt;
&lt;br /&gt;
Images:&lt;br /&gt;
&lt;br /&gt;
* US1604&lt;br /&gt;
&lt;br /&gt;
Descriptors:&lt;br /&gt;
&lt;br /&gt;
* ubuntu_2ifaces_vnf&lt;br /&gt;
* ubuntu_6ifaces_vnf&lt;br /&gt;
* test3c_ns&lt;br /&gt;
&lt;br /&gt;
= Test 7a. EPA tests - phase 1 =&lt;br /&gt;
Objectives:&lt;br /&gt;
&lt;br /&gt;
* Testing that the VIM can map properly vCPUs to pairs of physical HW threads&lt;br /&gt;
* Testing that the VIM can assign hugepages memory&lt;br /&gt;
* Testing that the VIM can assign SRIOV interfaces&lt;br /&gt;
* Testing that the order of interfaces is correct&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
* Onboard pktgen_4psriov VNF, which requires:&lt;br /&gt;
** CPU pinning of paired threads&lt;br /&gt;
** Hugepages&lt;br /&gt;
** SRIOV interfaces&lt;br /&gt;
* Onboard a NS with 5 instances of pktgen_4psriov, in a star topology, with one of the VNFs in the middle (Emitter) and 4 VNFs attached (Receiver1-4).&lt;br /&gt;
* Check that all VNFs are accessible by SSH via mgmt interface (user: &amp;quot;pktgen&amp;quot;, pwd: &amp;quot;pktgen&amp;quot;)&lt;br /&gt;
* Check (at the VIM or the host) that the CPU pinning is correct.&lt;br /&gt;
* Check (at the VIM or the host) that hugepages have been assigned to the guest.&lt;br /&gt;
* Check with pktgen that the interfaces are correctly attached to SRIOV interfaces and in the right order:&lt;br /&gt;
** Emitter port 0 -&amp;gt; Receiver1 port 0&lt;br /&gt;
** Emitter port 1 -&amp;gt; Receiver2 port 1&lt;br /&gt;
** Emitter port 2 -&amp;gt; Receiver3 port 2&lt;br /&gt;
** Emitter port 3 -&amp;gt; Receiver4 port 3&lt;br /&gt;
&lt;br /&gt;
Images:&lt;br /&gt;
&lt;br /&gt;
* pktgen&lt;br /&gt;
&lt;br /&gt;
Descriptors:&lt;br /&gt;
&lt;br /&gt;
* pktgen_4psriov_vnfd&lt;br /&gt;
* test7a_ns&lt;br /&gt;
&lt;br /&gt;
= Test 7b. EPA tests - phase 2 =&lt;br /&gt;
Objectives:&lt;br /&gt;
&lt;br /&gt;
* Testing that the VIM can map properly vCPUs to physical cores&lt;br /&gt;
* Testing that the VIM can assign passthrough interfaces&lt;br /&gt;
* Testing that the order of interfaces is correct&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
* Equivalent to the previous test, but using a variant to the NS which requires:&lt;br /&gt;
** Full cores (instead of HW threads)&lt;br /&gt;
** Passthrough interfaces (instead of SR-IOV)&lt;br /&gt;
&lt;br /&gt;
Images:&lt;br /&gt;
&lt;br /&gt;
* pktgen&lt;br /&gt;
&lt;br /&gt;
Descriptors:&lt;br /&gt;
&lt;br /&gt;
* pktgen_4ppassthrough_vnfd&lt;br /&gt;
* test7b_ns&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=Developer_HowTo_for_RO_Module&amp;diff=6110</id>
		<title>Developer HowTo for RO Module</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=Developer_HowTo_for_RO_Module&amp;diff=6110"/>
		<updated>2021-02-17T17:22:30Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM Developer Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/developer-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
The RO Module of OSM is implemented by openmano. The recommended Linux distribution for development is Ubuntu 16.04 LTS Server. PyCharm is a nice and easy to use tool for development and debugging.&lt;br /&gt;
&lt;br /&gt;
The step [[Release_1_Installation]] installs all OSM modules in containers. However, for development, a virtual machine may be more suitable. To install the openmano module you can run a script that installs the required packages, clone the project from &#039;&#039;git clones https://osm.etsi.org/gerrit/osm/RO&#039;&#039; and configures openmano client and other utility scripts at path&lt;br /&gt;
 wget -O install-openmano.sh &amp;quot;https://osm.etsi.org/gitweb/?p=osm/RO.git;a=blob_plain;f=scripts/install-openmano.sh&amp;quot;&lt;br /&gt;
 chmod +x install-openmano.sh&lt;br /&gt;
 sudo ./install-openmano.sh -q --develop   #-h for help&lt;br /&gt;
&lt;br /&gt;
See also and follow [[Workflow_with_OSM_tools#Clone_your_project]]&lt;br /&gt;
&lt;br /&gt;
New code features must be incorporated to master:&lt;br /&gt;
 git checkout master&lt;br /&gt;
Generate a &amp;quot;.gitignore&amp;quot;, you can use the &#039;&#039;.gitignore-common&#039;&#039; example that skips PyCharm and Eclipse files&lt;br /&gt;
 cp RO/.gitignore-common RO/.gitignore&lt;br /&gt;
 #edit to include your local files to ignore&lt;br /&gt;
Prepare your git environment to push with a proper user/email, push to gerrit. See and configure:&lt;br /&gt;
&amp;lt;p&amp;gt;[[Workflow_with_OSM_tools#Configure_your_Git_environment]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[Workflow_with_OSM_tools#Commit_changes_to_your_local_project]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[ Workflow_with_OSM_tools#Push_your_contribution_to_Gerrit]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Programming Language==&lt;br /&gt;
The RO module uses Python2. However Python3 conventions for a future migration must be used as far as possible. For example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! BAD Python2&lt;br /&gt;
! OK  Python2 compatible with python3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;format test string %s number %d&amp;quot; % (st, num)&lt;br /&gt;
| &amp;quot;format test string {} number {}&amp;quot;.format(st, num)&lt;br /&gt;
|-&lt;br /&gt;
| print a, b, c&lt;br /&gt;
| print(a,b,c)&lt;br /&gt;
|-&lt;br /&gt;
| except Exception, e&lt;br /&gt;
| except Exception as e&lt;br /&gt;
|-&lt;br /&gt;
| if type(x) == X:&lt;br /&gt;
| if isinstance(x,X):&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
In addition, &#039;&#039;&#039;DO NOT USE libraries not compatible with python3&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Descriptors can be YAML (prefered because more readable and allow comments) or JSON&lt;br /&gt;
&lt;br /&gt;
==Code Style==&lt;br /&gt;
Please follow PEP8 style guide for all the Python code. Lines up to 120 length&lt;br /&gt;
&lt;br /&gt;
===Logging===&lt;br /&gt;
Use the appropriate logging levels when logging the messages. An example is shown below:&lt;br /&gt;
    self.logger.debug(&amp;quot;Changing state to %s&amp;quot;, next_state)&lt;br /&gt;
&lt;br /&gt;
Logging levels (general and per module) are specified at &#039;&#039;&#039;openmanod.cfg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Try to use few useful logs, not verbose, that brings useful information. For example, in case of fail getting a server, the complete URL should be provided.&lt;br /&gt;
&lt;br /&gt;
Avoid several logs together&lt;br /&gt;
&lt;br /&gt;
  WRONG:&lt;br /&gt;
  self.looger.debug(&amp;quot;Entering in method A&amp;quot;)&lt;br /&gt;
  self.logger.debug(&amp;quot;Contacting server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  RIGHT:&lt;br /&gt;
  self.logger.debug(&amp;quot;method A, contacting server %s&amp;quot;, url)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When the traceback is needed(call stack that generate the exception) , use the &amp;quot;exc_info=True&amp;quot; parameter&lt;br /&gt;
  self.logger.error(&amp;quot;Exception %s when ...&amp;quot;, exception, exc_info=True)&lt;br /&gt;
&lt;br /&gt;
===Exceptions===&lt;br /&gt;
Code must be wrote in a way that functions and methods raise an exception when something goes wrong, instead of returning a negative or false value.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
  WRONG&lt;br /&gt;
    def get_ip_address():&lt;br /&gt;
        ...&lt;br /&gt;
        if fail:&lt;br /&gt;
            return False, &amp;quot;Fail because xxx&amp;quot;&lt;br /&gt;
        return True, ip&lt;br /&gt;
    &lt;br /&gt;
    ...&lt;br /&gt;
    result, ip = get_ip_address()&lt;br /&gt;
    if not result:&lt;br /&gt;
        return False, &amp;quot;Cannot get ip address...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  RIGHT&lt;br /&gt;
    def get_ip_address():&lt;br /&gt;
        ...&lt;br /&gt;
        if fail:&lt;br /&gt;
            raise customException(&amp;quot;Fail because ...&amp;quot;)&lt;br /&gt;
        return ip&lt;br /&gt;
    &lt;br /&gt;
    ...&lt;br /&gt;
    try:&lt;br /&gt;
        ip = get_ip_address()&lt;br /&gt;
        ...&lt;br /&gt;
    except customException as e:&lt;br /&gt;
        raise customException2(str(e))&lt;br /&gt;
&lt;br /&gt;
==Directory Organization==&lt;br /&gt;
The code organized into the following high level directories: &amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;/&#039;&#039;&#039; contains the entry server file &#039;&#039;openmanod&#039;&#039; and client &#039;&#039;openmano&#039;&#039; code &amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;/osm_ro&#039;&#039;&#039; contains the RO server code files &amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;/test&#039;&#039;&#039; contains scripts and code for testing &amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;/database_utils&#039;&#039;&#039; contains scripts for database creation, dumping and migration &amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;/scripts&#039;&#039;&#039; general scripts, as installation, execution, reporting &amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;/scenarios&#039;&#039;&#039; examples and templates of network scnario descriptors &amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;/vnfs&#039;&#039;&#039; examples and templates of VNF descriptors &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==RO Architecture==&lt;br /&gt;
[[File:OpenmanoArchitecture.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===RO Server modules===&lt;br /&gt;
The RO module contains the following modules&lt;br /&gt;
* &#039;&#039;&#039;openmanod&#039;&#039;&#039; is the main program. It reads the configuration file (openmanod.cfg) and execute the httpserver and wait for the end&lt;br /&gt;
* &#039;&#039;&#039;httpserver.py&#039;&#039;&#039; is a thread that implements the northbound API interface, uses python bottle module. Calls main engine methods to perform the tasks&lt;br /&gt;
* &#039;&#039;&#039;nfvo.py&#039;&#039;&#039; is the main engine, implementing all the methods for the creation, deletion and management of vnfs, scenarios and instances. Operations against a VIM are asynchornous. ACTIONs to be done are stored at database before returning ok to the client&lt;br /&gt;
* &#039;&#039;&#039;nfvo_db.py&#039;&#039;&#039; is the module in charge of database operations. Uses base &#039;&#039;&#039;db_base.py&#039;&#039;&#039;. Database is managed with MySQLdb python library&lt;br /&gt;
* &#039;&#039;&#039;openmano_schemas.py&#039;&#039;&#039; is a dictionary schemas used to validate API request and response content using jsonschema library&lt;br /&gt;
* &#039;&#039;&#039;vim_thread.py&#039;&#039;&#039; There is a thread per VIM and credentials. It performs basic tasks of creating/deleting VM, networks, flavors, etc. In addition it refreshes the VM and network status. It calls vimconn.py methods &lt;br /&gt;
* &#039;&#039;&#039;vimconn.py&#039;&#039;&#039; is the base class for the VIM plugin. It contains the definition of the methods to be implemented. The inherited &#039;&#039;&#039;vimconn_openstack.py&#039;&#039;&#039;, &#039;&#039;&#039;vimconn_openvim.py&#039;&#039;&#039;, &#039;&#039;&#039;vimconn_vmware&#039;&#039;&#039; and &#039;&#039;&#039;vimconn_aws&#039;&#039;&#039; implements the operations against the concrete VIM type. OpenStack plugin uses the python-*client libraries, meanwhile Openvim plugin uses direct http requests.&lt;br /&gt;
* &#039;&#039;&#039;console_proxy_thread.py&#039;&#039;&#039; is a thread that implements a TCP/IP proxy for the console access to a VIM&lt;br /&gt;
&lt;br /&gt;
===RO Client modules===&lt;br /&gt;
Other modules not part of the server are:&lt;br /&gt;
* &#039;&#039;&#039;openmano&#039;&#039;&#039; is a CLI client&lt;br /&gt;
* &#039;&#039;&#039;openmanoclient.py&#039;&#039;&#039; is a client python library for managing openmano server&lt;br /&gt;
&lt;br /&gt;
===ACTIONS and TASKS===&lt;br /&gt;
ACTIONS are a a group of tasks performed against a a concrete instance-scenarios (NS record). The creation and deletion of the instance-scenario itself is an action. As it is asynchonous, NBI returns an &amp;quot;Action_id&amp;quot; that can be used to check the status. For each action, nfvo.py generates individual tasks for the related VIMs. Tasks are both stored at database and sent to the related vim_thread.py. A task has a concrete relation with a VIM, e.g. create/delete a VM, a network, ... look for a flavor, network, ...&lt;br /&gt;
&lt;br /&gt;
===Database content===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==Database changes==&lt;br /&gt;
Database schema can be changed if needed. It is recomended to use a graphical tool (e.g. Heidy) to change database and change it back and copy the SQL commands. Make these steps:&lt;br /&gt;
&lt;br /&gt;
1. openmanod: increment __version__, version_date and database_version&lt;br /&gt;
&lt;br /&gt;
2. database_utils/migrate_mano_db.sh. See the three &amp;quot;TODO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2a. Increment LAST_DB_VERSION&lt;br /&gt;
&lt;br /&gt;
2b. Annotate a comment to have a track of versions: [ $OPENMANO_VER_NUM -ge 50XX ] &amp;amp;&amp;amp; DB_VERSION=XX  #0.5.XX =&amp;gt;  XX&lt;br /&gt;
&lt;br /&gt;
2c. Generate new methods; function upgrade_to_XX() and function downgrade_from_XX. Insert here the sql commands. Last sql command over schema_version is quite important to detect the database version.&lt;br /&gt;
&lt;br /&gt;
Test several upgrades/downgrades to version 20 with &amp;quot;migrate_mano_db.sh&amp;quot; and &amp;quot;migrate_mano_db.sh 20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Package dependency osm-im==&lt;br /&gt;
It is under IM repository. It contains the OSM models. Used models at RO are under &amp;lt;IM&amp;gt;/models/yang/vnfd.yang and &amp;lt;IM&amp;gt;/models/yang/nsd.yang. More modules will be incorporated in the future.&lt;br /&gt;
&lt;br /&gt;
When IM is maked, pyangbind generates python source files imported at RO. They are used to validate and load a yaml/json VNFD and NSD catalog descriptor.&lt;br /&gt;
&lt;br /&gt;
Method pybindJSONDecoder.load_ietf_json from pyangbind is used to parse and load the descriptor. A structure of nested YANG classes are generated and used at &amp;lt;RO&amp;gt;/osm_ro/nfvo.py methods new_vnfd_v3 and new_nsd_v3. RO supports backward compatibility with old format descriptors. NBI (osm_ro/httpserver.py) uses .../v3/... at URL to diferenciate between old and new descriptors. CLI (openmano) detects automatically if the descriptor is in old format or in OSM format to send the request to the server using the old URL or the new &amp;quot;v3&amp;quot; URL&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
The OSM binary installation install this package. In case of needed you can install/update it manually by:&lt;br /&gt;
&lt;br /&gt;
  apt-get update&lt;br /&gt;
  apt-get install make git python python-pip tox debhelper python-bitarray python-lxml&lt;br /&gt;
  pip install --upgrade pip&lt;br /&gt;
  # If not inside a container. Use &amp;quot;sudo -HE&amp;quot; to get root privileges for pip installation&lt;br /&gt;
  pip install pyangbind stdeb&lt;br /&gt;
  git clone https://osm.etsi.org/gerrit/osm/IM&lt;br /&gt;
  make -C IM clean all&lt;br /&gt;
  dpkg -i IM/deb_dist/python-pyang_*.deb&lt;br /&gt;
  dpkg -i IM/deb_dist/python-pyangbind_*.deb&lt;br /&gt;
  dpkg -i IM/deb_dist/python-osm-im_*.deb&lt;br /&gt;
  # Use this line to check if it is installed and where  &lt;br /&gt;
  python -c &#039;import osm_im; print osm_im.__path__[0]&#039;&lt;br /&gt;
&lt;br /&gt;
==Package dependency lib-osm-openvim==&lt;br /&gt;
&lt;br /&gt;
It is under openvim repository. RO uses a library for the SDN assist that is in charge of performing the underlay dataplane connectivity using an openflow controller. osm-openvim and lib-osm-openvim are diffent, though they share same pieces of code. lib-osm-openvim uses a different database name (mano_vim_db) so that openvim can be installed in the same virtual machine or container (openvim uses vim_db database name) &lt;br /&gt;
&lt;br /&gt;
TODO complete where RO uses it&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
The OSM binary installation install this package. In case of needed you can install/update it manually by:&lt;br /&gt;
&lt;br /&gt;
  apt-get update&lt;br /&gt;
  apt-get install make git python tox libmysqlclient-dev&lt;br /&gt;
  git clone https://osm.etsi.org/gerrit/osm/openvim&lt;br /&gt;
  git -C openvim checkout 005a9dc  # this is temporal, because last version contains error at Makefile&lt;br /&gt;
  make -C openvim lite&lt;br /&gt;
  # Use this line to check if it is installed and where  &lt;br /&gt;
  python -c &#039;import lib_osm_openvim; print lib_osm_openvim.__path__[0]&#039;&lt;br /&gt;
  # Install database of ovim library&lt;br /&gt;
  OSMLIBOVIM_PATH=`python -c &#039;import lib_osm_openvim; print lib_osm_openvim.__path__[0]&#039;`&lt;br /&gt;
  # -U and -P are the admin database user/password. Normally &amp;quot;-U root&amp;quot; without password &amp;quot;executed as root&amp;quot;&lt;br /&gt;
  ${OSMLIBOVIM_PATH}/database_utils/install-db-server.sh -U root [-P passwd] -u mano -p manopw -d mano_vim_db --updatedb&lt;br /&gt;
&lt;br /&gt;
==CLI client==&lt;br /&gt;
&lt;br /&gt;
The RO code contains a python CLI (openmano) that allows friently command execution. This CLI client can run on a separate machine where openmano server is running. &amp;quot;openmano config&amp;quot; indicates where the server is (by default localhost)&lt;br /&gt;
&lt;br /&gt;
==Northbound Interface==&lt;br /&gt;
&lt;br /&gt;
The RO uses a REST API with YAML/JSON content. The primitives are explained [[RO Northbound Interface|here]]&lt;br /&gt;
&lt;br /&gt;
==Running Unit Tests==&lt;br /&gt;
&lt;br /&gt;
===Launching RO===&lt;br /&gt;
Openmano can run as systemd service. (Can be installed with &#039;&#039;&#039;./scripts/install-openmano-service.sh -f RO&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Or can be run inside a screen (the prefered method for developpers). The script to easily launch/remove is &#039;&#039;&#039;./scripts/service-openmano.sh&#039;&#039;&#039;. Execute with -h to see options&lt;br /&gt;
&lt;br /&gt;
Note that the general OSM install script, installs openmano inside a container and code run at folder /opt/openmano (instead of $HOME/openmano)&lt;br /&gt;
&lt;br /&gt;
===Tests===&lt;br /&gt;
Many of openmano operations rely on an external VIM. Without external infraestructure it is recomended to use openvim in &amp;quot;test&amp;quot; (fake) mode. Install it in the same machine where openmano is located with [[OpenVIM_installation_(Release_One)#Installation]]&lt;br /&gt;
&lt;br /&gt;
Run &#039;&#039;./test/basictest&#039;&#039; for a initial test. Type -h to see options. For testing using openvim just run &amp;lt;pre&amp;gt; . ./test/basictest.sh --force --screen --init-openvim &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating a new VIM plugin==&lt;br /&gt;
&lt;br /&gt;
Choose a name, eg. XXX&lt;br /&gt;
&lt;br /&gt;
Create a new python module vimconn_XXX.py derived from vimconn.py class. Implement the relevant functions. You have several connectors already created to be used as example as openstack and openvim. Openstack connector uses the python openstack client libraries, meanwhile openvim connector uses direct http requests.&lt;br /&gt;
&lt;br /&gt;
DO NOT change the method names, parameters or parameter content. RO uses the same methods for all the VIMs and they cannot be changed to accomodate VIM specifics. VIM specifics must be solved inside the connector.&lt;br /&gt;
&lt;br /&gt;
The new module can need specific configuration for the VIM that it is passed as a dictionary in the &#039;&#039;config&#039;&#039; variable at constructor. For example, in the case of openstack, &#039;&#039;config&#039;&#039; variable is used for: enabling/disabling port_security_enable, specifying the name of the physical network used for dataplane, regions, etc. The &#039;&#039;config&#039;&#039; variable is the right place to specify those needed parameters not provided by RO at the methods that form part of the VIM configuration. See [[Openstack configuration#Add openstack to OSM]] and [[Configuring AWS for OSM Release TWO#Add AWS to OSM]] for examples &lt;br /&gt;
&lt;br /&gt;
For integration with the main project, it is needed to add the new vim type to dictionary &amp;quot;vim_module&amp;quot; at file &amp;quot;osm_ro/vim_thread.py&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
    openmano tenant-create osm  # if not already done&lt;br /&gt;
    export OPENMANO_TENANT=osm&lt;br /&gt;
    openmano datacenter-create &amp;lt;vim-name&amp;gt; &amp;lt;access-URL&amp;gt;  --type=XXX --config &amp;lt;specific config&amp;gt;&lt;br /&gt;
    # if fails the cause can be a library you need not installed or an error upon importing. Try tho import it in a python client&lt;br /&gt;
    # example of &amp;lt;specific config&amp;gt; text: &amp;quot;{dataplane_physical_net: physnet_sriov, port_security_enabled: False}&amp;quot;&lt;br /&gt;
    openmano datacenter-attach &amp;lt;vim-name&amp;gt; --vim-tenant-name=&amp;lt;tenant-to-use-by-openmano&amp;gt; --user=&amp;lt;tenant-user&amp;gt; --password=&amp;lt;tenant-password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can test it using the &#039;&#039;&#039;test/test_RO.py&#039;&#039;&#039; file:&lt;br /&gt;
    # Create manually an image &amp;lt;image&amp;gt; and a management network &amp;lt;net-mgmt&amp;gt; at your VIM&lt;br /&gt;
    ./test/test_RO.py deploy --help&lt;br /&gt;
    # e.g. ./test/test_RO.py deploy -n &amp;lt;net-mgmt&amp;gt; -t osm -i &amp;lt;image&amp;gt; -d &amp;lt;vim-name&amp;gt; --timeout=30 --test simple_linux,simple_multi_vnfc,simple_2_vnf&lt;br /&gt;
    ./test/test_RO.py vimconn --help&lt;br /&gt;
&lt;br /&gt;
To be able to run the &#039;&#039;&#039;test/test_RO.py&#039;&#039;&#039; script, you need to do some changes. First in the class &amp;quot;&#039;&#039;vim_connector&#039;&#039;&amp;quot; you need to import the plugin of the new vim:&lt;br /&gt;
&lt;br /&gt;
 def test_vimconnector(args):&lt;br /&gt;
    global test_config&lt;br /&gt;
    sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + &amp;quot;/osm_ro&amp;quot;)&lt;br /&gt;
    test_config[&#039;vimtype&#039;] = args.vimtype&lt;br /&gt;
    if args.vimtype == &amp;quot;aws&amp;quot;:&lt;br /&gt;
        import vimconn_aws as vim&lt;br /&gt;
&lt;br /&gt;
And also,some tests are depending on the vim, you you would need to look for the following chain: &#039;&#039;&#039;&#039;test_config[&#039;vimtype&#039;] ==&#039;&#039;&#039;&#039; and place the code for the call to your vim there. For instance:&lt;br /&gt;
&lt;br /&gt;
    def test_000_connect(self):&lt;br /&gt;
        self.__class__.test_text = &amp;quot;{}.{}. TEST {}&amp;quot;.format(test_config[&amp;quot;test_number&amp;quot;],&lt;br /&gt;
                                                            self.__class__.test_index,&lt;br /&gt;
                                                inspect.currentframe().f_code.co_name)&lt;br /&gt;
 &lt;br /&gt;
        self.__class__.test_index += 1&lt;br /&gt;
        if &#039;&#039;&#039;test_config[&#039;vimtype&#039;] == &#039;vmware&#039;:&#039;&#039;&#039;&lt;br /&gt;
            vca_object = test_config[&amp;quot;vim_conn&amp;quot;].connect()&lt;br /&gt;
            logger.debug(&amp;quot;{}&amp;quot;.format(vca_object))&lt;br /&gt;
            self.assertIsNotNone(vca_object)&lt;br /&gt;
        elif &#039;&#039;&#039;test_config[&#039;vimtype&#039;] == &#039;openstack&#039;:&#039;&#039;&#039;&lt;br /&gt;
            test_config[&amp;quot;vim_conn&amp;quot;]._reload_connection()&lt;br /&gt;
            network_list = test_config[&amp;quot;vim_conn&amp;quot;].get_network_list()&lt;br /&gt;
            logger.debug(&amp;quot;{}&amp;quot;.format(network_list))&lt;br /&gt;
            self.assertIsNotNone(network_list)&lt;br /&gt;
&lt;br /&gt;
The script could be used to launch tests against the vim connector directly with the following syntax:&lt;br /&gt;
&lt;br /&gt;
 python ./test/test_RO.py vimconn --vimtype XXX -t &amp;lt;VIM_TENANT_NAME&amp;gt; -u &amp;lt;VIM_AUTH_URL&amp;gt; -c &#039;{user: &amp;lt;VIM_USER_NAME&amp;gt;, passwd: &amp;lt;VIM_USER_PASSWORD&amp;gt;}&#039; --test &amp;lt;TEST_NAME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next you can find the tests that could be executed:&lt;br /&gt;
&lt;br /&gt;
 test_vimconn_connect&lt;br /&gt;
 test_vimconn_delete_network&lt;br /&gt;
 test_vimconn_get_image_list&lt;br /&gt;
 test_vimconn_get_network&lt;br /&gt;
 test_vimconn_new_flavor&lt;br /&gt;
 test_vimconn_new_network&lt;br /&gt;
 test_vimconn_new_vminstance&lt;br /&gt;
&lt;br /&gt;
Also, the script could be used to launch tests against the RO with the following syntax:&lt;br /&gt;
&lt;br /&gt;
 python ./test/test_RO.py deploy -d &amp;lt;VIM_ACCOUNT_NAME&amp;gt; -n &amp;lt;MGMT_NET_IN_VIM&amp;gt; -i &amp;lt;IMAGE_FOR_VMs&amp;gt; --tests &amp;lt;TEST_NAME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next you can find the tests that could be executed:&lt;br /&gt;
&lt;br /&gt;
 v3_2vdu_set_ip_mac&lt;br /&gt;
 simple_multi_vnfc&lt;br /&gt;
 simple_linux&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=Developer_HowTo&amp;diff=6109</id>
		<title>Developer HowTo</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=Developer_HowTo&amp;diff=6109"/>
		<updated>2021-02-17T17:20:23Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM Developer Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/developer-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
The aim of this entry is to provide a guide for developers to set up their environment, in order to ease the development with the different OSM modules.&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Modules run in separate docker containers (except juju controller that uses a lxd container). Current installation uses Docker Swarm by default (there are Kubernetes distributions and an incoming option for installing on Kubernetes). The modules are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;kafka&#039;&#039;&#039;: Provides a Kafka bus used for OSM communication. This module relies on &#039;&#039;zookeeper&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;zookeeper&#039;&#039;&#039;: Used by &#039;&#039;kafka&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;nbi&#039;&#039;&#039;: North Bound Interface of OSM. Restful server that follows ETSI SOL005 interface. Relies on &#039;&#039;mongo&#039;&#039; database and &#039;&#039;kafka&#039;&#039; bus. For authentication it can optionally uses &#039;&#039;keystone&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;keystone&#039;&#039;&#039;: Used optionally for NBI authentication and RBAC. It stores the users, projects and role permissions. It relies on &#039;&#039;mysql&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;lcm&#039;&#039;&#039;: Provides the Live Cycle Management. It uses &#039;&#039;ro&#039;&#039; for resource orchestration and juju for configuration. It relies also on &#039;&#039;mongo&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;ro&#039;&#039;&#039;: Makes the Resource Orchestration, or VIM deployment. Relies on &#039;&#039;mysql&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;light-ui&#039;&#039;&#039;: Web user interface. It communicates with &#039;&#039;nbi&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;mon&#039;&#039;&#039;: Performs OSM monitoring. Relies on &#039;&#039;mongo&#039;&#039; and &#039;&#039;mysql&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;mongo&#039;&#039;&#039;: Common non relational database for OSM modules.&lt;br /&gt;
* &#039;&#039;&#039;mysql&#039;&#039;&#039;: Relational database server used for &#039;&#039;ro&#039;&#039;, &#039;&#039;keystone&#039;&#039;, &#039;&#039;mon&#039;&#039; and &#039;&#039;pol&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;pol&#039;&#039;&#039;: Policy Manager for OSM.&lt;br /&gt;
* &#039;&#039;&#039;prometheus&#039;&#039;&#039;: for monitoring .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition LCM and NBI, shares a common file system  where packages are stored. In current installation it uses a shared docker volume called &#039;&#039;osm_package&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This picture shows the modules with the port that they export, their relationships with the name of env variables that control them. For clarity not all the dependencies are depicted, as kafka, mysql, ... &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     __________                                                              ________&lt;br /&gt;
    |          |                                                            |        |&lt;br /&gt;
    | light-ui |OSM_SERVER               _______                            |keystone|&lt;br /&gt;
    | :80      |----------------------&amp;gt; |       |-------------------------&amp;gt; |:5000   |&lt;br /&gt;
    |__________|                        | nbi   |                           |________|&lt;br /&gt;
                     OSMNBI_STORAGE_PATH| :9999 |OSMNBI_DATABASE_HOST        _______ &lt;br /&gt;
    .............. &amp;lt;--------------------|_______|-------------------------&amp;gt; |       |&lt;br /&gt;
    . volume:    .                                                          |       |&lt;br /&gt;
    . osm_osm_   .                                                          | mongo |&lt;br /&gt;
    . packages   .   OSMLCM_STORAGE_PATH _______ OSMLCM_DATABASE_HOST       | :27017|&lt;br /&gt;
    .............. &amp;lt;--------------------|       |-------------------------&amp;gt; |_______|&lt;br /&gt;
                                        | lcm   |&lt;br /&gt;
    **************       OSMLCM_VCA_HOST|       |OSMLCM_RO_HOST&lt;br /&gt;
    * lxd: juju  * &amp;lt;--------------------|_______|--------------|&lt;br /&gt;
    * controller *                                             |&lt;br /&gt;
    **************                       _______               |             _______&lt;br /&gt;
                                        |       | &amp;lt;-------------            |       |&lt;br /&gt;
                                        | ro    |                           | mysql |  &lt;br /&gt;
                                        | :9090 |RO_DB_HOST                 | :3306 |&lt;br /&gt;
                                        |_______|-------------------------&amp;gt; |_______|&lt;br /&gt;
&lt;br /&gt;
     _______     _______                 _______                             _________&lt;br /&gt;
    |       |   |       |               |       |                           |         |&lt;br /&gt;
    | mon   |   | pm    |               | kafka |KAFKA_ZOOKEEPER_CONNECT    |zookeeper|  &lt;br /&gt;
    | :8662 |   |       |               | :9092 |-------------------------&amp;gt; | :2181   |       &lt;br /&gt;
    |_______|   |_______|               |_______|                           |_________|&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For debugging it is convenient running the target module directly at host maintaining the rest of dependent modules in containers. In the following sections it is described how to achieve that.&lt;br /&gt;
&lt;br /&gt;
==General steps==&lt;br /&gt;
===  1 Shutdown the container you want to debug===&lt;br /&gt;
&lt;br /&gt;
First thing, you need to stop the module you want to debug. As OSM uses a docker service do not manually stop the container because it will be automatically relaunched again. Scale it to 0 for stopping and to 1 for running again. &lt;br /&gt;
&lt;br /&gt;
 docker service scale osm_lcm=0&lt;br /&gt;
&lt;br /&gt;
=== 2 Clone the module===&lt;br /&gt;
&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/LCM&lt;br /&gt;
&lt;br /&gt;
=== 3 Install the module===&lt;br /&gt;
&lt;br /&gt;
Inside the folder where the module is cloned type the following command:&lt;br /&gt;
&lt;br /&gt;
 pip3 install -e .  # try with --user if get permission errors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: pip3 can be installed with &#039;sudo apt-get install python3-pip&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: it is recomended pip3 version 9.0.3. Check version with &#039;pip3 --version&#039; and fix it if needed with &#039;pip3 install pip==9.0.3&#039;&lt;br /&gt;
&lt;br /&gt;
=== 4 Setup the IDE===&lt;br /&gt;
&lt;br /&gt;
For this tutorial we will use PyCharm as IDE. First thing, we will set &amp;quot;Python3&amp;quot; as default python interpreter:&lt;br /&gt;
&lt;br /&gt;
[[File:PythonInterpreter.jpg|500px|top]]&lt;br /&gt;
&lt;br /&gt;
Next we will configure a new debug environment. For that we will go to the &amp;quot;Run&amp;quot; tab &amp;quot;Edit configurations&amp;quot;. In the new window that appears we will need to configure the script and the environment parameters.&lt;br /&gt;
&lt;br /&gt;
[[File:PyCharmConfiguration.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
=== 5 Configure it to interact with other modules===&lt;br /&gt;
&lt;br /&gt;
You need to feed the IP addresses of the modules it is going to communicate to. For that, you can use your &amp;quot;/etc/hosts&amp;quot; file.&lt;br /&gt;
&lt;br /&gt;
In case the module under development is running in the same server where the rest of the modules are located, use &amp;quot;127.0.0.1&amp;quot; (localhost) as the IP address of those modules. For instance, in the following example we have added mongo, ro and kafka to the line containing &amp;quot;127.0.0.1&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 127.0.0.1 localhost mongo ro kafka nbi ro-db&lt;br /&gt;
&lt;br /&gt;
In case the module under development is running in a different server from the rest of modules, you will need to provide the IP address of that server. For instance, in the following example we have added a new line with the name resolution for mongo ro and kafka to IP address &amp;quot;a.b.c.d&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 a.b.c.d mongo ro kafka nbi ro-db&lt;br /&gt;
&lt;br /&gt;
=== 6 Install needed packages===&lt;br /&gt;
&lt;br /&gt;
Is it possible that you will need to install some additional packages in your server. If needed use the commands &amp;quot;pip3 install&amp;quot; or &amp;quot;apt-get install&amp;quot; for that.&lt;br /&gt;
&lt;br /&gt;
Some modules imports another modules from OSM. The modules needed are:&lt;br /&gt;
 n2vc: git clone https://osm.etsi.org/gerrit/osm/N2VC&lt;br /&gt;
 common: git clone https://osm.etsi.org/gerrit/osm/common&lt;br /&gt;
 IM: git clone https://osm.etsi.org/gerrit/osm/IM&lt;br /&gt;
&lt;br /&gt;
Install them with &lt;br /&gt;
 pip3 install -e common --user  # needed for LCM, NBI&lt;br /&gt;
 pip3 install -e N2VC --user  # needed for LCM&lt;br /&gt;
 pip3 install -e IM --user  # needed for NBI&lt;br /&gt;
&lt;br /&gt;
=== 7 Expose needed ports of docker services===&lt;br /&gt;
&lt;br /&gt;
To expose &#039;&#039;&#039;mongo&#039;&#039;&#039; database (service osm_mongo), needed for NBI, LCM, MON:&lt;br /&gt;
 docker service update osm_mongo --publish-add 27017:27017&lt;br /&gt;
 #NOTE: Not sure if this is persistent upon reboot&lt;br /&gt;
 # check exposed ports by:&lt;br /&gt;
 docker service list&lt;br /&gt;
&lt;br /&gt;
Alternativelly you can modify the docker osm stack by editing file &#039;/etc/osm/docker/docker-compose.yaml&#039;, adding/uncommenting the exposed ports; and restart the stack:&lt;br /&gt;
 sudo vi /etc/osm/docker/docker-compose.yaml&lt;br /&gt;
 # add/uncomment at section mongo:&lt;br /&gt;
 #    ports:&lt;br /&gt;
 #    - &amp;quot;27017:27017&amp;quot;&lt;br /&gt;
 docker stack rm osm &amp;amp;&amp;amp; sleep 60&lt;br /&gt;
 docker stack deploy -c /etc/osm/docker/docker-compose.yaml osm&lt;br /&gt;
 # make again the service scale to 0 of step 1 in this section&lt;br /&gt;
&lt;br /&gt;
Similarly, &#039;&#039;&#039;ro-db&#039;&#039;&#039; (service osm_ro-db) needed for RO, uses ports &amp;quot;3306:3306&amp;quot;&lt;br /&gt;
&lt;br /&gt;
... And , &#039;&#039;&#039;kafka&#039;&#039;&#039; (service osm_kafka) needed for LCM, NBI uses ports &amp;quot;9092:9092&amp;quot;. Note: for kafka sometimes this is not enough and other modules has errrors connecting to kafka controller. If this is the case modify docker-compose adding kafka bus and relaunch service&lt;br /&gt;
&lt;br /&gt;
==NBI==&lt;br /&gt;
&lt;br /&gt;
Install needed OSM packages IM, common:&lt;br /&gt;
 # osm_im:&lt;br /&gt;
 # Install Information Model vnfd.py and nsd.py files for pyangbind validation at e.g. parent folder where NBI is cloned&lt;br /&gt;
 pip3 install pyang&lt;br /&gt;
 git clone https://github.com/robshakir/pyangbind&lt;br /&gt;
 pip3 install -e pyangbind&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/IM&lt;br /&gt;
 mkdir IM/osm_im&lt;br /&gt;
 cd IM/models/yang&lt;br /&gt;
 wget -q https://raw.githubusercontent.com/YangModels/yang/master/standard/ietf/RFC/ietf-yang-types%402013-07-15.yang -O ./ietf-yang-types.yang&lt;br /&gt;
 wget -q https://raw.githubusercontent.com/YangModels/yang/master/standard/ietf/RFC/ietf-inet-types%402013-07-15.yang -O ./ietf-inet-types.yang&lt;br /&gt;
 pyang --plugindir ../../../pyangbind/pyangbind/plugin -f pybind -o ../../osm_im/vnfd.py vnfd.yang&lt;br /&gt;
 pyang --plugindir ../../../pyangbind/pyangbind/plugin -f pybind -o ../../osm_im/nsd.py nsd.yang&lt;br /&gt;
 pyang --plugindir ../../../pyangbind/pyangbind/plugin -f pybind -o ../../osm_im/nst.py nst.yang&lt;br /&gt;
 cd ../../..&lt;br /&gt;
 pip3 install -e IM&lt;br /&gt;
 # osm_common:&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/common&lt;br /&gt;
 pip3 install -e common  # try with --user if get permission errors&lt;br /&gt;
 # pip3 install aiokafka==0.4.*  pymongo==3.7.* pycrypto pyyaml==3.*&lt;br /&gt;
&lt;br /&gt;
Change docker service &#039;&#039;&#039;mongo&#039;&#039;&#039; and &#039;&#039;&#039;kafka&#039;&#039;&#039; to expose ports. See [[Developer_HowTo#7 Expose needed ports of docker services]]&lt;br /&gt;
&lt;br /&gt;
Additionally you may want that docker &#039;light-ui&#039; uses your local copy of NBI by one of:&lt;br /&gt;
* Edit again file &#039;/etc/osm/docker/docker-compose.yaml&#039;, and set at &#039;light-ui&#039; section the required IP address from docker to the VM:&lt;br /&gt;
 OSM_SERVER: &amp;lt;172.17.0.1&amp;gt;    # nbi&lt;br /&gt;
 # Get the needed address at your setup by &#039;ip a | grep docker0&#039;&lt;br /&gt;
* ... Or update light-ui docker service (not persistent on reboot):&lt;br /&gt;
 docker service update osm_light-ui --force --env-add &amp;quot;OSM_SERVER=172.17.0.1&amp;quot;&lt;br /&gt;
 # Get the needed address at your setup by &#039;ip a | grep docker0&#039;&lt;br /&gt;
&lt;br /&gt;
Clone and install needed NBI packages &lt;br /&gt;
 docker service scale osm_nbi=0&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/NBI&lt;br /&gt;
 # configure gerrit commit-msg hook&lt;br /&gt;
 curl -Lo NBI/.git/hooks/commit-msg http://osm.etsi.org/gerrit/tools/hooks/commit-msg&lt;br /&gt;
 chmod u+x NBI/.git/hooks/commit-msg&lt;br /&gt;
 cp NBI/.gitignore-common NBI/.gitignore&lt;br /&gt;
 pip3 install -e NBI  # try with --user if get permission errors&lt;br /&gt;
 # sudo apt-get install python3-keystoneclient&lt;br /&gt;
 # pip3 install cherrypy==18.0.0 pyyaml==3.* keystoneauth1&lt;br /&gt;
&lt;br /&gt;
Python interpreter: Python3&lt;br /&gt;
Script: $INSTALLATION_FOLDER/NBI/osm_nbi/nbi.py&lt;br /&gt;
&lt;br /&gt;
Environment variables:&lt;br /&gt;
* OSMNBI_DATABASE_COMMONKEY: must be the same value used by NBI. Get it with &#039;cat /etc/osm/docker/nbi.env&#039;&lt;br /&gt;
* OSMNBI_STORAGE_PATH: Path of the docker volume for filestorage. Both LCM and NBI must share the same path. You can either:&lt;br /&gt;
** Create a folder and debug both NBI and LCM at the same time (needed if you develop in a different server than OSM); or&lt;br /&gt;
** Use the docker volume. Discover local path (Mountpoint) with &#039;docker volume inspect osm_osm_packages&#039; and grant write permissions to pycharm on it with (path can be different at your envioron) &#039;sudo chmod o+rx /var/lib/docker /var/lib/docker/volumes; sudo chmod -R o+w /var/lib/docker/volumes/osm_osm_packages/_data&#039; &lt;br /&gt;
* OSMNBI_DATABASE_HOST: Mongo IP in case host &#039;mongo&#039; is not at &amp;quot;/etc/hosts&amp;quot; file&lt;br /&gt;
* OSMNBI_STATIC_DIR: &amp;lt;Absolute path of NBI&amp;gt;/osm_nbi/html_public&lt;br /&gt;
&lt;br /&gt;
==LCM==&lt;br /&gt;
&lt;br /&gt;
Install needed OSM packages if not done:&lt;br /&gt;
 # N2VC:&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/N2VC&lt;br /&gt;
 pip3 install -e N2VC  # try with --user if get permission errors&lt;br /&gt;
 &lt;br /&gt;
 # osm_common:&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/common&lt;br /&gt;
 pip3 install -e common  # try with --user if get permission errors&lt;br /&gt;
&lt;br /&gt;
Change docker service &#039;&#039;&#039;mongo&#039;&#039;&#039; and &#039;&#039;&#039;kafka&#039;&#039;&#039; to expose ports. See [[Developer_HowTo#7 Expose needed ports of docker services]]&lt;br /&gt;
&lt;br /&gt;
Cone and install LCM depencencies&lt;br /&gt;
 docker service scale osm_lcm=0&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/LCM&lt;br /&gt;
 # configure gerrit commit-msg hook&lt;br /&gt;
 curl -Lo LCM/.git/hooks/commit-msg http://osm.etsi.org/gerrit/tools/hooks/commit-msg&lt;br /&gt;
 chmod u+x LCM/.git/hooks/commit-msg&lt;br /&gt;
 cp LCM/.gitignore-common LCM/.gitignore&lt;br /&gt;
 pip3 install -e LCM  # try with --user if get permission errors&lt;br /&gt;
&lt;br /&gt;
Python interpreter: Python3&lt;br /&gt;
Script: $INSTALLATION_FOLDER/LCM/osm_lcm/lcm.py&lt;br /&gt;
&lt;br /&gt;
Environment variables:&lt;br /&gt;
&lt;br /&gt;
Values are stored at &#039;/etc/osm/docker/lcm.env&#039; but here it is explained how to obtain these values.&lt;br /&gt;
* OSMLCM_DATABASE_COMMONKEY: must be the same value used by NBI. Get it with &#039;cat /etc/osm/docker/lcm.env&#039;&lt;br /&gt;
* OSMLCM_STORAGE_PATH: Path of the docker volume for filestorage. Both LCM and NBI must share the same path. You can either:&lt;br /&gt;
** Create a folder and debug both NBI and LCM at the same time (needed if you develop in a different server than OSM); or&lt;br /&gt;
** Use the docker volume. Discover local path (Mountpoint) with &#039;docker volume inspect osm_osm_packages&#039; and grant read permissions to pycharm on it with (path can be different at your envioron) &#039;sudo chmod o+rx /var/lib/docker /var/lib/docker/volumes&#039; &lt;br /&gt;
* OSMLCM_DATABASE_HOST: Mongo IP in case &#039;mongo&#039; host it is not at &amp;quot;/etc/hosts&amp;quot; file. See [[Developer_HowTo#5 Configure it to interact with other modules]]&lt;br /&gt;
* OSMLCM_RO_HOST: RO IP in case &#039;ro&#039; host it is not at &amp;quot;/etc/hosts&amp;quot; file&lt;br /&gt;
* OSMLCM_VCA_CACERT: To get this value run the following command in the OSM host:&lt;br /&gt;
** juju controllers --format json | jq -r &#039;.controllers[&amp;quot;osm&amp;quot;][&amp;quot;ca-cert&amp;quot;]&#039;&lt;br /&gt;
* OSMLCM_VCA_PUBKEY: To get this value run the following command in the OSM host:&lt;br /&gt;
** cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub&lt;br /&gt;
* OSMLCM_VCA_SECRET: To get this value run the following command in the OSM host:&lt;br /&gt;
** grep password /home/ubuntu/.local/share/juju/accounts.yaml |awk &#039;{print $2}&#039;&lt;br /&gt;
* OSMLCM_VCA_HOST: Will be different depending on where your develop environment is running:&lt;br /&gt;
** In case you run it in the same server as OSM use the following command to get the IP (&amp;lt;VCA_IP&amp;gt;):&lt;br /&gt;
*** juju show-controller|grep api-endpoints|awk -F\&#039; &#039;{print $2}&#039;|awk -F\: &#039;{print $1}&#039;&lt;br /&gt;
** In case you use a different server than OSM use the IP address of OSM host (&amp;lt;OSM_IP&amp;gt;). But in addition you need to redirect inside the OSM host, the port 17070 to the VCA container by one of:&lt;br /&gt;
*** Configure the following ip-table rule in OSM host (not persistent on reboot):&lt;br /&gt;
**** sudo iptables -t nat -A PREROUTING -p tcp -d &amp;lt;OSM_IP&amp;gt; --dport 17070 -j DNAT --to &amp;lt;VCA_IP&amp;gt;:17070&lt;br /&gt;
*** or creates a ssh tunnel inside OSM host (just temporal until session is closed):&lt;br /&gt;
**** ssh -L 0.0.0.0:17070:&amp;lt;VCA_IP&amp;gt;:17070 root@&amp;lt;VCA_IP&amp;gt;&lt;br /&gt;
* OSMLCM_GLOBAL_LOGLEVEL: DEBUG&lt;br /&gt;
&lt;br /&gt;
==RO==&lt;br /&gt;
&lt;br /&gt;
It is needed to edit the docker service in order to expose the database port for the &#039;mysql&#039; container. Edit file &#039;/etc/osm/docker/docker-compose.yaml&#039; (recomended to make a backup copy), and uncomment at &#039;mysql&#039; section the following two lines:&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;3306:3306&amp;quot;&lt;br /&gt;
Additionally you may want that docker &#039;lcm&#039; uses your local copy of RO. Edit again file  &#039;/etc/osm/docker/docker-compose.yaml&#039;, and set at &#039;lcm&#039; section the required IP address from docker to the VM:&lt;br /&gt;
      OSMLCM_RO_HOST: &amp;lt;172.17.0.1&amp;gt;    # ro&lt;br /&gt;
      # Get the needed address at your setup by &#039;ip a | grep docker0&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, relaunch service:&lt;br /&gt;
 docker stack rm osm &lt;br /&gt;
 docker stack deploy -c /etc/osm/docker/docker-compose.yaml osm&lt;br /&gt;
&lt;br /&gt;
Remove docker service, clone code:&lt;br /&gt;
&lt;br /&gt;
 docker service scale osm_ro=0&lt;br /&gt;
 # clone and configure gerrit commit-msg hook&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/RO&lt;br /&gt;
 curl -Lo RO/.git/hooks/commit-msg http://osm.etsi.org/gerrit/tools/hooks/commit-msg&lt;br /&gt;
 chmod u+x RO/.git/hooks/commit-msg&lt;br /&gt;
 cp RO/.gitignore-common RO/.gitignore&lt;br /&gt;
&lt;br /&gt;
Install needed packages using its own installation script. Though it is not recomended, you can skip the &#039;--no-db&#039; option for installing a local database alternativelly to use the database at &#039;ro-db&#039; container:&lt;br /&gt;
 sudo ./RO/scripts/install-openmano.sh --no-db --noclone --develop&lt;br /&gt;
&lt;br /&gt;
Python interpreter: Python2&lt;br /&gt;
Script: $INSTALLATION_FOLDER/RO/openmanod&lt;br /&gt;
&lt;br /&gt;
Environment variables:&lt;br /&gt;
* RO_DB_HOST, RO_DB_OVIM_HOST: localhost or &amp;lt;OSM_IP&amp;gt; depending if running on the same server or not. Not needed if alternativelly you use a local database copy.&lt;br /&gt;
* RO_LOG_LEVEL: DEBUG&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=Developer_HowTo&amp;diff=6108</id>
		<title>Developer HowTo</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=Developer_HowTo&amp;diff=6108"/>
		<updated>2021-02-17T17:19:45Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
The aim of this entry is to provide a guide for developers to set up their environment, in order to ease the development with the different OSM modules.&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Modules run in separate docker containers (except juju controller that uses a lxd container). Current installation uses Docker Swarm by default (there are Kubernetes distributions and an incoming option for installing on Kubernetes). The modules are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;kafka&#039;&#039;&#039;: Provides a Kafka bus used for OSM communication. This module relies on &#039;&#039;zookeeper&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;zookeeper&#039;&#039;&#039;: Used by &#039;&#039;kafka&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;nbi&#039;&#039;&#039;: North Bound Interface of OSM. Restful server that follows ETSI SOL005 interface. Relies on &#039;&#039;mongo&#039;&#039; database and &#039;&#039;kafka&#039;&#039; bus. For authentication it can optionally uses &#039;&#039;keystone&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;keystone&#039;&#039;&#039;: Used optionally for NBI authentication and RBAC. It stores the users, projects and role permissions. It relies on &#039;&#039;mysql&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;lcm&#039;&#039;&#039;: Provides the Live Cycle Management. It uses &#039;&#039;ro&#039;&#039; for resource orchestration and juju for configuration. It relies also on &#039;&#039;mongo&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;ro&#039;&#039;&#039;: Makes the Resource Orchestration, or VIM deployment. Relies on &#039;&#039;mysql&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;light-ui&#039;&#039;&#039;: Web user interface. It communicates with &#039;&#039;nbi&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;mon&#039;&#039;&#039;: Performs OSM monitoring. Relies on &#039;&#039;mongo&#039;&#039; and &#039;&#039;mysql&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;mongo&#039;&#039;&#039;: Common non relational database for OSM modules.&lt;br /&gt;
* &#039;&#039;&#039;mysql&#039;&#039;&#039;: Relational database server used for &#039;&#039;ro&#039;&#039;, &#039;&#039;keystone&#039;&#039;, &#039;&#039;mon&#039;&#039; and &#039;&#039;pol&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;pol&#039;&#039;&#039;: Policy Manager for OSM.&lt;br /&gt;
* &#039;&#039;&#039;prometheus&#039;&#039;&#039;: for monitoring .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition LCM and NBI, shares a common file system  where packages are stored. In current installation it uses a shared docker volume called &#039;&#039;osm_package&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This picture shows the modules with the port that they export, their relationships with the name of env variables that control them. For clarity not all the dependencies are depicted, as kafka, mysql, ... &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     __________                                                              ________&lt;br /&gt;
    |          |                                                            |        |&lt;br /&gt;
    | light-ui |OSM_SERVER               _______                            |keystone|&lt;br /&gt;
    | :80      |----------------------&amp;gt; |       |-------------------------&amp;gt; |:5000   |&lt;br /&gt;
    |__________|                        | nbi   |                           |________|&lt;br /&gt;
                     OSMNBI_STORAGE_PATH| :9999 |OSMNBI_DATABASE_HOST        _______ &lt;br /&gt;
    .............. &amp;lt;--------------------|_______|-------------------------&amp;gt; |       |&lt;br /&gt;
    . volume:    .                                                          |       |&lt;br /&gt;
    . osm_osm_   .                                                          | mongo |&lt;br /&gt;
    . packages   .   OSMLCM_STORAGE_PATH _______ OSMLCM_DATABASE_HOST       | :27017|&lt;br /&gt;
    .............. &amp;lt;--------------------|       |-------------------------&amp;gt; |_______|&lt;br /&gt;
                                        | lcm   |&lt;br /&gt;
    **************       OSMLCM_VCA_HOST|       |OSMLCM_RO_HOST&lt;br /&gt;
    * lxd: juju  * &amp;lt;--------------------|_______|--------------|&lt;br /&gt;
    * controller *                                             |&lt;br /&gt;
    **************                       _______               |             _______&lt;br /&gt;
                                        |       | &amp;lt;-------------            |       |&lt;br /&gt;
                                        | ro    |                           | mysql |  &lt;br /&gt;
                                        | :9090 |RO_DB_HOST                 | :3306 |&lt;br /&gt;
                                        |_______|-------------------------&amp;gt; |_______|&lt;br /&gt;
&lt;br /&gt;
     _______     _______                 _______                             _________&lt;br /&gt;
    |       |   |       |               |       |                           |         |&lt;br /&gt;
    | mon   |   | pm    |               | kafka |KAFKA_ZOOKEEPER_CONNECT    |zookeeper|  &lt;br /&gt;
    | :8662 |   |       |               | :9092 |-------------------------&amp;gt; | :2181   |       &lt;br /&gt;
    |_______|   |_______|               |_______|                           |_________|&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For debugging it is convenient running the target module directly at host maintaining the rest of dependent modules in containers. In the following sections it is described how to achieve that.&lt;br /&gt;
&lt;br /&gt;
==General steps==&lt;br /&gt;
===  1 Shutdown the container you want to debug===&lt;br /&gt;
&lt;br /&gt;
First thing, you need to stop the module you want to debug. As OSM uses a docker service do not manually stop the container because it will be automatically relaunched again. Scale it to 0 for stopping and to 1 for running again. &lt;br /&gt;
&lt;br /&gt;
 docker service scale osm_lcm=0&lt;br /&gt;
&lt;br /&gt;
=== 2 Clone the module===&lt;br /&gt;
&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/LCM&lt;br /&gt;
&lt;br /&gt;
=== 3 Install the module===&lt;br /&gt;
&lt;br /&gt;
Inside the folder where the module is cloned type the following command:&lt;br /&gt;
&lt;br /&gt;
 pip3 install -e .  # try with --user if get permission errors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: pip3 can be installed with &#039;sudo apt-get install python3-pip&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: it is recomended pip3 version 9.0.3. Check version with &#039;pip3 --version&#039; and fix it if needed with &#039;pip3 install pip==9.0.3&#039;&lt;br /&gt;
&lt;br /&gt;
=== 4 Setup the IDE===&lt;br /&gt;
&lt;br /&gt;
For this tutorial we will use PyCharm as IDE. First thing, we will set &amp;quot;Python3&amp;quot; as default python interpreter:&lt;br /&gt;
&lt;br /&gt;
[[File:PythonInterpreter.jpg|500px|top]]&lt;br /&gt;
&lt;br /&gt;
Next we will configure a new debug environment. For that we will go to the &amp;quot;Run&amp;quot; tab &amp;quot;Edit configurations&amp;quot;. In the new window that appears we will need to configure the script and the environment parameters.&lt;br /&gt;
&lt;br /&gt;
[[File:PyCharmConfiguration.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
=== 5 Configure it to interact with other modules===&lt;br /&gt;
&lt;br /&gt;
You need to feed the IP addresses of the modules it is going to communicate to. For that, you can use your &amp;quot;/etc/hosts&amp;quot; file.&lt;br /&gt;
&lt;br /&gt;
In case the module under development is running in the same server where the rest of the modules are located, use &amp;quot;127.0.0.1&amp;quot; (localhost) as the IP address of those modules. For instance, in the following example we have added mongo, ro and kafka to the line containing &amp;quot;127.0.0.1&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 127.0.0.1 localhost mongo ro kafka nbi ro-db&lt;br /&gt;
&lt;br /&gt;
In case the module under development is running in a different server from the rest of modules, you will need to provide the IP address of that server. For instance, in the following example we have added a new line with the name resolution for mongo ro and kafka to IP address &amp;quot;a.b.c.d&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 a.b.c.d mongo ro kafka nbi ro-db&lt;br /&gt;
&lt;br /&gt;
=== 6 Install needed packages===&lt;br /&gt;
&lt;br /&gt;
Is it possible that you will need to install some additional packages in your server. If needed use the commands &amp;quot;pip3 install&amp;quot; or &amp;quot;apt-get install&amp;quot; for that.&lt;br /&gt;
&lt;br /&gt;
Some modules imports another modules from OSM. The modules needed are:&lt;br /&gt;
 n2vc: git clone https://osm.etsi.org/gerrit/osm/N2VC&lt;br /&gt;
 common: git clone https://osm.etsi.org/gerrit/osm/common&lt;br /&gt;
 IM: git clone https://osm.etsi.org/gerrit/osm/IM&lt;br /&gt;
&lt;br /&gt;
Install them with &lt;br /&gt;
 pip3 install -e common --user  # needed for LCM, NBI&lt;br /&gt;
 pip3 install -e N2VC --user  # needed for LCM&lt;br /&gt;
 pip3 install -e IM --user  # needed for NBI&lt;br /&gt;
&lt;br /&gt;
=== 7 Expose needed ports of docker services===&lt;br /&gt;
&lt;br /&gt;
To expose &#039;&#039;&#039;mongo&#039;&#039;&#039; database (service osm_mongo), needed for NBI, LCM, MON:&lt;br /&gt;
 docker service update osm_mongo --publish-add 27017:27017&lt;br /&gt;
 #NOTE: Not sure if this is persistent upon reboot&lt;br /&gt;
 # check exposed ports by:&lt;br /&gt;
 docker service list&lt;br /&gt;
&lt;br /&gt;
Alternativelly you can modify the docker osm stack by editing file &#039;/etc/osm/docker/docker-compose.yaml&#039;, adding/uncommenting the exposed ports; and restart the stack:&lt;br /&gt;
 sudo vi /etc/osm/docker/docker-compose.yaml&lt;br /&gt;
 # add/uncomment at section mongo:&lt;br /&gt;
 #    ports:&lt;br /&gt;
 #    - &amp;quot;27017:27017&amp;quot;&lt;br /&gt;
 docker stack rm osm &amp;amp;&amp;amp; sleep 60&lt;br /&gt;
 docker stack deploy -c /etc/osm/docker/docker-compose.yaml osm&lt;br /&gt;
 # make again the service scale to 0 of step 1 in this section&lt;br /&gt;
&lt;br /&gt;
Similarly, &#039;&#039;&#039;ro-db&#039;&#039;&#039; (service osm_ro-db) needed for RO, uses ports &amp;quot;3306:3306&amp;quot;&lt;br /&gt;
&lt;br /&gt;
... And , &#039;&#039;&#039;kafka&#039;&#039;&#039; (service osm_kafka) needed for LCM, NBI uses ports &amp;quot;9092:9092&amp;quot;. Note: for kafka sometimes this is not enough and other modules has errrors connecting to kafka controller. If this is the case modify docker-compose adding kafka bus and relaunch service&lt;br /&gt;
&lt;br /&gt;
==NBI==&lt;br /&gt;
&lt;br /&gt;
Install needed OSM packages IM, common:&lt;br /&gt;
 # osm_im:&lt;br /&gt;
 # Install Information Model vnfd.py and nsd.py files for pyangbind validation at e.g. parent folder where NBI is cloned&lt;br /&gt;
 pip3 install pyang&lt;br /&gt;
 git clone https://github.com/robshakir/pyangbind&lt;br /&gt;
 pip3 install -e pyangbind&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/IM&lt;br /&gt;
 mkdir IM/osm_im&lt;br /&gt;
 cd IM/models/yang&lt;br /&gt;
 wget -q https://raw.githubusercontent.com/YangModels/yang/master/standard/ietf/RFC/ietf-yang-types%402013-07-15.yang -O ./ietf-yang-types.yang&lt;br /&gt;
 wget -q https://raw.githubusercontent.com/YangModels/yang/master/standard/ietf/RFC/ietf-inet-types%402013-07-15.yang -O ./ietf-inet-types.yang&lt;br /&gt;
 pyang --plugindir ../../../pyangbind/pyangbind/plugin -f pybind -o ../../osm_im/vnfd.py vnfd.yang&lt;br /&gt;
 pyang --plugindir ../../../pyangbind/pyangbind/plugin -f pybind -o ../../osm_im/nsd.py nsd.yang&lt;br /&gt;
 pyang --plugindir ../../../pyangbind/pyangbind/plugin -f pybind -o ../../osm_im/nst.py nst.yang&lt;br /&gt;
 cd ../../..&lt;br /&gt;
 pip3 install -e IM&lt;br /&gt;
 # osm_common:&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/common&lt;br /&gt;
 pip3 install -e common  # try with --user if get permission errors&lt;br /&gt;
 # pip3 install aiokafka==0.4.*  pymongo==3.7.* pycrypto pyyaml==3.*&lt;br /&gt;
&lt;br /&gt;
Change docker service &#039;&#039;&#039;mongo&#039;&#039;&#039; and &#039;&#039;&#039;kafka&#039;&#039;&#039; to expose ports. See [[Developer_HowTo#7 Expose needed ports of docker services]]&lt;br /&gt;
&lt;br /&gt;
Additionally you may want that docker &#039;light-ui&#039; uses your local copy of NBI by one of:&lt;br /&gt;
* Edit again file &#039;/etc/osm/docker/docker-compose.yaml&#039;, and set at &#039;light-ui&#039; section the required IP address from docker to the VM:&lt;br /&gt;
 OSM_SERVER: &amp;lt;172.17.0.1&amp;gt;    # nbi&lt;br /&gt;
 # Get the needed address at your setup by &#039;ip a | grep docker0&#039;&lt;br /&gt;
* ... Or update light-ui docker service (not persistent on reboot):&lt;br /&gt;
 docker service update osm_light-ui --force --env-add &amp;quot;OSM_SERVER=172.17.0.1&amp;quot;&lt;br /&gt;
 # Get the needed address at your setup by &#039;ip a | grep docker0&#039;&lt;br /&gt;
&lt;br /&gt;
Clone and install needed NBI packages &lt;br /&gt;
 docker service scale osm_nbi=0&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/NBI&lt;br /&gt;
 # configure gerrit commit-msg hook&lt;br /&gt;
 curl -Lo NBI/.git/hooks/commit-msg http://osm.etsi.org/gerrit/tools/hooks/commit-msg&lt;br /&gt;
 chmod u+x NBI/.git/hooks/commit-msg&lt;br /&gt;
 cp NBI/.gitignore-common NBI/.gitignore&lt;br /&gt;
 pip3 install -e NBI  # try with --user if get permission errors&lt;br /&gt;
 # sudo apt-get install python3-keystoneclient&lt;br /&gt;
 # pip3 install cherrypy==18.0.0 pyyaml==3.* keystoneauth1&lt;br /&gt;
&lt;br /&gt;
Python interpreter: Python3&lt;br /&gt;
Script: $INSTALLATION_FOLDER/NBI/osm_nbi/nbi.py&lt;br /&gt;
&lt;br /&gt;
Environment variables:&lt;br /&gt;
* OSMNBI_DATABASE_COMMONKEY: must be the same value used by NBI. Get it with &#039;cat /etc/osm/docker/nbi.env&#039;&lt;br /&gt;
* OSMNBI_STORAGE_PATH: Path of the docker volume for filestorage. Both LCM and NBI must share the same path. You can either:&lt;br /&gt;
** Create a folder and debug both NBI and LCM at the same time (needed if you develop in a different server than OSM); or&lt;br /&gt;
** Use the docker volume. Discover local path (Mountpoint) with &#039;docker volume inspect osm_osm_packages&#039; and grant write permissions to pycharm on it with (path can be different at your envioron) &#039;sudo chmod o+rx /var/lib/docker /var/lib/docker/volumes; sudo chmod -R o+w /var/lib/docker/volumes/osm_osm_packages/_data&#039; &lt;br /&gt;
* OSMNBI_DATABASE_HOST: Mongo IP in case host &#039;mongo&#039; is not at &amp;quot;/etc/hosts&amp;quot; file&lt;br /&gt;
* OSMNBI_STATIC_DIR: &amp;lt;Absolute path of NBI&amp;gt;/osm_nbi/html_public&lt;br /&gt;
&lt;br /&gt;
==LCM==&lt;br /&gt;
&lt;br /&gt;
Install needed OSM packages if not done:&lt;br /&gt;
 # N2VC:&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/N2VC&lt;br /&gt;
 pip3 install -e N2VC  # try with --user if get permission errors&lt;br /&gt;
 &lt;br /&gt;
 # osm_common:&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/common&lt;br /&gt;
 pip3 install -e common  # try with --user if get permission errors&lt;br /&gt;
&lt;br /&gt;
Change docker service &#039;&#039;&#039;mongo&#039;&#039;&#039; and &#039;&#039;&#039;kafka&#039;&#039;&#039; to expose ports. See [[Developer_HowTo#7 Expose needed ports of docker services]]&lt;br /&gt;
&lt;br /&gt;
Cone and install LCM depencencies&lt;br /&gt;
 docker service scale osm_lcm=0&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/LCM&lt;br /&gt;
 # configure gerrit commit-msg hook&lt;br /&gt;
 curl -Lo LCM/.git/hooks/commit-msg http://osm.etsi.org/gerrit/tools/hooks/commit-msg&lt;br /&gt;
 chmod u+x LCM/.git/hooks/commit-msg&lt;br /&gt;
 cp LCM/.gitignore-common LCM/.gitignore&lt;br /&gt;
 pip3 install -e LCM  # try with --user if get permission errors&lt;br /&gt;
&lt;br /&gt;
Python interpreter: Python3&lt;br /&gt;
Script: $INSTALLATION_FOLDER/LCM/osm_lcm/lcm.py&lt;br /&gt;
&lt;br /&gt;
Environment variables:&lt;br /&gt;
&lt;br /&gt;
Values are stored at &#039;/etc/osm/docker/lcm.env&#039; but here it is explained how to obtain these values.&lt;br /&gt;
* OSMLCM_DATABASE_COMMONKEY: must be the same value used by NBI. Get it with &#039;cat /etc/osm/docker/lcm.env&#039;&lt;br /&gt;
* OSMLCM_STORAGE_PATH: Path of the docker volume for filestorage. Both LCM and NBI must share the same path. You can either:&lt;br /&gt;
** Create a folder and debug both NBI and LCM at the same time (needed if you develop in a different server than OSM); or&lt;br /&gt;
** Use the docker volume. Discover local path (Mountpoint) with &#039;docker volume inspect osm_osm_packages&#039; and grant read permissions to pycharm on it with (path can be different at your envioron) &#039;sudo chmod o+rx /var/lib/docker /var/lib/docker/volumes&#039; &lt;br /&gt;
* OSMLCM_DATABASE_HOST: Mongo IP in case &#039;mongo&#039; host it is not at &amp;quot;/etc/hosts&amp;quot; file. See [[Developer_HowTo#5 Configure it to interact with other modules]]&lt;br /&gt;
* OSMLCM_RO_HOST: RO IP in case &#039;ro&#039; host it is not at &amp;quot;/etc/hosts&amp;quot; file&lt;br /&gt;
* OSMLCM_VCA_CACERT: To get this value run the following command in the OSM host:&lt;br /&gt;
** juju controllers --format json | jq -r &#039;.controllers[&amp;quot;osm&amp;quot;][&amp;quot;ca-cert&amp;quot;]&#039;&lt;br /&gt;
* OSMLCM_VCA_PUBKEY: To get this value run the following command in the OSM host:&lt;br /&gt;
** cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub&lt;br /&gt;
* OSMLCM_VCA_SECRET: To get this value run the following command in the OSM host:&lt;br /&gt;
** grep password /home/ubuntu/.local/share/juju/accounts.yaml |awk &#039;{print $2}&#039;&lt;br /&gt;
* OSMLCM_VCA_HOST: Will be different depending on where your develop environment is running:&lt;br /&gt;
** In case you run it in the same server as OSM use the following command to get the IP (&amp;lt;VCA_IP&amp;gt;):&lt;br /&gt;
*** juju show-controller|grep api-endpoints|awk -F\&#039; &#039;{print $2}&#039;|awk -F\: &#039;{print $1}&#039;&lt;br /&gt;
** In case you use a different server than OSM use the IP address of OSM host (&amp;lt;OSM_IP&amp;gt;). But in addition you need to redirect inside the OSM host, the port 17070 to the VCA container by one of:&lt;br /&gt;
*** Configure the following ip-table rule in OSM host (not persistent on reboot):&lt;br /&gt;
**** sudo iptables -t nat -A PREROUTING -p tcp -d &amp;lt;OSM_IP&amp;gt; --dport 17070 -j DNAT --to &amp;lt;VCA_IP&amp;gt;:17070&lt;br /&gt;
*** or creates a ssh tunnel inside OSM host (just temporal until session is closed):&lt;br /&gt;
**** ssh -L 0.0.0.0:17070:&amp;lt;VCA_IP&amp;gt;:17070 root@&amp;lt;VCA_IP&amp;gt;&lt;br /&gt;
* OSMLCM_GLOBAL_LOGLEVEL: DEBUG&lt;br /&gt;
&lt;br /&gt;
==RO==&lt;br /&gt;
&lt;br /&gt;
It is needed to edit the docker service in order to expose the database port for the &#039;mysql&#039; container. Edit file &#039;/etc/osm/docker/docker-compose.yaml&#039; (recomended to make a backup copy), and uncomment at &#039;mysql&#039; section the following two lines:&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;3306:3306&amp;quot;&lt;br /&gt;
Additionally you may want that docker &#039;lcm&#039; uses your local copy of RO. Edit again file  &#039;/etc/osm/docker/docker-compose.yaml&#039;, and set at &#039;lcm&#039; section the required IP address from docker to the VM:&lt;br /&gt;
      OSMLCM_RO_HOST: &amp;lt;172.17.0.1&amp;gt;    # ro&lt;br /&gt;
      # Get the needed address at your setup by &#039;ip a | grep docker0&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, relaunch service:&lt;br /&gt;
 docker stack rm osm &lt;br /&gt;
 docker stack deploy -c /etc/osm/docker/docker-compose.yaml osm&lt;br /&gt;
&lt;br /&gt;
Remove docker service, clone code:&lt;br /&gt;
&lt;br /&gt;
 docker service scale osm_ro=0&lt;br /&gt;
 # clone and configure gerrit commit-msg hook&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/RO&lt;br /&gt;
 curl -Lo RO/.git/hooks/commit-msg http://osm.etsi.org/gerrit/tools/hooks/commit-msg&lt;br /&gt;
 chmod u+x RO/.git/hooks/commit-msg&lt;br /&gt;
 cp RO/.gitignore-common RO/.gitignore&lt;br /&gt;
&lt;br /&gt;
Install needed packages using its own installation script. Though it is not recomended, you can skip the &#039;--no-db&#039; option for installing a local database alternativelly to use the database at &#039;ro-db&#039; container:&lt;br /&gt;
 sudo ./RO/scripts/install-openmano.sh --no-db --noclone --develop&lt;br /&gt;
&lt;br /&gt;
Python interpreter: Python2&lt;br /&gt;
Script: $INSTALLATION_FOLDER/RO/openmanod&lt;br /&gt;
&lt;br /&gt;
Environment variables:&lt;br /&gt;
* RO_DB_HOST, RO_DB_OVIM_HOST: localhost or &amp;lt;OSM_IP&amp;gt; depending if running on the same server or not. Not needed if alternativelly you use a local database copy.&lt;br /&gt;
* RO_LOG_LEVEL: DEBUG&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=Workflow_with_OSM_tools&amp;diff=6107</id>
		<title>Workflow with OSM tools</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=Workflow_with_OSM_tools&amp;diff=6107"/>
		<updated>2021-02-17T17:19:35Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Login to OSM portal =&lt;br /&gt;
# Go to OSM portal: https://osm.etsi.org/&lt;br /&gt;
# Login using your username and password&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
* If you are &#039;&#039;&#039;[[Participate|contributing on behalf of your company]]&#039;&#039;&#039;, you should login with your &#039;&#039;&#039;ETSI Online Account (EOL)&#039;&#039;&#039;. &lt;br /&gt;
** If your company is not yet an &#039;&#039;&#039;[https://portal.etsi.org/TBSiteMap/OSM/ListofOSMMembers.aspx OSM Member or Participant]&#039;&#039;&#039;, you can check here &#039;&#039;&#039;[https://osm.etsi.org/welcome/#join how to join OSM as an organization]&#039;&#039;&#039;&lt;br /&gt;
** If your company has &#039;&#039;&#039;already joined OSM but you do not have an EOL account&#039;&#039;&#039; yet, you can &#039;&#039;&#039;[http://webapp.etsi.org/createaccount/ request an EOL account]&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* If you are an &#039;&#039;&#039;individual contributor&#039;&#039;&#039;, you can &#039;&#039;&#039;[https://osm.etsi.org/index2.php?page=page_register.php create your OSM account online]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
If you need any help, contact us at [mailto:OSMsupport@etsi.org OSMsupport@etsi.org]&lt;br /&gt;
&lt;br /&gt;
= Report a bug on Bugzilla =&lt;br /&gt;
# Go to the OSM Portal and click on &#039;&#039;&#039;Bugzilla&#039;&#039;&#039; menu on the portal menu bar. Or simply go to [https://osm.etsi.org/bugzilla OSM Bugzilla]&lt;br /&gt;
# Click on &amp;quot;new&amp;quot; on Bugzilla menu bar.&lt;br /&gt;
# Choose the product, e.g. &amp;quot;OSM&amp;quot;.&lt;br /&gt;
# Complete the bug form. If you know, choose the component, e.g. UI, SO, RO, Documentation/Wiki, etc.&lt;br /&gt;
# Enter the bug summary, description, attachement, etc.&lt;br /&gt;
# Click on the &amp;quot;Submit Bug&amp;quot; button to confirm.&lt;br /&gt;
# A bug id is generated (e.g. Bug 6 -Small Error)&lt;br /&gt;
&lt;br /&gt;
= Clone your project =&lt;br /&gt;
# Clone a &#039;&#039;&#039;git&#039;&#039;&#039; repository, for example: &amp;lt;pre&amp;gt; git clone https://osm.etsi.org/gerrit/osm/RO.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Enter your username&lt;br /&gt;
# Enter you password&lt;br /&gt;
# It is mandatory to install the Gerrit commit-msg hook for the cloned repository in order to automatically insert a Change-Id tag in commit messages. You can install it by entering the following command for RO repository &amp;lt;pre&amp;gt; curl -Lo RO/.git/hooks/commit-msg http://osm.etsi.org/gerrit/tools/hooks/commit-msg &amp;lt;/pre&amp;gt; You then need to make the hook executable &amp;lt;pre&amp;gt; chmod u+x RO/.git/hooks/commit-msg &amp;lt;/pre&amp;gt;  More information about the Gerrit commit-msg hook can be found here https://git.eclipse.org/r/Documentation/cmd-hook-commit-msg.html&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: &lt;br /&gt;
* You can find all the project repository URLs on &#039;&#039;&#039;[https://osm.etsi.org/gitweb/ Gitweb]&#039;&#039;&#039; or on &#039;&#039;&#039;[https://osm.etsi.org/gerrit/ Gerrit]&#039;&#039;&#039;&lt;br /&gt;
** On Gitweb&lt;br /&gt;
**# Click on &#039;&#039;&#039;Gitweb&#039;&#039;&#039; menu on the portal menu bar.&lt;br /&gt;
**# Select a product to see the available cloning URLs&lt;br /&gt;
** On Gerrit&lt;br /&gt;
**# Click on &#039;&#039;&#039;Gerrit&#039;&#039;&#039; menu on the portal menu bar.&lt;br /&gt;
**# Click on &amp;quot;Projects&amp;quot; menu on the Gerrit menu bar.&lt;br /&gt;
**# Click on &amp;quot;List&amp;quot; menu.&lt;br /&gt;
**# Select a product to see the available cloning URLs.&lt;br /&gt;
&lt;br /&gt;
= Configure your Git environment =&lt;br /&gt;
# Configure your git username globally: &amp;lt;pre&amp;gt; git config --global user.name &amp;lt;username&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Configure your git email address:  &amp;lt;pre&amp;gt; git config --global user.email &amp;lt;email&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Check your git configuration:  &amp;lt;pre&amp;gt; git config --list &amp;lt;/pre&amp;gt;&lt;br /&gt;
 &#039;&#039;&#039;Note: Your email address will be visible on commits to Git. &lt;br /&gt;
 If you&#039;d like to keep your email address private, you can mask your email as follows:&lt;br /&gt;
 if your email is &amp;lt;name@company.com&amp;gt; you can set user.email to &amp;lt;hidden@company.com&amp;gt;&lt;br /&gt;
 This allows other users to identify you as a contributor (with your user name) and&lt;br /&gt;
 Git Stats to keep track of your company&#039;s contributions (with the email domain)&lt;br /&gt;
&lt;br /&gt;
In case you are using git in the same computer for other open source projects, you can restrict your git variables to the local folder: &amp;lt;pre&amp;gt;git config --local user.name &amp;lt;username&amp;gt;&lt;br /&gt;
git config --local user.email &amp;lt;email&amp;gt; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Python 3 =&lt;br /&gt;
&lt;br /&gt;
New Python contributions to Open Source Mano must support Python 3+. Python 2.7 reaches an End of Life status on 1 January 2020 and will no longer be supported with bug fixes or security patches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= License Headers = &lt;br /&gt;
Newly contributed Source Code should be licensed under the [https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0 license]. A [https://osm.etsi.org/gitweb/?p=osm/LCM.git;a=blob_plain;f=LICENSE;hb=HEAD LICENSE] file shall exist at he root of the repository and all source files should have the following LICENSE header:&lt;br /&gt;
&lt;br /&gt;
 # Copyright {yyyy} {name of copyright owner}&lt;br /&gt;
 #&lt;br /&gt;
 # Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);&lt;br /&gt;
 # you may not use this file except in compliance with the License.&lt;br /&gt;
 # You may obtain a copy of the License at&lt;br /&gt;
 #&lt;br /&gt;
 #    http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
 #&lt;br /&gt;
 # Unless required by applicable law or agreed to in writing, software&lt;br /&gt;
 # distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,&lt;br /&gt;
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or&lt;br /&gt;
 # implied.&lt;br /&gt;
 # See the License for the specific language governing permissions and&lt;br /&gt;
 # limitations under the License.&lt;br /&gt;
&lt;br /&gt;
Please update the template’s first line &lt;br /&gt;
                  # Copyright {yyyy} {name of copyright owner}&lt;br /&gt;
&lt;br /&gt;
* If you are adding a license header to an existing file,  you can add &lt;br /&gt;
                 # Copyright 2019 ETSI&lt;br /&gt;
&lt;br /&gt;
* If you are adding a license header to a new file, you can add&lt;br /&gt;
                #  Copyright 2019 MyOrgName Inc&lt;br /&gt;
&lt;br /&gt;
= Commit changes to your local project =&lt;br /&gt;
# Go to the &amp;quot;RO&amp;quot; folder &amp;lt;pre&amp;gt;cd osm/RO&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Make some changes on the source (e.g. add a line to the &amp;quot;example-file&amp;quot;)&lt;br /&gt;
# Stage the change. &amp;lt;pre&amp;gt; git add example-file &amp;lt;/pre&amp;gt; &lt;br /&gt;
# Commit the change to your local repository. You can add a bug id in your commit message to link the bug to your contribution  &amp;lt;pre&amp;gt; git commit -s -m &amp;quot;Bug 2 fixed!!&amp;quot;  &amp;lt;/pre&amp;gt; &lt;br /&gt;
# You can see your commit message and update it, if needed, using the following command: &amp;lt;pre&amp;gt;git commit --amend &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Developer&#039;s Certificate of Origin== &lt;br /&gt;
* The &amp;quot;-s&amp;quot; parameter enables to Sign the contribution. It adds the following line at the end of your commit message: &lt;br /&gt;
&amp;lt;pre&amp;gt;   Signed-off-by: Random J Developer &amp;lt;random@developer.example.org&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The sign-off is a simple line at the end of the explanation for the patch, which certifies that you wrote it or otherwise have the right to pass it on as a open-source patch. The rules are pretty simple: signing a contribution means that you can certify the below: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        Developer&#039;s Certificate of Origin 1.1&lt;br /&gt;
&lt;br /&gt;
        By making a contribution to this project, I certify that:&lt;br /&gt;
&lt;br /&gt;
        (a) The contribution was created in whole or in part by me and I&lt;br /&gt;
            have the right to submit it under the open source license&lt;br /&gt;
            indicated in the file; or&lt;br /&gt;
&lt;br /&gt;
        (b) The contribution is based upon previous work that, to the best&lt;br /&gt;
            of my knowledge, is covered under an appropriate open source&lt;br /&gt;
            license and I have the right under that license to submit that&lt;br /&gt;
            work with modifications, whether created in whole or in part&lt;br /&gt;
            by me, under the same open source license (unless I am&lt;br /&gt;
            permitted to submit under a different license), as indicated&lt;br /&gt;
            in the file; or&lt;br /&gt;
&lt;br /&gt;
        (c) The contribution was provided directly to me by some other&lt;br /&gt;
            person who certified (a), (b) or (c) and I have not modified&lt;br /&gt;
            it.&lt;br /&gt;
&lt;br /&gt;
        (d) I understand and agree that this project and the contribution&lt;br /&gt;
            are public and that a record of the contribution (including all&lt;br /&gt;
            personal information I submit with it, including my sign-off) is&lt;br /&gt;
            maintained indefinitely and may be redistributed consistent with&lt;br /&gt;
            this project or the open source license(s) involved.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Push your contribution to Gerrit =&lt;br /&gt;
== Push your contribution to Gerrit using git push ==&lt;br /&gt;
1. To avoid merge conflicts, it is recommended to do a pull with rebase before pushing your contribution in order to merge latest changes made by other users.&lt;br /&gt;
 git pull --rebase&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: you can force git to use always the --rebase option with:&lt;br /&gt;
 git config --local pull.rebase true&lt;br /&gt;
&lt;br /&gt;
2. Push your commits to &#039;&#039;&#039;Gerrit&#039;&#039;&#039; for Code Review using the following command:&lt;br /&gt;
 git push origin HEAD:refs/for/master&lt;br /&gt;
 #use &#039;v1.0&#039; instead of &#039;master&#039; for contributing to v1.0 branch&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: you can also configure git to push always to the desired branch.&lt;br /&gt;
 git config --local remote.origin.push HEAD:refs/for/master&lt;br /&gt;
 git config --local remote.origin.push HEAD:refs/for/v1.0&lt;br /&gt;
&lt;br /&gt;
3. Enter your username.&lt;br /&gt;
&lt;br /&gt;
4. Enter your password.&lt;br /&gt;
&lt;br /&gt;
5. You can review your contribution on &#039;&#039;&#039;Gerrit&#039;&#039;&#039; web interface&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
* The following actions are execution automatically after pushing any contribution to Gerrit: &lt;br /&gt;
** &#039;&#039;&#039;Gerrit&#039;&#039;&#039; reports the new contribution state to the corresponding bug in &#039;&#039;&#039;Bugzilla&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;Gerrit&#039;&#039;&#039; notifies &#039;&#039;&#039;Jenkins&#039;&#039;&#039; to build the new contribution.&lt;br /&gt;
&lt;br /&gt;
== Push your contribution to Gerrit using git review ==&lt;br /&gt;
Instead of using &amp;quot;git push&amp;quot;, you could use &amp;quot;git review&amp;quot;. Follow this guide ([[Using git-review to push and review changes]]) to install and configure git-review. You will also have to set the SSH URL for your remote and copy the commit-msg hook.&lt;br /&gt;
* To avoid merge conflicts, it is recommended to do a pull with rebase before pushing your contribution.&lt;br /&gt;
 git pull --rebase&lt;br /&gt;
* Then, send your contribution to gerrit:&lt;br /&gt;
 git review -c&lt;br /&gt;
&lt;br /&gt;
= Gerrit Notifications =&lt;br /&gt;
Gerrit sends email notifications to:&lt;br /&gt;
*Owner of the change&lt;br /&gt;
*Reviewers of the change&lt;br /&gt;
*Project watchers &lt;br /&gt;
&lt;br /&gt;
Each user can configure his own watched projects and branches in the &amp;quot;settings/watched project&amp;quot; menu. Email notifications can be sent for New Changes, New Patch Sets, All Comments, Submitted Changes and  Abandoned Changes.&lt;br /&gt;
&lt;br /&gt;
Link: [https://osm.etsi.org/gerrit/#/settings/projects https://osm.etsi.org/gerrit/#/settings/projects] (you can navigate there from the Gerrit console by clicking on the arrow by your login on the top right corner)&lt;br /&gt;
&lt;br /&gt;
= Continuous Integration =&lt;br /&gt;
# &#039;&#039;&#039;Jenkins&#039;&#039;&#039; builds, tests the new contribution, and reports the result on its web interface.&lt;br /&gt;
# &#039;&#039;&#039;Jenkins&#039;&#039;&#039; votes on the contribution using &#039;&#039;&#039;“Code-Verif”&#039;&#039;&#039; (-1, +1) on &#039;&#039;&#039;Gerrit&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Code Review =&lt;br /&gt;
# Other &#039;&#039;&#039;contributors&#039;&#039;&#039; and &#039;&#039;&#039;MDG Committers&#039;&#039;&#039; can comment the new contribution and vote using &#039;&#039;&#039;“Code-Review”&#039;&#039;&#039; (-1, 0, +1) on &#039;&#039;&#039;Gerrit&#039;&#039;&#039;.&lt;br /&gt;
# The &#039;&#039;&#039;MDG Leader&#039;&#039;&#039; can comment the new contribution and votes using &#039;&#039;&#039;“Code-Review”&#039;&#039;&#039; (-2, -1, 0, +1, +2) on &#039;&#039;&#039;Gerrit&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Amending a contribution in Gerrit =&lt;br /&gt;
Before amending, make sure that you have the commit-msg hook installed in your local repo. For instance, if your user is &amp;quot;user&amp;quot; and the repo is the &amp;quot;devops&amp;quot; repo, the command to install the commit-msg hook would be:&lt;br /&gt;
 $ scp -p -P 29418 user@osm.etsi.org:hooks/commit-msg devops/.git/hooks/&lt;br /&gt;
&lt;br /&gt;
In that way, all patches will use the same Change Id, thus guaranteeing that they will be associated to the same change.&lt;br /&gt;
&lt;br /&gt;
NOTE: If you don&#039;t setup your environment as above, and would like to update a gerrit review with your new/updated code, you MUST have the Change-Id (of the existing gerrit review) inside the commit message. If the commit update does not contain the Change-Id, the commit will will end up creating a new gerrit review, and your subsequent gerrit review will need to be abandoned (not ideal).&lt;br /&gt;
&lt;br /&gt;
== Amending your last change/commit pushed to Gerrit ==&lt;br /&gt;
1. Get the latest changes from the repo and rebase your changes on top&lt;br /&gt;
 git pull --rebase&lt;br /&gt;
&lt;br /&gt;
2. Fix the code and any conflicts that might have appeared after pulling the code.&lt;br /&gt;
&lt;br /&gt;
3. Add all updated files to the index.&lt;br /&gt;
 git add &amp;lt;file&amp;gt; &lt;br /&gt;
&lt;br /&gt;
4. Amend your commit. &#039;&#039;&#039;NOTE&#039;&#039;&#039;: Don&#039;t use the -m flag to specify a commit message, since it will override the previous message and regenerate the Change-Id. Instead, use the text editor to change the commit message if needed, and keep the Change-Id line intact.&lt;br /&gt;
 git commit --amend&lt;br /&gt;
&lt;br /&gt;
5. Submit your change back to the repository. &#039;&#039;&#039;NOTE&#039;&#039;&#039;: use the appropriate branch instead of master, if you are working on a different branch.&lt;br /&gt;
 git push origin HEAD:refs/for/master&lt;br /&gt;
&lt;br /&gt;
== Amending one of your changes which has dependencies on subsequent changes==&lt;br /&gt;
This procedure will only work if you are the only person working on a set of commits and you don&#039;t expect others to push commits and rebase them to be dependent on yours.&lt;br /&gt;
&lt;br /&gt;
1. Run &#039;git status&#039; on the branch to know how many commits you are ahead of origin. &#039;&#039;&#039;NOTE&#039;&#039;&#039;: use the appropriate branch instead of master, if you are working on a different branch.&lt;br /&gt;
 git status&lt;br /&gt;
 On branch master&lt;br /&gt;
 Your branch is ahead of &#039;origin/master&#039; by 3 commits.&lt;br /&gt;
&lt;br /&gt;
2. Do an interactive rebase over the last X commits and specify which commit you want to amend by changing the command of the commit from &amp;quot;pick&amp;quot; to &amp;quot;edit&amp;quot;. Use &amp;quot;drop&amp;quot; to abandon. Re-order the lines to put commits on a different order. &lt;br /&gt;
 git rebase -i HEAD~3&lt;br /&gt;
  edit 0ab17ad Change in file1&lt;br /&gt;
  pick 4995f46 Second change&lt;br /&gt;
  pick baa85bf Third change&lt;br /&gt;
&lt;br /&gt;
3. Fix the code in the commit, add the files, amend the commit, and continue rebasing:&lt;br /&gt;
 vi file1.txt            #Fix the code&lt;br /&gt;
 git add file1.txt&lt;br /&gt;
 git commit --amend&lt;br /&gt;
 git rebase --continue&lt;br /&gt;
&lt;br /&gt;
4. In case of conflicts with subsequent commits, you will have to solve them, and continue rebasing&lt;br /&gt;
 vi file1.txt            #Fix the conflict&lt;br /&gt;
 git add file1.txt       #Add the files to the staging area; no commit is required.&lt;br /&gt;
 git rebase --continue&lt;br /&gt;
&lt;br /&gt;
5. Repeat step 4 as many times as required, until rebase finishes. You can cancel the whole operation at any moment with &amp;quot;git rebase --abort&amp;quot;&lt;br /&gt;
&lt;br /&gt;
6. Rebase your contribution before pushing&lt;br /&gt;
 git pull --rebase&lt;br /&gt;
&lt;br /&gt;
7. Push your changes to gerrit. &#039;&#039;&#039;NOTE&#039;&#039;&#039;: use the appropriate branch instead of master, if you are working on a different branch.&lt;br /&gt;
 git push origin HEAD:refs/for/master&lt;br /&gt;
&lt;br /&gt;
== Amending a change of another author using git ==&lt;br /&gt;
When amending code from a different author, reviewer and original author should be coordinated in order to make sure that changes made by the reviewer are not reverted by the original author later. For that reason, it is recommended to avoid using the local copy of the branch. Instead, it is recommended to create a new local branch to work on every specific change, following the procedure below:&lt;br /&gt;
&lt;br /&gt;
1. Get the last code from the repository.&lt;br /&gt;
 git fetch origin&lt;br /&gt;
&lt;br /&gt;
2. Create a new branch to work on the code from the remote branch. You can use the review number and patchset as name. &#039;&#039;&#039;NOTE&#039;&#039;&#039;: use the appropriate branch instead of master, if you are working on a different branch.&lt;br /&gt;
 git checkout -b &amp;lt;review-number&amp;gt;-&amp;lt;patchset&amp;gt; origin/master&lt;br /&gt;
&lt;br /&gt;
3. Pull the patch on the created branch. (To find the command to execute you can open the corresponding change page on Gerrit UI, click on download menu, then copy the &amp;quot;pull&amp;quot; command.)&lt;br /&gt;
 git pull &amp;lt;url&amp;gt; &amp;lt;ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Fix the code.&lt;br /&gt;
&lt;br /&gt;
5. Add all updated files to the index.&lt;br /&gt;
 git add &amp;lt;file&amp;gt; &lt;br /&gt;
&lt;br /&gt;
6. Amend the commit. &#039;&#039;&#039;NOTE&#039;&#039;&#039;: Don&#039;t use the -m flag to specify a commit message, since it will override the previous message and regenerate the Change-Id. Instead, use the text editor to change the commit message if needed, and keep the Change-Id line intact.&lt;br /&gt;
 git commit --amend&lt;br /&gt;
&lt;br /&gt;
7. Rebase your contribution before pushing&lt;br /&gt;
 git pull --rebase&lt;br /&gt;
&lt;br /&gt;
8. Submit your change back to the repository. &#039;&#039;&#039;NOTE&#039;&#039;&#039;: use the appropriate branch instead of master, if you are working on a different branch.&lt;br /&gt;
 git push origin HEAD:refs/for/master&lt;br /&gt;
&lt;br /&gt;
== Amending a change of another author using git-review ==&lt;br /&gt;
1. Follow the instructions in &#039;&#039;&#039;[[Using git-review to push and review changes|this link]]&#039;&#039;&#039; to install and configure git-review.&lt;br /&gt;
&lt;br /&gt;
2. Download the change with git-review&lt;br /&gt;
 $ git review -d 1280&lt;br /&gt;
 Downloading refs/changes/80/1280/1 from gerrit&lt;br /&gt;
 Switched to branch &amp;quot;review/garciadeblas/1280&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This will download the change, put it in a branch called review/AUTHOR/change (if the change has no tag, the sequence number will be used instead), and switch to that branch.&lt;br /&gt;
&lt;br /&gt;
3. After that, you can amend the downloaded change to improve it. Finally, push it again:&lt;br /&gt;
 $ git add                         # add the changes&lt;br /&gt;
 $ git commit --amend              # do not touch the Change-Id. The Change-Id is the way for gerrit to keep track what belongs to what development stream as a new patch set.&lt;br /&gt;
 $ git commit --amend --author     # if you want to mark the changes as yours.&lt;br /&gt;
 $ git review -c -R                # The -R is important, since it tells git-review to not rebase your change against master.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Don&#039;t use the -m flag to specify a commit message, since it will override the previous message and regenerate the Change-Id. Instead, use the text editor to change the commit message if needed, and keep the Change-Id line intact.&lt;br /&gt;
&lt;br /&gt;
4. Delete the branch once you have finished:&lt;br /&gt;
 $ git branch -D review/garciadeblas/1280&lt;br /&gt;
&lt;br /&gt;
= Merging the contribution =&lt;br /&gt;
# The &#039;&#039;&#039;MDG Leader&#039;&#039;&#039; can &amp;quot;Submit&amp;quot; the change only if +1 &#039;&#039;&#039;&amp;quot;Code-Verif&amp;quot;&#039;&#039;&#039; (from &#039;&#039;&#039;Jenkins&#039;&#039;&#039;) and at least one +2 &#039;&#039;&#039;&amp;quot;Code-Review&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Gerrit&#039;&#039;&#039; reports the result of the code review to the corresponding bug in &#039;&#039;&#039;Bugzilla&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Fixing the author name / email =&lt;br /&gt;
* Did you commit your changes with a wrong user name? Don&#039;t panic, see how [https://www.everythingcli.org/git-like-a-pro-rewrite-author-history/ this can be fixed]&lt;br /&gt;
&lt;br /&gt;
= OSM CI/CD =&lt;br /&gt;
[[File:OSM_CI-CD_workflow.png|700px|OSM CI/CD Workflow]]&lt;br /&gt;
&lt;br /&gt;
= Join the Community =&lt;br /&gt;
* Join the [https://join.slack.com/t/opensourcemano/shared_invite/enQtMzQ3MzYzNTQ0NDIyLWJkMzRjNDM0MjFjODYzMGQ3ODIzMzJlNTg2ZGI5OTdiZjFiNDMyMzYxMjRjNDU4N2FmNjRjNzY5NTE1MjgzOTQ OSM Community Slack Workspace]&lt;br /&gt;
* Subscribe the [https://list.etsi.org/scripts/wa.exe?SUBED1=OSM_TECH&amp;amp;A=1 OSM TECH] mailing list&lt;br /&gt;
* Get your organisation / project listed in the [https://osm.etsi.org/wikipub/index.php/OSM_Ecosystem OSM Ecosystem]&lt;br /&gt;
&lt;br /&gt;
{{Feedback}}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=How_to_report_issues&amp;diff=6106</id>
		<title>How to report issues</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=How_to_report_issues&amp;diff=6106"/>
		<updated>2021-02-17T17:19:15Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If you have bugs or issues to be reported, please use [https://osm.etsi.org/bugzilla Bugzilla]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If you have questions or feedback, feel free to contact us through:&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;the mailing list [mailto:OSM_TECH@list.etsi.org OSM_TECH@list.etsi.org]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;the [https://join.slack.com/t/opensourcemano/shared_invite/enQtMzQ3MzYzNTQ0NDIyLWVkNTE4ZjZjNWI0ZTQyN2VhOTI1MjViMzU1NWYwMWM3ODI4NTQyY2VlODA2ZjczMWIyYTFkZWNiZmFkM2M2ZDk Slack work space]&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please be patient. Answers may take a few days.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please provide some context to your questions. As an example, find below some guidelines:&lt;br /&gt;
* &#039;&#039;&#039;In case of an installation issue&#039;&#039;&#039;:&lt;br /&gt;
** The full command used to run the installer and the full output of the installer (or at least enough context) might help on finding the solution.&lt;br /&gt;
** It is highly recommended to run the installer command capturing standard output and standard error, so that you can send them for analysis if needed. E.g.:&lt;br /&gt;
 ./install_osm.sh 2&amp;gt;&amp;amp;1 | tee osm_install.log&lt;br /&gt;
* &#039;&#039;&#039;In case of operational issues&#039;&#039;&#039;, the following information might help:&lt;br /&gt;
** Version of OSM that you are using&lt;br /&gt;
** Logs of the system. Check https://osm.etsi.org/wikipub/index.php/Common_issues_and_troubleshooting to know how to get them.&lt;br /&gt;
** Details on the actions you made to get that error so that we could reproduce it.&lt;br /&gt;
** IP network details in order to help troubleshooting potential network issues. For instance:&lt;br /&gt;
*** Client IP address (browser, command line client, etc.) from where you are trying to access OSM&lt;br /&gt;
*** IP address of the machine where OSM is running&lt;br /&gt;
*** IP addresses of the containers&lt;br /&gt;
*** NAT rules in the machine where OSM is running&lt;br /&gt;
&lt;br /&gt;
Common sense applies here, so you don&#039;t need to send everything, but just enough information to diagnose the issue and find a proper solution.&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=Common_issues_and_troubleshooting&amp;diff=6105</id>
		<title>Common issues and troubleshooting</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=Common_issues_and_troubleshooting&amp;diff=6105"/>
		<updated>2021-02-17T17:19:06Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Installation==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RECOMMENDATION:&#039;&#039;&#039; save a log of your installation:&lt;br /&gt;
 $ ./install_osm.sh 2&amp;gt;&amp;amp;1 | tee osm_install_log.txt&lt;br /&gt;
&lt;br /&gt;
=== Add User in Group ===&lt;br /&gt;
Add the non-root user used for installation in &#039;&#039;sudo , lxd, docker&#039;&#039; groups&lt;br /&gt;
&lt;br /&gt;
This will skip below error :-&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Finished installation of juju&lt;br /&gt;
Password:&lt;br /&gt;
&#039;&#039;&#039;sg: failed to crypt password with previous salt: Invalid argument &lt;br /&gt;
ERROR No controllers registered.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Docker===&lt;br /&gt;
====Were all docker images successfully built?====&lt;br /&gt;
&lt;br /&gt;
Although controlled by the installer, you can check that the following images exist:&lt;br /&gt;
&lt;br /&gt;
 $ docker image ls&lt;br /&gt;
 &lt;br /&gt;
 REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
 osm/light-ui             latest              1988aa262a97        18 hours ago        710MB&lt;br /&gt;
 osm/lcm                  latest              c9ad59bf96aa        46 hours ago        667MB&lt;br /&gt;
 osm/ro                   latest              812c987fcb16        46 hours ago        791MB&lt;br /&gt;
 osm/nbi                  latest              584b4e0084a7        46 hours ago        497MB&lt;br /&gt;
 osm/pm                   latest              1ad1e4099f52        46 hours ago        462MB&lt;br /&gt;
 osm/mon                  latest              b17efa3412e3        46 hours ago        725MB&lt;br /&gt;
 wurstmeister/kafka       latest              7cfc4e57966c        10 days ago         293MB&lt;br /&gt;
 mysql                    5                   0d16d0a97dd1        2 weeks ago         372MB&lt;br /&gt;
 mongo                    latest              14c497d5c758        3 weeks ago         366MB&lt;br /&gt;
 wurstmeister/zookeeper   latest              351aa00d2fe9        18 months ago       478MB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Are all processes/services running?====&lt;br /&gt;
 $ docker stack ps osm |grep -i running&lt;br /&gt;
&lt;br /&gt;
10 docker containers should be running.&lt;br /&gt;
&lt;br /&gt;
All the 10 services should have at least 1 replica: 1/1&lt;br /&gt;
&lt;br /&gt;
 $ docker service ls&lt;br /&gt;
 &lt;br /&gt;
 ID                  NAME                MODE                REPLICAS            IMAGE                           PORTS&lt;br /&gt;
 yuyiqh8ty8pv        osm_kafka           replicated          1/1                 wurstmeister/kafka:latest       *:9092-&amp;gt;9092/tcp&lt;br /&gt;
 y585906h5vy5        osm_lcm             replicated          1/1                 osm/lcm:latest&lt;br /&gt;
 pcdi5vb86nt9        osm_light-ui        replicated          1/1                 osm/light-ui:latest             *:80-&amp;gt;80/tcp&lt;br /&gt;
 i56jhl5k6re4        osm_mon             replicated          1/1                 osm/mon:latest                  *:8662-&amp;gt;8662/tcp&lt;br /&gt;
 p5wyjtne93hp        osm_mongo           replicated          1/1                 mongo:latest&lt;br /&gt;
 iz5uncfdzu23        osm_nbi             replicated          1/1                 osm/nbi:latest                  *:9999-&amp;gt;9999/tcp&lt;br /&gt;
 4ttw2v4z2g57        osm_pm              replicated          1/1                 osm/pm:latest&lt;br /&gt;
 xbg6bclp2anw        osm_ro              replicated          1/1                 osm/ro:latest                   *:9090-&amp;gt;9090/tcp&lt;br /&gt;
 sf7rayfolncu        osm_ro-db           replicated          1/1                 mysql:5&lt;br /&gt;
 5bl73dhj1xl0        osm_zookeeper       replicated          1/1                 wurstmeister/zookeeper:latest&lt;br /&gt;
&lt;br /&gt;
====Docker image failed to build====&lt;br /&gt;
=====Err:1 http://archive.ubuntu.com/ubuntu xenial InRelease=====&lt;br /&gt;
&lt;br /&gt;
In some cases, DNS resolution works on the host but fails when building the Docker container. This is caused when Docker doesn&#039;t automatically determine the DNS server to use.&lt;br /&gt;
&lt;br /&gt;
Check if the following works:&lt;br /&gt;
 docker run busybox nslookup archive.ubuntu.com&lt;br /&gt;
&lt;br /&gt;
If it does not work, you have to configure Docker to use the available DNS.&lt;br /&gt;
 # Get the IP address you’re using for DNS:&lt;br /&gt;
 nmcli dev show | grep &#039;IP4.DNS&#039;&lt;br /&gt;
 # Create a new file, /etc/docker/daemon.json, that contains the following (but replace the DNS IP address with the output from the previous step:&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;dns&amp;quot;: [&amp;quot;192.168.24.10&amp;quot;]&lt;br /&gt;
 }&lt;br /&gt;
 # Restart docker&lt;br /&gt;
 sudo service docker restart&lt;br /&gt;
 # Re-run&lt;br /&gt;
 docker run busybox nslookup archive.ubuntu.com&lt;br /&gt;
 # Now you should be able to re-run the installer and move past the DNS issue.&lt;br /&gt;
&lt;br /&gt;
=====TypeError: unsupported operand type(s) for -=: &#039;Retry&#039; and &#039;int&#039;=====&lt;br /&gt;
&lt;br /&gt;
In some cases, a MTU mismatch between the host and docker interfaces will cause this error while running pip. You can check this by running `ifconfig` and comparing the MTU of your host interface and the docker_gwbridge interface.&lt;br /&gt;
&lt;br /&gt;
 # Create a new file, /etc/docker/daemon.json, that contains the following (but replace the MTU value with that of your host interface from the previous step:&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;mtu&amp;quot;: 1458&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 # Restart docker&lt;br /&gt;
 sudo service docker restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Problem deploying stack osm====&lt;br /&gt;
=====network netosm could not be found=====&lt;br /&gt;
&lt;br /&gt;
The error is &#039;&#039;network &amp;quot;netosm&amp;quot; is declared as external, but could not be found. You need to create a swarm-scoped network before the stack is deployed&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
It usually happens because a &amp;quot;docker system prune&amp;quot;  is done with the stack stopped. The following script will create it:&lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  # Create OSM Docker Network ...&lt;br /&gt;
  [ -z &amp;quot;$OSM_STACK_NAME&amp;quot; ] &amp;amp;&amp;amp; OSM_STACK_NAME=osm&lt;br /&gt;
  OSM_NETWORK_NAME=net${OSM_STACK_NAME}&lt;br /&gt;
  echo Creating OSM Docker Network&lt;br /&gt;
  DEFAULT_INTERFACE=$(route -n | awk &#039;$1~/^0.0.0.0/ {print $8}&#039;)&lt;br /&gt;
  DEFAULT_MTU=$(ip addr show $DEFAULT_INTERFACE | perl -ne &#039;if (/mtu\s(\d+)/) {print $1;}&#039;)&lt;br /&gt;
  echo \# OSM_STACK_NAME = $OSM_STACK_NAME&lt;br /&gt;
  echo \# OSM_NETWORK_NAME = $OSM_NETWORK_NAME&lt;br /&gt;
  echo \# DEFAULT_INTERFACE = $DEFAULT_INTERFACE&lt;br /&gt;
  echo \# DEFAULT_MTU = $DEFAULT_MTU&lt;br /&gt;
  sg docker -c &amp;quot;docker network create --driver=overlay --attachable \&lt;br /&gt;
                 --opt com.docker.network.driver.mtu=${DEFAULT_MTU} \&lt;br /&gt;
                 ${OSM_NETWORK_NAME}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Juju===&lt;br /&gt;
====Bootstrap hangs====&lt;br /&gt;
&lt;br /&gt;
If the Juju bootstrap takes a long time, stuck at this status...&lt;br /&gt;
&lt;br /&gt;
 Installing Juju agent on bootstrap instance&lt;br /&gt;
 Fetching Juju GUI 2.14.0&lt;br /&gt;
 Waiting for address&lt;br /&gt;
 Attempting to connect to 10.71.22.78:22&lt;br /&gt;
 Connected to 10.71.22.78&lt;br /&gt;
 Running machine configuration script...&lt;br /&gt;
&lt;br /&gt;
...it usually indicates that the LXD container with the Juju controller is having trouble connecting to the internet.&lt;br /&gt;
&lt;br /&gt;
Get the name of the LXD container. It will begin with &#039;juju-&#039; and end with &#039;-0&#039;.&lt;br /&gt;
&lt;br /&gt;
 lxc list&lt;br /&gt;
 +-----------------+---------+---------------------+------+------------+-----------+&lt;br /&gt;
 |      NAME       |  STATE  |        IPV4         | IPV6 |    TYPE    | SNAPSHOTS |&lt;br /&gt;
 +-----------------+---------+---------------------+------+------------+-----------+&lt;br /&gt;
 | juju-0383f2-0   | RUNNING | 10.195.8.57 (eth0)  |      | PERSISTENT |           |&lt;br /&gt;
 +-----------------+---------+---------------------+------+------------+-----------+&lt;br /&gt;
&lt;br /&gt;
Next, tail the output of cloud-init to see where the bootstrap is stuck.&lt;br /&gt;
&lt;br /&gt;
 lxc exec juju-0383f2-0 -- tail -f /var/log/cloud-init-output.log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Is Juju running?====&lt;br /&gt;
&lt;br /&gt;
If running, you should see something like this:&lt;br /&gt;
&lt;br /&gt;
 $ juju status&lt;br /&gt;
 &lt;br /&gt;
 Model    Controller  Cloud/Region         Version  SLA&lt;br /&gt;
 default  osm         localhost/localhost  2.3.7    unsupported&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====ERROR controller osm already exists====&lt;br /&gt;
&lt;br /&gt;
Did OSM installation fail during juju installation with an error like &amp;quot;ERROR controller osm already exists&amp;quot; ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 $ ./install_osm.sh&lt;br /&gt;
 ...&lt;br /&gt;
 ERROR controller &amp;quot;osm&amp;quot; already exists&lt;br /&gt;
 ERROR try was stopped&lt;br /&gt;
 &lt;br /&gt;
 ### Jum Agu 24 15:19:33 WIB 2018 install_juju: FATAL error: Juju installation failed&lt;br /&gt;
 BACKTRACE:&lt;br /&gt;
 ### FATAL /usr/share/osm-devops/jenkins/common/logging 39&lt;br /&gt;
 ### install_juju /usr/share/osm-devops/installers/full_install_osm.sh 564&lt;br /&gt;
 ### install_lightweight /usr/share/osm-devops/installers/full_install_osm.sh 741&lt;br /&gt;
 ### main /usr/share/osm-devops/installers/full_install_osm.sh 1033&lt;br /&gt;
&lt;br /&gt;
Try to destroy the Juju controller and run the installation again:&lt;br /&gt;
 $ juju destroy-controller osm --destroy-all-models -y&lt;br /&gt;
 $ ./install_osm.sh&lt;br /&gt;
&lt;br /&gt;
If it does not work, you can destroy Juju container and run the installation again&lt;br /&gt;
 #Destroy the Juju container&lt;br /&gt;
 lxc stop juju-*&lt;br /&gt;
 lxc delete juju-*&lt;br /&gt;
 #Unregister the controller since we’ve manually freed the resources associated with it&lt;br /&gt;
 juju unregister -y osm&lt;br /&gt;
 #Verify that there are no controllers&lt;br /&gt;
 juju list-controllers&lt;br /&gt;
 #Run the installation again&lt;br /&gt;
 ./install_osm.sh&lt;br /&gt;
&lt;br /&gt;
===LXD===&lt;br /&gt;
====ERROR profile default: /etc/default/lxd-bridge has IPv6 enabled====&lt;br /&gt;
&lt;br /&gt;
Make sure that you follow the instructions in the Quickstart.&lt;br /&gt;
&lt;br /&gt;
When asked if you want to proceed with the installation and configuration of LXD, juju, docker CE and the initialization of a local docker swarm, as pre-requirements, Please answer &amp;quot;y&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When dialog messages related to LXD configuration are shown, please answer in the following way:&lt;br /&gt;
&lt;br /&gt;
* Do you want to configure the LXD bridge? Yes&lt;br /&gt;
* Do you want to setup an IPv4 subnet? Yes&lt;br /&gt;
* &amp;lt;&amp;lt; Default values apply for next questions &amp;gt;&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Do you want to setup an IPv6 subnet? No&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
&lt;br /&gt;
===VIMs===&lt;br /&gt;
&lt;br /&gt;
====Is the VIM URL reachable and operational?====&lt;br /&gt;
&lt;br /&gt;
When there are problems to access the VIM URL, an error message similar to the following is shown after attempts to instantiate network services:&lt;br /&gt;
&lt;br /&gt;
 Error: &amp;quot;VIM Exception vimmconnConnectionException ConnectFailure: Unable to establish connection to &amp;lt;URL&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* In order to debug potential issues with the connection, in the case of an OpenStack VIM, you can install the OpenStack client in the OSM VM and run some basic tests. I.e.:&lt;br /&gt;
 $ # Install the OpenStack client&lt;br /&gt;
 $ sudo apt-get install python-openstackclient&lt;br /&gt;
 $ # Load your OpenStack credentials. For instance, if your credentials are saved in a file named &#039;myVIM-openrc.sh&#039;, you can load them with:&lt;br /&gt;
 $ source myVIM-openrc.sh&lt;br /&gt;
 $ # Test if the VIM API is operational with a simple command. For instance:&lt;br /&gt;
 $ openstack image list&lt;br /&gt;
&lt;br /&gt;
If the openstack client works, then make sure that you can reach the VIM from the RO docker:&lt;br /&gt;
 $ docker exec -it osm_ro.1.xxxxx bash&lt;br /&gt;
 $ curl &amp;lt;URL_CONTROLLER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In some cases, the errors come from the fact that the VIM was added to OSM using names in the URL that are not Fully Qualified Domain Names (FQDN).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When adding a VIM to OSM, you must use always FQDN or the IP addresses. It must be noted that “controller” or similar names are not proper FQDN (the suffix should be added). Non-FQDN names might be understood by docker’s dnsmasq as a docker container name to be resolved, which is not the case. In addition, all the VIM endpoints should also be FQDN or IP addresses, thus guaranteeing that all subsequent API calls can reach the appropriate endpoint.&lt;br /&gt;
&lt;br /&gt;
Think of an NFV infrastructure with tens of VIMs, first you will have to use different names for each controller (controller1, controller2, etc.), then you will have to add to every machine trying to interact with the different VIMs, not only OSM, all those entries in the /etc/hosts file. This is bad practice.&lt;br /&gt;
&lt;br /&gt;
However, it is useful to have a mean to work with lab environments using non-FQDN names. Three options here. Probably you are looking for the third one, but we recommend the first one:&lt;br /&gt;
* Option 1. Change the admin URL and/or public URL of the endpoints to use an IP address or an FQDN. You might find this interesting if you want to bring your Openstack setup to production.&lt;br /&gt;
* Option 2. Modify /etc/hosts in the docker RO container. This is not persistent after reboots or restarts of the osm docker stack.&lt;br /&gt;
* Option 3. Modify /etc/osm/docker/docker-compose.yaml in the host, adding extra_hosts in the ro section with the entries that you want to add to /etc/hosts in the RO docker:&lt;br /&gt;
 ro:&lt;br /&gt;
   extra_hosts:&lt;br /&gt;
     controller: 1.2.3.4&lt;br /&gt;
Then restart the stack:&lt;br /&gt;
 docker stack rm osm&lt;br /&gt;
 docker stack deploy -c /etc/osm/docker/docker-compose.yaml osm&lt;br /&gt;
This is persistent after reboots and restarts of the osm docker stack.&lt;br /&gt;
&lt;br /&gt;
====Authentication====&lt;br /&gt;
&#039;&#039;&#039;What should I check if the VIM authentication is failing?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Typically, you will get the following error messsage:&lt;br /&gt;
&lt;br /&gt;
Error: &amp;quot;VIM Exception vimconnUnexpectedResponse Unauthorized: The request you have made requieres authentication. (HTTP 401)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If your OpenStack URL is based on HTTPS, OSM will check by default the authenticity of your VIM using the appropriate public certificate. The recommended way to solve this is by modifying /etc/osm/docker/docker-compose.yaml in the host, sharing the host file (e.g. /home/ubuntu/cafile.crt) by adding a volume to the ro section as follows:&lt;br /&gt;
  ro:&lt;br /&gt;
    ...&lt;br /&gt;
    volumes:&lt;br /&gt;
      - /home/ubuntu/cafile.crt:/etc/osm/cafile.crt&lt;br /&gt;
Then, when creating the VIM, you should use the config option &amp;quot;ca_cert&amp;quot; as follows:&lt;br /&gt;
 $ # Create the VIM with all the usual options, and add the config option to specify the certificate&lt;br /&gt;
 $ osm vim-create VIM-NAME ... --config &#039;{ca_cert: /etc/osm/cafile.crt}&#039;&lt;br /&gt;
&lt;br /&gt;
For casual testing, when adding the VIM account to OSM, you can use &#039;insecure: True&#039; (without quotes) as part of the VIM config parameters:&lt;br /&gt;
 $ osm vim-create VIM-NAME ... --config &#039;{insecure: True}&#039;   &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Is the VIM management network reachable from OSM (e.g. via ssh, port 22)?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The simplest check would consist on deploying a VM attached to the management network and trying to access it via e.g. ssh from the OSM host.&lt;br /&gt;
&lt;br /&gt;
For instance, in the case of an OpenStack VIM you could try something like this:&lt;br /&gt;
 $ openstack server create --image ubuntu --flavor m1.small --nic mgmtnet test&lt;br /&gt;
&lt;br /&gt;
If this does not work, typically it is due to one of these issues:&lt;br /&gt;
* Security group policy in your VIM is blocking your traffic (contact your admin to fix it)&lt;br /&gt;
* IP address space in the management network is not routable from outside (or in the reverse direction, for the ACKs).&lt;br /&gt;
&lt;br /&gt;
==Operational issues==&lt;br /&gt;
&lt;br /&gt;
===Running out of disk space===&lt;br /&gt;
If you are upgrading frequently your OSM installation, you might face that your disk is running out of space. The reason is that the previous dockers and docker images might be consuming some disk space. Running the following two commands should be enough to clear your docker setup:&lt;br /&gt;
 docker system prune&lt;br /&gt;
 docker image prune&lt;br /&gt;
&lt;br /&gt;
If you are still experiencing issues with disk space, logs in one of the dockers could be the cause of your issue. Check the containers that are consuming more space (typically kafka-exporter) &lt;br /&gt;
 du -sk /var/lib/docker/containers/* |sort -n&lt;br /&gt;
 docker ps |grep &amp;lt;CONTAINER_ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, remove the stack and redeploy it again after doing a prune:&lt;br /&gt;
 docker stack rm osm_metrics&lt;br /&gt;
 docker system prune&lt;br /&gt;
 docker image prune&lt;br /&gt;
 docker stack deploy -c /etc/osm/docker/osm_metrics/docker-compose.yml osm_metrics&lt;br /&gt;
&lt;br /&gt;
===VCA (juju)===&lt;br /&gt;
====Status is not coherent with running NS====&lt;br /&gt;
&lt;br /&gt;
In extraordinary situations, the output of &amp;quot;juju status&amp;quot; could show pending units that should have been removed when deleting a NS. In those situations, you can clean up VCA by following the procedure below:&lt;br /&gt;
 juju status -m &amp;lt;NS_ID&amp;gt;&lt;br /&gt;
 juju remove-application -m &amp;lt;NS_ID&amp;gt; &amp;lt;application&amp;gt;&lt;br /&gt;
 juju resolved -m &amp;lt;NS_ID&amp;gt; &amp;lt;unit&amp;gt; --no-retry        # You&#039;ll likely have to run it several times, as it will probably have an error in the next queued hook.Once the last hook is marked resolved, the charm will continue its removal&lt;br /&gt;
&lt;br /&gt;
The following page also shows [https://docs.jujucharms.com/2.1/en/charms-destroy how to remove different Juju objects]&lt;br /&gt;
&lt;br /&gt;
====Dump Juju Logs ====&lt;br /&gt;
&lt;br /&gt;
To dump the Juju debug-logs, run this command:&lt;br /&gt;
 juju debug-log --replay --no-tail &amp;gt; juju-debug.log&lt;br /&gt;
 juju debug-log --replay --no-tail -m &amp;lt;NS_ID&amp;gt;&lt;br /&gt;
 juju debug-log --replay --no-tail -m &amp;lt;NS_ID&amp;gt; --include &amp;lt;UNIT&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manual recovery of Juju====&lt;br /&gt;
&lt;br /&gt;
If juju gets in a corrupt state and you cannot run `juju status` or contact the juju controller, you might need to remove manually the controller and register again, making OSM aware of the new controller.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Stop and delete all juju containers, then unregister the controller&lt;br /&gt;
lxc list&lt;br /&gt;
lxc stop juju-*          #replace &amp;quot;*&amp;quot; by the right values&lt;br /&gt;
lxc delete juju-*        #replace &amp;quot;*&amp;quot; by the right values&lt;br /&gt;
juju unregister -y osm&lt;br /&gt;
&lt;br /&gt;
# Create the controller again &lt;br /&gt;
sg lxd -c &amp;quot;juju bootstrap --bootstrap-series=xenial localhost osm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Get controller IP and update it in relevant OSM env files&lt;br /&gt;
controller_ip=$(juju show-controller osm|grep api-endpoints|awk -F\&#039; &#039;{print $2}&#039;|awk -F\: &#039;{print $1}&#039;)&lt;br /&gt;
sudo sed -i &#039;s/^OSMMON_VCA_HOST.*$/OSMMON_VCA_HOST=&#039;$controller_ip&#039;/&#039; /etc/osm/docker/mon.env&lt;br /&gt;
sudo sed -i &#039;s/^OSMLCM_VCA_HOST.*$/OSMLCM_VCA_HOST=&#039;$controller_ip&#039;/&#039; /etc/osm/docker/lcm.env&lt;br /&gt;
 &lt;br /&gt;
#Get juju password and feed it to OSM env files&lt;br /&gt;
function parse_juju_password {&lt;br /&gt;
   password_file=&amp;quot;${HOME}/.local/share/juju/accounts.yaml&amp;quot;&lt;br /&gt;
   local controller_name=$1&lt;br /&gt;
   local s=&#039;[[:space:]]*&#039; w=&#039;[a-zA-Z0-9_-]*&#039; fs=$(echo @|tr @ &#039;\034&#039;)&lt;br /&gt;
   sed -ne &amp;quot;s|^\($s\):|\1|&amp;quot; \&lt;br /&gt;
        -e &amp;quot;s|^\($s\)\($w\)$s:$s[\&amp;quot;&#039;]\(.*\)[\&amp;quot;&#039;]$s\$|\1$fs\2$fs\3|p&amp;quot; \&lt;br /&gt;
        -e &amp;quot;s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p&amp;quot; $password_file |&lt;br /&gt;
   awk -F$fs -v controller=$controller_name &#039;{&lt;br /&gt;
      indent = length($1)/2;&lt;br /&gt;
      vname[indent] = $2;&lt;br /&gt;
      for (i in vname) {if (i &amp;gt; indent) {delete vname[i]}}&lt;br /&gt;
      if (length($3) &amp;gt; 0) {&lt;br /&gt;
         vn=&amp;quot;&amp;quot;; for (i=0; i&amp;lt;indent; i++) {vn=(vn)(vname[i])(&amp;quot;_&amp;quot;)}&lt;br /&gt;
         if (match(vn,controller) &amp;amp;&amp;amp; match($2,&amp;quot;password&amp;quot;)) {&lt;br /&gt;
             printf(&amp;quot;%s&amp;quot;,$3);&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
   }&#039;&lt;br /&gt;
}&lt;br /&gt;
juju_password=$(parse_juju_password osm)&lt;br /&gt;
sudo sed -i &#039;s/^OSMMON_VCA_SECRET.*$/OSMMON_VCA_SECRET=&#039;$juju_password&#039;/&#039; /etc/osm/docker/mon.env&lt;br /&gt;
sudo sed -i &#039;s/^OSMLCM_VCA_SECRET.*$/OSMLCM_VCA_SECRET=&#039;$juju_password&#039;/&#039; /etc/osm/docker/lcm.env&lt;br /&gt;
&lt;br /&gt;
juju_pubkey=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)&lt;br /&gt;
sudo sed -i &#039;s/^OSMLCM_VCA_PUBKEY.*$/OSMLCM_VCA_PUBKEY=&#039;$juju_pubkey&#039;/&#039; /etc/osm/docker/mon.env&lt;br /&gt;
sudo sed -i &#039;s/^OSMLCM_VCA_PUBKEY.*$/OSMLCM_VCA_PUBKEY=&#039;$juju_pubkey&#039;/&#039; /etc/osm/docker/lcm.env&lt;br /&gt;
&lt;br /&gt;
#Restart OSM stack&lt;br /&gt;
docker stack rm osm&lt;br /&gt;
docker stack deploy -c /etc/osm/docker/docker-compose.yaml osm&lt;br /&gt;
&lt;br /&gt;
#Reset iptable rules&lt;br /&gt;
#Delete all rules listed with this command:&lt;br /&gt;
sudo iptables -t nat -L | grep 17070&lt;br /&gt;
sudo iptables -t nat -A PREROUTING -p tcp -m tcp -d &amp;lt;source&amp;gt; --dport 17070 -j DNAT --to-destination &amp;lt;destination&amp;gt;&lt;br /&gt;
#Create new iptable rule&lt;br /&gt;
OSM_VCA_HOST=`sg lxd -c &amp;quot;juju show-controller osm&amp;quot;|grep api-endpoints|awk -F\&#039; &#039;{print $2}&#039;|awk -F\: &#039;{print $1}&#039;`&lt;br /&gt;
DEFAULT_IF=`route -n |awk &#039;$1~/^0.0.0.0/ {print $8}&#039;`&lt;br /&gt;
DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk &#039;{split($4,a,&amp;quot;/&amp;quot;); print a[1]}&#039;`&lt;br /&gt;
sudo iptables -t nat -A PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Slow deployment of charms====&lt;br /&gt;
&lt;br /&gt;
You can make deplyment of charms quicker by:&lt;br /&gt;
* Upgrading your LXD installation to use ZFS: [[LXD configuration for OSM Release FIVE]]&lt;br /&gt;
** After LXD re-installation, you might need to reinstall the juju controller: [[Common_issues_and_troubleshooting#Manual_recovery_of_Juju|Reinstall Juju controller]]&lt;br /&gt;
* Preventing Juju from running apt-get update &amp;amp;&amp;amp; apt-get upgrade when starting a machine: [[Advanced_Charm_Development#Disable_OS_upgrades|Disable OS upgrades in charms]]&lt;br /&gt;
* Building periodically a custom image that will be used as base image for all the charms: [[Advanced_Charm_Development#Build_a_custom_cloud_image|Custom base image for charms]]&lt;br /&gt;
&lt;br /&gt;
===Instantiation Errors===&lt;br /&gt;
====File juju_id_rsa.pub not found====&lt;br /&gt;
* &#039;&#039;&#039;ERROR&#039;&#039;&#039;: ERROR creating VCA model name &#039;xxxx&#039;: Traceback (most recent call last): File &amp;quot;/usr/lib/python3/dist-packages/osm_lcm/ns.py&amp;quot;, line 822, in instantiate await     ...     [Errno 2] No such file or directory: &#039;/root/.local/share/juju/ssh/juju_id_rsa.pub&#039;&lt;br /&gt;
* &#039;&#039;&#039;CAUSE&#039;&#039;&#039;: Normally a migration from release FIVE do not set properly the env for LCM&lt;br /&gt;
* &#039;&#039;&#039;SOLUTION&#039;&#039;&#039;: Ensure variable &#039;&#039;&#039;OSMLCM_VCA_PUBKEY&#039;&#039;&#039; is properly set at file &#039;&#039;/etc/osm/docker/lcm.env&#039;&#039;. The value must mutch with the output of this command &#039;&#039;cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub&#039;&#039;. If not, add or change it. Restart OSM, or just LCM service with &#039;&#039;docker service update osm_lcm --force --env-add OSMLCM_VCA_PUBKEY=&amp;quot;&amp;lt;value&amp;gt;&amp;quot; &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===NBI Errors===&lt;br /&gt;
====Cannot login after migration to 6.0.2====&lt;br /&gt;
* &#039;&#039;&#039;ERROR&#039;&#039;&#039;: NBI always return &amp;quot;UNAUTHORIZED&amp;quot; Cannot login neither with UI nor with CLI. CLI shows error &amp;quot;can&#039;t find a default project for this user&amp;quot; or &amp;quot;project admin not allowed for this user&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;CAUSE&#039;&#039;&#039;: Normally after a migration to release 6.0.2 There is a slight incompatibility with users creared from older versions&lt;br /&gt;
* &#039;&#039;&#039;SOLUTION&#039;&#039;&#039;: Delete user admin and reboot NBI so that a new compatible user is created by running these commands:&lt;br /&gt;
 curl --insecure https://localhost:9999/osm/test/db-clear/users&lt;br /&gt;
 docker service update  osm_nbi --force&lt;br /&gt;
&lt;br /&gt;
==Checking the logs==&lt;br /&gt;
&lt;br /&gt;
You can check the logs of any container with the following commands:&lt;br /&gt;
&lt;br /&gt;
 docker logs $(docker ps -aqf &amp;quot;name=osm_mon&amp;quot; -n 1)&lt;br /&gt;
 docker logs $(docker ps -aqf &amp;quot;name=osm_pol&amp;quot; -n 1)&lt;br /&gt;
 docker logs $(docker ps -aqf &amp;quot;name=osm_lcm&amp;quot; -n 1)&lt;br /&gt;
 docker logs $(docker ps -aqf &amp;quot;name=osm_nbi&amp;quot; -n 1)&lt;br /&gt;
 docker logs $(docker ps -aqf &amp;quot;name=osm_light-ui&amp;quot; -n 1)&lt;br /&gt;
 docker logs $(docker ps -aqf &amp;quot;name=osm_ro.1&amp;quot; -n 1)&lt;br /&gt;
 docker logs $(docker ps -aqf &amp;quot;name=osm_ro-db&amp;quot; -n 1)&lt;br /&gt;
 docker logs $(docker ps -aqf &amp;quot;name=osm_mongo&amp;quot; -n 1)&lt;br /&gt;
 docker logs $(docker ps -aqf &amp;quot;name=osm_kafka&amp;quot; -n 1)&lt;br /&gt;
 docker logs $(docker ps -aqf &amp;quot;name=osm_zookeeper&amp;quot; -n 1)&lt;br /&gt;
 docker logs $(docker ps -aqf &amp;quot;name=osm_keystone.1&amp;quot; -n 1)&lt;br /&gt;
 docker logs $(docker ps -aqf &amp;quot;name=osm_keystone-db&amp;quot; -n 1)&lt;br /&gt;
 docker logs $(docker ps -aqf &amp;quot;name=osm_prometheus&amp;quot; -n 1)&lt;br /&gt;
&lt;br /&gt;
For each container, logs can be found under:&lt;br /&gt;
 /var/lib/docker/containers/DOCKER_ID/DOCKER_ID-json.log&lt;br /&gt;
&lt;br /&gt;
And the DOCKER_ID can be obtained this way, e.g. for MON&lt;br /&gt;
 docker ps -aqf &amp;quot;name=osm_mon&amp;quot; -n 1 --no-trunc&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=How_to_know_the_version_of_your_current_OSM_installation&amp;diff=6104</id>
		<title>How to know the version of your current OSM installation</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=How_to_know_the_version_of_your_current_OSM_installation&amp;diff=6104"/>
		<updated>2021-02-17T17:18:57Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
Since Release FOUR, in order to know the version that you have installed you only need to search the osm-devops package installed in your system, since osm-devops is the package used to drive installations:&lt;br /&gt;
 dpkg -l osm-devops&lt;br /&gt;
 &lt;br /&gt;
 ||/ Name                     Version            Architecture          Description&lt;br /&gt;
 +++-======================-=================-=====================-=====================================&lt;br /&gt;
 ii  osm-devops             4.0.1-1            all&lt;br /&gt;
&lt;br /&gt;
In case you only installed separate stacks (e.g. elk_stack, pm_stack, etc.), you could end with a newer version of the osm-devops package. Then you can search the python-osmclient package as a way to know your current version of OSM:&lt;br /&gt;
 ||/ Name                     Version            Architecture          Description&lt;br /&gt;
 +++-======================-=================-=====================-=====================================&lt;br /&gt;
 ii  python-osmclient       4.0.1-1            all&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_URN_Namespace&amp;diff=6103</id>
		<title>OSM URN Namespace</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_URN_Namespace&amp;diff=6103"/>
		<updated>2021-02-17T17:18:46Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
OSM is maintaining a namespace registry as a sub tree of the ETSI root &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;urn:etsi&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; namespace. A description of the top level ETSI URN namespace can be found on the  [https://portal.etsi.org/PNNS/GenericAllocation/ETSIURNNamespace.aspx ETSI PNNS page]&lt;br /&gt;
&lt;br /&gt;
The OSM URN namespace has the following structure:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;urn:etsi:osm&amp;lt;/nowiki&amp;gt;:&amp;lt;OSM sub-tree&amp;gt;&lt;br /&gt;
The following sections describe the basic structure of the sub-tree and how a entry in the registry can be requested.&lt;br /&gt;
&lt;br /&gt;
=== OSM sub-tree ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!OSM sub-tree&lt;br /&gt;
!Full Namespace&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|yang&lt;br /&gt;
|&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;urn:etsi:osm:yang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|Namespace for YANG modules specified in OSM.&lt;br /&gt;
[https://osm.etsi.org/gitweb/?p=osm/IM.git;a=tree;f=models/yang OSM/IM.git]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Type definitions ====&lt;br /&gt;
 string = (ALPHA)0*(ALPHANUMERIC/-/_)&lt;br /&gt;
 # a string starts with an upper- or lower-case letter followed by zero or more upper- or lower-case letters, integer numbers, hyphens or underscores&lt;br /&gt;
 &lt;br /&gt;
 ALPHA = {a-zA-Z}&lt;br /&gt;
 ALPHANUMERIC = {a-zA-Z0-9}&lt;br /&gt;
&lt;br /&gt;
=== Requesting a entry ===&lt;br /&gt;
The procedure to request an entry is described as follows.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Step #1:&#039;&#039; Send an e-mail to the [mailto:OSM_TSC@list.etsi.org OSM_TSC@list.etsi.org] mailing list indicating the name of the sub-tree, the contact person and the purpose of that subtree.&lt;br /&gt;
* &#039;&#039;Step #2:&#039;&#039; The TSC will review the proposal.&lt;br /&gt;
** If the application is accepted, a new entry in the &amp;quot;OSM URN Namespace&amp;quot; will be enabled.&lt;br /&gt;
** If the application cannot be accepted, it will be communicated to the contact person together with any additional information to be considered for resolving the &amp;quot;non-acceptance&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_Technical_Videos&amp;diff=6102</id>
		<title>OSM Technical Videos</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_Technical_Videos&amp;diff=6102"/>
		<updated>2021-02-17T17:18:33Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
Below a list of interesting technical videos and demos related to OSM.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Additional presentations and videos can be found in the [[OSM workshops and events|OSM workshops and events wiki page]] &#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
== OSM installation ==&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=yBWSKwms47E&lt;br /&gt;
|alignment=inline&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== OSM Release THREE ==&lt;br /&gt;
&lt;br /&gt;
=== OSM VIM emulator ===&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=Iji6FFIKL0w&lt;br /&gt;
|alignment=inline&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== OSM Release TWO technical videos and demos ==&lt;br /&gt;
&lt;br /&gt;
=== SDN assist for underlay connectivity with EPA ===&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=rORcicylr6Q&lt;br /&gt;
|alignment=inline&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== MWC 16 (February 2016) ==&lt;br /&gt;
&lt;br /&gt;
=== MWC16 demo ===&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=JJlxwJStkTk&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MWC16 demo infrastructure and interaction of OSM components ===&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=yyo26w8HSn8&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Feedback}}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=VIM_emulator&amp;diff=6101</id>
		<title>VIM emulator</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=VIM_emulator&amp;diff=6101"/>
		<updated>2021-02-17T17:17:37Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
= Vim-emu: A NFV multi-PoP emulation platform =&lt;br /&gt;
&lt;br /&gt;
This emulation platform was created to support network service developers to locally prototype and test their network services in realistic end-to-end multi-PoP scenarios. It allows the execution of real network functions, packaged as Docker containers, in emulated network topologies running locally on the developer&#039;s machine. The emulation platform also offers OpenStack-like APIs for each emulated PoP so that it can integrate with MANO solutions, like OSM. The core of the emulation platform is based on [https://containernet.github.io Containernet].&lt;br /&gt;
&lt;br /&gt;
This software was originally developed by the [http://www.sonata-nfv.eu SONATA project] and the [https://5gtango.eu/ 5GTANGO project], funded by the European Commission under grant number 671517 and 761493 through the Horizon 2020 and 5G-PPP programs.&lt;br /&gt;
&lt;br /&gt;
== Cite this work ==&lt;br /&gt;
&lt;br /&gt;
If you plan to use this emulation platform for academic publications, please cite the following paper:&lt;br /&gt;
&lt;br /&gt;
* M. Peuster, H. Karl, and S. v. Rossem: [http://ieeexplore.ieee.org/document/7919490/ &#039;&#039;&#039;MeDICINE: Rapid Prototyping of Production-Ready Network Services in Multi-PoP Environments&#039;&#039;&#039;]. IEEE Conference on Network Function Virtualization and Software Defined Networks (NFV-SDN), Palo Alto, CA, USA, pp. 148-153. doi: 10.1109/NFV-SDN.2016.7919490. (2016)&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
The following figure shows the scope of the emulator solution and its mapping to a simplified ETSI NFV reference architecture in which it replaces the network function virtualisation infrastructure (NFVI) and the virtualised infrastructure manager (VIM). The design of vim-emu is based on a tool called Containernet which extends the well-known Mininet emulation framework and allows us to use standard Docker containers as VNFs within the emulated network. It also allows adding and removing containers from the emulated network at runtime which is not possible in Mininet. This concept allows us to use the emulator like a cloud infrastructure in which we can start and stop compute resources (in the form of Docker containers) at any point in time.&lt;br /&gt;
&lt;br /&gt;
[[File:Vim-emu-etsi-mapping.png|300px]]&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
The vim-emu system design follows a highly customizable approach that offers plugin interfaces for most of its components, like cloud API endpoints, container resource limitation models, or topology generators.&lt;br /&gt;
&lt;br /&gt;
In contrast to classical Mininet topologies, vim-emu topologies do not describe single network hosts connected to the emulated network. Instead, they define available PoPs which are logical cloud data centers in which compute resources can be started at emulation time. In the most simplified version, the internal network of each PoP is represented by a single SDN switch to which compute resources can be connected. This can be done as the focus is on emulating multi-PoP environments in which a MANO system has full control over the placement of VNFs on different PoPs but limited insights about PoP internals. We extended Mininet&#039;s Python-based topology API with methods to describe and add PoPs. The use of a Python-based API has the benefit that developers can use scripts to define or algorithmically generate topologies.&lt;br /&gt;
&lt;br /&gt;
Besides an API to define emulation topologies, an API to start and stop compute resources within the emulated PoPs is available. Von-emu uses the concept of flexible cloud API endpoints. A cloud API endpoint is an interface to one or multiple PoPs that provides typical infrastructure-as-a-service (IaaS) semantics to manage compute resources. Such an endpoint can be an OpenStack Nova or HEAT like interface, or a simplified REST interface for the emulator CLI. These endpoints can be easily implemented by writing small, Python-based modules that translate incoming requests (e.g., an OpenStack Nova start compute) to emulator specific requests (e.g., start Docker container in PoP1).&lt;br /&gt;
&lt;br /&gt;
As illustrated in the following figure, our platform automatically starts OpenStack-like control interfaces for each of the emulated PoPs which allow MANO systems to start, stop and manage VNFs. Specifically, our system provides the core functionalities of OpenStack&#039;s Nova, Heat, Keystone, Glance, and Neutron APIs. Even though not all of these APIs are directly required to manage VNFs, all of them are needed to let the MANO systems believe that each emulated PoP in our platform is a real OpenStack deployment.&lt;br /&gt;
From the perspective of the MANO systems, this setup looks like a real-world multi-VIM deployment, i.e., the MANO system&#039;s southbound interfaces can connect to the OpenStack-like VIM interfaces of each emulated PoP. A demonstration of this setup was presented at [http://ieeexplore.ieee.org/abstract/document/8004250/ IEEE NetSoft 2017].&lt;br /&gt;
&lt;br /&gt;
[[File:Vim-emu-setup.png|400px]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Example: OSM using vim-emu ==&lt;br /&gt;
&lt;br /&gt;
This section gives an end-to-end usage example that shows how to connect OSM  to a vim-emu instance and how to on-board and instantiate an example network service with two VNFs on the emulated infrastructure. All given paths are relative to the vim-emu repository root. The same example is also available for the classic build of OSM: [[VIM_emulator_classic_build_walkthrough|vim-emu classic build walkthrough]].&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=Iji6FFIKL0w&lt;br /&gt;
|alignment=center&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Example service: &#039;&#039;pingpong&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
==== Source descriptors ====&lt;br /&gt;
&lt;br /&gt;
* Ping VNF (default ubuntu:trusty Docker container): &amp;lt;code&amp;gt;vim-emu/examples/vnfs/ping_vnf/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Pong VNF (default ubuntu:trusty Docker container): &amp;lt;code&amp;gt;vim-emu/examples/vnfs/pong_vnf/&amp;lt;/code&amp;gt;&lt;br /&gt;
* Network service descriptor (NSD): &amp;lt;code&amp;gt;vim-emu/examples/services/pingpong_ns/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pre-packed VNF and NS packages ====&lt;br /&gt;
&lt;br /&gt;
* Ping VNF: &amp;lt;code&amp;gt;vim-emu/examples/vnfs/ping.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
* Pong VNF: &amp;lt;code&amp;gt;vim-emu/examples/vnfs/pong.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
* NSD: &amp;lt;code&amp;gt;vim-emu/examples/services/pingpong_nsd.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Walkthrough ===&lt;br /&gt;
&lt;br /&gt;
==== Step 0: Make sure Open vSwitch is installed ====&lt;br /&gt;
&lt;br /&gt;
Open vSwitch must be installed on the host on which you want to install OSM and vim-emu.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install openvswitch-switch&lt;br /&gt;
&lt;br /&gt;
==== Step 1: Install OSM and vim-emu ====&lt;br /&gt;
&lt;br /&gt;
Install OSM  together with the emulator.&lt;br /&gt;
&lt;br /&gt;
  $ ./install_osm.sh --vimemu&lt;br /&gt;
&lt;br /&gt;
===== Step 1.1: Start the emulator =====&lt;br /&gt;
Check if the emulator is running:&lt;br /&gt;
&lt;br /&gt;
 $ docker ps | grep vim-emu&lt;br /&gt;
&lt;br /&gt;
If not, start it with the following command:&lt;br /&gt;
&lt;br /&gt;
 $ docker run --name vim-emu -t -d --rm --privileged --pid=&#039;host&#039; --network=netosm -v /var/run/docker.sock:/var/run/docker.sock vim-emu-img python3 examples/osm_default_daemon_topology_2_pop.py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Step 1.2: Configure environment =====&lt;br /&gt;
&lt;br /&gt;
You need to set the correct environment variables, i.e., you need to get the IP address of the vim-emu container to be able to add it as a VIM to your OSM installation:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 $ export VIMEMU_HOSTNAME=$(sudo docker inspect -f &#039;{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}&#039; vim-emu)&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Step 2: Attach OSM to vim-emu ====&lt;br /&gt;
  &lt;br /&gt;
  # connect OSM to emulated VIM&lt;br /&gt;
  $ osm vim-create --name emu-vim1 --user username --password password --auth_url http://$VIMEMU_HOSTNAME:6001/v2.0 --tenant tenantName --account_type openstack&lt;br /&gt;
  &lt;br /&gt;
  # list vims&lt;br /&gt;
  $ osm vim-list&lt;br /&gt;
  +----------+--------------------------------------+&lt;br /&gt;
  | vim name | uuid                                 |&lt;br /&gt;
  +----------+--------------------------------------+&lt;br /&gt;
  | emu-vim1 | a8175948-efcf-11e7-94ad-00163eba993f |&lt;br /&gt;
  +----------+--------------------------------------+&lt;br /&gt;
&lt;br /&gt;
==== Step 3: On-board example &#039;&#039;pingpong&#039;&#039; service ====&lt;br /&gt;
&lt;br /&gt;
The example can be found in the vim-emu git repository: https://osm.etsi.org/gitweb/?p=osm/vim-emu.git;a=summary.&lt;br /&gt;
&lt;br /&gt;
  # Clone the vim-emu repository containing the pingpong example&lt;br /&gt;
  $ git clone https://osm.etsi.org/gerrit/osm/vim-emu.git&lt;br /&gt;
&lt;br /&gt;
  # VNFs&lt;br /&gt;
  $ osm vnfd-create vim-emu/examples/vnfs/ping.tar.gz&lt;br /&gt;
  $ osm vnfd-create vim-emu/examples/vnfs/pong.tar.gz&lt;br /&gt;
  &lt;br /&gt;
  # NS&lt;br /&gt;
  $ osm nsd-create vim-emu/examples/services/pingpong_nsd.tar.gz&lt;br /&gt;
  &lt;br /&gt;
  # You can now check OSM&#039;s GUI to see the VNFs and NS in the catalog. Or:&lt;br /&gt;
  $ osm vnfd-list&lt;br /&gt;
 +-----------+--------------------------------------+&lt;br /&gt;
 | vnfd name | id                                   |&lt;br /&gt;
 +-----------+--------------------------------------+&lt;br /&gt;
 | ping      | 2c632bc7-15f6-4997-a581-b9032ea4672c |&lt;br /&gt;
 | pong      | e6fe076d-9d1f-4f05-a641-44b3e09df961 |&lt;br /&gt;
 +-----------+--------------------------------------+&lt;br /&gt;
  &lt;br /&gt;
  $ osm nsd-list&lt;br /&gt;
 +----------+--------------------------------------+&lt;br /&gt;
 | nsd name | id                                   |&lt;br /&gt;
 +----------+--------------------------------------+&lt;br /&gt;
 | pingpong | 776746fe-7c48-4f0c-8509-67da1f8c0678 |&lt;br /&gt;
 +----------+--------------------------------------+&lt;br /&gt;
&lt;br /&gt;
==== Step 4: Instantiate example &#039;&#039;pingpong&#039;&#039; service ====&lt;br /&gt;
&lt;br /&gt;
  $ osm ns-create --nsd_name pingpong --ns_name test --vim_account emu-vim1&lt;br /&gt;
&lt;br /&gt;
==== Step 5: Check service instance ====&lt;br /&gt;
&lt;br /&gt;
  # using OSM client&lt;br /&gt;
  &lt;br /&gt;
  $ osm ns-list&lt;br /&gt;
 +------------------+--------------------------------------+--------------------+---------------+-----------------+&lt;br /&gt;
 | ns instance name | id                                   | operational status | config status | detailed status |&lt;br /&gt;
 +------------------+--------------------------------------+--------------------+---------------+-----------------+&lt;br /&gt;
 | test             | 566e6c36-5f42-4f3d-89c7-dadcca01ae0d | running            | configured    | done            |&lt;br /&gt;
 +------------------+--------------------------------------+--------------------+---------------+-----------------+&lt;br /&gt;
&lt;br /&gt;
==== Step 6: Interact with deployed VNFs ====&lt;br /&gt;
&lt;br /&gt;
  # connect to ping VNF container &#039;&#039;&#039;(in another terminal window)&#039;&#039;&#039;:&lt;br /&gt;
  $ sudo docker exec -it mn.dc1_test-1-ubuntu-1 /bin/bash&lt;br /&gt;
&lt;br /&gt;
  # show network config&lt;br /&gt;
  root@dc1_test-nsi:/# ifconfig&lt;br /&gt;
  eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:03&lt;br /&gt;
            inet addr:172.17.0.3  Bcast:0.0.0.0  Mask:255.255.0.0&lt;br /&gt;
            UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
            RX packets:8 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
            TX packets:0 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
            collisions:0 txqueuelen:0&lt;br /&gt;
            RX bytes:648 (648.0 B)  TX bytes:0 (0.0 B)&lt;br /&gt;
  &lt;br /&gt;
  ping0-0   Link encap:Ethernet  HWaddr 4a:57:93:a0:d4:9d&lt;br /&gt;
            inet addr:192.168.100.3  Bcast:192.168.100.255  Mask:255.255.255.0&lt;br /&gt;
            UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
            RX packets:0 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
            TX packets:0 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
            collisions:0 txqueuelen:1000&lt;br /&gt;
            RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)&lt;br /&gt;
            &lt;br /&gt;
  # ping the pong VNF over the attached management network&lt;br /&gt;
  root@dc1_test-1-ubuntu-1:/# ping 192.168.100.4&lt;br /&gt;
  PING 192.168.100.4 (192.168.100.4) 56(84) bytes of data.&lt;br /&gt;
  64 bytes from 192.168.100.4: icmp_seq=1 ttl=64 time=0.596 ms&lt;br /&gt;
  64 bytes from 192.168.100.4: icmp_seq=2 ttl=64 time=0.070 ms&lt;br /&gt;
  --- 192.168.100.4 ping statistics ---&lt;br /&gt;
  2 packets transmitted, 2 received, 0% packet loss, time 999ms&lt;br /&gt;
  rtt min/avg/max/mdev = 0.048/0.059/0.070/0.011 ms&lt;br /&gt;
&lt;br /&gt;
==== Step 7: Shut down ====&lt;br /&gt;
&lt;br /&gt;
  # delete service instance&lt;br /&gt;
  $ osm ns-delete test&lt;br /&gt;
&lt;br /&gt;
==== (optional) Step 8: Check vim-emu and its status ====&lt;br /&gt;
  &lt;br /&gt;
  # connect to vim-emu Docker container to see its logs ( &#039;&#039;&#039;do in another terminal window&#039;&#039;&#039;)&lt;br /&gt;
  $ sudo docker logs -f vim-emu&lt;br /&gt;
  &lt;br /&gt;
  # check if the emulator is running in the container&lt;br /&gt;
  $ sudo docker exec vim-emu vim-emu datacenter list&lt;br /&gt;
  +---------+-----------------+----------+----------------+--------------------+&lt;br /&gt;
  | Label   | Internal Name   | Switch   |   # Containers |   # Metadata Items |&lt;br /&gt;
  +=========+=================+==========+================+====================+&lt;br /&gt;
  | dc2     | dc2             | dc2.s1   |              0 |                  0 |&lt;br /&gt;
  +---------+-----------------+----------+----------------+--------------------+&lt;br /&gt;
  | dc1     | dc1             | dc1.s1   |              0 |                  0 |&lt;br /&gt;
  +---------+-----------------+----------+----------------+--------------------+ &lt;br /&gt;
&lt;br /&gt;
  # check running service&lt;br /&gt;
  $ sudo docker exec vim-emu vim-emu compute list&lt;br /&gt;
  +--------------+----------------------------+---------------+------------------+-------------------------+&lt;br /&gt;
  | Datacenter   | Container                  | Image         | Interface list   | Datacenter interfaces   |&lt;br /&gt;
  +==============+============================+===============+==================+=========================+&lt;br /&gt;
  | dc1          | dc1_test.ping.1.ubuntu     | ubuntu:trusty | ping0-0          | dc1.s1-eth2             |&lt;br /&gt;
  +--------------+----------------------------+---------------+------------------+-------------------------+&lt;br /&gt;
  | dc1          | dc1_test.pong.2.ubuntu     | ubuntu:trusty | pong0-0          | dc1.s1-eth3             |&lt;br /&gt;
  +--------------+----------------------------+---------------+------------------+-------------------------+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Build &amp;amp; Installation ==&lt;br /&gt;
There are multiple ways to install and use the emulation platform. The easiest way is the automated installation using the OSM installer. The bare-metal installation requires a freshly installed Ubuntu 16.04 LTS and is done by an ansible playbook. Another option is to use a nested Docker environment to run the emulator inside a Docker container.&lt;br /&gt;
&lt;br /&gt;
=== Automated installation (with OSM) ===&lt;br /&gt;
&lt;br /&gt;
The following command will install OSM as well as the emulator (as a Docker container) on a local machine. It is recommended to use a machine with Ubuntu 18.04.&lt;br /&gt;
&lt;br /&gt;
 $ ./install_osm.sh --vimemu&lt;br /&gt;
&lt;br /&gt;
=== Manual installation (vim-emu only) ===&lt;br /&gt;
==== Option 1: Bare-metal installation ====&lt;br /&gt;
&lt;br /&gt;
* Requires: Ubuntu 18.04 LTS&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install ansible git aptitude&lt;br /&gt;
&lt;br /&gt;
===== Step 1: Containernet installation =====&lt;br /&gt;
&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ git clone https://github.com/containernet/containernet.git&lt;br /&gt;
 $ cd ~/containernet/ansible&lt;br /&gt;
 $ sudo ansible-playbook -i &amp;quot;localhost,&amp;quot; -c local install.yml&lt;br /&gt;
&lt;br /&gt;
===== Step 2: vim-emu installation =====&lt;br /&gt;
&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ git clone https://osm.etsi.org/gerrit/osm/vim-emu.git&lt;br /&gt;
 $ cd ~/vim-emu/ansible&lt;br /&gt;
 $ sudo ansible-playbook -i &amp;quot;localhost,&amp;quot; -c local install.yml&lt;br /&gt;
 $ cd ..&lt;br /&gt;
 $ sudo python3 setup.py develop &lt;br /&gt;
&lt;br /&gt;
==== Option 2: Nested Docker Deployment ====&lt;br /&gt;
This option requires a Docker installation on the host machine on which the emulator should be deployed.&lt;br /&gt;
&lt;br /&gt;
 $ git clone https://osm.etsi.org/gerrit/osm/vim-emu.git&lt;br /&gt;
 $ cd ~/vim-emu&lt;br /&gt;
&lt;br /&gt;
 # build the container: &lt;br /&gt;
 $ docker build -t vim-emu-img .&lt;br /&gt;
&lt;br /&gt;
 # run the (interactive) container:&lt;br /&gt;
 $ docker run --name vim-emu -it --rm --privileged --pid=&#039;host&#039; --network=netosm -v /var/run/docker.sock:/var/run/docker.sock vim-emu-img /bin/bash&lt;br /&gt;
 &lt;br /&gt;
 # alternative: run container with emulator in service mode&lt;br /&gt;
 $ docker run --name vim-emu -t -d --rm --privileged --pid=&#039;host&#039; --network=netosm -v /var/run/docker.sock:/var/run/docker.sock vim-emu-img python3 examples/osm_default_daemon_topology_2_pop.py&lt;br /&gt;
&lt;br /&gt;
== Additional information and links ==&lt;br /&gt;
&lt;br /&gt;
* Main publication: M. Peuster, H. Karl, and S. v. Rossem: [http://ieeexplore.ieee.org/document/7919490/ &#039;&#039;&#039;MeDICINE: Rapid Prototyping of Production-Ready Network Services in Multi-PoP Environments&#039;&#039;&#039;]. IEEE Conference on Network Function Virtualization and Software Defined Networks (NFV-SDN), Palo Alto, CA, USA, pp. 148-153. doi: 10.1109/NFV-SDN.2016.7919490. (2016)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/containernet/vim-emu Official vim-emu repository mirror on GitHub]&lt;br /&gt;
* [https://osm.etsi.org/wikipub/index.php/VIM_emulator Official vim-emu documentation in the OSM wiki]&lt;br /&gt;
* [https://github.com/containernet/vim-emu Full vim-emu documentation on GitHub]&lt;br /&gt;
* [http://mininet.org Mininet]&lt;br /&gt;
* [https://containernet.github.io Containernet]&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
&lt;br /&gt;
If you have questions, please use the OSM TECH mailing list: [mailto:OSM_TECH@LIST.ETSI.ORG OSM_TECH@LIST.ETSI.ORG].&lt;br /&gt;
&lt;br /&gt;
Manuel Peuster (vim-emu lead developer)&lt;br /&gt;
* Mail: &amp;lt;manuel (at) peuster (dot) de&amp;gt;&lt;br /&gt;
* Twitter: [https://twitter.com/ManuelPeuster @ManuelPeuster]&lt;br /&gt;
* GitHub: [https://github.com/mpeuster @mpeuster]&lt;br /&gt;
* Website: [https://peuster.de]&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_Fault_Management&amp;diff=6100</id>
		<title>OSM Fault Management</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_Fault_Management&amp;diff=6100"/>
		<updated>2021-02-17T17:17:08Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
This documentation corresponds now to Release FIVE, previous documentation related to Fault Management has been deprecated.&lt;br /&gt;
&lt;br /&gt;
==Basic functionality==&lt;br /&gt;
&lt;br /&gt;
=== Logs &amp;amp; Events ===&lt;br /&gt;
As of Release 5.0.0, logs can be monitored on a per-container basis via command line, like this:&lt;br /&gt;
&lt;br /&gt;
 docker logs &amp;lt;container id or name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 docker logs osm_lcm.1.tkb8yr6v762d28ird0edkunlv&lt;br /&gt;
&lt;br /&gt;
Logs can also be found in the corresponding volume of the host filesystem: &#039;&#039;&#039;/var/lib/containers/[container-id]/[container-id].json.log&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Furthermore, there are some important events flowing between components through the Kafka bus, which can be monitored on a per-topic basis by external tools.&lt;br /&gt;
&lt;br /&gt;
=== Alarm Manager for Metrics ===&lt;br /&gt;
As of Release FIVE, MON includes a new module called &#039;mon-evaluator&#039;.  The only use case supported today by this module is the configuration of alarms and evaluation of thresholds related to metrics, for the Policy Manager module (POL) to take actions such as [[OSM_Autoscaling|auto-scaling]]. &lt;br /&gt;
&lt;br /&gt;
Whenever a threshold is crossed and an alarm is triggered, the notification is generated by MON and put in the Kafka bus so other components can consume them.  This event is today logged by both MON (generates notification) and POL (consumes notification, for its auto-scaling action)&lt;br /&gt;
&lt;br /&gt;
By default, threshold evaluation occurs every 30 seconds.  This value can be changed by setting an environment variable, for example:&lt;br /&gt;
 docker service update --env-add OSMMON_EVALUATOR_INTERVAL=15 osm_mon&lt;br /&gt;
&lt;br /&gt;
Further information regarding how to configure alarms through VNFDs for the supported use case can be found at the [[OSM_Autoscaling|auto-scaling documentation]]&lt;br /&gt;
&lt;br /&gt;
Reference diagram:&lt;br /&gt;
&lt;br /&gt;
[[File:osm_fm_rel5.png|800px|Diagram of OSM FM and ELK Experimental add-ons]]&lt;br /&gt;
&lt;br /&gt;
==Experimental functionality==&lt;br /&gt;
As in the previous release, an optional &#039;OSM ELK&#039; stack is available to allow for events visualization, consisting of the following tools:&lt;br /&gt;
* Elastisearch - scalable search engine and event database.&lt;br /&gt;
* Filebeat &amp;amp; Metricbeat - part of Elastic &#039;beats&#039;, which evolve the former Logstash component to provide generic logs and metrics collection, respectively.&lt;br /&gt;
* Kibana - Graphical tool for exploring all the collected events and generating customized views and dashboards.&lt;br /&gt;
&lt;br /&gt;
=== Enabling the OSM ELK Stack ===&lt;br /&gt;
If you want to install OSM along with the ELK stack, run the installer as follows:&lt;br /&gt;
&lt;br /&gt;
 ./install_osm.sh --elk_stack&lt;br /&gt;
&lt;br /&gt;
If you just want to add the ELK stack to an existing OSM installation, run the installer as follows:&lt;br /&gt;
&lt;br /&gt;
  ./install_osm.sh -o elk_stack&lt;br /&gt;
&lt;br /&gt;
This will install four additional docker containers (Elasticsearch, Filebeat, Metricbeat and Kibana), as well as download a Docker image for an auxiliary tool named [https://www.elastic.co/guide/en/elasticsearch/client/curator/5.5/index.html Curator] (bobrik/curator)&lt;br /&gt;
&lt;br /&gt;
If you need to remove it at some point in time, just run the following command:&lt;br /&gt;
 &lt;br /&gt;
 docker stack rm osm_elk&lt;br /&gt;
&lt;br /&gt;
If you need to deploy the stack again after being removed:&lt;br /&gt;
 docker stack deploy -c /etc/osm/docker/osm_elk/docker-compose.yml osm_elk&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT&#039;&#039;&#039;: As time passes and more events are generated in your system, and depending on your configured searches, views and dashboards, Elasticsearch database which become very big, which may not be desirable in testing environments.&lt;br /&gt;
In order to delete your data periodically, you can launch a Curator container that will delete the saved indexes, freeing the associated disk space.&lt;br /&gt;
&lt;br /&gt;
For example, to delete all the data older than the last day:&lt;br /&gt;
 docker run --rm --name curator --net host --entrypoint curator_cli bobrik/curator:5.5.4 --host localhost delete_indices --filter_list &#039;[{&amp;quot;filtertype&amp;quot;:&amp;quot;age&amp;quot;,&amp;quot;source&amp;quot;:&amp;quot;creation_date&amp;quot;,&amp;quot;direction&amp;quot;:&amp;quot;older&amp;quot;,&amp;quot;unit&amp;quot;:&amp;quot;days&amp;quot;,&amp;quot;unit_count&amp;quot;:1}]&#039;&lt;br /&gt;
Or to delete the data older than 2 hours:&lt;br /&gt;
 docker run --rm --name curator --net host --entrypoint curator_cli bobrik/curator:5.5.4 --host localhost delete_indices --filter_list &#039;[{&amp;quot;filtertype&amp;quot;:&amp;quot;age&amp;quot;,&amp;quot;source&amp;quot;:&amp;quot;creation_date&amp;quot;,&amp;quot;direction&amp;quot;:&amp;quot;older&amp;quot;,&amp;quot;unit&amp;quot;:&amp;quot;hours&amp;quot;,&amp;quot;unit_count&amp;quot;:2}]&#039;&lt;br /&gt;
&lt;br /&gt;
=== Testing the OSM ELK Stack ===&lt;br /&gt;
&lt;br /&gt;
# Download the sample dashboards to your desktop from this link (right click, save link as): https://osm-download.etsi.org/ftp/osm-4.0-four/4th-hackfest/other/osm_kibana_dashboards.json&lt;br /&gt;
# Visit Kibana at http://[OSM_IP]:5601 and:&lt;br /&gt;
## Go to &amp;quot;Management&amp;quot; --&amp;gt; Saved Objects --&amp;gt; Import (select the downloaded file)&lt;br /&gt;
## Go to &amp;quot;Dashboard&amp;quot; and select the &amp;quot;OSM System Dashboard&amp;quot;, which connects to other three sub-dashboards (You may need to redefine &amp;quot;filebeat-*&amp;quot; as the default &#039;index-pattern&#039; by selecting it, marking the star and revisiting the Dashboards)&lt;br /&gt;
## Metrics (from Metricbeat) and logs (from Filebeat) should appear at the corresponding visualizations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:osm_kibana_dashboard.png|800px|OSM Kibana Sample Dashboard]]&lt;br /&gt;
&lt;br /&gt;
{{Feedback}}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_instantiation_parameters&amp;diff=6099</id>
		<title>OSM instantiation parameters</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_instantiation_parameters&amp;diff=6099"/>
		<updated>2021-02-17T17:16:55Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
When creating a NS instance, it is possible to pass instantiation parameters to OSM using the &amp;quot;--config&amp;quot; option of the client or the &amp;quot;config&amp;quot; parameter of the UI. In this section we will illustrate through some of the existing examples how to specify those parameters using OSM client:&lt;br /&gt;
&lt;br /&gt;
===Specify a VIM network name for a NS VLD===&lt;br /&gt;
In a generic way, the mapping can be specified in the following way, where &#039;vldnet&#039; is the name of the network in the NS descriptor and &#039;netVIM1&#039; is the VIM network that you want to use:&lt;br /&gt;
 --config &#039;{vld: [ {name: vldnet, vim-network-name: netVIM1} ] }&#039;&lt;br /&gt;
&lt;br /&gt;
You can try it using one of the examples of the hackfest (&#039;&#039;&#039;descriptors: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_1_vnfd.tar.gz hackfest1-vnf], [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_1_nsd.tar.gz hackfest1-ns]; images: [https://osm-download.etsi.org/ftp/osm-3.0-three/1st-hackfest/images/US1604.qcow2 ubuntu1604], presentation: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/presentations/20180626%20OSM%20Hackfest%20-%20Session%202%20-%20Creating%20a%20basic%20VNF%20and%20NS.pdf creating a basic VNF and NS]&#039;&#039;&#039;) in the following way:&lt;br /&gt;
&lt;br /&gt;
 osm ns-create --ns_name hf1 --nsd_name hackfest1-ns --vim_account openstack1 --config &#039;{vld: [ {name: mgmtnet, vim-network-name: mgmt} ] }&#039;&lt;br /&gt;
&lt;br /&gt;
===Specify a VIM network name for an internal VLD of a VNF===&lt;br /&gt;
In this scenario, the mapping can be specified in the following way, where &#039;1&#039; is the member vnf index of the constituent vnf in the NS descriptor, &#039;internal&#039; is the name of internal-vld in the VNF descriptor and  &#039;netVIM1&#039; is the VIM network that you want to use:&lt;br /&gt;
 --config &#039;{vnf: [ {member-vnf-index: &amp;quot;1&amp;quot;, internal-vld: [ {name: internal, vim-network-name: netVIM1} ] } ] }&#039;&lt;br /&gt;
&lt;br /&gt;
You can try it using one of the examples of the hackfest (&#039;&#039;&#039;descriptors: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_2_vnfd.tar.gz hackfest2-vnf], [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_2_nsd.tar.gz hackfest2-ns]; images:[https://osm-download.etsi.org/ftp/osm-3.0-three/1st-hackfest/images/US1604.qcow2 ubuntu1604], presentation: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/presentations/20180626%20OSM%20Hackfest%20-%20Session%203%20-%20Modeling%20multi-VDU%20VNF%20v2.pdf modeling multi-VDU VNF]&#039;&#039;&#039;) in the following way:&lt;br /&gt;
 osm ns-create --ns_name hf2 --nsd_name hackfest2-ns --vim_account openstack1  --config &#039;{vnf: [ {member-vnf-index: &amp;quot;1&amp;quot;, internal-vld: [ {name: internal, vim-network-name: mgmt} ] } ] }&#039;&lt;br /&gt;
&lt;br /&gt;
===Specify IP profile information and IP for a NS VLD===&lt;br /&gt;
In a generic way, the mapping can be specified in the following way, where &#039;datanet&#039; is the name of the network in the NS descriptor, ip-profile you have to fill the associated parameters with the data model ( [http://osm-download.etsi.org/ftp/osm-doc/nsd.html# NS data model] ), and vnfd-connection-point-ref is the reference to the connection point:&lt;br /&gt;
 --config &#039;{vld: [ {name: datanet, ip-profile: {...}, vnfd-connection-point-ref: {...} } ] }&#039;&lt;br /&gt;
&lt;br /&gt;
You can try it using one of the examples of the hackfest (&#039;&#039;&#039;descriptors: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_2_vnfd.tar.gz hackfest2-vnf], [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_2_nsd.tar.gz hackfest2-ns]; images:[https://osm-download.etsi.org/ftp/osm-3.0-three/1st-hackfest/images/US1604.qcow2 ubuntu1604], presentation: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/presentations/20180626%20OSM%20Hackfest%20-%20Session%203%20-%20Modeling%20multi-VDU%20VNF%20v2.pdf modeling multi-VDU VNF]&#039;&#039;&#039;) in the following way:&lt;br /&gt;
 osm ns-create --ns_name hf2 --nsd_name hackfest2-ns --vim_account openstack1 --config &#039;{vld: [ {name: datanet, ip-profile: {ip-version: ipv4 ,subnet-address: &amp;quot;192.168.100.0/24&amp;quot;, gateway-address: &amp;quot;0.0.0.0&amp;quot;, dns-server: [{address: &amp;quot;8.8.8.8&amp;quot;}],dhcp-params: {count: 100, start-address: &amp;quot;192.168.100.20&amp;quot;, enabled: true}}, vnfd-connection-point-ref: [ {member-vnf-index-ref: &amp;quot;1&amp;quot;, vnfd-connection-point-ref: vnf-data, ip-address: &amp;quot;192.168.100.17&amp;quot;}]}]}&#039;&lt;br /&gt;
&lt;br /&gt;
===Specify IP profile information for an internal VLD of a VNF===&lt;br /&gt;
In this scenario, the mapping can be specified in the following way, where &#039;1&#039; is the member vnf index of the constituent vnf in the NS descriptor, &#039;internal&#039; is the name of internal-vld in the VNF descriptor and ip-profile you have to fill the associated parameters with the data model ( [http://osm-download.etsi.org/ftp/osm-doc/vnfd.html VNF data model] ):&lt;br /&gt;
&lt;br /&gt;
 --config &#039;{vnf: [ {member-vnf-index: &amp;quot;1&amp;quot;, internal-vld: [ {name: internal, ip-profile: {...} ] } ] }&#039;&lt;br /&gt;
&lt;br /&gt;
You can try it using one of the examples of the hackfest (&#039;&#039;&#039;descriptors: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_2_vnfd.tar.gz hackfest2-vnf], [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_2_nsd.tar.gz hackfest2-ns]; images:[https://osm-download.etsi.org/ftp/osm-3.0-three/1st-hackfest/images/US1604.qcow2 ubuntu1604], presentation: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/presentations/20180626%20OSM%20Hackfest%20-%20Session%203%20-%20Modeling%20multi-VDU%20VNF%20v2.pdf modeling multi-VDU VNF]&#039;&#039;&#039;) in the following way:&lt;br /&gt;
&lt;br /&gt;
 osm ns-create --ns_name hf2 --nsd_name hackfest2-ns --vim_account openstack1 --config &#039;{vnf: [ {member-vnf-index: &amp;quot;1&amp;quot;, internal-vld: [ {name: internal, ip-profile:  {ip-version: ipv4 ,subnet-address: &amp;quot;192.168.100.0/24&amp;quot;, gateway-address: &amp;quot;0.0.0.0&amp;quot;, dns-server: [{address: &amp;quot;8.8.8.8&amp;quot;}] ,dhcp-params: {count: 100, start-address: &amp;quot;192.168.100.20&amp;quot;, enabled: true}}}]}]} &#039;&lt;br /&gt;
&lt;br /&gt;
===Specify IP address and/or MAC address for an interface===&lt;br /&gt;
&lt;br /&gt;
====Specify IP address for an interface====&lt;br /&gt;
In this scenario, the mapping can be specified in the following way, where &#039;1&#039; is the member vnf index of the constituent vnf in the NS descriptor, &#039;internal&#039; is the name of internal-vld in the VNF descriptor ,ip-profile you have to fill the associated parameters with the data model ( [http://osm-download.etsi.org/ftp/osm-doc/vnfd.html VNF data model] ), &#039;id1&#039; is the internal-connection-point id and &#039;a.b.c.d&#039; is the IP that you have to specify for this scenario:&lt;br /&gt;
&lt;br /&gt;
 --config &#039;{vnf: [ {member-vnf-index: &amp;quot;1&amp;quot;, internal-vld: [ {name: internal, ip-profile: {...}, internal-connection-point: [{id-ref: id1, ip-address: &amp;quot;a.b.c.d&amp;quot;}] ] } ] }&#039;&lt;br /&gt;
&lt;br /&gt;
You can try it using one of the examples of the hackfest (&#039;&#039;&#039;descriptors: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_2_vnfd.tar.gz hackfest2-vnf], [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_2_nsd.tar.gz hackfest2-ns]; images:[https://osm-download.etsi.org/ftp/osm-3.0-three/1st-hackfest/images/US1604.qcow2 ubuntu1604], presentation: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/presentations/20180626%20OSM%20Hackfest%20-%20Session%203%20-%20Modeling%20multi-VDU%20VNF%20v2.pdf modeling multi-VDU VNF]&#039;&#039;&#039;) in the following way:&lt;br /&gt;
  osm ns-create --ns_name hf2 --nsd_name hackfest2-ns --vim_account ost4 --config &#039;{vnf: [ {member-vnf-index: &amp;quot;1&amp;quot;, internal-vld: [ {name: internal, ip-profile: {ip-version: ipv4 ,subnet-address: &amp;quot;192.168.100.0/24&amp;quot;, gateway-address: &amp;quot;0.0.0.0&amp;quot;, dns-server: [{address: &amp;quot;8.8.8.8&amp;quot;}] ,dhcp-params: {count: 100, start-address: &amp;quot;192.168.100.20&amp;quot;, enabled: true}}, internal-connection-point: [{id-ref: mgmtVM-internal, ip-address: &amp;quot;192.168.100.3&amp;quot;}]}]}]}&#039;&lt;br /&gt;
&lt;br /&gt;
====Specify MAC address for an interface====&lt;br /&gt;
In this scenario, the mapping can be specified in the following way, where &#039;1&#039; is the member vnf index of the constituent vnf in the NS descriptor, &#039;id1&#039; is the id of VDU in the VNF descriptor and &#039;interf1&#039; is the name of the interface to which you want to add the MAC address:&lt;br /&gt;
 --config &#039;{vnf: [ {member-vnf-index: &amp;quot;1&amp;quot;, vdu: [ {id: id1, interface: [{name: interf1, mac-address: &amp;quot;aa:bb:cc:dd:ee:ff&amp;quot; }]} ] } ] } &#039;&lt;br /&gt;
You can try it using one of the examples of the hackfest (&#039;&#039;&#039;descriptors: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_1_vnfd.tar.gz hackfest1-vnf], [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_1_nsd.tar.gz hackfest1-ns]; images: [https://osm-download.etsi.org/ftp/osm-3.0-three/1st-hackfest/images/US1604.qcow2 ubuntu1604], presentation: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/presentations/20180626%20OSM%20Hackfest%20-%20Session%202%20-%20Creating%20a%20basic%20VNF%20and%20NS.pdf creating a basic VNF and NS]&#039;&#039;&#039;) in the following way:&lt;br /&gt;
 osm ns-create --ns_name hf12 --nsd_name hackfest1-ns --vim_account openstack1 --config &#039;{vnf: [ {member-vnf-index: &amp;quot;1&amp;quot;, vdu: [ {id: hackfest1VM, interface: [{name: vdu-eth0, mac-address: &amp;quot;52:33:44:55:66:21&amp;quot;}]} ] } ] } &#039;&lt;br /&gt;
&lt;br /&gt;
====Specify IP address and MAC address for an interface====&lt;br /&gt;
In the following scenario, we will bring together the two previous cases &lt;br /&gt;
&lt;br /&gt;
You can try it using one of the examples of the hackfest (&#039;&#039;&#039;descriptors: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_2_vnfd.tar.gz hackfest2-vnf], [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_2_nsd.tar.gz hackfest2-ns]; images:[https://osm-download.etsi.org/ftp/osm-3.0-three/1st-hackfest/images/US1604.qcow2 ubuntu1604], presentation: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/presentations/20180626%20OSM%20Hackfest%20-%20Session%203%20-%20Modeling%20multi-VDU%20VNF%20v2.pdf modeling multi-VDU VNF]&#039;&#039;&#039;) in the following way:&lt;br /&gt;
&lt;br /&gt;
 osm ns-create --ns_name hf12 --nsd_name hackfest2-ns --vim_account ost4 --config &#039;{vnf: [ {member-vnf-index: &amp;quot;1&amp;quot;, internal-vld: [ {name: internal , ip-profile: {ip-version: ipv4, subnet-address: &amp;quot;192.168.100.0/24&amp;quot;, gateway-address: &amp;quot;0.0.0.0&amp;quot;, dns-server: [{address: &amp;quot;8.8.8.8&amp;quot;}] , dhcp-params: {count: 100, start-address: &amp;quot;192.168.100.20&amp;quot;, enabled: true} }, internal-connection-point: [ {id-ref: mgmtVM-internal, ip-address: &amp;quot;192.168.100.3&amp;quot;} ] }, ], vdu: [ {id: mgmtVM, interface: [{name: mgmtVM-eth0, mac-address: &amp;quot;52:33:44:55:66:21&amp;quot;}]} ] } ] } &#039;&lt;br /&gt;
&lt;br /&gt;
===Force floating IP address for an interface===&lt;br /&gt;
In a generic way, the mapping can be specified in the following way, where &#039;id1&#039; is the name of the VDU in the VNF descriptor and &#039;interf1&#039; is the name of the interface:&lt;br /&gt;
 --config &#039;{vnf: [ {member-vnf-index: &amp;quot;1&amp;quot;, vdu: [ {id: id1, interface: [{name: interf1, floating-ip-required: True }]} ] } ] } &#039;&lt;br /&gt;
	&lt;br /&gt;
You can try it using one of the examples of the hackfest (&#039;&#039;&#039;descriptors: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_2_vnfd.tar.gz hackfest2-vnf], [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_2_nsd.tar.gz hackfest2-ns]; images:[https://osm-download.etsi.org/ftp/osm-3.0-three/1st-hackfest/images/US1604.qcow2 ubuntu1604], presentation: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/presentations/20180626%20OSM%20Hackfest%20-%20Session%203%20-%20Modeling%20multi-VDU%20VNF%20v2.pdf modeling multi-VDU VNF]&#039;&#039;&#039;) in the following way:&lt;br /&gt;
 osm ns-create --ns_name hf2 --nsd_name hackfest2-ns --vim_account openstack1 --config &#039;{vnf: [ {member-vnf-index: &amp;quot;1&amp;quot;, vdu:[ {id: mgmtVM, interface: [{name: mgmtVM-eth0, floating-ip-required: True }]} ] } ] } &#039;&lt;br /&gt;
&lt;br /&gt;
Make sure &#039;vim-network-name&#039; in NS Descriptor has access to the outside to be able to use the parameter &#039;floating-ip-required&#039;.&lt;br /&gt;
&lt;br /&gt;
===Multi-site deployments (specifying different VIM accounts for different VNFs)===&lt;br /&gt;
In this scenario, the mapping can be specified in the following way, where &#039;1 and 2&#039; are the member vnf index of the constituent vnfs in the NS descriptor, &#039;vim1 and vim2&#039; are the names of vim accounts and  &#039;netVIM1 and netVIM2&#039; are the VIM networks that you want to use:&lt;br /&gt;
&lt;br /&gt;
 --config &#039;{vnf: [ {member-vnf-index: &amp;quot;1&amp;quot;, vim_account: vim1}, {member-vnf-index: &amp;quot;2&amp;quot;, vim_account: vim2} ], vld: [ {name: datanet, vim-network-name: {vim1: netVIM1, vim2: netVIM2} } ] }&#039;&lt;br /&gt;
  # NOTE: From release SIX (current master) add &#039;wim_account: False&#039; (inside --config) to avoid wim network connectivity if you have not a WIM in your system&lt;br /&gt;
&lt;br /&gt;
You can try it using one of the examples of the hackfest (&#039;&#039;&#039;descriptors: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_2_vnfd.tar.gz hackfest2-vnf], [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_2_nsd.tar.gz hackfest2-ns]; images:[https://osm-download.etsi.org/ftp/osm-3.0-three/1st-hackfest/images/US1604.qcow2 ubuntu1604], presentation: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/presentations/20180626%20OSM%20Hackfest%20-%20Session%203%20-%20Modeling%20multi-VDU%20VNF%20v2.pdf modeling multi-VDU VNF]&#039;&#039;&#039;) in the following way:&lt;br /&gt;
 osm ns-create --ns_name hf12 --nsd_name hackfest2-ns --vim_account openstack1 --config &#039;{vnf: [ {member-vnf-index: &amp;quot;1&amp;quot;, vim_account: openstack1}, {member-vnf-index: &amp;quot;2&amp;quot;, vim_account: openstack3} ], vld: [ {name: mgmtnet, vim-network-name: {openstack1: mgmt, openstack3: mgmt} } ] }&#039; &lt;br /&gt;
&lt;br /&gt;
===Specifying a volume ID for a VNF volume===&lt;br /&gt;
 &lt;br /&gt;
In a generic way, the mapping can be specified in the following way, where &#039;VM1&#039; is the name of the VDU, &#039;Storage1&#039; is the volume name in VNF descriptor and &#039;05301095-d7ee-41dd-b520-e8ca08d18a55&#039; is the volume id:&lt;br /&gt;
&lt;br /&gt;
 --config &#039;{vnf: [ {member-vnf-index: &amp;quot;1&amp;quot;, vdu: [ {id: VM1, volume: [ {name: Storage1, vim-volume-id: 05301095-d7ee-41dd-b520-e8ca08d18a55} ] } ] } ] }&#039;&lt;br /&gt;
&lt;br /&gt;
You can try it using one of the examples of the hackfest (&#039;&#039;&#039;descriptors: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_1_vnfd.tar.gz hackfest1-vnf], [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_1_nsd.tar.gz hackfest1-ns]; images: [https://osm-download.etsi.org/ftp/osm-3.0-three/1st-hackfest/images/US1604.qcow2 ubuntu1604], presentation: [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/presentations/20180626%20OSM%20Hackfest%20-%20Session%202%20-%20Creating%20a%20basic%20VNF%20and%20NS.pdf creating a basic VNF and NS]&#039;&#039;&#039;) in the following way:&lt;br /&gt;
&lt;br /&gt;
With the previous hackfest example, according [http://osm-download.etsi.org/ftp/osm-doc/vnfd.html VNF data model] you will add in VNF Descriptor:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
     volumes:&lt;br /&gt;
      - name: Storage1&lt;br /&gt;
        size: &#039;Size of the volume&#039;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 osm ns-create --ns_name h1 --nsd_name hackfest1-ns --vim_account openstack1 --config &#039;{vnf: [ {member-vnf-index: &amp;quot;1&amp;quot;, vdu: [ {id: hackfest1VM, volume: [ {name: Storage1, vim-volume-id: 8ab156fd-0f8e-4e01-b434-a0fce63ce1cf} ] } ] } ] }&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Adding additonal parameters===&lt;br /&gt;
 &lt;br /&gt;
From release SIX (current master) additional user parameters can be added, and they land at vdu:cloud-init (Jinja2 format) and/or vnf-configuration primitives (enclosed by &amp;lt;&amp;gt;). Here is an example of VNF descriptor that uses two parameters called &amp;quot;touch_filename&amp;quot; and &amp;quot;touch_filename2&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vnfd:&lt;br /&gt;
    ...&lt;br /&gt;
    vnf-configuration:&lt;br /&gt;
        config-primitive:&lt;br /&gt;
        -   name: touch&lt;br /&gt;
            parameter:&lt;br /&gt;
            -   data-type: STRING&lt;br /&gt;
                default-value: &amp;lt;touch_filename2&amp;gt;&lt;br /&gt;
                name: filename&lt;br /&gt;
        initial-config-primitive:&lt;br /&gt;
        -   name: config&lt;br /&gt;
            parameter:&lt;br /&gt;
            -   name: ssh-hostname&lt;br /&gt;
                value: &amp;lt;rw_mgmt_ip&amp;gt;  # this paramater is internal&lt;br /&gt;
            -   name: ssh-username&lt;br /&gt;
                value: ubuntu&lt;br /&gt;
            -   name: ssh-password&lt;br /&gt;
                value: osm4u&lt;br /&gt;
            seq: &#039;1&#039;&lt;br /&gt;
        -   name: touch&lt;br /&gt;
            parameter:&lt;br /&gt;
            -   name: filename&lt;br /&gt;
                value: &amp;lt;touch_filename&amp;gt;&lt;br /&gt;
            seq: &#039;2&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And they can be provided with:&lt;br /&gt;
 --config &#039;{additionalParamsForVnf: [{member-vnf-index: &amp;quot;1&amp;quot;, additionalParams: {touch_filename: your-value,  touch_filename2: your-value2}}]}&#039;&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_client&amp;diff=6097</id>
		<title>OSM client</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_client&amp;diff=6097"/>
		<updated>2021-02-17T17:16:36Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MARKDOWN}}&lt;br /&gt;
&lt;br /&gt;
**THIS PAGE IS DEPRECATED**. OSM User Guide has been moved to a new location: **&amp;lt;https://osm.etsi.org/docs/user-guide/&amp;gt;**&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
In those cases where you have an OSM already installed in a remote server, you might still want to operate it from your local computer using the OSM client. The OSM client provides you a client library and a command-line tool to operate OSM..&lt;br /&gt;
&lt;br /&gt;
## Installation&lt;br /&gt;
&lt;br /&gt;
OSM client comes bundled with OSM installation, so if you successfully installed OSM, you already have it.&lt;br /&gt;
&lt;br /&gt;
In addition, you can also install it in a different computer. In order to install OSM client, you will need a Linux machine and follow this procedure.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
wget -qO - https://osm-download.etsi.org/repository/osm/debian/ReleaseSIX/OSM%20ETSI%20Release%20Key.gpg | sudo apt-key add -&lt;br /&gt;
sudo add-apt-repository -y &amp;quot;deb [arch=amd64] https://osm-download.etsi.org/repository/osm/debian/ReleaseSIX stable devops osmclient&amp;quot;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo -H pip install python-magic&lt;br /&gt;
sudo apt-get install python-osmclient&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Usage (client commands)&lt;br /&gt;
&lt;br /&gt;
Once installed, type “osm” to see a list of commands. If installed in a host different from where OSM is running, at minimum you will need to specify the OSM host, either via an environment variable or via the osm command line (see “osm --help” for info).&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
export OSM_HOSTNAME=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
**Usage:**&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
osm [OPTIONS] COMMAND [ARGS]...&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
**Options:**&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
  --hostname TEXT  hostname of server.  Also can set OSM_HOSTNAME in&lt;br /&gt;
                   environment&lt;br /&gt;
  --user TEXT      user (defaults to admin). Also can set OSM_USER in&lt;br /&gt;
                   environment&lt;br /&gt;
  --password TEXT  password (defaults to admin). Also can set OSM_PASSWORD in&lt;br /&gt;
                   environment&lt;br /&gt;
  --project TEXT   project (defaults to admin). Also can set OSM_PROJECT in&lt;br /&gt;
                   environment&lt;br /&gt;
  --help           Show this message and exit.&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
**Commands:**&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
  netslice-instance-create   creates a new Network Slice Instance&lt;br /&gt;
  netslice-instance-delete   deletes a Network Slice Instance (NSI)&lt;br /&gt;
  netslice-instance-list     list all Network Slice Instances (NSI)&lt;br /&gt;
  netslice-instance-op-list  shows the history of operations over a...&lt;br /&gt;
  netslice-instance-op-show  shows the info of an operation over a Network&lt;br /&gt;
                             Slice Instance(NSI)&lt;br /&gt;
  netslice-instance-show     shows the content of a Network Slice Instance&lt;br /&gt;
                             (NSI)&lt;br /&gt;
  netslice-template-create   creates a new Network Slice Template (NST)&lt;br /&gt;
  netslice-template-delete   deletes a Network Slice Template (NST)&lt;br /&gt;
  netslice-template-list     list all Network Slice Templates (NST) in the...&lt;br /&gt;
  netslice-template-show     shows the content of a Network Slice Template&lt;br /&gt;
                             (NST)&lt;br /&gt;
  netslice-template-update   updates a Network Slice Template (NST)&lt;br /&gt;
  nf-list                    list all NF instances Options: --ns TEXT NS...&lt;br /&gt;
  nfpkg-create               creates a new NFpkg&lt;br /&gt;
  nfpkg-delete               deletes a NFpkg&lt;br /&gt;
  nfpkg-list                 list all NF pkg (VNF pkg, PNF pkg, HNF pkg)...&lt;br /&gt;
  nfpkg-show                 shows the content of a NF Descriptor&lt;br /&gt;
  nfpkg-update               updates a NFpkg&lt;br /&gt;
  ns-action                  executes an action/primitive over a NS...&lt;br /&gt;
  ns-alarm-create            creates a new alarm for a NS instance&lt;br /&gt;
  ns-create                  creates a new Network Service instance&lt;br /&gt;
  ns-delete                  deletes a NS instance&lt;br /&gt;
  ns-list                    list all NS instances Options: --filter...&lt;br /&gt;
  ns-metric-export           exports a metric to the internal OSM bus,...&lt;br /&gt;
  ns-op-list                 shows the history of operations over a NS...&lt;br /&gt;
  ns-op-show                 shows the info of an operation&lt;br /&gt;
  ns-show                    shows the info of a NS instance&lt;br /&gt;
  nsd-create                 creates a new NSD/NSpkg&lt;br /&gt;
  nsd-delete                 deletes a NSD/NSpkg&lt;br /&gt;
  nsd-list                   list all NSD/NS pkg in the system&lt;br /&gt;
  nsd-show                   shows the content of a NSD&lt;br /&gt;
  nsd-update                 updates a NSD/NSpkg&lt;br /&gt;
  nsi-create                 creates a new Network Slice Instance&lt;br /&gt;
  nsi-delete                 deletes a Network Slice Instance (NSI)&lt;br /&gt;
  nsi-list                   list all Network Slice Instances (NSI)&lt;br /&gt;
  nsi-op-list                shows the history of operations over a...&lt;br /&gt;
  nsi-op-show                shows the info of an operation over a Network&lt;br /&gt;
                             Slice Instance(NSI)&lt;br /&gt;
  nsi-show                   shows the content of a Network Slice Instance&lt;br /&gt;
                             (NSI)&lt;br /&gt;
  nspkg-create               creates a new NSD/NSpkg&lt;br /&gt;
  nspkg-delete               deletes a NSD/NSpkg&lt;br /&gt;
  nspkg-list                 list all NSD/NS pkg in the system&lt;br /&gt;
  nspkg-show                 shows the content of a NSD&lt;br /&gt;
  nspkg-update               updates a NSD/NSpkg&lt;br /&gt;
  nst-create                 creates a new Network Slice Template (NST)&lt;br /&gt;
  nst-delete                 deletes a Network Slice Template (NST)&lt;br /&gt;
  nst-list                   list all Network Slice Templates (NST) in the...&lt;br /&gt;
  nst-show                   shows the content of a Network Slice Template&lt;br /&gt;
                             (NST)&lt;br /&gt;
  nst-update                 updates a Network Slice Template (NST)&lt;br /&gt;
  pdu-create                 adds a new Physical Deployment Unit to the&lt;br /&gt;
                             catalog&lt;br /&gt;
  pdu-delete                 deletes a Physical Deployment Unit (PDU)&lt;br /&gt;
  pdu-list                   list all Physical Deployment Units (PDU)&lt;br /&gt;
  pdu-show                   shows the content of a Physical Deployment Unit&lt;br /&gt;
                             (PDU)&lt;br /&gt;
  project-create             Creates a new project NAME: name of the...&lt;br /&gt;
  project-delete             deletes a project NAME: name or ID of the...&lt;br /&gt;
  project-list               list all projects&lt;br /&gt;
  project-show               shows the details of a project NAME: name or...&lt;br /&gt;
  project-update             Update a project name :param ctx: :param...&lt;br /&gt;
  role-create                creates a role&lt;br /&gt;
  role-delete                deletes a role&lt;br /&gt;
  role-list                  list all roles&lt;br /&gt;
  role-show                  show specific role&lt;br /&gt;
  role-update                updates a role&lt;br /&gt;
  sdnc-create                creates a new SDN controller&lt;br /&gt;
  sdnc-delete                deletes an SDN controller NAME: name or ID of...&lt;br /&gt;
  sdnc-list                  list all SDN controllers&lt;br /&gt;
  sdnc-show                  shows the details of an SDN controller NAME:...&lt;br /&gt;
  sdnc-update                updates an SDN controller&lt;br /&gt;
  upload-package             uploads a VNF package or NS package FILENAME:...&lt;br /&gt;
  user-create                Creates a new user USERNAME: name of the...&lt;br /&gt;
  user-delete                deletes a user NAME: name or ID of the user...&lt;br /&gt;
  user-list                  list all users&lt;br /&gt;
  user-show                  shows the details of a user NAME: name or ID...&lt;br /&gt;
  user-update                Update a user information USERNAME: name of...&lt;br /&gt;
  vim-create                 creates a new VIM account&lt;br /&gt;
  vim-delete                 deletes a VIM account NAME: name or ID of the...&lt;br /&gt;
  vim-list                   list all VIM accounts&lt;br /&gt;
  vim-show                   shows the details of a VIM account NAME: name...&lt;br /&gt;
  vim-update                 updates a VIM account&lt;br /&gt;
  vnf-list                   list all NF instances&lt;br /&gt;
  vnf-scale                  Executes a VNF scale (adding/removing VDUs)...&lt;br /&gt;
  vnf-show                   shows the info of a VNF instance&lt;br /&gt;
  vnfd-create                creates a new VNFD/VNFpkg&lt;br /&gt;
  vnfd-delete                deletes a VNFD/VNFpkg&lt;br /&gt;
  vnfd-list                  list all VNFD/VNF pkg in the system&lt;br /&gt;
  vnfd-show                  shows the content of a VNFD&lt;br /&gt;
  vnfd-update                updates a new VNFD/VNFpkg&lt;br /&gt;
  vnfpkg-create              creates a new VNFD/VNFpkg&lt;br /&gt;
  vnfpkg-delete              deletes a VNFD/VNFpkg&lt;br /&gt;
  vnfpkg-list                list all VNFD/VNF pkg in the system&lt;br /&gt;
  vnfpkg-show                shows the content of a VNFD&lt;br /&gt;
  vnfpkg-update              updates a VNFD/VNFpkg&lt;br /&gt;
  wim-create                 creates a new WIM account&lt;br /&gt;
  wim-delete                 deletes a WIM account NAME: name or ID of the...&lt;br /&gt;
  wim-list                   list all WIM accounts&lt;br /&gt;
  wim-show                   shows the details of a WIM account NAME: name...&lt;br /&gt;
  wim-update                 updates a WIM account&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Enable autocompletion&lt;br /&gt;
&lt;br /&gt;
You can enable autocompletion in OSM client by creating a file osm-complete.sh in the following way:&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
mkdir -p $HOME/.bash_completion.d&lt;br /&gt;
_OSM_COMPLETE=source osm &amp;gt; $HOME/.bash_completion.d/osm-complete.sh&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
Then you can add the following to your $HOME/.bashrc file:&lt;br /&gt;
```bash&lt;br /&gt;
. .bash_completion.d/osm-complete.sh&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Other installation methods&lt;br /&gt;
&lt;br /&gt;
### Installing from git repo&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
# Ubuntu pre-requirements&lt;br /&gt;
sudo apt install python-pip libcurl4-gnutls-dev libgnutls-dev&lt;br /&gt;
# CentOS pre-requirements&lt;br /&gt;
# sudo yum install python-pip libcurl-devel gnutls-devel&lt;br /&gt;
sudo -H pip install python-magic&lt;br /&gt;
# Install OSM client from the git repo.&lt;br /&gt;
# You can install the latest client from master branch in this way:&lt;br /&gt;
sudo -H pip install git+https://osm.etsi.org/gerrit/osm/osmclient&lt;br /&gt;
# You could also install a specific tag/version in this way&lt;br /&gt;
sudo -H pip install git+https://osm.etsi.org/gerrit/osm/osmclient@v6.0.1&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### Installing from cloned repo (for developers)&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
# Ubuntu pre-requirements&lt;br /&gt;
sudo apt install python-pip libcurl4-gnutls-dev libgnutls-dev&lt;br /&gt;
# Make sure that &lt;br /&gt;
# sudo yum install python-pip libcurl-devel gnutls-devel&lt;br /&gt;
sudo -H pip install python-magic&lt;br /&gt;
# Clone the osmclient repo and install OSM client from the git repo.&lt;br /&gt;
git clone https://osm.etsi.org/gerrit/osm/osmclient&lt;br /&gt;
sudo -H pip install osmclient&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Using osmclient as a library to interact with OSM&lt;br /&gt;
&lt;br /&gt;
Assuming that you have installed python-osmclient package, it&#039;s pretty simple to write some Python code to interact with OSM.&lt;br /&gt;
&lt;br /&gt;
### Simple Python code to get the list of NS packages&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
from osmclient import client&lt;br /&gt;
from osmclient.common.exceptions import ClientException&lt;br /&gt;
hostname = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
myclient = client.Client(host=hostname, sol005=True)&lt;br /&gt;
resp = myclient.nsd.list()&lt;br /&gt;
print yaml.safe_dump(resp)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### Simple Python code to get the list of VNF packages from a specific user and project&lt;br /&gt;
&lt;br /&gt;
The code will print for each package a pretty table, then the full details in yaml&lt;br /&gt;
```python&lt;br /&gt;
from osmclient import client&lt;br /&gt;
from osmclient.common.exceptions import ClientException&lt;br /&gt;
import yaml&lt;br /&gt;
from prettytable import PrettyTable&lt;br /&gt;
hostname = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
user = admin&lt;br /&gt;
password = admin&lt;br /&gt;
project = admin&lt;br /&gt;
kwargs = {}&lt;br /&gt;
if user is not None:&lt;br /&gt;
    kwargs[&#039;user&#039;]=user&lt;br /&gt;
if password is not None:&lt;br /&gt;
    kwargs[&#039;password&#039;]=password&lt;br /&gt;
if project is not None:&lt;br /&gt;
   kwargs[&#039;project&#039;]=project&lt;br /&gt;
myclient = client.Client(host=hostname, sol005=True, **kwargs)&lt;br /&gt;
resp = myclient.vnfd.list()&lt;br /&gt;
print yaml.safe_dump(resp)&lt;br /&gt;
```&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_client&amp;diff=6096</id>
		<title>OSM client</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_client&amp;diff=6096"/>
		<updated>2021-02-17T17:16:23Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MARKDOWN}}&lt;br /&gt;
&lt;br /&gt;
**THIS PAGE IS DEPRECATED**. OSM User Guide has been moved to a new location: **&amp;lt;https://osm.etsi.org/docs/user-guide/&amp;gt;**&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
**THIS PAGE IS DEPRECATED**. OSM User Guide has been moved to a new location: **&amp;lt;https://osm.etsi.org/docs/user-guide/&amp;gt;**&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
In those cases where you have an OSM already installed in a remote server, you might still want to operate it from your local computer using the OSM client. The OSM client provides you a client library and a command-line tool to operate OSM..&lt;br /&gt;
&lt;br /&gt;
## Installation&lt;br /&gt;
&lt;br /&gt;
OSM client comes bundled with OSM installation, so if you successfully installed OSM, you already have it.&lt;br /&gt;
&lt;br /&gt;
In addition, you can also install it in a different computer. In order to install OSM client, you will need a Linux machine and follow this procedure.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
wget -qO - https://osm-download.etsi.org/repository/osm/debian/ReleaseSIX/OSM%20ETSI%20Release%20Key.gpg | sudo apt-key add -&lt;br /&gt;
sudo add-apt-repository -y &amp;quot;deb [arch=amd64] https://osm-download.etsi.org/repository/osm/debian/ReleaseSIX stable devops osmclient&amp;quot;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo -H pip install python-magic&lt;br /&gt;
sudo apt-get install python-osmclient&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Usage (client commands)&lt;br /&gt;
&lt;br /&gt;
Once installed, type “osm” to see a list of commands. If installed in a host different from where OSM is running, at minimum you will need to specify the OSM host, either via an environment variable or via the osm command line (see “osm --help” for info).&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
export OSM_HOSTNAME=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
**Usage:**&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
osm [OPTIONS] COMMAND [ARGS]...&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
**Options:**&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
  --hostname TEXT  hostname of server.  Also can set OSM_HOSTNAME in&lt;br /&gt;
                   environment&lt;br /&gt;
  --user TEXT      user (defaults to admin). Also can set OSM_USER in&lt;br /&gt;
                   environment&lt;br /&gt;
  --password TEXT  password (defaults to admin). Also can set OSM_PASSWORD in&lt;br /&gt;
                   environment&lt;br /&gt;
  --project TEXT   project (defaults to admin). Also can set OSM_PROJECT in&lt;br /&gt;
                   environment&lt;br /&gt;
  --help           Show this message and exit.&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
**Commands:**&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
  netslice-instance-create   creates a new Network Slice Instance&lt;br /&gt;
  netslice-instance-delete   deletes a Network Slice Instance (NSI)&lt;br /&gt;
  netslice-instance-list     list all Network Slice Instances (NSI)&lt;br /&gt;
  netslice-instance-op-list  shows the history of operations over a...&lt;br /&gt;
  netslice-instance-op-show  shows the info of an operation over a Network&lt;br /&gt;
                             Slice Instance(NSI)&lt;br /&gt;
  netslice-instance-show     shows the content of a Network Slice Instance&lt;br /&gt;
                             (NSI)&lt;br /&gt;
  netslice-template-create   creates a new Network Slice Template (NST)&lt;br /&gt;
  netslice-template-delete   deletes a Network Slice Template (NST)&lt;br /&gt;
  netslice-template-list     list all Network Slice Templates (NST) in the...&lt;br /&gt;
  netslice-template-show     shows the content of a Network Slice Template&lt;br /&gt;
                             (NST)&lt;br /&gt;
  netslice-template-update   updates a Network Slice Template (NST)&lt;br /&gt;
  nf-list                    list all NF instances Options: --ns TEXT NS...&lt;br /&gt;
  nfpkg-create               creates a new NFpkg&lt;br /&gt;
  nfpkg-delete               deletes a NFpkg&lt;br /&gt;
  nfpkg-list                 list all NF pkg (VNF pkg, PNF pkg, HNF pkg)...&lt;br /&gt;
  nfpkg-show                 shows the content of a NF Descriptor&lt;br /&gt;
  nfpkg-update               updates a NFpkg&lt;br /&gt;
  ns-action                  executes an action/primitive over a NS...&lt;br /&gt;
  ns-alarm-create            creates a new alarm for a NS instance&lt;br /&gt;
  ns-create                  creates a new Network Service instance&lt;br /&gt;
  ns-delete                  deletes a NS instance&lt;br /&gt;
  ns-list                    list all NS instances Options: --filter...&lt;br /&gt;
  ns-metric-export           exports a metric to the internal OSM bus,...&lt;br /&gt;
  ns-op-list                 shows the history of operations over a NS...&lt;br /&gt;
  ns-op-show                 shows the info of an operation&lt;br /&gt;
  ns-show                    shows the info of a NS instance&lt;br /&gt;
  nsd-create                 creates a new NSD/NSpkg&lt;br /&gt;
  nsd-delete                 deletes a NSD/NSpkg&lt;br /&gt;
  nsd-list                   list all NSD/NS pkg in the system&lt;br /&gt;
  nsd-show                   shows the content of a NSD&lt;br /&gt;
  nsd-update                 updates a NSD/NSpkg&lt;br /&gt;
  nsi-create                 creates a new Network Slice Instance&lt;br /&gt;
  nsi-delete                 deletes a Network Slice Instance (NSI)&lt;br /&gt;
  nsi-list                   list all Network Slice Instances (NSI)&lt;br /&gt;
  nsi-op-list                shows the history of operations over a...&lt;br /&gt;
  nsi-op-show                shows the info of an operation over a Network&lt;br /&gt;
                             Slice Instance(NSI)&lt;br /&gt;
  nsi-show                   shows the content of a Network Slice Instance&lt;br /&gt;
                             (NSI)&lt;br /&gt;
  nspkg-create               creates a new NSD/NSpkg&lt;br /&gt;
  nspkg-delete               deletes a NSD/NSpkg&lt;br /&gt;
  nspkg-list                 list all NSD/NS pkg in the system&lt;br /&gt;
  nspkg-show                 shows the content of a NSD&lt;br /&gt;
  nspkg-update               updates a NSD/NSpkg&lt;br /&gt;
  nst-create                 creates a new Network Slice Template (NST)&lt;br /&gt;
  nst-delete                 deletes a Network Slice Template (NST)&lt;br /&gt;
  nst-list                   list all Network Slice Templates (NST) in the...&lt;br /&gt;
  nst-show                   shows the content of a Network Slice Template&lt;br /&gt;
                             (NST)&lt;br /&gt;
  nst-update                 updates a Network Slice Template (NST)&lt;br /&gt;
  pdu-create                 adds a new Physical Deployment Unit to the&lt;br /&gt;
                             catalog&lt;br /&gt;
  pdu-delete                 deletes a Physical Deployment Unit (PDU)&lt;br /&gt;
  pdu-list                   list all Physical Deployment Units (PDU)&lt;br /&gt;
  pdu-show                   shows the content of a Physical Deployment Unit&lt;br /&gt;
                             (PDU)&lt;br /&gt;
  project-create             Creates a new project NAME: name of the...&lt;br /&gt;
  project-delete             deletes a project NAME: name or ID of the...&lt;br /&gt;
  project-list               list all projects&lt;br /&gt;
  project-show               shows the details of a project NAME: name or...&lt;br /&gt;
  project-update             Update a project name :param ctx: :param...&lt;br /&gt;
  role-create                creates a role&lt;br /&gt;
  role-delete                deletes a role&lt;br /&gt;
  role-list                  list all roles&lt;br /&gt;
  role-show                  show specific role&lt;br /&gt;
  role-update                updates a role&lt;br /&gt;
  sdnc-create                creates a new SDN controller&lt;br /&gt;
  sdnc-delete                deletes an SDN controller NAME: name or ID of...&lt;br /&gt;
  sdnc-list                  list all SDN controllers&lt;br /&gt;
  sdnc-show                  shows the details of an SDN controller NAME:...&lt;br /&gt;
  sdnc-update                updates an SDN controller&lt;br /&gt;
  upload-package             uploads a VNF package or NS package FILENAME:...&lt;br /&gt;
  user-create                Creates a new user USERNAME: name of the...&lt;br /&gt;
  user-delete                deletes a user NAME: name or ID of the user...&lt;br /&gt;
  user-list                  list all users&lt;br /&gt;
  user-show                  shows the details of a user NAME: name or ID...&lt;br /&gt;
  user-update                Update a user information USERNAME: name of...&lt;br /&gt;
  vim-create                 creates a new VIM account&lt;br /&gt;
  vim-delete                 deletes a VIM account NAME: name or ID of the...&lt;br /&gt;
  vim-list                   list all VIM accounts&lt;br /&gt;
  vim-show                   shows the details of a VIM account NAME: name...&lt;br /&gt;
  vim-update                 updates a VIM account&lt;br /&gt;
  vnf-list                   list all NF instances&lt;br /&gt;
  vnf-scale                  Executes a VNF scale (adding/removing VDUs)...&lt;br /&gt;
  vnf-show                   shows the info of a VNF instance&lt;br /&gt;
  vnfd-create                creates a new VNFD/VNFpkg&lt;br /&gt;
  vnfd-delete                deletes a VNFD/VNFpkg&lt;br /&gt;
  vnfd-list                  list all VNFD/VNF pkg in the system&lt;br /&gt;
  vnfd-show                  shows the content of a VNFD&lt;br /&gt;
  vnfd-update                updates a new VNFD/VNFpkg&lt;br /&gt;
  vnfpkg-create              creates a new VNFD/VNFpkg&lt;br /&gt;
  vnfpkg-delete              deletes a VNFD/VNFpkg&lt;br /&gt;
  vnfpkg-list                list all VNFD/VNF pkg in the system&lt;br /&gt;
  vnfpkg-show                shows the content of a VNFD&lt;br /&gt;
  vnfpkg-update              updates a VNFD/VNFpkg&lt;br /&gt;
  wim-create                 creates a new WIM account&lt;br /&gt;
  wim-delete                 deletes a WIM account NAME: name or ID of the...&lt;br /&gt;
  wim-list                   list all WIM accounts&lt;br /&gt;
  wim-show                   shows the details of a WIM account NAME: name...&lt;br /&gt;
  wim-update                 updates a WIM account&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Enable autocompletion&lt;br /&gt;
&lt;br /&gt;
You can enable autocompletion in OSM client by creating a file osm-complete.sh in the following way:&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
mkdir -p $HOME/.bash_completion.d&lt;br /&gt;
_OSM_COMPLETE=source osm &amp;gt; $HOME/.bash_completion.d/osm-complete.sh&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
Then you can add the following to your $HOME/.bashrc file:&lt;br /&gt;
```bash&lt;br /&gt;
. .bash_completion.d/osm-complete.sh&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Other installation methods&lt;br /&gt;
&lt;br /&gt;
### Installing from git repo&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
# Ubuntu pre-requirements&lt;br /&gt;
sudo apt install python-pip libcurl4-gnutls-dev libgnutls-dev&lt;br /&gt;
# CentOS pre-requirements&lt;br /&gt;
# sudo yum install python-pip libcurl-devel gnutls-devel&lt;br /&gt;
sudo -H pip install python-magic&lt;br /&gt;
# Install OSM client from the git repo.&lt;br /&gt;
# You can install the latest client from master branch in this way:&lt;br /&gt;
sudo -H pip install git+https://osm.etsi.org/gerrit/osm/osmclient&lt;br /&gt;
# You could also install a specific tag/version in this way&lt;br /&gt;
sudo -H pip install git+https://osm.etsi.org/gerrit/osm/osmclient@v6.0.1&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### Installing from cloned repo (for developers)&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
# Ubuntu pre-requirements&lt;br /&gt;
sudo apt install python-pip libcurl4-gnutls-dev libgnutls-dev&lt;br /&gt;
# Make sure that &lt;br /&gt;
# sudo yum install python-pip libcurl-devel gnutls-devel&lt;br /&gt;
sudo -H pip install python-magic&lt;br /&gt;
# Clone the osmclient repo and install OSM client from the git repo.&lt;br /&gt;
git clone https://osm.etsi.org/gerrit/osm/osmclient&lt;br /&gt;
sudo -H pip install osmclient&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Using osmclient as a library to interact with OSM&lt;br /&gt;
&lt;br /&gt;
Assuming that you have installed python-osmclient package, it&#039;s pretty simple to write some Python code to interact with OSM.&lt;br /&gt;
&lt;br /&gt;
### Simple Python code to get the list of NS packages&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
from osmclient import client&lt;br /&gt;
from osmclient.common.exceptions import ClientException&lt;br /&gt;
hostname = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
myclient = client.Client(host=hostname, sol005=True)&lt;br /&gt;
resp = myclient.nsd.list()&lt;br /&gt;
print yaml.safe_dump(resp)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### Simple Python code to get the list of VNF packages from a specific user and project&lt;br /&gt;
&lt;br /&gt;
The code will print for each package a pretty table, then the full details in yaml&lt;br /&gt;
```python&lt;br /&gt;
from osmclient import client&lt;br /&gt;
from osmclient.common.exceptions import ClientException&lt;br /&gt;
import yaml&lt;br /&gt;
from prettytable import PrettyTable&lt;br /&gt;
hostname = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
user = admin&lt;br /&gt;
password = admin&lt;br /&gt;
project = admin&lt;br /&gt;
kwargs = {}&lt;br /&gt;
if user is not None:&lt;br /&gt;
    kwargs[&#039;user&#039;]=user&lt;br /&gt;
if password is not None:&lt;br /&gt;
    kwargs[&#039;password&#039;]=password&lt;br /&gt;
if project is not None:&lt;br /&gt;
   kwargs[&#039;project&#039;]=project&lt;br /&gt;
myclient = client.Client(host=hostname, sol005=True, **kwargs)&lt;br /&gt;
resp = myclient.vnfd.list()&lt;br /&gt;
print yaml.safe_dump(resp)&lt;br /&gt;
```&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=Openstack_configuration&amp;diff=6090</id>
		<title>Openstack configuration</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=Openstack_configuration&amp;diff=6090"/>
		<updated>2021-02-17T16:58:43Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Configure openstack for OSM (basic)=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Guarantee that Openstack API endpoints are reachable from OSM (particularly from RO container)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Create a management network, with DHCP enabled, reachable from OSM (particularly from VCA container)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You need to create a management network, with DHCP enabled, and guarantee that this management network is reachable from OSM. The network is used by the VCA (Juju) for configuring the VNFs once they are running. It is recommended to create a provider network, isolated from Openstack. For instance, in order to create a provider network using physical interface em1 and VLAN 500 and with CIDR 10.208.0.0/24, you should run the following commands:&lt;br /&gt;
 neutron net-create mgmt --provider:network_type=vlan --provider:physical_network=physnet_em1 --provider:segmentation_id=500 --shared&lt;br /&gt;
 neutron subnet-create --name subnet-mgmt mgmt 10.208.0.0/24 --allocation-pool start=10.208.0.2,end=10.208.0.254&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Create a valid tenant/user&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You need to create a tenant/user with rights to create/delete flavors. The easiest way is to create a user and assign it the role &amp;quot;admin&amp;quot;. Another option is to change the general flavor management policies at file &#039;&#039;/etc/nova/policy.json&#039;&#039; to allow flavor creation per user.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Upload images&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For the time being, it is required to upload the images of the VNFs manually at openstack, using the following command:&lt;br /&gt;
&lt;br /&gt;
 openstack image create --file=&amp;quot;./cirros-0.3.4-x86_64-disk.img&amp;quot; --container-format=bare --disk-format=qcow2 --public cirros034&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5. Modify default security group or create a new one&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
By default openstack apply the &amp;quot;default&amp;quot; security group that blocks any incoming traffic to the VM. However ssh access might be needed by VCA. You must modify the default security group to allow TCP port 22, or create a new security group and configure RO to use this security group when datacenter is addeed (see [[Openstack_configuration_(Release_TWO)#Add_openstack_to_OSM|Add openstack to OSM]] )&lt;br /&gt;
&lt;br /&gt;
=Configure Openstack for full EPA support in OSM =&lt;br /&gt;
&lt;br /&gt;
Besides the instructions above for any Openstack, you should do extra configuration to configure Openstack for running VNFs which use SRIOV interfaces.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO NOT consider this as the final configuration guide for Openstack with EPA. Please check Openstack docs and Openstack downstream distros&#039; docs to get a further understanding and the up-to-date required configuration.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: The configuration shown below works with Openstack Newton, and it might not work with later versions.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The compute nodes need to have a whitelist for the interfaces with SRIOV and passthrough enabled, and those interface need to be associated to a physical network label e.g. “physnet”. This can be done in the file /etc/nova/nova.conf :&lt;br /&gt;
 pci_passthrough_whitelist=[{&amp;quot;devname&amp;quot;: &amp;quot;p3p1&amp;quot;, &amp;quot;physical_network&amp;quot;: &amp;quot;physnet&amp;quot;}, {&amp;quot;devname&amp;quot;: &amp;quot;p3p2&amp;quot;, &amp;quot;physical_network&amp;quot;: &amp;quot;physnet&amp;quot;}]&lt;br /&gt;
&lt;br /&gt;
* The neutron controller needs to be updated to add “sriovnicswitch” to the mechanism_drivers. This can be done in the file “/etc/neutron/plugins/ml2/ml2_conf.ini” &lt;br /&gt;
 mechanism_drivers =openvswitch,sriovnicswitch&lt;br /&gt;
&lt;br /&gt;
* The neutron controller needs to be updated to set the vlans to be used for the defined physical network label. This can be done in the file “/etc/neutron/plugins/ml2/ml2_conf.ini”. For instance, to set the vlans from 2000 to 3000:&lt;br /&gt;
 network_vlan_ranges =physnet:2000:3000&lt;br /&gt;
&lt;br /&gt;
* The neutron controller needs to be updated to allow the supported NIC vendor’s product ID. This can be done in the file “/etc/neutron/plugins/ml2/ml2_conf.ini” to &lt;br /&gt;
 [ml2_sriov]&lt;br /&gt;
 supported_pci_vendor_devs = 8086:10ed&lt;br /&gt;
&lt;br /&gt;
* The nova controller needs to be updated to allow proper scheduling of SR-IOV and Passthrough devices, by adding the PciPassthroughFilter filter to the list of filters. This can be done in the file “/etc/nova/nova.conf”:&lt;br /&gt;
 scheduler_available_filters=nova.scheduler.filters.all_filters&lt;br /&gt;
 scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,CoreFilter, PciPassthroughFilter&lt;br /&gt;
&lt;br /&gt;
The previous configuration has been collected from the links below. Please check them to get more details:&lt;br /&gt;
* https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/10/html-single/network_functions_virtualization_product_guide/&lt;br /&gt;
* https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/10/html-single/network_functions_virtualization_planning_guide/&lt;br /&gt;
* https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/10/html-single/network_functions_virtualization_configuration_guide/&lt;br /&gt;
* https://docs.openstack.org/newton/networking-guide/config-sriov.html&lt;br /&gt;
&lt;br /&gt;
=Add openstack to OSM=&lt;br /&gt;
&lt;br /&gt;
There is a parameter called &#039;&#039;&#039;--config&#039;&#039;&#039; used to supply general configuration options. This paremeter can be used when creating the datacenter using the OSM client or when adding the datacenter directly to the RO (both at datacenter creation and datacenter attachment to openmano tenant -the latter prevails-).&lt;br /&gt;
&lt;br /&gt;
The following configuration can be added:&lt;br /&gt;
* &#039;&#039;&#039;management_network_id&#039;&#039;&#039;, &#039;&#039;&#039;management_network_name&#039;&#039;&#039;: VIM management network id/name to use for the management VLD of NS descriptors. By default it uses same vim network name as VLD name. It can be set also at instantiation time.&lt;br /&gt;
* &#039;&#039;&#039;security_groups&#039;&#039;&#039;:    To be used for the deployment&lt;br /&gt;
* &#039;&#039;&#039;availability_zone&#039;&#039;&#039;:  To be used for the deployment. It can be:&lt;br /&gt;
** a single availability zone (all deployments will land in that zone), e.g. &#039;availability_zone: controller&#039;&lt;br /&gt;
** several availability zones, which enables affinity and anti-affinity deployments, e.g. &#039;availability_zone: [zone1, zone2]&#039;&lt;br /&gt;
* &#039;&#039;&#039;region_name&#039;&#039;&#039;:        The region where the VM must be deployed.&lt;br /&gt;
* &#039;&#039;&#039;insecure&#039;&#039;&#039;:           (By default false). When true it allows authorization over a non trusted certificate over https&lt;br /&gt;
* &#039;&#039;&#039;ca_cert&#039;&#039;&#039;:           (incompatible with insecure). root certificate file to use for validating the openstack certificate&lt;br /&gt;
* &#039;&#039;&#039;use_existing_flavors&#039;&#039;&#039;:         (By default false). Set to &amp;quot;True&amp;quot; to use the closer flavor with enough resources instead of creating a new flavor with the exact requirements. This option does not work for EPA (cpu pinning, huge pages, ...) where openmano still tries to create a flavor with the needed extra expects. Use this options when you do not have admin credentials (Available from future v2.0.2 version)&lt;br /&gt;
* &#039;&#039;&#039;vim_type&#039;&#039;&#039;:            Set to &amp;quot;VIO&amp;quot; to use VMware Integrated openstack as VIM&lt;br /&gt;
* &#039;&#039;&#039;use_internal_endpoint&#039;&#039;&#039;: Set to True to force using internal endpoints&lt;br /&gt;
&lt;br /&gt;
For openstack API v3, the following parameters are required:&lt;br /&gt;
* &#039;&#039;&#039;project_domain_id&#039;&#039;&#039;, &#039;&#039;&#039;project_domain_name&#039;&#039;&#039;:   If not provided, &amp;quot;default&amp;quot; is used for project_domain_id&lt;br /&gt;
* &#039;&#039;&#039;user_domain_id&#039;&#039;&#039;, &#039;&#039;&#039;user_domain_name&#039;&#039;&#039;:   If not provided, &amp;quot;default&amp;quot; is used for user_domain_id&lt;br /&gt;
* &#039;&#039;&#039;APIversion&#039;&#039;&#039;. Only required if the auth-url URL does not end with &amp;quot;v3&amp;quot;. Set it to &amp;quot;v3.3&amp;quot; or &amp;quot;3&amp;quot; to use this openstack API version.&lt;br /&gt;
&lt;br /&gt;
ADVANCED configuration:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;keypair&#039;&#039;&#039;:            To be added in addition to the keypair allocated on the VNF descriptor. Provide the name of an openstack keypair&lt;br /&gt;
* &#039;&#039;&#039;dataplane_physical_net&#039;&#039;&#039;: The physical network label used in Openstack both to identify SRIOV and passthrough interfaces (nova configuration) and also to specify the VLAN ranges used by SR-IOV interfaces (neutron configuration). In case of VMware Integrated Openstack (VIO) provide moref ID of distributed virtual switch.&lt;br /&gt;
* &#039;&#039;&#039;use_floating_ip&#039;&#039;&#039;:    (By default false). When boolean true, a management interface of a VNFD is automatically assigned a floating_ip -if possible-. If there is not any floating ip avalialble, it tries to get one if there is only one pool. You can use a string &amp;quot;pool_id&amp;quot; (public network id) instead of boolean true, to indicate the pool to use in case there are several. Note that deployment is not aborted if failing to asign a floating ip. The prefered method instead of this is to use a provider network&lt;br /&gt;
* &#039;&#039;&#039;dataplane_net_vlan_range&#039;&#039;&#039;: In case of VMware Integrated Openstack (VIO) provide vlan ranges for the SRIOV (binding direct) networks in format [&#039;start_ID - end_ID&#039;]&lt;br /&gt;
* &#039;&#039;&#039;microversion&#039;&#039;&#039;:      This is an Openstack-only parameter that allows to specify a specific microversion to be used in nova. When using &#039;microversion: 2.32&#039;, it enables the use of Virtual Device Role Tagging, which allows to identify each VM interface with a tag (the tag will be the name of the interface in the VNFD) and convey that information to the VM as metadata. This implementation approach is due to the warning message in https://developer.openstack.org/api-guide/compute/microversions.html where it is stated that microversion backwards compatibility is not guaranteed and clients should always require a specific microversion. This functionality was introduced would not work with Openstack versions previous to Newton.&lt;br /&gt;
* &#039;&#039;&#039;no_port_security_extension&#039;&#039;&#039;: Use for those openstack that do not have the port_security_extension. This property allows neutron to disable the port security. If this option is set, port security will never be disabled regardless of the descriptor indication.&lt;br /&gt;
* &#039;&#039;&#039;disable_network_port_security&#039;&#039;&#039;: Use for those openstack that do not support port security enabled at network level (although port_security_extension is present). This property allows neutron to disable the port security by default at the time of network creation for all ports created on the created networks. &lt;br /&gt;
&lt;br /&gt;
The content of config is a yaml format text. The recomendation is to use a comma separated list between curly brackets {} and quotes. For instance, the following config is used to add a VMware Integrated Openstack where floating IP addresses will be assigned to VNF mgmt interfaces, all deployments must land in the availability_zone &amp;quot;controller&amp;quot;, and the vlan ranges for the SRIOV networks will be 1-5 and 7-10:&lt;br /&gt;
 --config=&#039;{use_floating_ip: True, availability_zone: zone1, dataplane_net_vlan_range: [&amp;quot;1-5&amp;quot; , &amp;quot;7-10&amp;quot;]}}&#039;&lt;br /&gt;
&lt;br /&gt;
==Using the OSM client==&lt;br /&gt;
 osm vim-create --name openstack-site --user admin --password userpwd --auth_url http://10.10.10.11:5000/v2.0 --tenant admin --account_type openstack --config=&#039;{security_groups: default, keypair: mykey}&#039;&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=EPA_and_SDN_assist&amp;diff=6089</id>
		<title>EPA and SDN assist</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=EPA_and_SDN_assist&amp;diff=6089"/>
		<updated>2021-02-17T16:58:09Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
OSM supports EPA (Enhanced Platform Awareness) since Rel ZERO (May 2016). EPA features like use of hugepages memory, CPU pinning, NUMA pinning, and the use of passthrough and SR-IOV interfaces, can be used in OSM&#039;s VNF descriptors since then.&lt;br /&gt;
&lt;br /&gt;
If your VIM supports EPA, then you don&#039;t need to do anything extra to use it from OSM. VIM connectors in OSM take advantage of EPA capabilities if the VIM supports it. All you need to do is build your descriptors and deploy.&lt;br /&gt;
&lt;br /&gt;
However, as you may have noticed, not all VIMs support EPA. To overcome this limitation, OSM has added the following two features:&lt;br /&gt;
* Since Rel ONE (October 2016), OSM includes openvim as a reference VIM, with full support of EPA. You can follow the instructions in this &#039;&#039;&#039;[[OpenVIM_installation_(Release_THREE)|link]]&#039;&#039;&#039; to install and use openvim.&lt;br /&gt;
* Since Rel TWO (April 2017), OSM includes a new capability in the Resource Orchestrator called &#039;&#039;&#039;[[#SDN assist|SDN assist]]&#039;&#039;&#039;. Through this capability, OSM can manage, via the RO, the dataplane underlay conectivity through an external SDN controller. The only requirement for the VIM is that it must able to use SRIOV and/or passthrough interfaces, and expose the assigned interfaces so that the RO can use them to create the underlay connectivity. By default, the SDN assist capability is disabled when a datacenter or VIM is added to OSM, but you can instruct OSM to enable it per datacenter.&lt;br /&gt;
&lt;br /&gt;
=SDN assist=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The way SDN assist works, succinctly, is as follows. OSM will deploy the VMs of a NS with Passthrough and/or SRIOV interfaces, then will get from the VIM (in your case, Openstack) the compute node where the VM was deployed and the physical interface assigned to the VM (identified by its PCI address). Then, OSM will map those interfaces to Openflow ports in the switch making use of the mapping that you should have introduced in the system, and finally OSM will create the dataplane networks by talking to the SDN controller and connecting the appropriate Openflow ports to the same network.&lt;br /&gt;
&lt;br /&gt;
The module in charge of this is the OSM-RO (Resource Orchestrator). It uses an internal library to manage the underlay connectivity via SDN. The library relies on Openflow pro-active rules to configure the connectivity in the switch. The current library includes plugins for FloodLight, ONOS and OpenDayLight.&lt;br /&gt;
&lt;br /&gt;
==General requirements==&lt;br /&gt;
The general requirements are:&lt;br /&gt;
* A dataplane switch with Openflow capabilities that will connect the physical interfaces of the VIM compute nodes.&lt;br /&gt;
* An external SDN controller controlling the previous dataplane switch.&lt;br /&gt;
* The mapping between the switch ports (identified by name) and the compute node interfaces (identified by host-id and PCI address)&lt;br /&gt;
* Some VIMs as Openstack requires admin credentials in order to be able to get the physical place of the SRIOV/passthrough VM interfaces&lt;br /&gt;
&lt;br /&gt;
In addition to the general requirements, every VIM will have to be properly configured.&lt;br /&gt;
&lt;br /&gt;
==Openstack configuration==&lt;br /&gt;
You should do extra configuration to configure Openstack for running VNFs which use SRIOV or passthrough interfaces. You can find a reference guide in this &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/Openstack_configuration_(Release_THREE)#Configure_Openstack_for_OSM_.28EPA.29 link]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Using SDN assist=&lt;br /&gt;
&lt;br /&gt;
==Adding a SDN controller to OSM==&lt;br /&gt;
&lt;br /&gt;
This is done through RO CLI. Enter in the RO container (lxc exec RO bash) and type:&lt;br /&gt;
&lt;br /&gt;
 export OPENMANO_TENANT=osm   # Indicate the RO tenant to use&lt;br /&gt;
&lt;br /&gt;
In order to set the information of an existing sdn controller, use the following sintax:&lt;br /&gt;
 root@RO:~# openmano sdn-controller-create -h&lt;br /&gt;
 usage: openmano sdn-controller-create [-h] [--verbose] [--debug]&lt;br /&gt;
                                      [--description DESCRIPTION] [--ip IP]&lt;br /&gt;
                                      [--port PORT] [--dpid DPID]&lt;br /&gt;
                                      [--type TYPE] [--user USER]&lt;br /&gt;
                                      [--passwd PASSWORD]&lt;br /&gt;
                                      name&lt;br /&gt;
 &lt;br /&gt;
 positional arguments:&lt;br /&gt;
  name                  name of the SDN controller&lt;br /&gt;
 &lt;br /&gt;
 optional arguments:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  --verbose, -v         increase verbosity level. Use several times&lt;br /&gt;
  --debug, -d           show debug information&lt;br /&gt;
  --description DESCRIPTION&lt;br /&gt;
                        description of the SDN controller&lt;br /&gt;
  --ip IP               IP of the SDN controller&lt;br /&gt;
  --port PORT           Port of the SDN controller&lt;br /&gt;
  --dpid DPID           DPID of the dataplane switch controlled by this SDN&lt;br /&gt;
                        controller&lt;br /&gt;
  --type TYPE           Specify the SDN controller type. Valid types are&lt;br /&gt;
                        &#039;opendaylight&#039; and &#039;floodlight&#039;&lt;br /&gt;
  --user USER           user credentials for the SDN controller&lt;br /&gt;
  --passwd PASSWORD     password credentials for the SDN controller&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
 root@RO:~# openmano sdn-controller-create mySDN --ip=192.168.15.2 --port=8080 --dpid=56:55:12:12:12:12:12:12 --user sdnuser --passwd sdnpasswd --type &lt;br /&gt;
 onos&lt;br /&gt;
 98113d4a-51b7-11e7-8f07-00163e1229e4   mySDN                ACTIVE&lt;br /&gt;
&lt;br /&gt;
You can list the defined SDN controllers like this:&lt;br /&gt;
 root@RO:~# openmano sdn-controller-list&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;sdn_controllers&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;status&amp;quot;: &amp;quot;ACTIVE&amp;quot;, &lt;br /&gt;
            &amp;quot;password&amp;quot;: &amp;quot;sdnpasswd&amp;quot;, &lt;br /&gt;
            &amp;quot;uuid&amp;quot;: &amp;quot;98113d4a-51b7-11e7-8f07-00163e1229e4&amp;quot;, &lt;br /&gt;
            &amp;quot;last_error&amp;quot;: null, &lt;br /&gt;
            &amp;quot;dpid&amp;quot;: &amp;quot;56:55:12:12:12:12:12:12&amp;quot;, &lt;br /&gt;
            &amp;quot;version&amp;quot;: null, &lt;br /&gt;
            &amp;quot;user&amp;quot;: &amp;quot;sdnuser&amp;quot;, &lt;br /&gt;
            &amp;quot;ip&amp;quot;: &amp;quot;192.168.15.2&amp;quot;, &lt;br /&gt;
            &amp;quot;nets_with_same_vlan&amp;quot;: &amp;quot;false&amp;quot;, &lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;onos&amp;quot;, &lt;br /&gt;
            &amp;quot;port&amp;quot;: 8080, &lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;mySDN&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
You can manage SDN controllers with sdn-controller-create/list/edit/delete&lt;br /&gt;
&lt;br /&gt;
Note that at SDN creation, connectivity and credentials are not checked.&lt;br /&gt;
&lt;br /&gt;
==Enabling SDN assist in a VIM (associate a SDN controller with a VIM)==&lt;br /&gt;
&lt;br /&gt;
If we check the information of the datacenter we can see that this is disabled by default. No information about SDN can be seen in the config section:&lt;br /&gt;
&lt;br /&gt;
 root@RO:~# openmano datacenter-list mydc -vvv&lt;br /&gt;
 datacenter:&lt;br /&gt;
    config: null&lt;br /&gt;
    created_at: &#039;2017-06-02T07:55:41&#039;&lt;br /&gt;
    description: mydc&lt;br /&gt;
    name: mydc&lt;br /&gt;
    type: openstack&lt;br /&gt;
    uuid: dfcd6ca2-4768-11e7-8f07-00163e1229e4&lt;br /&gt;
    vim_tenants:&lt;br /&gt;
    -   config:&lt;br /&gt;
            dataplane_physical_net: physnet_sriov&lt;br /&gt;
            use_floating_ip: true&lt;br /&gt;
        passwd: &#039;******&#039;&lt;br /&gt;
        user: osm&lt;br /&gt;
        vim_tenant_id: null&lt;br /&gt;
        vim_tenant_name: osm&lt;br /&gt;
    vim_url: http://10.0.0.12:5000/v2.0&lt;br /&gt;
    vim_url_admin: null&lt;br /&gt;
&lt;br /&gt;
In order to add the sdn controller to the datacenter:&lt;br /&gt;
 root@RO:~# openmano datacenter-edit mydc --sdn-controller mySDN&lt;br /&gt;
  Edit datacenter mydc (y/N)? y&lt;br /&gt;
 dfcd6ca2-4768-11e7-8f07-00163e1229e4   mydc                2017-06-02T07:55:41 &lt;br /&gt;
&lt;br /&gt;
And now we can see this information in the datacenter:&lt;br /&gt;
 root@RO:~# openmano datacenter-list mydc -vvv&lt;br /&gt;
 datacenter:&lt;br /&gt;
    config:&lt;br /&gt;
        sdn-controller: 98113d4a-51b7-11e7-8f07-00163e1229e4&lt;br /&gt;
    created_at: &#039;2017-06-02T07:55:41&#039;&lt;br /&gt;
    description: mydc&lt;br /&gt;
    name: mydc&lt;br /&gt;
    type: openstack&lt;br /&gt;
    uuid: dfcd6ca2-4768-11e7-8f07-00163e1229e4&lt;br /&gt;
    vim_tenants:&lt;br /&gt;
    -   config:&lt;br /&gt;
            dataplane_physical_net: physnet_sriov&lt;br /&gt;
            use_floating_ip: true&lt;br /&gt;
        passwd: &#039;******&#039;&lt;br /&gt;
        user: osm&lt;br /&gt;
        vim_tenant_id: null&lt;br /&gt;
        vim_tenant_name: osm&lt;br /&gt;
    vim_url: http://10.0.0.12:5000/v2.0&lt;br /&gt;
    vim_url_admin: null&lt;br /&gt;
&lt;br /&gt;
In order to remove the sdn controller:&lt;br /&gt;
 root@RO:~# openmano datacenter-edit mydc --sdn-controller null&lt;br /&gt;
  Edit datacenter mydc (y/N)? y&lt;br /&gt;
 dfcd6ca2-4768-11e7-8f07-00163e1229e4   mydc                2017-06-02T07:55:41&lt;br /&gt;
&lt;br /&gt;
==Adding a port mapping==&lt;br /&gt;
A sample of sdn port mapping can be found in RO/sdn/sdn_port_mapping.yaml&lt;br /&gt;
 root@RO:~# tail -n 24 RO/sdn/sdn_port_mapping.yaml&lt;br /&gt;
 ---&lt;br /&gt;
 #The mapping is composed of a list of compute nodes. Each compute nodes has two elements:&lt;br /&gt;
 #&amp;quot;compute_node&amp;quot;: name to identify the compute node within the datacenter&lt;br /&gt;
 #&amp;quot;ports&amp;quot;: list of ports mapped to a switch for that compute node.&lt;br /&gt;
 #The information to identify the SDN controller and the dataplane switch is obtained from the datacenter information&lt;br /&gt;
 - compute_node:    &amp;quot;compute node 1&amp;quot;&lt;br /&gt;
   ports:&lt;br /&gt;
     #Each mapped port contains the following information:&lt;br /&gt;
     #&amp;quot;pci&amp;quot;: pci address of the port in the compute node. This is a mandatory parameter&lt;br /&gt;
     #&amp;quot;switch_mac&amp;quot;: MAC address of the corresponding port in the dataplane switch.&lt;br /&gt;
     #&amp;quot;switch_port&amp;quot;: Openflow name of the port in the dataplane switch.&lt;br /&gt;
     #&amp;quot;switch_mac&amp;quot; or &amp;quot;switch_port&amp;quot; must be specified. Both of them could be specified&lt;br /&gt;
     - pci:         &amp;quot;0000:81:00.0&amp;quot;&lt;br /&gt;
       switch_port: &amp;quot;port-2/1&amp;quot;&lt;br /&gt;
     - pci:         &amp;quot;0000:81:00.1&amp;quot;&lt;br /&gt;
       switch_mac:  &amp;quot;52:54:00:94:21:22&amp;quot;&lt;br /&gt;
 - compute_node:    &amp;quot;compute node 2&amp;quot;&lt;br /&gt;
   ports:&lt;br /&gt;
     - pci:         &amp;quot;0000:81:00.0&amp;quot;&lt;br /&gt;
       switch_port: &amp;quot;port-2/3&amp;quot;&lt;br /&gt;
       switch_mac:  &amp;quot;52:54:00:94:22:21&amp;quot;&lt;br /&gt;
     - pci:         &amp;quot;0000:81:00.1&amp;quot;&lt;br /&gt;
       switch_port: &amp;quot;port-2/4&amp;quot;&lt;br /&gt;
       switch_mac:  &amp;quot;52:54:00:94:22:22&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In order to populate the port-mapping:&lt;br /&gt;
 root@RO:~# openmano datacenter-sdn-port-mapping-set mydc RO/sdn/sdn_port_mapping.yaml&lt;br /&gt;
 sdn_port_mapping:&lt;br /&gt;
 - {compute_node: compute node 1, ofc_id: 963b5616-4769-11e7-8f07-00163e1229e4, pci: &#039;0000:81:00.0&#039;,&lt;br /&gt;
   region: dfcd6ca2-4768-11e7-8f07-00163e1229e4, switch_dpid: &#039;00:01:64:00:6a:e6:b3:14&#039;,&lt;br /&gt;
   switch_mac: null, switch_port: port-2/1, uuid: 977b50f8-51b9-11e7-8f07-00163e1229e4}&lt;br /&gt;
 - {compute_node: compute node 1, ofc_id: 963b5616-4769-11e7-8f07-00163e1229e4, pci: &#039;0000:81:00.1&#039;,&lt;br /&gt;
   region: dfcd6ca2-4768-11e7-8f07-00163e1229e4, switch_dpid: &#039;00:01:64:00:6a:e6:b3:14&#039;,&lt;br /&gt;
   switch_mac: &#039;52:54:00:94:21:22&#039;, switch_port: null, uuid: 977b50f9-51b9-11e7-8f07-00163e1229e4}&lt;br /&gt;
 - {compute_node: compute node 2, ofc_id: 963b5616-4769-11e7-8f07-00163e1229e4, pci: &#039;0000:81:00.0&#039;,&lt;br /&gt;
   region: dfcd6ca2-4768-11e7-8f07-00163e1229e4, switch_dpid: &#039;00:01:64:00:6a:e6:b3:14&#039;,&lt;br /&gt;
   switch_mac: &#039;52:54:00:94:22:21&#039;, switch_port: port-2/3, uuid: 977b50fa-51b9-11e7-8f07-00163e1229e4}&lt;br /&gt;
 - {compute_node: compute node 2, ofc_id: 963b5616-4769-11e7-8f07-00163e1229e4, pci: &#039;0000:81:00.1&#039;,&lt;br /&gt;
   region: dfcd6ca2-4768-11e7-8f07-00163e1229e4, switch_dpid: &#039;00:01:64:00:6a:e6:b3:14&#039;,&lt;br /&gt;
   switch_mac: &#039;52:54:00:94:22:22&#039;, switch_port: port-2/4, uuid: 977b50fb-51b9-11e7-8f07-00163e1229e4}&lt;br /&gt;
&lt;br /&gt;
To overwrite the port mapping the same instruction can be used.&lt;br /&gt;
&lt;br /&gt;
To clear the port mapping:&lt;br /&gt;
 root@RO:~# openmano datacenter-sdn-port-mapping-clear mydc&lt;br /&gt;
 Clean SDN port mapping for datacenter dfcd6ca2-4768-11e7-8f07-00163e1229e4 (y/N)? y&lt;br /&gt;
 {result: 4 deleted from of_port_mapping}&lt;br /&gt;
&lt;br /&gt;
==Managing dataplane networks with external connectivity==&lt;br /&gt;
Create a new network in the VIM and an associated network for the SDN assist&lt;br /&gt;
 root@RO:~# openmano vim-net-create --name mydc_net --type data --datacenter mydc&lt;br /&gt;
 d30315d5-4ed7-442b-94e4-cf81d058ae00   mydc_net             ACTIVE              &lt;br /&gt;
&lt;br /&gt;
Now you can include in the network a port (and a vlan as optional parameter) of the dataplane switch that will provide access to an external element. As an additional parameter, the mac address of the external element can also be specified in this command using --mac&lt;br /&gt;
 root@RO:~# openmano vim-net-sdn-attach mydc_net Te1/1 --vlan 300 --datacenter mydc&lt;br /&gt;
 Success 062a50b4-51bd-11e7-9496-00163eb5e904&lt;br /&gt;
&lt;br /&gt;
Now when listing the network we can see this port belongs to vim network and if we deploy a NS using dataplane interfaces connected to this network all of them will be able to communicate with the external element/network through the attached port.&lt;br /&gt;
 root@RO:~# openmano vim-net-list --datacenter mydc mydc_net&lt;br /&gt;
 d30315d5-4ed7-442b-94e4-cf81d058ae00   mydc_net             ACTIVE               2017-06-15T11:23:08Z&lt;br /&gt;
 sdn_attached_ports:&lt;br /&gt;
 -   switch_port: Te1/1&lt;br /&gt;
     uuid: 062a50b4-51bd-11e7-9496-00163eb5e904&lt;br /&gt;
     vlan: 300&lt;br /&gt;
&lt;br /&gt;
In order to remove a port from a network you can use the --id option to remove a specific port from the network or --all to remove all of them:&lt;br /&gt;
 root@RO:~# openmano vim-net-sdn-detach mydc_net --all --datacenter mydc&lt;br /&gt;
 Confirm action&#039; (y/N)? y&lt;br /&gt;
 Success&lt;br /&gt;
 root@RO:~# openmano vim-net-list --datacenter mydc mydc_net&lt;br /&gt;
 d30315d5-4ed7-442b-94e4-cf81d058ae00   mydc_net             ACTIVE               2017-06-15T11:23:08Z&lt;br /&gt;
&lt;br /&gt;
=Additional information=&lt;br /&gt;
&lt;br /&gt;
*[[Developer HowTo for openvim#Creating_a_new_SDN_plugin|Creating a new plugin for SDN assist]]&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=How_to_install_OSM_in_Amazon_EC2&amp;diff=6088</id>
		<title>How to install OSM in Amazon EC2</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=How_to_install_OSM_in_Amazon_EC2&amp;diff=6088"/>
		<updated>2021-02-17T16:56:25Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources:&#039;&#039;&#039;&lt;br /&gt;
*	MINIMUM: 2 CPUs, 4 GB RAM, 20GB disk and a single interface with Internet access&lt;br /&gt;
*	RECOMMENDED: 2 CPUs, 8 GB RAM, 40GB disk and a single interface with Internet access&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instance Type/AMI:&#039;&#039;&#039;&lt;br /&gt;
*	Recommended Instance Type: m5.xlarge (https://aws.amazon.com/ec2/instance-types/)&lt;br /&gt;
*	Ubuntu 16.04 (64-bit variant required) as base AMI (http://releases.ubuntu.com/16.04/)&lt;br /&gt;
*	Ubuntu AMI’s: https://cloud-images.ubuntu.com/locator/ec2/&lt;br /&gt;
*	Launching an EC2 instance: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-launch-instance&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;The following installation steps assume that you already have an EC2 instance launched which meets the minimum requirements mentioned above.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= OSM Installation =&lt;br /&gt;
&lt;br /&gt;
1.	Install OSM and save installation logs to a file for troubleshooting if needed:&lt;br /&gt;
&lt;br /&gt;
 wget https://osm-download.etsi.org/ftp/osm-6.0-six/install_osm.sh&lt;br /&gt;
 chmod +x install_osm.sh&lt;br /&gt;
 ./install_osm.sh 2&amp;gt;&amp;amp;1 | tee osm_install_log.txt&lt;br /&gt;
&lt;br /&gt;
2.	Answer the following dialog box questions accordingly:&lt;br /&gt;
&lt;br /&gt;
*	The installation will configure LXD, install juju, install docker CE and init a docker swarm, as pre-requirements. Do you want to proceed (Y/n)? Y&lt;br /&gt;
*	Do you want to configure the LXD bridge? Yes&lt;br /&gt;
*	Do you want to setup an IPv4 subnet? Yes&lt;br /&gt;
*	&#039;&#039;&amp;lt;&amp;lt; &#039;&#039;&#039;Default values&#039;&#039;&#039; apply for next questions &amp;gt;&amp;gt;&#039;&#039;&lt;br /&gt;
*	Do you want to setup an IPv6 subnet? No&lt;br /&gt;
&lt;br /&gt;
3.	You will notice 10 Docker Containers created on the EC2 instance. Check the status of the containers and Docker service:&lt;br /&gt;
 docker stack ps osm |grep -i running&lt;br /&gt;
 docker service ls&lt;br /&gt;
&lt;br /&gt;
4.	Create the AWS VIM Account (AWS Site)&lt;br /&gt;
&lt;br /&gt;
NOTE: Make sure to select the region in which your EC2 instance resides.&lt;br /&gt;
&lt;br /&gt;
 osm vim-create --name aws-site --user &amp;lt;aws-access-key&amp;gt; --password &amp;lt;aws-secret-key&amp;gt; --auth_url  https://aws.amazon.com --tenant admin --account_type aws --config &#039;{region_name: us-west-2, flavor_info: “{t2.nano: {cpus: 1, disk: 100, ram: 512}, t2.micro: {cpus: 1, disk: 100, ram: 1024}, t2.small: {cpus: 1, disk: 100, ram: 2048}, m1.small: {cpus: 1, disk: 160, ram: 1741}}”}&#039;&lt;br /&gt;
  	        &lt;br /&gt;
5.	Access the OSM Console via the EC2 Instance’s Private IP from another EC2 Instance in the same subnet:&lt;br /&gt;
&lt;br /&gt;
NOTE: You can use a Windows instance to easily access the OSM Console. &lt;br /&gt;
Launching an EC2 Windows Instance:&lt;br /&gt;
https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EC2_GetStarted.html#ec2-launch-instance&lt;br /&gt;
&lt;br /&gt;
 http://1.2.3.4&lt;br /&gt;
 username: admin&lt;br /&gt;
 password: admin&lt;br /&gt;
&lt;br /&gt;
6.	Deploy/Test a network service by using any of the available VNF and NS packagers from ‘https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/’:&lt;br /&gt;
 wget https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_1alt_nsd.tar.gz&lt;br /&gt;
 wget https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/hackfest_1alt_vnfd.tar.gz&lt;br /&gt;
 &lt;br /&gt;
 osm vnfd-create hackfest_1alt_vnfd.tar.gz&lt;br /&gt;
 osm nsd-create hackfest_1alt_nsd.tar.gz&lt;br /&gt;
 osm ns-create --ns_name hackfest1alt --nsd_name hackfest1alt-ns --vim_account aws-site --ssh_keys &amp;lt;PUBKEY_FILE&amp;gt; --config &#039;{vld: [ {name: mgmtnet, vim-network-name: subnet-xxxxxxx} ] }&#039;&lt;br /&gt;
 osm ns-list&lt;br /&gt;
 osm ns-show hackfest1alt&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=Advanced_OSM_installation_procedures&amp;diff=6087</id>
		<title>Advanced OSM installation procedures</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=Advanced_OSM_installation_procedures&amp;diff=6087"/>
		<updated>2021-02-17T16:56:14Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
= Installer commands =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Usage:&#039;&#039;&#039;&lt;br /&gt;
 ./install_osm.sh [OPTIONS]&lt;br /&gt;
With no options, it will install OSM from binaries.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Options:&#039;&#039;&#039;&lt;br /&gt;
     --uninstall:    uninstall OSM: remove the containers and delete NAT rules&lt;br /&gt;
     --source:       install OSM from source code using the latest stable tag&lt;br /&gt;
     -r &amp;lt;repo&amp;gt;:      use specified repository name for osm packages&lt;br /&gt;
     -R &amp;lt;release&amp;gt;:   use specified release for osm binaries (deb packages, lxd images, ...)&lt;br /&gt;
     -u &amp;lt;repo base&amp;gt;: use specified repository url for osm packages&lt;br /&gt;
     -k &amp;lt;repo key&amp;gt;:  use specified repository public key url&lt;br /&gt;
     -b &amp;lt;refspec&amp;gt;:   install OSM from source code using a specific branch (master, v2.0, ...) or tag&lt;br /&gt;
                     -b master          (main dev branch)&lt;br /&gt;
                     -b v2.0            (v2.0 branch)&lt;br /&gt;
                     -b tags/v1.1.0     (a specific tag)&lt;br /&gt;
                     ...&lt;br /&gt;
     --lxdimages:    download lxd images from OSM repository instead of creating them from scratch&lt;br /&gt;
     -l &amp;lt;lxd_repo&amp;gt;:  use specified repository url for lxd images&lt;br /&gt;
     -p &amp;lt;path&amp;gt;:      use specified repository path for lxd images&lt;br /&gt;
     --lightweight:  install lightweight build of OSM (default installation)&lt;br /&gt;
     --soui:         install classic build of OSM (Rel THREE v3.1, based on LXD containers, with SO and UI)&lt;br /&gt;
     --vimemu:       additionally deploy the VIM emulator as a docker container&lt;br /&gt;
     --elk_stack:    additionally deploy an ELK docker stack for event logging&lt;br /&gt;
     --pm_stack:     additionally deploy a Prometheus+Grafana stack for performance monitoring (PM)&lt;br /&gt;
     -o &amp;lt;ADDON&amp;gt;:     do not install OSM, but ONLY one of the addons (vimemu, elk_stack, pm_stack) (assumes OSM is already installed)&lt;br /&gt;
     --develop:      (deprecated, use &#039;-b master&#039;) install OSM from source code using the master branch&lt;br /&gt;
     --nat:          install only NAT rules&lt;br /&gt;
     --noconfigure:  DO NOT install osmclient, DO NOT install NAT rules, DO NOT configure modules&lt;br /&gt;
     --showopts:     print chosen options and exit (only for debugging)&lt;br /&gt;
     -y:             do not prompt for confirmation, assumes yes&lt;br /&gt;
     -D &amp;lt;devops path&amp;gt; use local devops installation path&lt;br /&gt;
     -h / --help:    prints help&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_client&amp;diff=6086</id>
		<title>OSM client</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_client&amp;diff=6086"/>
		<updated>2021-02-17T16:56:02Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MARKDOWN}}&lt;br /&gt;
&lt;br /&gt;
**THIS PAGE IS DEPRECATED**. OSM User Guide has been moved to a new location: **&amp;lt;https://osm.etsi.org/docs/user-guide/&amp;gt;**&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
In those cases where you have an OSM already installed in a remote server, you might still want to operate it from your local computer using the OSM client. The OSM client provides you a client library and a command-line tool to operate OSM..&lt;br /&gt;
&lt;br /&gt;
## Installation&lt;br /&gt;
&lt;br /&gt;
OSM client comes bundled with OSM installation, so if you successfully installed OSM, you already have it.&lt;br /&gt;
&lt;br /&gt;
In addition, you can also install it in a different computer. In order to install OSM client, you will need a Linux machine and follow this procedure.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
wget -qO - https://osm-download.etsi.org/repository/osm/debian/ReleaseSIX/OSM%20ETSI%20Release%20Key.gpg | sudo apt-key add -&lt;br /&gt;
sudo add-apt-repository -y &amp;quot;deb [arch=amd64] https://osm-download.etsi.org/repository/osm/debian/ReleaseSIX stable devops osmclient&amp;quot;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo -H pip install python-magic&lt;br /&gt;
sudo apt-get install python-osmclient&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Usage (client commands)&lt;br /&gt;
&lt;br /&gt;
Once installed, type “osm” to see a list of commands. If installed in a host different from where OSM is running, at minimum you will need to specify the OSM host, either via an environment variable or via the osm command line (see “osm --help” for info).&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
export OSM_HOSTNAME=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
**Usage:**&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
osm [OPTIONS] COMMAND [ARGS]...&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
**Options:**&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
  --hostname TEXT  hostname of server.  Also can set OSM_HOSTNAME in&lt;br /&gt;
                   environment&lt;br /&gt;
  --user TEXT      user (defaults to admin). Also can set OSM_USER in&lt;br /&gt;
                   environment&lt;br /&gt;
  --password TEXT  password (defaults to admin). Also can set OSM_PASSWORD in&lt;br /&gt;
                   environment&lt;br /&gt;
  --project TEXT   project (defaults to admin). Also can set OSM_PROJECT in&lt;br /&gt;
                   environment&lt;br /&gt;
  --help           Show this message and exit.&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
**Commands:**&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
  netslice-instance-create   creates a new Network Slice Instance&lt;br /&gt;
  netslice-instance-delete   deletes a Network Slice Instance (NSI)&lt;br /&gt;
  netslice-instance-list     list all Network Slice Instances (NSI)&lt;br /&gt;
  netslice-instance-op-list  shows the history of operations over a...&lt;br /&gt;
  netslice-instance-op-show  shows the info of an operation over a Network&lt;br /&gt;
                             Slice Instance(NSI)&lt;br /&gt;
  netslice-instance-show     shows the content of a Network Slice Instance&lt;br /&gt;
                             (NSI)&lt;br /&gt;
  netslice-template-create   creates a new Network Slice Template (NST)&lt;br /&gt;
  netslice-template-delete   deletes a Network Slice Template (NST)&lt;br /&gt;
  netslice-template-list     list all Network Slice Templates (NST) in the...&lt;br /&gt;
  netslice-template-show     shows the content of a Network Slice Template&lt;br /&gt;
                             (NST)&lt;br /&gt;
  netslice-template-update   updates a Network Slice Template (NST)&lt;br /&gt;
  nf-list                    list all NF instances Options: --ns TEXT NS...&lt;br /&gt;
  nfpkg-create               creates a new NFpkg&lt;br /&gt;
  nfpkg-delete               deletes a NFpkg&lt;br /&gt;
  nfpkg-list                 list all NF pkg (VNF pkg, PNF pkg, HNF pkg)...&lt;br /&gt;
  nfpkg-show                 shows the content of a NF Descriptor&lt;br /&gt;
  nfpkg-update               updates a NFpkg&lt;br /&gt;
  ns-action                  executes an action/primitive over a NS...&lt;br /&gt;
  ns-alarm-create            creates a new alarm for a NS instance&lt;br /&gt;
  ns-create                  creates a new Network Service instance&lt;br /&gt;
  ns-delete                  deletes a NS instance&lt;br /&gt;
  ns-list                    list all NS instances Options: --filter...&lt;br /&gt;
  ns-metric-export           exports a metric to the internal OSM bus,...&lt;br /&gt;
  ns-op-list                 shows the history of operations over a NS...&lt;br /&gt;
  ns-op-show                 shows the info of an operation&lt;br /&gt;
  ns-show                    shows the info of a NS instance&lt;br /&gt;
  nsd-create                 creates a new NSD/NSpkg&lt;br /&gt;
  nsd-delete                 deletes a NSD/NSpkg&lt;br /&gt;
  nsd-list                   list all NSD/NS pkg in the system&lt;br /&gt;
  nsd-show                   shows the content of a NSD&lt;br /&gt;
  nsd-update                 updates a NSD/NSpkg&lt;br /&gt;
  nsi-create                 creates a new Network Slice Instance&lt;br /&gt;
  nsi-delete                 deletes a Network Slice Instance (NSI)&lt;br /&gt;
  nsi-list                   list all Network Slice Instances (NSI)&lt;br /&gt;
  nsi-op-list                shows the history of operations over a...&lt;br /&gt;
  nsi-op-show                shows the info of an operation over a Network&lt;br /&gt;
                             Slice Instance(NSI)&lt;br /&gt;
  nsi-show                   shows the content of a Network Slice Instance&lt;br /&gt;
                             (NSI)&lt;br /&gt;
  nspkg-create               creates a new NSD/NSpkg&lt;br /&gt;
  nspkg-delete               deletes a NSD/NSpkg&lt;br /&gt;
  nspkg-list                 list all NSD/NS pkg in the system&lt;br /&gt;
  nspkg-show                 shows the content of a NSD&lt;br /&gt;
  nspkg-update               updates a NSD/NSpkg&lt;br /&gt;
  nst-create                 creates a new Network Slice Template (NST)&lt;br /&gt;
  nst-delete                 deletes a Network Slice Template (NST)&lt;br /&gt;
  nst-list                   list all Network Slice Templates (NST) in the...&lt;br /&gt;
  nst-show                   shows the content of a Network Slice Template&lt;br /&gt;
                             (NST)&lt;br /&gt;
  nst-update                 updates a Network Slice Template (NST)&lt;br /&gt;
  pdu-create                 adds a new Physical Deployment Unit to the&lt;br /&gt;
                             catalog&lt;br /&gt;
  pdu-delete                 deletes a Physical Deployment Unit (PDU)&lt;br /&gt;
  pdu-list                   list all Physical Deployment Units (PDU)&lt;br /&gt;
  pdu-show                   shows the content of a Physical Deployment Unit&lt;br /&gt;
                             (PDU)&lt;br /&gt;
  project-create             Creates a new project NAME: name of the...&lt;br /&gt;
  project-delete             deletes a project NAME: name or ID of the...&lt;br /&gt;
  project-list               list all projects&lt;br /&gt;
  project-show               shows the details of a project NAME: name or...&lt;br /&gt;
  project-update             Update a project name :param ctx: :param...&lt;br /&gt;
  role-create                creates a role&lt;br /&gt;
  role-delete                deletes a role&lt;br /&gt;
  role-list                  list all roles&lt;br /&gt;
  role-show                  show specific role&lt;br /&gt;
  role-update                updates a role&lt;br /&gt;
  sdnc-create                creates a new SDN controller&lt;br /&gt;
  sdnc-delete                deletes an SDN controller NAME: name or ID of...&lt;br /&gt;
  sdnc-list                  list all SDN controllers&lt;br /&gt;
  sdnc-show                  shows the details of an SDN controller NAME:...&lt;br /&gt;
  sdnc-update                updates an SDN controller&lt;br /&gt;
  upload-package             uploads a VNF package or NS package FILENAME:...&lt;br /&gt;
  user-create                Creates a new user USERNAME: name of the...&lt;br /&gt;
  user-delete                deletes a user NAME: name or ID of the user...&lt;br /&gt;
  user-list                  list all users&lt;br /&gt;
  user-show                  shows the details of a user NAME: name or ID...&lt;br /&gt;
  user-update                Update a user information USERNAME: name of...&lt;br /&gt;
  vim-create                 creates a new VIM account&lt;br /&gt;
  vim-delete                 deletes a VIM account NAME: name or ID of the...&lt;br /&gt;
  vim-list                   list all VIM accounts&lt;br /&gt;
  vim-show                   shows the details of a VIM account NAME: name...&lt;br /&gt;
  vim-update                 updates a VIM account&lt;br /&gt;
  vnf-list                   list all NF instances&lt;br /&gt;
  vnf-scale                  Executes a VNF scale (adding/removing VDUs)...&lt;br /&gt;
  vnf-show                   shows the info of a VNF instance&lt;br /&gt;
  vnfd-create                creates a new VNFD/VNFpkg&lt;br /&gt;
  vnfd-delete                deletes a VNFD/VNFpkg&lt;br /&gt;
  vnfd-list                  list all VNFD/VNF pkg in the system&lt;br /&gt;
  vnfd-show                  shows the content of a VNFD&lt;br /&gt;
  vnfd-update                updates a new VNFD/VNFpkg&lt;br /&gt;
  vnfpkg-create              creates a new VNFD/VNFpkg&lt;br /&gt;
  vnfpkg-delete              deletes a VNFD/VNFpkg&lt;br /&gt;
  vnfpkg-list                list all VNFD/VNF pkg in the system&lt;br /&gt;
  vnfpkg-show                shows the content of a VNFD&lt;br /&gt;
  vnfpkg-update              updates a VNFD/VNFpkg&lt;br /&gt;
  wim-create                 creates a new WIM account&lt;br /&gt;
  wim-delete                 deletes a WIM account NAME: name or ID of the...&lt;br /&gt;
  wim-list                   list all WIM accounts&lt;br /&gt;
  wim-show                   shows the details of a WIM account NAME: name...&lt;br /&gt;
  wim-update                 updates a WIM account&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Enable autocompletion&lt;br /&gt;
&lt;br /&gt;
You can enable autocompletion in OSM client by creating a file osm-complete.sh in the following way:&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
mkdir -p $HOME/.bash_completion.d&lt;br /&gt;
_OSM_COMPLETE=source osm &amp;gt; $HOME/.bash_completion.d/osm-complete.sh&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
Then you can add the following to your $HOME/.bashrc file:&lt;br /&gt;
```bash&lt;br /&gt;
. .bash_completion.d/osm-complete.sh&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Other installation methods&lt;br /&gt;
&lt;br /&gt;
### Installing from git repo&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
# Ubuntu pre-requirements&lt;br /&gt;
sudo apt install python-pip libcurl4-gnutls-dev libgnutls-dev&lt;br /&gt;
# CentOS pre-requirements&lt;br /&gt;
# sudo yum install python-pip libcurl-devel gnutls-devel&lt;br /&gt;
sudo -H pip install python-magic&lt;br /&gt;
# Install OSM client from the git repo.&lt;br /&gt;
# You can install the latest client from master branch in this way:&lt;br /&gt;
sudo -H pip install git+https://osm.etsi.org/gerrit/osm/osmclient&lt;br /&gt;
# You could also install a specific tag/version in this way&lt;br /&gt;
sudo -H pip install git+https://osm.etsi.org/gerrit/osm/osmclient@v6.0.1&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### Installing from cloned repo (for developers)&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
# Ubuntu pre-requirements&lt;br /&gt;
sudo apt install python-pip libcurl4-gnutls-dev libgnutls-dev&lt;br /&gt;
# Make sure that &lt;br /&gt;
# sudo yum install python-pip libcurl-devel gnutls-devel&lt;br /&gt;
sudo -H pip install python-magic&lt;br /&gt;
# Clone the osmclient repo and install OSM client from the git repo.&lt;br /&gt;
git clone https://osm.etsi.org/gerrit/osm/osmclient&lt;br /&gt;
sudo -H pip install osmclient&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Using osmclient as a library to interact with OSM&lt;br /&gt;
&lt;br /&gt;
Assuming that you have installed python-osmclient package, it&#039;s pretty simple to write some Python code to interact with OSM.&lt;br /&gt;
&lt;br /&gt;
### Simple Python code to get the list of NS packages&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
from osmclient import client&lt;br /&gt;
from osmclient.common.exceptions import ClientException&lt;br /&gt;
hostname = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
myclient = client.Client(host=hostname, sol005=True)&lt;br /&gt;
resp = myclient.nsd.list()&lt;br /&gt;
print yaml.safe_dump(resp)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### Simple Python code to get the list of VNF packages from a specific user and project&lt;br /&gt;
&lt;br /&gt;
The code will print for each package a pretty table, then the full details in yaml&lt;br /&gt;
```python&lt;br /&gt;
from osmclient import client&lt;br /&gt;
from osmclient.common.exceptions import ClientException&lt;br /&gt;
import yaml&lt;br /&gt;
from prettytable import PrettyTable&lt;br /&gt;
hostname = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
user = admin&lt;br /&gt;
password = admin&lt;br /&gt;
project = admin&lt;br /&gt;
kwargs = {}&lt;br /&gt;
if user is not None:&lt;br /&gt;
    kwargs[&#039;user&#039;]=user&lt;br /&gt;
if password is not None:&lt;br /&gt;
    kwargs[&#039;password&#039;]=password&lt;br /&gt;
if project is not None:&lt;br /&gt;
   kwargs[&#039;project&#039;]=project&lt;br /&gt;
myclient = client.Client(host=hostname, sol005=True, **kwargs)&lt;br /&gt;
resp = myclient.vnfd.list()&lt;br /&gt;
print yaml.safe_dump(resp)&lt;br /&gt;
```&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_client&amp;diff=6085</id>
		<title>OSM client</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_client&amp;diff=6085"/>
		<updated>2021-02-17T16:55:22Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
{{MARKDOWN}}&lt;br /&gt;
&lt;br /&gt;
In those cases where you have an OSM already installed in a remote server, you might still want to operate it from your local computer using the OSM client. The OSM client provides you a client library and a command-line tool to operate OSM..&lt;br /&gt;
&lt;br /&gt;
## Installation&lt;br /&gt;
&lt;br /&gt;
OSM client comes bundled with OSM installation, so if you successfully installed OSM, you already have it.&lt;br /&gt;
&lt;br /&gt;
In addition, you can also install it in a different computer. In order to install OSM client, you will need a Linux machine and follow this procedure.&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
wget -qO - https://osm-download.etsi.org/repository/osm/debian/ReleaseSIX/OSM%20ETSI%20Release%20Key.gpg | sudo apt-key add -&lt;br /&gt;
sudo add-apt-repository -y &amp;quot;deb [arch=amd64] https://osm-download.etsi.org/repository/osm/debian/ReleaseSIX stable devops osmclient&amp;quot;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo -H pip install python-magic&lt;br /&gt;
sudo apt-get install python-osmclient&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Usage (client commands)&lt;br /&gt;
&lt;br /&gt;
Once installed, type “osm” to see a list of commands. If installed in a host different from where OSM is running, at minimum you will need to specify the OSM host, either via an environment variable or via the osm command line (see “osm --help” for info).&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
export OSM_HOSTNAME=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
**Usage:**&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
osm [OPTIONS] COMMAND [ARGS]...&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
**Options:**&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
  --hostname TEXT  hostname of server.  Also can set OSM_HOSTNAME in&lt;br /&gt;
                   environment&lt;br /&gt;
  --user TEXT      user (defaults to admin). Also can set OSM_USER in&lt;br /&gt;
                   environment&lt;br /&gt;
  --password TEXT  password (defaults to admin). Also can set OSM_PASSWORD in&lt;br /&gt;
                   environment&lt;br /&gt;
  --project TEXT   project (defaults to admin). Also can set OSM_PROJECT in&lt;br /&gt;
                   environment&lt;br /&gt;
  --help           Show this message and exit.&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
**Commands:**&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
  netslice-instance-create   creates a new Network Slice Instance&lt;br /&gt;
  netslice-instance-delete   deletes a Network Slice Instance (NSI)&lt;br /&gt;
  netslice-instance-list     list all Network Slice Instances (NSI)&lt;br /&gt;
  netslice-instance-op-list  shows the history of operations over a...&lt;br /&gt;
  netslice-instance-op-show  shows the info of an operation over a Network&lt;br /&gt;
                             Slice Instance(NSI)&lt;br /&gt;
  netslice-instance-show     shows the content of a Network Slice Instance&lt;br /&gt;
                             (NSI)&lt;br /&gt;
  netslice-template-create   creates a new Network Slice Template (NST)&lt;br /&gt;
  netslice-template-delete   deletes a Network Slice Template (NST)&lt;br /&gt;
  netslice-template-list     list all Network Slice Templates (NST) in the...&lt;br /&gt;
  netslice-template-show     shows the content of a Network Slice Template&lt;br /&gt;
                             (NST)&lt;br /&gt;
  netslice-template-update   updates a Network Slice Template (NST)&lt;br /&gt;
  nf-list                    list all NF instances Options: --ns TEXT NS...&lt;br /&gt;
  nfpkg-create               creates a new NFpkg&lt;br /&gt;
  nfpkg-delete               deletes a NFpkg&lt;br /&gt;
  nfpkg-list                 list all NF pkg (VNF pkg, PNF pkg, HNF pkg)...&lt;br /&gt;
  nfpkg-show                 shows the content of a NF Descriptor&lt;br /&gt;
  nfpkg-update               updates a NFpkg&lt;br /&gt;
  ns-action                  executes an action/primitive over a NS...&lt;br /&gt;
  ns-alarm-create            creates a new alarm for a NS instance&lt;br /&gt;
  ns-create                  creates a new Network Service instance&lt;br /&gt;
  ns-delete                  deletes a NS instance&lt;br /&gt;
  ns-list                    list all NS instances Options: --filter...&lt;br /&gt;
  ns-metric-export           exports a metric to the internal OSM bus,...&lt;br /&gt;
  ns-op-list                 shows the history of operations over a NS...&lt;br /&gt;
  ns-op-show                 shows the info of an operation&lt;br /&gt;
  ns-show                    shows the info of a NS instance&lt;br /&gt;
  nsd-create                 creates a new NSD/NSpkg&lt;br /&gt;
  nsd-delete                 deletes a NSD/NSpkg&lt;br /&gt;
  nsd-list                   list all NSD/NS pkg in the system&lt;br /&gt;
  nsd-show                   shows the content of a NSD&lt;br /&gt;
  nsd-update                 updates a NSD/NSpkg&lt;br /&gt;
  nsi-create                 creates a new Network Slice Instance&lt;br /&gt;
  nsi-delete                 deletes a Network Slice Instance (NSI)&lt;br /&gt;
  nsi-list                   list all Network Slice Instances (NSI)&lt;br /&gt;
  nsi-op-list                shows the history of operations over a...&lt;br /&gt;
  nsi-op-show                shows the info of an operation over a Network&lt;br /&gt;
                             Slice Instance(NSI)&lt;br /&gt;
  nsi-show                   shows the content of a Network Slice Instance&lt;br /&gt;
                             (NSI)&lt;br /&gt;
  nspkg-create               creates a new NSD/NSpkg&lt;br /&gt;
  nspkg-delete               deletes a NSD/NSpkg&lt;br /&gt;
  nspkg-list                 list all NSD/NS pkg in the system&lt;br /&gt;
  nspkg-show                 shows the content of a NSD&lt;br /&gt;
  nspkg-update               updates a NSD/NSpkg&lt;br /&gt;
  nst-create                 creates a new Network Slice Template (NST)&lt;br /&gt;
  nst-delete                 deletes a Network Slice Template (NST)&lt;br /&gt;
  nst-list                   list all Network Slice Templates (NST) in the...&lt;br /&gt;
  nst-show                   shows the content of a Network Slice Template&lt;br /&gt;
                             (NST)&lt;br /&gt;
  nst-update                 updates a Network Slice Template (NST)&lt;br /&gt;
  pdu-create                 adds a new Physical Deployment Unit to the&lt;br /&gt;
                             catalog&lt;br /&gt;
  pdu-delete                 deletes a Physical Deployment Unit (PDU)&lt;br /&gt;
  pdu-list                   list all Physical Deployment Units (PDU)&lt;br /&gt;
  pdu-show                   shows the content of a Physical Deployment Unit&lt;br /&gt;
                             (PDU)&lt;br /&gt;
  project-create             Creates a new project NAME: name of the...&lt;br /&gt;
  project-delete             deletes a project NAME: name or ID of the...&lt;br /&gt;
  project-list               list all projects&lt;br /&gt;
  project-show               shows the details of a project NAME: name or...&lt;br /&gt;
  project-update             Update a project name :param ctx: :param...&lt;br /&gt;
  role-create                creates a role&lt;br /&gt;
  role-delete                deletes a role&lt;br /&gt;
  role-list                  list all roles&lt;br /&gt;
  role-show                  show specific role&lt;br /&gt;
  role-update                updates a role&lt;br /&gt;
  sdnc-create                creates a new SDN controller&lt;br /&gt;
  sdnc-delete                deletes an SDN controller NAME: name or ID of...&lt;br /&gt;
  sdnc-list                  list all SDN controllers&lt;br /&gt;
  sdnc-show                  shows the details of an SDN controller NAME:...&lt;br /&gt;
  sdnc-update                updates an SDN controller&lt;br /&gt;
  upload-package             uploads a VNF package or NS package FILENAME:...&lt;br /&gt;
  user-create                Creates a new user USERNAME: name of the...&lt;br /&gt;
  user-delete                deletes a user NAME: name or ID of the user...&lt;br /&gt;
  user-list                  list all users&lt;br /&gt;
  user-show                  shows the details of a user NAME: name or ID...&lt;br /&gt;
  user-update                Update a user information USERNAME: name of...&lt;br /&gt;
  vim-create                 creates a new VIM account&lt;br /&gt;
  vim-delete                 deletes a VIM account NAME: name or ID of the...&lt;br /&gt;
  vim-list                   list all VIM accounts&lt;br /&gt;
  vim-show                   shows the details of a VIM account NAME: name...&lt;br /&gt;
  vim-update                 updates a VIM account&lt;br /&gt;
  vnf-list                   list all NF instances&lt;br /&gt;
  vnf-scale                  Executes a VNF scale (adding/removing VDUs)...&lt;br /&gt;
  vnf-show                   shows the info of a VNF instance&lt;br /&gt;
  vnfd-create                creates a new VNFD/VNFpkg&lt;br /&gt;
  vnfd-delete                deletes a VNFD/VNFpkg&lt;br /&gt;
  vnfd-list                  list all VNFD/VNF pkg in the system&lt;br /&gt;
  vnfd-show                  shows the content of a VNFD&lt;br /&gt;
  vnfd-update                updates a new VNFD/VNFpkg&lt;br /&gt;
  vnfpkg-create              creates a new VNFD/VNFpkg&lt;br /&gt;
  vnfpkg-delete              deletes a VNFD/VNFpkg&lt;br /&gt;
  vnfpkg-list                list all VNFD/VNF pkg in the system&lt;br /&gt;
  vnfpkg-show                shows the content of a VNFD&lt;br /&gt;
  vnfpkg-update              updates a VNFD/VNFpkg&lt;br /&gt;
  wim-create                 creates a new WIM account&lt;br /&gt;
  wim-delete                 deletes a WIM account NAME: name or ID of the...&lt;br /&gt;
  wim-list                   list all WIM accounts&lt;br /&gt;
  wim-show                   shows the details of a WIM account NAME: name...&lt;br /&gt;
  wim-update                 updates a WIM account&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Enable autocompletion&lt;br /&gt;
&lt;br /&gt;
You can enable autocompletion in OSM client by creating a file osm-complete.sh in the following way:&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
mkdir -p $HOME/.bash_completion.d&lt;br /&gt;
_OSM_COMPLETE=source osm &amp;gt; $HOME/.bash_completion.d/osm-complete.sh&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
Then you can add the following to your $HOME/.bashrc file:&lt;br /&gt;
```bash&lt;br /&gt;
. .bash_completion.d/osm-complete.sh&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Other installation methods&lt;br /&gt;
&lt;br /&gt;
### Installing from git repo&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
# Ubuntu pre-requirements&lt;br /&gt;
sudo apt install python-pip libcurl4-gnutls-dev libgnutls-dev&lt;br /&gt;
# CentOS pre-requirements&lt;br /&gt;
# sudo yum install python-pip libcurl-devel gnutls-devel&lt;br /&gt;
sudo -H pip install python-magic&lt;br /&gt;
# Install OSM client from the git repo.&lt;br /&gt;
# You can install the latest client from master branch in this way:&lt;br /&gt;
sudo -H pip install git+https://osm.etsi.org/gerrit/osm/osmclient&lt;br /&gt;
# You could also install a specific tag/version in this way&lt;br /&gt;
sudo -H pip install git+https://osm.etsi.org/gerrit/osm/osmclient@v6.0.1&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### Installing from cloned repo (for developers)&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
# Ubuntu pre-requirements&lt;br /&gt;
sudo apt install python-pip libcurl4-gnutls-dev libgnutls-dev&lt;br /&gt;
# Make sure that &lt;br /&gt;
# sudo yum install python-pip libcurl-devel gnutls-devel&lt;br /&gt;
sudo -H pip install python-magic&lt;br /&gt;
# Clone the osmclient repo and install OSM client from the git repo.&lt;br /&gt;
git clone https://osm.etsi.org/gerrit/osm/osmclient&lt;br /&gt;
sudo -H pip install osmclient&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Using osmclient as a library to interact with OSM&lt;br /&gt;
&lt;br /&gt;
Assuming that you have installed python-osmclient package, it&#039;s pretty simple to write some Python code to interact with OSM.&lt;br /&gt;
&lt;br /&gt;
### Simple Python code to get the list of NS packages&lt;br /&gt;
&lt;br /&gt;
```python&lt;br /&gt;
from osmclient import client&lt;br /&gt;
from osmclient.common.exceptions import ClientException&lt;br /&gt;
hostname = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
myclient = client.Client(host=hostname, sol005=True)&lt;br /&gt;
resp = myclient.nsd.list()&lt;br /&gt;
print yaml.safe_dump(resp)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### Simple Python code to get the list of VNF packages from a specific user and project&lt;br /&gt;
&lt;br /&gt;
The code will print for each package a pretty table, then the full details in yaml&lt;br /&gt;
```python&lt;br /&gt;
from osmclient import client&lt;br /&gt;
from osmclient.common.exceptions import ClientException&lt;br /&gt;
import yaml&lt;br /&gt;
from prettytable import PrettyTable&lt;br /&gt;
hostname = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
user = admin&lt;br /&gt;
password = admin&lt;br /&gt;
project = admin&lt;br /&gt;
kwargs = {}&lt;br /&gt;
if user is not None:&lt;br /&gt;
    kwargs[&#039;user&#039;]=user&lt;br /&gt;
if password is not None:&lt;br /&gt;
    kwargs[&#039;password&#039;]=password&lt;br /&gt;
if project is not None:&lt;br /&gt;
   kwargs[&#039;project&#039;]=project&lt;br /&gt;
myclient = client.Client(host=hostname, sol005=True, **kwargs)&lt;br /&gt;
resp = myclient.vnfd.list()&lt;br /&gt;
print yaml.safe_dump(resp)&lt;br /&gt;
```&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=How_to_upgrade_the_OSM_Platform&amp;diff=6084</id>
		<title>How to upgrade the OSM Platform</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=How_to_upgrade_the_OSM_Platform&amp;diff=6084"/>
		<updated>2021-02-17T16:55:08Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Upgrading the OSM platform ==&lt;br /&gt;
Due to the new architecture and dockerized components introduced from OSM Release FOUR, OSM platform upgrade is easier than ever. Upgrading to the latest minor version is as simple as running again the installer:&lt;br /&gt;
&lt;br /&gt;
 wget https://osm-download.etsi.org/ftp/osm-6.0-six/install_osm.sh&lt;br /&gt;
 chmod +x install_osm.sh&lt;br /&gt;
 ./install_osm.sh&lt;br /&gt;
&lt;br /&gt;
You will be asked if you want to proceed with the installation and configuration of LXD, juju, docker CE and the initialization of a local docker swarm, as pre-requirements. Please answer &amp;quot;y&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Then, some dialog messages related to LXD configuration will be shown. This is what you have to answer:&lt;br /&gt;
* Do you want to configure the LXD bridge? &#039;&#039;&#039;Yes&#039;&#039;&#039;&lt;br /&gt;
* Do you want to setup an IPv4 subnet? &#039;&#039;&#039;Yes&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;&amp;lt; &#039;&#039;&#039;Default values&#039;&#039;&#039; apply for next questions &amp;gt;&amp;gt;&#039;&#039;&lt;br /&gt;
* Do you want to setup an IPv6 subnet? &#039;&#039;&#039;No&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
That&#039;s all. You will have the newest OSM version installed.&lt;br /&gt;
&lt;br /&gt;
== Upgrading the OSM platform from docker images using the latest daily testing docker image or a specific tag ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Upgrading to the latest daily docker image might lead to potential issues. Moreover, every new re-deployment of the stack will involve a download of a new docker daily image if it exists. Unless you are really sure about what you are doing, please use this procedure with caution.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use option -t in the installer to specify a specific docker tag to be used by the installer.&lt;br /&gt;
&lt;br /&gt;
To install the latest daily images:&lt;br /&gt;
 ./install_osm.sh -t releasesix-daily&lt;br /&gt;
&lt;br /&gt;
To install a previous version e.g. v5.0.3:&lt;br /&gt;
 ./install_osm.sh -t v5.0.3&lt;br /&gt;
&lt;br /&gt;
The previous commands will do the installation and deployment of the stack, but will not make it persistent after re-deployments of the stack (or reboots). In order to make it persistent, you will have to update the file &amp;quot;docker-compose.yaml&amp;quot;. Below an example to update it to use releasesix-daily tag: &lt;br /&gt;
&lt;br /&gt;
 sudo sed -i &amp;quot;s/ro\:\${TAG\:-latest}/ro\:\${TAG\:-releasesix-daily}/&amp;quot; /etc/osm/docker/docker-compose.yaml&lt;br /&gt;
 sudo sed -i &amp;quot;s/lcm\:\${TAG\:-latest}/lcm\:\${TAG\:-releasesix-daily}/&amp;quot; /etc/osm/docker/docker-compose.yaml&lt;br /&gt;
 sudo sed -i &amp;quot;s/mon\:\${TAG\:-latest}/mon\:\${TAG\:-releasesix-daily}/&amp;quot; /etc/osm/docker/docker-compose.yaml&lt;br /&gt;
 sudo sed -i &amp;quot;s/pol\:\${TAG\:-latest}/pol\:\${TAG\:-releasesix-daily}/&amp;quot; /etc/osm/docker/docker-compose.yaml&lt;br /&gt;
 sudo sed -i &amp;quot;s/nbi\:\${TAG\:-latest}/nbi\:\${TAG\:-releasesix-daily}/&amp;quot; /etc/osm/docker/docker-compose.yaml&lt;br /&gt;
 sudo sed -i &amp;quot;s/light-ui\:\${TAG\:-latest}/light-ui\:\${TAG\:-releasesix-daily}/&amp;quot; /etc/osm/docker/docker-compose.yaml&lt;br /&gt;
 sudo sed -i &amp;quot;s/keystone\:\${TAG\:-latest}/keystone\:\${TAG\:-releasesix-daily}/&amp;quot; /etc/osm/docker/docker-compose.yaml&lt;br /&gt;
 docker stack rm osm &amp;amp;&amp;amp; sleep 20&lt;br /&gt;
 docker stack deploy -c /etc/osm/docker/docker-compose.yaml osm&lt;br /&gt;
&lt;br /&gt;
The osmclient will have to be updated independently. In order to use the latest &amp;quot;testing&amp;quot; osmclient, you will have to update the debian repo to use the testing repo, remove the previous debian package and install the one from the new repo as follows:&lt;br /&gt;
 sudo apt-get remove python-osmclient&lt;br /&gt;
 sudo add-apt-repository -r &amp;quot;deb [arch=amd64] https://osm-download.etsi.org/repository/osm/debian/ReleaseSIX stable osmclient&amp;quot;&lt;br /&gt;
 sudo add-apt-repository -y &amp;quot;deb [arch=amd64] https://osm-download.etsi.org/repository/osm/debian/ReleaseSIX-daily testing osmclient&amp;quot;&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get install python-osmclient&lt;br /&gt;
 dpkg -l |grep python-osmclient   #to check the installed version&lt;br /&gt;
&lt;br /&gt;
== Upgrading a specific component to use your own cloned repo (e.g. for developing purposes) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Upgrading a specific OSM component without upgrading the others accordingly may lead to potential inconsistencies. Unless you are really sure about what you are doing, please use this procedure with caution.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;The procedure below involves building manually some docker images. The developer environment might require updating manually the MTU of the docker default &amp;quot;bridge&amp;quot; network following the procedure in this link: https://docs.docker.com/network/bridge/&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For RO (ro and ro-db):&lt;br /&gt;
 docker pull mysql:5&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/RO&lt;br /&gt;
 #you can then work in the cloned repo, apply patches with git pull, etc.&lt;br /&gt;
 docker build RO -f RO/Dockerfile-local -t opensourcemano/ro:develop --no-cache&lt;br /&gt;
 docker service update osm_ro --force --image opensourcemano/ro:develop&lt;br /&gt;
 # In order to make this change persistent after reboots or restart of the docker stack&lt;br /&gt;
 # you will have to update the file /etc/osm/docker/docker-compose.yaml to reflect the change&lt;br /&gt;
 # in the docker image, for instance:&lt;br /&gt;
 # sudo sed -i &amp;quot;s/ro\:\${TAG\:-latest}/ro\:\${TAG\:-develop}/&amp;quot; /etc/osm/docker/docker-compose.yaml&lt;br /&gt;
 # docker stack rm osm &amp;amp;&amp;amp; sleep 60&lt;br /&gt;
 # docker stack deploy -c /etc/osm/docker/docker-compose.yaml osm&lt;br /&gt;
&lt;br /&gt;
For LCM:&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/LCM&lt;br /&gt;
 #you can then work in the cloned repo, apply patches with git pull, etc.&lt;br /&gt;
 docker build LCM -f LCM/Dockerfile.local -t opensourcemano/lcm:develop --no-cache&lt;br /&gt;
 docker service update osm_lcm --force --image opensourcemano/lcm:develop&lt;br /&gt;
 # In order to make this change persistent after reboots or restart of the docker stack&lt;br /&gt;
 # you will have to update the file /etc/osm/docker/docker-compose.yaml to reflect the change&lt;br /&gt;
 # in the docker image, for instance:&lt;br /&gt;
 # sudo sed -i &amp;quot;s/lcm\:\${TAG\:-latest}/lcm\:\${TAG\:-develop}/&amp;quot; /etc/osm/docker/docker-compose.yaml&lt;br /&gt;
 # docker stack rm osm &amp;amp;&amp;amp; sleep 60&lt;br /&gt;
 # docker stack deploy -c /etc/osm/docker/docker-compose.yaml osm&lt;br /&gt;
&lt;br /&gt;
For MON:&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/MON&lt;br /&gt;
 #you can then work in the cloned repo, apply patches with git pull, etc.&lt;br /&gt;
 docker build MON -f MON/docker/Dockerfile -t opensourcemano/mon:develop --no-cache&lt;br /&gt;
 docker service update osm_mon --force --image opensourcemano/mon:develop&lt;br /&gt;
 # In order to make this change persistent after reboots or restart of the docker stack&lt;br /&gt;
 # you will have to update the file /etc/osm/docker/docker-compose.yaml to reflect the change&lt;br /&gt;
 # in the docker image, for instance:&lt;br /&gt;
 # sudo sed -i &amp;quot;s/mon\:\${TAG\:-latest}/mon\:\${TAG\:-develop}/&amp;quot; /etc/osm/docker/docker-compose.yaml&lt;br /&gt;
 # docker stack rm osm &amp;amp;&amp;amp; sleep 60&lt;br /&gt;
 # docker stack deploy -c /etc/osm/docker/docker-compose.yaml osm&lt;br /&gt;
&lt;br /&gt;
For POL:&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/POL&lt;br /&gt;
 #you can then work in the cloned repo, apply patches with git pull, etc.&lt;br /&gt;
 docker build POL -f POL/docker/Dockerfile -t opensourcemano/pol:develop --no-cache&lt;br /&gt;
 docker service update osm_pol --force --image opensourcemano/pol:develop&lt;br /&gt;
 # In order to make this change persistent after reboots or restart of the docker stack&lt;br /&gt;
 # you will have to update the file /etc/osm/docker/docker-compose.yaml to reflect the change&lt;br /&gt;
 # in the docker image, for instance:&lt;br /&gt;
 # sudo sed -i &amp;quot;s/pol\:\${TAG\:-latest}/pol\:\${TAG\:-develop}/&amp;quot; /etc/osm/docker/docker-compose.yaml&lt;br /&gt;
 # docker stack rm osm &amp;amp;&amp;amp; sleep 60&lt;br /&gt;
 # docker stack deploy -c /etc/osm/docker/docker-compose.yaml osm&lt;br /&gt;
&lt;br /&gt;
For NBI:&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/NBI&lt;br /&gt;
 #you can then work in the cloned repo, apply patches with git pull, etc.&lt;br /&gt;
 docker build NBI -f NBI/Dockerfile.local -t opensourcemano/nbi:develop --no-cache&lt;br /&gt;
 docker service update osm_nbi --force --image opensourcemano/nbi:develop&lt;br /&gt;
 # In order to make this change persistent after reboots or restart of the docker stack&lt;br /&gt;
 # you will have to update the file /etc/osm/docker/docker-compose.yaml to reflect the change&lt;br /&gt;
 # in the docker image, for instance:&lt;br /&gt;
 # sudo sed -i &amp;quot;s/nbi\:\${TAG\:-latest}/nbi\:\${TAG\:-develop}/&amp;quot; /etc/osm/docker/docker-compose.yaml&lt;br /&gt;
 # docker stack rm osm &amp;amp;&amp;amp; sleep 60&lt;br /&gt;
 # docker stack deploy -c /etc/osm/docker/docker-compose.yaml osm&lt;br /&gt;
&lt;br /&gt;
For light UI:&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/LW-UI&lt;br /&gt;
 #you can then work in the cloned repo, apply patches with git pull, etc.&lt;br /&gt;
 docker build LW-UI -f LW-UI/docker/Dockerfile -t opensourcemano/light-ui:develop --no-cache&lt;br /&gt;
 docker service update osm_light-ui --force --image opensourcemano/light-ui:develop&lt;br /&gt;
 # In order to make this change persistent after reboots or restart of the docker stack&lt;br /&gt;
 # you will have to update the file /etc/osm/docker/docker-compose.yaml to reflect the change&lt;br /&gt;
 # in the docker image, for instance:&lt;br /&gt;
 # sudo sed -i &amp;quot;s/light-ui\:\${TAG\:-latest}/light-ui\:\${TAG\:-develop}/&amp;quot; /etc/osm/docker/docker-compose.yaml&lt;br /&gt;
 # docker stack rm osm &amp;amp;&amp;amp; sleep 60&lt;br /&gt;
 # docker stack deploy -c /etc/osm/docker/docker-compose.yaml osm&lt;br /&gt;
&lt;br /&gt;
== (OLD, CURRENTLY NOT WORKING) Upgrading only a specific component from source code to use the master branch or an old version (advanced users) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Upgrading a specific OSM component without upgrading the others accordingly may lead to potential inconsistencies. Unless you are really sure about what you are doing, please use this procedure with caution.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use options -b and -m in the installer:&lt;br /&gt;
 ./install_osm.sh --help&lt;br /&gt;
 usage: ./install_osm.sh [OPTIONS]&lt;br /&gt;
 Install OSM from binaries or source code (by default, from binaries)&lt;br /&gt;
  OPTIONS&lt;br /&gt;
 ...&lt;br /&gt;
     -b &amp;lt;refspec&amp;gt;:   install OSM from source code using a specific branch (master, v2.0, ...) or tag&lt;br /&gt;
                     -b master          (main dev branch)&lt;br /&gt;
                     -b v2.0            (v2.0 branch)&lt;br /&gt;
                     -b tags/v1.1.0     (a specific tag)&lt;br /&gt;
                     ...&lt;br /&gt;
     -m &amp;lt;MODULE&amp;gt;:    install OSM but only rebuild the specified docker images (RO, LCM, NBI, LW-UI, MON, KAFKA, MONGO, NONE)&lt;br /&gt;
&lt;br /&gt;
Or to use master branch in LCM:&lt;br /&gt;
 ./install_osm.sh -m LCM -b master&lt;br /&gt;
&lt;br /&gt;
Or to use an old version of MON:&lt;br /&gt;
 ./install_osm.sh -m MON -b tags/v5.0.2&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=How_to_run_OSM_on_Vagrant&amp;diff=6083</id>
		<title>How to run OSM on Vagrant</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=How_to_run_OSM_on_Vagrant&amp;diff=6083"/>
		<updated>2021-02-17T16:54:59Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=== Basic instructions ===&lt;br /&gt;
&lt;br /&gt;
Pre-built OSM vagrant images are available here: https://app.vagrantup.com/osm&lt;br /&gt;
&lt;br /&gt;
The pre-built image requires 4GB of memory and 2 VCPUs.&lt;br /&gt;
&lt;br /&gt;
1) Install vagrant (https://www.vagrantup.com) and virtualbox (https://www.virtualbox.org/)&lt;br /&gt;
&lt;br /&gt;
2) Create the initial Vagrantfile in a predefined directory of your choice:&lt;br /&gt;
&lt;br /&gt;
  vagrant init osm/releasesix&lt;br /&gt;
&lt;br /&gt;
* Note: to ensure the latest version is downloaded, destroy any previous existing OSM boxes (vagrant box list / vagrant box remove)&lt;br /&gt;
&lt;br /&gt;
3) Edit the generated Vagrantfile if you need to customize, for example, opened ports and assigned memory:&lt;br /&gt;
&lt;br /&gt;
* If you would like to access the OSM Web client externally from the virtualbox VM, you can open up port 80 (mapped to 8080 at your host) by uncommenting this line:&lt;br /&gt;
  # config.vm.network &amp;quot;forwarded_port&amp;quot;, guest: 80, host: 8080&lt;br /&gt;
&lt;br /&gt;
4) Start OSM:&lt;br /&gt;
&lt;br /&gt;
  vagrant up&lt;br /&gt;
&lt;br /&gt;
* Note: warnings related to &amp;quot;Vagrant  unable to mount VirtualBox shared folders&amp;quot; can be safely ignored.&lt;br /&gt;
&lt;br /&gt;
5) ssh to OSM:&lt;br /&gt;
&lt;br /&gt;
  vagrant ssh&lt;br /&gt;
&lt;br /&gt;
You are ready to use OSM !&lt;br /&gt;
&lt;br /&gt;
=== Additional notes ===&lt;br /&gt;
* If at any time you need to change something from the Vagrantfile, you can apply the changes by reloading the VM:&lt;br /&gt;
 vagrant reload&lt;br /&gt;
&lt;br /&gt;
* If you need to copy a file to your vagrant machine, just run &#039;vagrant ssh-config&#039; and copy the private key path, then:&lt;br /&gt;
 scp -P 2222 -i /path/to/private_key someFileName.txt vagrant@127.0.0.1:&lt;br /&gt;
&lt;br /&gt;
* To use a manually downloaded image, add the box to Vagrant and create a matching Vagrantfile:&lt;br /&gt;
  vagrant box add osm/releasesix /path/to/vagrant.box&lt;br /&gt;
  vagrant init osm/releasesix&lt;br /&gt;
&lt;br /&gt;
* If at any point you need to add the optional components (elk_stack, pm_stack...) you can do so by downloading the installer from inside your VM and executing it with the -o option, for example:&lt;br /&gt;
 wget https://osm-download.etsi.org/ftp/osm-6.0-six/install_osm.sh&lt;br /&gt;
 chmod +x install_osm.sh&lt;br /&gt;
 ./install_osm.sh -o pm_stack&lt;br /&gt;
&lt;br /&gt;
* Please note that you may need to add more forwarded ports, for example, to access Grafana after adding the pm_stack, you would need to add a line like this one to your Vagrantfile, then run &#039;vagrant reload&#039;:&lt;br /&gt;
 config.vm.network &amp;quot;forwarded_port&amp;quot;, guest: 3000, host: 3000&lt;br /&gt;
&lt;br /&gt;
=== Vagrant + VIM Emulator Quickstart ===&lt;br /&gt;
&lt;br /&gt;
 vagrant init osm/releasesix&lt;br /&gt;
 vagrant up&lt;br /&gt;
 vagrant ssh&lt;br /&gt;
&lt;br /&gt;
 # startup VIM-EMU&lt;br /&gt;
 # new version of installer will have the vim-emu start by default&lt;br /&gt;
 sudo docker run --name vim-emu -t -d --restart always --privileged --pid=&#039;host&#039; --network=netOSM -v /var/run/docker.sock:/var/run/docker.sock vim-emu-img python examples/osm_default_daemon_topology_2_pop.py&lt;br /&gt;
&lt;br /&gt;
 export OSM_HOSTNAME=127.0.0.1&lt;br /&gt;
 export OSM_SOL005=True&lt;br /&gt;
&lt;br /&gt;
 export VIMEMU_HOSTNAME=$(sudo docker inspect -f &#039;&amp;lt;nowiki&amp;gt;{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}&amp;lt;/nowiki&amp;gt;&#039; vim-emu)&lt;br /&gt;
&lt;br /&gt;
 osm vim-create --name emu-vim1 --user username --password password --auth_url http://$VIMEMU_HOSTNAME:6001/v2.0 --tenant tenantName --account_type openstack&lt;br /&gt;
&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/vim-emu.git&lt;br /&gt;
 osm vnfd-create vim-emu/examples/vnfs/ping.tar.gz&lt;br /&gt;
 osm vnfd-create vim-emu/examples/vnfs/pong.tar.gz&lt;br /&gt;
 osm nsd-create vim-emu/examples/services/pingpong_nsd.tar.gz&lt;br /&gt;
 osm ns-create --nsd_name pingpong --ns_name test --vim_account emu-vim1&lt;br /&gt;
&lt;br /&gt;
 vagrant@vagrant:~$ osm ns-list&lt;br /&gt;
 +------------------+--------------------------------------+--------------------+---------------+---------------------------------------------------------------------------------------------+&lt;br /&gt;
 | ns instance name | id                                   | operational status | config status | detailed status                                                                             |&lt;br /&gt;
 +------------------+--------------------------------------+--------------------+---------------+---------------------------------------------------------------------------------------------+&lt;br /&gt;
 | test             | 05a363b0-4ac1-49a1-a4b1-9680e39b1ade | init               | init          | Waiting ns ready at RO. RO_id=2c569b2a-b21f-495b-9837-6a469f565044; VMs: 0/2, networks: 0/1 |&lt;br /&gt;
 +------------------+--------------------------------------+--------------------+---------------+---------------------------------------------------------------------------------------------+&lt;br /&gt;
 vagrant@vagrant:~$ osm ns-list&lt;br /&gt;
 +------------------+--------------------------------------+--------------------+---------------+---------------------------------------------------------------------------------------------+&lt;br /&gt;
 | ns instance name | id                                   | operational status | config status | detailed status                                                                             |&lt;br /&gt;
 +------------------+--------------------------------------+--------------------+---------------+---------------------------------------------------------------------------------------------+&lt;br /&gt;
 | test             | 05a363b0-4ac1-49a1-a4b1-9680e39b1ade | init               | init          | Waiting ns ready at RO. RO_id=2c569b2a-b21f-495b-9837-6a469f565044; VMs: 0/2, networks: 0/1 |&lt;br /&gt;
 +------------------+--------------------------------------+--------------------+---------------+---------------------------------------------------------------------------------------------+&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_Release_FOUR&amp;diff=6082</id>
		<title>OSM Release FOUR</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_Release_FOUR&amp;diff=6082"/>
		<updated>2021-02-17T16:54:49Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
Open Source MANO (OSM) is the open source community that aims to deliver a production-quality MANO stack for NFV, capable of consuming openly published information models, available to everyone, suitable for all VNFs, operationally significant and VIM-independent. OSM is aligned to NFV ISG information models while providing first-hand feedback based on its implementation experience.&lt;br /&gt;
&lt;br /&gt;
Release FOUR brings a number of improvements over previous releases. For the full list of new features, please refer to the [https://osm.etsi.org/images/OSM-Whitepaper-TechContent-ReleaseFOUR-FINAL.pdf Rel FOUR White Paper]. For a comprehensive overview of OSM functionalities, you can also refer to the release notes of former releases ([https://osm.etsi.org/images/OSM-Whitepaper-TechContent-ReleaseONE-FINAL.pdf ONE], [https://osm.etsi.org/images/OSM-Whitepaper-TechContent-ReleaseTWO-FINAL.pdf TWO], [https://osm.etsi.org/images/OSM-Whitepaper-TechContent-ReleaseTHREE-FINAL.pdf THREE]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OSM Release FOUR Pre-view and Demo&#039;&#039;&#039;&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=KgsaA-HCX40&lt;br /&gt;
|alignment=left&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Assumptions about interaction with VIMs and VNFs=&lt;br /&gt;
The following figure illustrates OSM interaction with VIMs and VNFs:&lt;br /&gt;
* OSM talks to the VIM for the deployment of VNFs and VLs connecting them&lt;br /&gt;
* OSM talks to the VNFs deployed in a VIM to run day-0, day-1 and day-2 configuration primitives.&lt;br /&gt;
&lt;br /&gt;
[[File:Osmtopology.png|600px|OSM Release 4]]&lt;br /&gt;
&lt;br /&gt;
In order for OSM to work, it is assumed that:&lt;br /&gt;
* Each VIM has an API endpoint reachable from OSM&lt;br /&gt;
* Each VIM has a so called management network which provides IP address to VNFs&lt;br /&gt;
* That management network is reachable from OSM&lt;br /&gt;
&lt;br /&gt;
=Install OSM Release FOUR=&lt;br /&gt;
&lt;br /&gt;
This release introduces a new lightweight build, which is a cloud-native, &#039;&#039;dockerized&#039;&#039; OSM installation featuring a new kafka bus for asynchronous communications, a lighter orchestrator, performance/fault management features, a SOL005-aligned NBI, and a new GUI and OSM client leveraging the unified REST API that the NBI exposes.  This build does not include the SO and UI components, which are still available in the &#039;&#039;classic build&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Default installation procedure ==&lt;br /&gt;
&lt;br /&gt;
All you need to run OSM Release FOUR is a single server or VM with the following requirements:&lt;br /&gt;
* MINIMUM: 2 CPUs, 4 GB RAM, 20GB disk and a single interface with Internet access&lt;br /&gt;
* RECOMMENDED: 2 CPUs, 8 GB RAM, 40GB disk and a single interface with Internet access&lt;br /&gt;
* Ubuntu16.04 (64-bit variant required) as base image (http://releases.ubuntu.com/16.04/)&lt;br /&gt;
&lt;br /&gt;
Once you have prepared the host with the previous requirements, all you need to do is:&lt;br /&gt;
 wget https://osm-download.etsi.org/ftp/osm-4.0-four/install_osm.sh&lt;br /&gt;
 chmod +x install_osm.sh&lt;br /&gt;
 ./install_osm.sh&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TIP:&#039;&#039;&#039; In order to facilitate potential trobleshooting later, it is recommended to save the full log of your installation process:&lt;br /&gt;
 wget https://osm-download.etsi.org/ftp/osm-4.0-four/install_osm.sh&lt;br /&gt;
 chmod +x install_osm.sh&lt;br /&gt;
 $ ./install_osm.sh 2&amp;gt;&amp;amp;1 | tee osm_install_log.txt&lt;br /&gt;
&lt;br /&gt;
You will be asked if you want to proceed with the installation and configuration of LXD, juju, docker CE and the initialization of a local docker swarm, as pre-requirements. Please answer &amp;quot;y&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Then, some dialog messages related to LXD configuration will be shown. This is what you have to answer:&lt;br /&gt;
* Do you want to configure the LXD bridge? &#039;&#039;&#039;Yes&#039;&#039;&#039;&lt;br /&gt;
* Do you want to setup an IPv4 subnet? &#039;&#039;&#039;Yes&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;&amp;lt; &#039;&#039;&#039;Default values&#039;&#039;&#039; apply for next questions &amp;gt;&amp;gt;&#039;&#039;&lt;br /&gt;
* Do you want to setup an IPv6 subnet? &#039;&#039;&#039;No&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After the installation completes, you will need to add the following environment variables to the end of your .bashrc file and then source it with &#039;&#039;source .bashrc&#039;&#039;&lt;br /&gt;
 export OSM_HOSTNAME=127.0.0.1&lt;br /&gt;
 export OSM_SOL005=True&lt;br /&gt;
&lt;br /&gt;
If you want to run docker commands, you will also need to either reload the shell or run the following command to add your user to the &#039;docker&#039; group:&lt;br /&gt;
 newgrp docker&lt;br /&gt;
&lt;br /&gt;
===Installation including optional components===&lt;br /&gt;
&lt;br /&gt;
You can include optional components in your installation by adding the following flags:&lt;br /&gt;
* &#039;&#039;&#039;VIM Emulator:&#039;&#039;&#039; --vimemu (more information [[VIM emulator|here]])&lt;br /&gt;
* &#039;&#039;&#039;Performance Management features with Prometheus/Grafana:&#039;&#039;&#039; --pm_stack (more information [https://osm.etsi.org/wikipub/index.php?title=OSM_Performance_Management&amp;amp;oldid=2991 here])&lt;br /&gt;
* &#039;&#039;&#039;Fault Management features with ELK:&#039;&#039;&#039; --elk_stack (more information [https://osm.etsi.org/wikipub/index.php?title=OSM_Fault_Management&amp;amp;direction=prev&amp;amp;oldid=3911 here])&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 ./install_osm.sh --elk_stack --pm_stack --vimemu&lt;br /&gt;
&lt;br /&gt;
===Other installation options===&lt;br /&gt;
* If you need to install the Classic Build (Rel 3.1), you can follow [[Classic_OSM_Build | this guide]]&lt;br /&gt;
* You can also run OSM using a pre-built [https://app.vagrantup.com/osm/boxes/osm vagrant] image: [[How_to_run_OSM_on_Vagrant]]&lt;br /&gt;
* For other special installation options, please refer to the [[OSM_Release_FOUR_Documentation#Alternative_installation_methods | release documentation]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Following instructions will focus only on the default (lightweight) build.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Checking your installation==&lt;br /&gt;
&lt;br /&gt;
After some time, you will get a fresh OSM Release FOUR installation. You can access to the UI in the following URL (user:admin, password: admin):  http://1.2.3.4, replacing 1.2.3.4 with the IP address of your host. &lt;br /&gt;
&lt;br /&gt;
[[File:Osm_lwb_ui_login.png|600px|OSM home]]&lt;br /&gt;
&lt;br /&gt;
[[File:Osm_lwb_ui.png|600px|OSM Release FOUR installation result]]&lt;br /&gt;
&lt;br /&gt;
As a result of the installation, ten docker containers are created in the host.  You can check they are running by issuing the following commands:&lt;br /&gt;
 docker stack ps osm |grep -i running&lt;br /&gt;
 docker service ls&lt;br /&gt;
&lt;br /&gt;
[[File:Osm_containers.png|600px|OSM Docker containers]]&lt;br /&gt;
&lt;br /&gt;
At any time, you can quickly relaunch your deployment by using the pre-built docker images, like this:&lt;br /&gt;
 docker stack rm osm&lt;br /&gt;
 docker stack deploy -c /etc/osm/docker/docker-compose.yaml osm&lt;br /&gt;
&lt;br /&gt;
To check the logs of any container:&lt;br /&gt;
 docker service logs osm_lcm         # for LCM&lt;br /&gt;
&lt;br /&gt;
OSM client, a python-based CLI for OSM, will be available as well in the host machine.&lt;br /&gt;
Via the OSM client, you can manage descriptors, NS and VIM complete lifecycle and some new performance and fault-management features.&lt;br /&gt;
&lt;br /&gt;
=Adding VIM accounts=&lt;br /&gt;
Before proceeding, make sure that you have a site with a VIM configured to run with OSM. Different kinds of VIMs are currently supported by OSM:&lt;br /&gt;
*&#039;&#039;&#039;OpenVIM.&#039;&#039;&#039; Check the following link to know how to install and use openvim for OSM: [[OpenVIM installation (Release THREE) | OpenVIM installation]]. Openvim must run in &#039;normal&#039; mode (not test or fake) to have real virtual machines reachable from OSM.&lt;br /&gt;
*&#039;&#039;&#039;OpenStack.&#039;&#039;&#039; Check the following link to learn how to configure OpenStack to be used by OSM: [[Openstack_configuration_(Release_FOUR) | Openstack configuration]]&lt;br /&gt;
*&#039;&#039;&#039;VMware vCloud Director.&#039;&#039;&#039; Check the following link to learn how to configure VMware VCD to be used by OSM: [[Configuring_VMware_vCloud_Director_for_OSM_Release_FOUR | Configuring VMware vCloud Director]]&lt;br /&gt;
*&#039;&#039;&#039;Amazon Web Services (AWS).&#039;&#039;&#039; Check the following link to learn how to configure AWS (EC2 and Virtual Private Cloud) to be used by OSM: [[Configuring_AWS_for_OSM_Release_FOUR | Configuring AWS for OSM]]&lt;br /&gt;
OSM can manage external SDN controllers to perform the dataplane underlay network connectivity on behalf of the VIM. See [[EPA and SDN assist]]&lt;br /&gt;
&lt;br /&gt;
==Adding VIMs through OSM client==&lt;br /&gt;
===OpenVIM site===&lt;br /&gt;
Execute the following command, using the appropriate parameters (e.g. site name: &amp;quot;openvim-site&amp;quot;, IP address: 10.10.10.10, VIM tenant: &amp;quot;osm&amp;quot;)&lt;br /&gt;
 osm vim-create --name openvim-site --auth_url http://10.10.10.10:9080/openvim --account_type openvim \&lt;br /&gt;
    --description &amp;quot;Openvim site&amp;quot; --tenant osm --user dummy --password dummy&lt;br /&gt;
&lt;br /&gt;
===Openstack site===&lt;br /&gt;
Execute the following command, using the appropriate parameters (e.g. site name: &amp;quot;openstack-site&amp;quot;, IP address: 10.10.10.11, VIM tenant: &amp;quot;admin&amp;quot;, user: &amp;quot;admin&amp;quot;, password: &amp;quot;userpwd&amp;quot;)&lt;br /&gt;
 osm vim-create --name openstack-site --user admin --password userpwd \&lt;br /&gt;
     --auth_url http://10.10.10.11:5000/v2.0 --tenant admin --account_type openstack&lt;br /&gt;
&lt;br /&gt;
For advanced options, please refer to the [[Openstack_configuration_(Release_FOUR)#Add_openstack_to_OSM | OpenStack Setup Guide]].&lt;br /&gt;
&lt;br /&gt;
===VMware vCloud Director site===&lt;br /&gt;
*Execute the following command, using the appropriate parameters (e.g. site name: &amp;quot;vmware-site&amp;quot;, IP address: 10.10.10.12, VIM tenant: &amp;quot;vmware-tenant&amp;quot;, user: &amp;quot;osm&amp;quot;, password: &amp;quot;osm4u&amp;quot;, admin user: &amp;quot;admin&amp;quot;, admin password: &amp;quot;adminpwd&amp;quot;, organization: &amp;quot;orgVDC&amp;quot;)&lt;br /&gt;
 osm vim-create --name vmware-site --user osm --password osm4u --auth_url https://10.10.10.12 \&lt;br /&gt;
     --tenant vmware-tenant  --account_type vmware \&lt;br /&gt;
     --config &#039;{admin_username: user, admin_password: passwd, orgname: organization, nsx_manager: &amp;quot;http://10.10.10.12&amp;quot;,&lt;br /&gt;
     nsx_user: user, nsx_password: userpwd,&amp;quot;vcenter_port&amp;quot;: port, &amp;quot;vcenter_user&amp;quot;:user, &amp;quot;vcenter_password&amp;quot;:password,&lt;br /&gt;
     &amp;quot;vcenter_ip&amp;quot;: 10.10.10.14}&#039;&lt;br /&gt;
&lt;br /&gt;
For advanced options, please refer to the [[Configuring_VMware_vCloud_Director_for_OSM_Release_FOUR#Add_vCloud_using_OSM_Client | vCloud Director Setup Guide]].&lt;br /&gt;
&lt;br /&gt;
===VMware Integrated Openstack (VIO) site===&lt;br /&gt;
Execute the following command, using the appropriate parameters (e.g. site name: &amp;quot;openstack-site-vio4&amp;quot;, IP address: 10.10.10.12, VIM tenant: &amp;quot;admin&amp;quot;, user: &amp;quot;admin&amp;quot;, password: &amp;quot;passwd&amp;quot;)&lt;br /&gt;
 osm vim-create --name VIO --user admin --password passwd --auth_url https://10.10.10.12:5000/v3 --tenant admin \&lt;br /&gt;
     --account_type openstack --config &#039;{use_floating_ip: True, insecure: true, vim_type: VIO, APIversion: v3.3,&lt;br /&gt;
     dataplane_physical_net: dvs-46, &amp;quot;use_internal_endpoint&amp;quot;:true,&amp;quot;dataplane_net_vlan_range&amp;quot;:[&amp;quot;31-35&amp;quot;,&amp;quot;37-39&amp;quot;]}&#039;&lt;br /&gt;
&lt;br /&gt;
With respect to Openstack, the additional configuration for VIO is the following:&lt;br /&gt;
* &#039;&#039;&#039;vim_type&#039;&#039;&#039;: Set to &amp;quot;VIO&amp;quot; to use VMware Integrated openstack as VIM &lt;br /&gt;
* &#039;&#039;&#039;use_internal_endpoint&#039;&#039;&#039;: When true it allows use of private API endpoints&lt;br /&gt;
* &#039;&#039;&#039;dataplane_physical_net&#039;&#039;&#039;: The configured network_vlan_ranges at neutron for the SRIOV (binding direct) and passthrough (binding direct-physical) networks, e.g. &#039;physnet_sriov&#039; in the above configuration. In case of VMware Integrated Openstack (VIO) provide moref ID of distributed virtual switch, e.g &#039;dvs-46&#039; in above configuration.&lt;br /&gt;
* &#039;&#039;&#039;dataplane_net_vlan_range&#039;&#039;&#039;: In case of VMware Integrated Openstack (VIO) provide vlan ranges for the SRIOV (binding direct) networks in format [&#039;start_ID - end_ID&#039;]&lt;br /&gt;
&lt;br /&gt;
For common options, you may refer to the general [[Openstack_configuration_(Release_FOUR)#Add_openstack_to_OSM | OpenStack Setup Guide]].&lt;br /&gt;
&lt;br /&gt;
===Amazon Web Services (AWS) site===&lt;br /&gt;
*Execute the following command, using the appropriate parameters (e.g. site name: &amp;quot;aws-site&amp;quot;, VIM tenant: &amp;quot;admin&amp;quot;, user: &amp;quot;XXX&amp;quot;, password: &amp;quot;YYY&amp;quot;)&lt;br /&gt;
 osm vim-create --name aws-site --user XXX --password YYY --auth_url https://aws.amazon.com --tenant admin \&lt;br /&gt;
     --account_type aws --config &#039;{region_name: eu-central-1, flavor_info: {t2.nano: {cpus: 1, disk: 100, ram: 512},&lt;br /&gt;
     t2.micro: {cpus: 1, disk: 100, ram: 1024}, t2.small: {cpus: 1, disk: 100, ram: 2048},&lt;br /&gt;
     m1.small: {cpus: 1, disk: 160, ram: 1741}}}&#039;&lt;br /&gt;
&lt;br /&gt;
For advanced options, please refer to the [[Configuring_AWS_for_OSM_Release_FOUR#Add_AWS_to_OSM | AWS Setup Guide]].&lt;br /&gt;
&lt;br /&gt;
==Adding VIMs through GUI==&lt;br /&gt;
Just access the &#039;&#039;VIM Accounts&#039;&#039; tab, click the &#039;&#039;New VIM&#039;&#039; button and fill the parameters accordingly.&lt;br /&gt;
&lt;br /&gt;
[[File:Osmvim.png|600px|AddingVIMUI]]&lt;br /&gt;
&lt;br /&gt;
=Deploying your first Network Service=&lt;br /&gt;
In this example we will deploy the following Network Service, consisting of two simple VNFs based on CirrOS connected by a simple VLD.&lt;br /&gt;
&lt;br /&gt;
[[File:cirros_2vnf_ns.png|500px|NS with 2 CirrOS VNF]]&lt;br /&gt;
&lt;br /&gt;
Before going on, download the required VNF and NS packages from this URL: https://osm-download.etsi.org/ftp/osm-3.0-three/examples/cirros_2vnf_ns/&lt;br /&gt;
&lt;br /&gt;
==Onboarding a VNF==&lt;br /&gt;
&lt;br /&gt;
The onboarding of a VNF in OSM involves adding the corresponding VNF package to the system. This process also assumes, as a pre-condition, that the corresponding VM images are available in the VIM(s) where it will be instantiated.&lt;br /&gt;
&lt;br /&gt;
===Uploading VM image(s) to the VIM(s)===&lt;br /&gt;
In this example, only a vanilla CirrOS 0.3.4 image is need. It can be obtained from the following link: http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img&lt;br /&gt;
&lt;br /&gt;
If not available, it would be required to upload the image into the VIM. Instructions differ from one VIM to another:&lt;br /&gt;
*In Openstack:&lt;br /&gt;
 openstack image create --file=&amp;quot;./cirros-0.3.4-x86_64-disk.img&amp;quot; --container-format=bare --disk-format=qcow2 cirros034&lt;br /&gt;
*In OpenVIM:&lt;br /&gt;
 #copy your image to the NFS shared folder (e.g. /mnt/openvim-nfs)&lt;br /&gt;
 cp ./cirros-0.3.4-x86_64-disk.img /mnt/openvim-nfs/&lt;br /&gt;
 openvim image-create --name cirros034 --path /mnt/openvim-nfs/cirros-0.3.4-x86_64-disk.img&lt;br /&gt;
&lt;br /&gt;
===VNF package onboarding===&lt;br /&gt;
&lt;br /&gt;
*From the UI:&lt;br /&gt;
**Go to Projects --&amp;gt; Admin --&amp;gt; VNF Packages (&#039;&#039;Open List&#039;&#039;)&lt;br /&gt;
**Click on the Onboard VNFD button&lt;br /&gt;
**Drag and drop the VNF package file cirros_vnf.tar.gz in the importing area.&lt;br /&gt;
[[File:vnfd_onboard_r4.png|600px|Onboarding a VNF]]&lt;br /&gt;
*From OSM client:&lt;br /&gt;
 osm vnfd-create cirros_vnf.tar.gz&lt;br /&gt;
 osm vnfd-list&lt;br /&gt;
&lt;br /&gt;
==Onboarding a NS==&lt;br /&gt;
*From the UI:&lt;br /&gt;
**Go to Projects --&amp;gt; Admin --&amp;gt; NS Packages (&#039;&#039;Open List&#039;&#039;)&lt;br /&gt;
**Click on the Onboard NSD button&lt;br /&gt;
**Drag and drop the NS package file cirros_2vnf_ns.tar.gz in the importing area.&lt;br /&gt;
[[File:nsd_onboard_r4.png|600px|Onboarding a NS]]&lt;br /&gt;
*From OSM client:&lt;br /&gt;
 osm nsd-create cirros_2vnf_ns.tar.gz&lt;br /&gt;
 osm nsd-list&lt;br /&gt;
&lt;br /&gt;
==Instantiating the NS==&lt;br /&gt;
*From the UI:&lt;br /&gt;
**Go to Projects --&amp;gt; Admin --&amp;gt; NS Packages (&#039;&#039;Open List&#039;&#039;)&lt;br /&gt;
**Next the NS descriptor to be instantiated, click on Launch&lt;br /&gt;
[[File:nsd_list.png|600px|Instantiating a NS (step 1)]] &lt;br /&gt;
**Fill the form, adding at least a name and selecting the VIM&lt;br /&gt;
[[File:new_ns.png|600px|Instantiating a NS (step 2)]] &lt;br /&gt;
* From OSM client:&lt;br /&gt;
 osm ns-create --nsd_name cirros_2vnf_ns --ns_name &amp;lt;ns-instance-name&amp;gt; --vim_account &amp;lt;data-center-name&amp;gt;&lt;br /&gt;
 osm ns-list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instantiation parameters can be specified using both CLI and UI. There are some examples collected in this wiki page: [[OSM instantiation parameters]].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Using old descriptors from Release TWO==&lt;br /&gt;
&lt;br /&gt;
Beware that old Release TWO descriptors cannot be directly used by OSM Release FOUR.&lt;br /&gt;
&lt;br /&gt;
You should use this &#039;&#039;&#039;[[Creating your own VNF package#Migrating old descriptors to release FOUR|conversion tool]]&#039;&#039;&#039; to convert them to Release FOUR format and &#039;&#039;&#039;[[Creating your own VNF package|create the corresponding package]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=What&#039;s next?=&lt;br /&gt;
&lt;br /&gt;
If you want to learn more, you can refer to the rest of &#039;&#039;&#039;[[OSM_Release_FOUR_Documentation | OSM documentation]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Feedback}}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=Reference_VNF_and_NS_Descriptors&amp;diff=6081</id>
		<title>Reference VNF and NS Descriptors</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=Reference_VNF_and_NS_Descriptors&amp;diff=6081"/>
		<updated>2021-02-17T16:54:35Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
= Reference NS#1: Testing an endpoint VNF =&lt;br /&gt;
&lt;br /&gt;
The following network service captures a simple test setup where a VNF is tested with a traffic generator VNF (or a simple VNF/VM with a basic client application). For simplicity, this network service assumes that the VNF under test is the endpoint of a given service (e.g. DNS, AAA, etc.) and does not require special conditions or resource allocation besides the usual in a standard cloud environments.&lt;br /&gt;
&lt;br /&gt;
[[File:example_ns_1.png | 450px | right | Reference NS #1: Testing an endpoint VNF]]&lt;br /&gt;
&lt;br /&gt;
In this example, unless otherwise specified in the description, the following defaults apply:&lt;br /&gt;
* CPs are regular para-virtualized interfaces (VirtIO or equivalent).&lt;br /&gt;
* VLs provide E-LAN connectivity via regular (overlay) networks provided by the VIM.&lt;br /&gt;
* VLs provide IP addressing via DHCP if applicable.&lt;br /&gt;
* Mapping between internal and external CPs may be either direct (as aliases) or via an intermediate VL.&lt;br /&gt;
* VIM+NFVI can guarantee predictable ordering of guest interfaces&#039; virtual PCI addresses.&lt;br /&gt;
&lt;br /&gt;
In the case of REF_NS_1:&lt;br /&gt;
* When deploying the NS, VL1 would be typically mapped to a pre-created VIM network intended to provide management IP address to VNFs via DHCP.&lt;br /&gt;
* DHCP in VL2 may be optional.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference VNF#11: Endpoint VNF ==&lt;br /&gt;
[[File:ref_vnf_11.png | 350px | right | Reference VNF#11: Endpoint]]&lt;br /&gt;
&lt;br /&gt;
=== Description in common language ===&lt;br /&gt;
* &#039;&#039;&#039;Name:&#039;&#039;&#039; Ref_VNF_11&lt;br /&gt;
** &#039;&#039;&#039;Component:&#039;&#039;&#039; Ref_VM1&lt;br /&gt;
*** &#039;&#039;&#039;Memory:&#039;&#039;&#039; 2 GB&lt;br /&gt;
*** &#039;&#039;&#039;CPU:&#039;&#039;&#039; 2 vCPU&lt;br /&gt;
*** &#039;&#039;&#039;Storage:&#039;&#039;&#039; 8 GB&lt;br /&gt;
*** &#039;&#039;&#039;Image:&#039;&#039;&#039; ref_vm1.qcow2&lt;br /&gt;
** &#039;&#039;&#039;Component:&#039;&#039;&#039; Ref_VM2&lt;br /&gt;
*** &#039;&#039;&#039;Memory:&#039;&#039;&#039; 4GB&lt;br /&gt;
*** &#039;&#039;&#039;CPU:&#039;&#039;&#039; 2 vCPU&lt;br /&gt;
*** &#039;&#039;&#039;Storage:&#039;&#039;&#039; 16GB&lt;br /&gt;
*** &#039;&#039;&#039;Image:&#039;&#039;&#039; ref_vm2.qcow2&lt;br /&gt;
** &#039;&#039;&#039;Internal Virtual Link:&#039;&#039;&#039; VL12&lt;br /&gt;
*** No DHCP server is enabled.&lt;br /&gt;
*** Static addressing may be used at CP iface11 and CP iface21.&lt;br /&gt;
&lt;br /&gt;
=== OSM VNF descriptor for VNF#11 ===&lt;br /&gt;
[https://osm.etsi.org/gitweb/?p=osm/devops.git;a=blob;f=descriptor-packages/vnfd/ref11_vnf/src/ref11_vnfd.yaml VNF11.yaml]&lt;br /&gt;
&lt;br /&gt;
== Reference VNF#21: Generator 1 port ==&lt;br /&gt;
[[File:ref_vnf_21.png | 350px | right | Reference VNF#21: Generator 1 port]]&lt;br /&gt;
&lt;br /&gt;
=== Description in common language ===&lt;br /&gt;
* &#039;&#039;&#039;Name:&#039;&#039;&#039; Ref_VNF_21&lt;br /&gt;
** &#039;&#039;&#039;Component:&#039;&#039;&#039; Ref_VM5&lt;br /&gt;
*** &#039;&#039;&#039;Memory:&#039;&#039;&#039; 1 GB&lt;br /&gt;
*** &#039;&#039;&#039;CPU:&#039;&#039;&#039; 1 vCPU&lt;br /&gt;
*** &#039;&#039;&#039;Storage:&#039;&#039;&#039; 16 GB&lt;br /&gt;
*** &#039;&#039;&#039;Image:&#039;&#039;&#039; ref_vm21.qcow2&lt;br /&gt;
&lt;br /&gt;
=== OSM VNF descriptor for VNF#21 ===&lt;br /&gt;
[https://osm.etsi.org/gitweb/?p=osm/devops.git;a=blob;f=descriptor-packages/vnfd/ref21_vnf/src/ref21_vnfd.yaml VNF21.yaml]&lt;br /&gt;
&lt;br /&gt;
== OSM NS descriptor for NS#1 ==&lt;br /&gt;
[https://osm.etsi.org/gitweb/?p=osm/devops.git;a=blob;f=descriptor-packages/nsd/ref1_ns/src/ref1_nsd.yaml NS1.yaml]&lt;br /&gt;
&lt;br /&gt;
= Reference NS #2: Testing a middle point VNF =&lt;br /&gt;
[[File:example_ns_2.png | 400px | right | Reference NS #2: Testing a middle point VNF]]&lt;br /&gt;
&lt;br /&gt;
The following network service captures a more advanced test setup where the VNF under test is a middlepoint in the communication (e.g. router, EPC) and might require special conditions or resource allocation and connectivity foreseen in NFV ISG specs. In this case, the traffic generator VNF behaves as source and sink of traffic and might also require special resource allocation.&lt;br /&gt;
&lt;br /&gt;
In this example, unless otherwise specified in the description, the following applies:&lt;br /&gt;
* Same defaults as in NS#1&lt;br /&gt;
* vCPUs must be pinned to dedicated physical CPUs, with no over subscription.&lt;br /&gt;
* CPUs, memory and interfaces (if applicable) to be assigned to a given VM should belong to the same socket (NUMA awareness).&lt;br /&gt;
* Memory assigned to VMs should be backed by host&#039;s huge pages memory.&lt;br /&gt;
* VL2 and VL3 are E-Line underlay connectivity. No DHCP is required.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference VNF#12: Middle point VNF ==&lt;br /&gt;
[[File:ref_vnf_12.png | 400px | right | Reference VNF#12: Middle point]]&lt;br /&gt;
&lt;br /&gt;
=== Description in common language ===&lt;br /&gt;
* &#039;&#039;&#039;Name:&#039;&#039;&#039; Ref_VNF_12&lt;br /&gt;
** &#039;&#039;&#039;Component:&#039;&#039;&#039; Ref_VM3&lt;br /&gt;
*** &#039;&#039;&#039;Memory:&#039;&#039;&#039; 2 GB huge pages&lt;br /&gt;
*** &#039;&#039;&#039;CPU:&#039;&#039;&#039; 2 vCPU (= CPU)&lt;br /&gt;
*** &#039;&#039;&#039;Storage:&#039;&#039;&#039; 8 GB&lt;br /&gt;
*** &#039;&#039;&#039;Image:&#039;&#039;&#039; ref_vm3.qcow2&lt;br /&gt;
** &#039;&#039;&#039;Component:&#039;&#039;&#039; Ref_VM4&lt;br /&gt;
*** &#039;&#039;&#039;Memory:&#039;&#039;&#039; 4GB&lt;br /&gt;
*** &#039;&#039;&#039;CPU:&#039;&#039;&#039; 2 vCPU&lt;br /&gt;
*** &#039;&#039;&#039;Storage:&#039;&#039;&#039; 16GB&lt;br /&gt;
*** &#039;&#039;&#039;Image:&#039;&#039;&#039; ref_vm4.qcow2&lt;br /&gt;
** &#039;&#039;&#039;Connection Point:&#039;&#039;&#039; iface42 (west)&lt;br /&gt;
*** &#039;&#039;&#039;Type:&#039;&#039;&#039; Passthrough&lt;br /&gt;
** &#039;&#039;&#039;Connection Point:&#039;&#039;&#039; iface43 (east)&lt;br /&gt;
*** &#039;&#039;&#039;Type:&#039;&#039;&#039; SR-IOV&lt;br /&gt;
&lt;br /&gt;
=== OSM VNF descriptor for VNF#12 ===&lt;br /&gt;
[https://osm.etsi.org/gitweb/?p=osm/devops.git;a=blob;f=descriptor-packages/vnfd/ref12_vnf/src/ref12_vnfd.yaml VNF12.yaml]&lt;br /&gt;
&lt;br /&gt;
== Reference VNF#22: Generator 2 ports ==&lt;br /&gt;
&lt;br /&gt;
[[File:ref_vnf_22.png | 400px | right | Reference VNF#22: Generator 2 ports]]&lt;br /&gt;
&lt;br /&gt;
=== Description in common language ===&lt;br /&gt;
* &#039;&#039;&#039;Name:&#039;&#039;&#039; Ref_VNF_22&lt;br /&gt;
** &#039;&#039;&#039;Component:&#039;&#039;&#039; Ref_VM6&lt;br /&gt;
*** &#039;&#039;&#039;Memory:&#039;&#039;&#039; 1 GB huge pages&lt;br /&gt;
*** &#039;&#039;&#039;CPU:&#039;&#039;&#039; 1 vCPU (= CPU)&lt;br /&gt;
*** &#039;&#039;&#039;Storage:&#039;&#039;&#039; 16 GB&lt;br /&gt;
*** &#039;&#039;&#039;Image:&#039;&#039;&#039; ref_vm22.qcow2&lt;br /&gt;
** &#039;&#039;&#039;Connection Point:&#039;&#039;&#039; iface61 (west)&lt;br /&gt;
*** &#039;&#039;&#039;Type:&#039;&#039;&#039; Passthrough&lt;br /&gt;
** &#039;&#039;&#039;Connection Point:&#039;&#039;&#039; iface62 (east)&lt;br /&gt;
*** &#039;&#039;&#039;Type:&#039;&#039;&#039; SR-IOV&lt;br /&gt;
&lt;br /&gt;
=== OSM VNF descriptor for VNF#22 ===&lt;br /&gt;
[https://osm.etsi.org/gitweb/?p=osm/devops.git;a=blob;f=descriptor-packages/vnfd/ref22_vnf/src/ref22_vnfd.yaml VNF22.yaml]&lt;br /&gt;
&lt;br /&gt;
== OSM NS descriptor for NS#2 ==&lt;br /&gt;
[https://osm.etsi.org/gitweb/?p=osm/devops.git;a=blob;f=descriptor-packages/nsd/ref2_ns/src/ref2_nsd.yaml NS2.yaml]&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;br /&gt;
The template used to create these NS/VNF diagrams is available at:&lt;br /&gt;
[https://drive.google.com/open?id=0B0IUJnTZzp2iUnJUb1JFSGpBRGs Reference_NS-VNF_diagrams.pptx]&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_Information_Model&amp;diff=6080</id>
		<title>OSM Information Model</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_Information_Model&amp;diff=6080"/>
		<updated>2021-02-17T16:54:25Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
==YANG model in OSM repos==&lt;br /&gt;
&lt;br /&gt;
YANG models can be found in the IM repo under the models folder:&lt;br /&gt;
https://osm.etsi.org/gitweb/?p=osm/IM.git;a=tree&lt;br /&gt;
&lt;br /&gt;
OSM uses [https://github.com/mbj4668/pyang pyang] and [https://github.com/robshakir/pyangbind pyangbind] to generate Python classes used by the different OSM components.&lt;br /&gt;
&lt;br /&gt;
==OSM IM tree representation==&lt;br /&gt;
Below you can find tree representations of the VNFD (VNF Descriptor), NSD (Network Service Descriptor), NST (Network Slice Template), VNFR (VNF Record), NSR (Network Service Record), NSI (Network Slice Instance), both in navigable and plain text formats.&lt;br /&gt;
&lt;br /&gt;
===VNFD tree===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Navigable version:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;http://osm-download.etsi.org/repository/osm/debian/ReleaseSIX/docs/osm-im/osm_im_trees/vnfd.html&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Plain text version:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module: vnfd&lt;br /&gt;
  +--rw vnfd-catalog&lt;br /&gt;
     +--rw schema-version?   string&lt;br /&gt;
     +--rw vnfd* [id]&lt;br /&gt;
        +--rw id                          string&lt;br /&gt;
        +--rw name                        string&lt;br /&gt;
        +--rw short-name?                 string&lt;br /&gt;
        +--rw vendor?                     string&lt;br /&gt;
        +--rw logo?                       string&lt;br /&gt;
        +--rw description?                string&lt;br /&gt;
        +--rw version?                    string&lt;br /&gt;
        +--rw vnf-configuration&lt;br /&gt;
        |  +--rw (config-method)?&lt;br /&gt;
        |  |  +--:(script)&lt;br /&gt;
        |  |  |  +--rw script&lt;br /&gt;
        |  |  |     +--rw script-type?   enumeration&lt;br /&gt;
        |  |  +--:(juju)&lt;br /&gt;
        |  |     +--rw juju&lt;br /&gt;
        |  |        +--rw charm?               string&lt;br /&gt;
        |  |        +--rw proxy?               boolean&lt;br /&gt;
        |  |        +--rw vca-relationships&lt;br /&gt;
        |  |           +--rw relation* [requires provides]&lt;br /&gt;
        |  |              +--rw requires    string&lt;br /&gt;
        |  |              +--rw provides    string&lt;br /&gt;
        |  +--rw config-primitive* [name]&lt;br /&gt;
        |  |  +--rw name                   string&lt;br /&gt;
        |  |  +--rw parameter* [name]&lt;br /&gt;
        |  |  |  +--rw name              string&lt;br /&gt;
        |  |  |  +--rw data-type?        manotypes:parameter-data-type&lt;br /&gt;
        |  |  |  +--rw mandatory?        boolean&lt;br /&gt;
        |  |  |  +--rw default-value?    string&lt;br /&gt;
        |  |  |  +--rw parameter-pool?   string&lt;br /&gt;
        |  |  |  +--rw read-only?        boolean&lt;br /&gt;
        |  |  |  +--rw hidden?           boolean&lt;br /&gt;
        |  |  +--rw user-defined-script?   string&lt;br /&gt;
        |  +--rw initial-config-primitive* [seq]&lt;br /&gt;
        |  |  +--rw seq                          uint64&lt;br /&gt;
        |  |  +--rw (primitive-type)?&lt;br /&gt;
        |  |     +--:(primitive-definition)&lt;br /&gt;
        |  |        +--rw name?                  string&lt;br /&gt;
        |  |        +--rw parameter* [name]&lt;br /&gt;
        |  |        |  +--rw name         string&lt;br /&gt;
        |  |        |  +--rw data-type?   manotypes:parameter-data-type&lt;br /&gt;
        |  |        |  +--rw value?       string&lt;br /&gt;
        |  |        +--rw user-defined-script?   string&lt;br /&gt;
        |  +--rw terminate-config-primitive* [seq]&lt;br /&gt;
        |  |  +--rw seq                    uint64&lt;br /&gt;
        |  |  +--rw name?                  string&lt;br /&gt;
        |  |  +--rw parameter* [name]&lt;br /&gt;
        |  |  |  +--rw name         string&lt;br /&gt;
        |  |  |  +--rw data-type?   manotypes:parameter-data-type&lt;br /&gt;
        |  |  |  +--rw value?       string&lt;br /&gt;
        |  |  +--rw user-defined-script?   string&lt;br /&gt;
        |  +--rw metrics* [name]&lt;br /&gt;
        |  |  +--rw name    string&lt;br /&gt;
        |  +--rw config-access&lt;br /&gt;
        |     +--rw ssh-access&lt;br /&gt;
        |        +--rw required?       boolean&lt;br /&gt;
        |        +--rw default-user?   string&lt;br /&gt;
        +--rw operational-status?         vnf-operational-status&lt;br /&gt;
        +--rw mgmt-interface&lt;br /&gt;
        |  +--rw (endpoint-type)?&lt;br /&gt;
        |  |  +--:(ip)&lt;br /&gt;
        |  |  |  +--rw ip-address?   inet:ip-address&lt;br /&gt;
        |  |  +--:(vdu-id)&lt;br /&gt;
        |  |  |  +--rw vdu-id?       -&amp;gt; ../../vdu/id&lt;br /&gt;
        |  |  +--:(cp)&lt;br /&gt;
        |  |     +--rw cp?           -&amp;gt; ../../connection-point/name&lt;br /&gt;
        |  +--rw port?               inet:port-number&lt;br /&gt;
        |  +--rw dashboard-params&lt;br /&gt;
        |     +--rw path?    string&lt;br /&gt;
        |     +--rw https?   boolean&lt;br /&gt;
        |     +--rw port?    inet:port-number&lt;br /&gt;
        +--rw internal-vld* [id]&lt;br /&gt;
        |  +--rw id                           string&lt;br /&gt;
        |  +--rw name?                        string&lt;br /&gt;
        |  +--rw short-name?                  string&lt;br /&gt;
        |  +--rw description?                 string&lt;br /&gt;
        |  +--rw type?                        manotypes:virtual-link-type&lt;br /&gt;
        |  +--rw root-bandwidth?              uint64&lt;br /&gt;
        |  +--rw leaf-bandwidth?              uint64&lt;br /&gt;
        |  +--rw internal-connection-point* [id-ref]&lt;br /&gt;
        |  |  +--rw id-ref        -&amp;gt; ../../../vdu/internal-connection-point/id&lt;br /&gt;
        |  |  +--rw ip-address?   inet:ip-address&lt;br /&gt;
        |  +--rw provider-network&lt;br /&gt;
        |  |  +--rw physical-network?   string&lt;br /&gt;
        |  |  +--rw segmentation_id?    uint32&lt;br /&gt;
        |  +--rw (init-params)?&lt;br /&gt;
        |     +--:(vim-network-ref)&lt;br /&gt;
        |     |  +--rw vim-network-name?      string&lt;br /&gt;
        |     +--:(vim-network-profile)&lt;br /&gt;
        |        +--rw ip-profile-ref?        string&lt;br /&gt;
        +--rw ip-profiles* [name]&lt;br /&gt;
        |  +--rw name                 string&lt;br /&gt;
        |  +--rw description?         string&lt;br /&gt;
        |  +--rw ip-profile-params&lt;br /&gt;
        |     +--rw ip-version?           inet:ip-version&lt;br /&gt;
        |     +--rw subnet-address?       inet:ip-prefix&lt;br /&gt;
        |     +--rw gateway-address?      inet:ip-address&lt;br /&gt;
        |     +--rw security-group?       string&lt;br /&gt;
        |     +--rw dns-server* [address]&lt;br /&gt;
        |     |  +--rw address    inet:ip-address&lt;br /&gt;
        |     +--rw dhcp-params&lt;br /&gt;
        |     |  +--rw enabled?         boolean&lt;br /&gt;
        |     |  +--rw start-address?   inet:ip-address&lt;br /&gt;
        |     |  +--rw count?           uint32&lt;br /&gt;
        |     +--rw subnet-prefix-pool?   string&lt;br /&gt;
        +--rw connection-point* [name]&lt;br /&gt;
        |  +--rw name                     string&lt;br /&gt;
        |  +--rw id?                      string&lt;br /&gt;
        |  +--rw short-name?              string&lt;br /&gt;
        |  +--rw type?                    manotypes:connection-point-type&lt;br /&gt;
        |  +--rw port-security-enabled?   boolean&lt;br /&gt;
        |  +--rw internal-vld-ref?        -&amp;gt; ../../internal-vld/id&lt;br /&gt;
        +--rw vdu* [id]&lt;br /&gt;
        |  +--rw id                           string&lt;br /&gt;
        |  +--rw name?                        string&lt;br /&gt;
        |  +--rw description?                 string&lt;br /&gt;
        |  +--rw pdu-type?                    string&lt;br /&gt;
        |  +--rw count?                       uint64&lt;br /&gt;
        |  +--rw mgmt-vpci?                   string&lt;br /&gt;
        |  +--rw vm-flavor&lt;br /&gt;
        |  |  +--rw vcpu-count?   uint16&lt;br /&gt;
        |  |  +--rw memory-mb?    uint64&lt;br /&gt;
        |  |  +--rw storage-gb?   uint64&lt;br /&gt;
        |  +--rw guest-epa&lt;br /&gt;
        |  |  +--rw trusted-execution?                 boolean&lt;br /&gt;
        |  |  +--rw mempage-size?                      enumeration&lt;br /&gt;
        |  |  +--rw (cpu-policy)?&lt;br /&gt;
        |  |  |  +--:(cpu-pinning)&lt;br /&gt;
        |  |  |  |  +--rw cpu-pinning-policy?          enumeration&lt;br /&gt;
        |  |  |  |  +--rw cpu-thread-pinning-policy?   enumeration&lt;br /&gt;
        |  |  |  +--:(cpu-quota)&lt;br /&gt;
        |  |  |     +--rw cpu-quota&lt;br /&gt;
        |  |  |        +--rw limit?     uint64&lt;br /&gt;
        |  |  |        +--rw reserve?   uint64&lt;br /&gt;
        |  |  |        +--rw shares?    uint64&lt;br /&gt;
        |  |  +--rw mem-quota&lt;br /&gt;
        |  |  |  +--rw limit?     uint64&lt;br /&gt;
        |  |  |  +--rw reserve?   uint64&lt;br /&gt;
        |  |  |  +--rw shares?    uint64&lt;br /&gt;
        |  |  +--rw disk-io-quota&lt;br /&gt;
        |  |  |  +--rw limit?     uint64&lt;br /&gt;
        |  |  |  +--rw reserve?   uint64&lt;br /&gt;
        |  |  |  +--rw shares?    uint64&lt;br /&gt;
        |  |  +--rw vif-quota&lt;br /&gt;
        |  |  |  +--rw limit?     uint64&lt;br /&gt;
        |  |  |  +--rw reserve?   uint64&lt;br /&gt;
        |  |  |  +--rw shares?    uint64&lt;br /&gt;
        |  |  +--rw pcie-device* [device-id]&lt;br /&gt;
        |  |  |  +--rw device-id    string&lt;br /&gt;
        |  |  |  +--rw count?       uint64&lt;br /&gt;
        |  |  +--rw (numa-policy)?&lt;br /&gt;
        |  |     +--:(numa-unaware)&lt;br /&gt;
        |  |     |  +--rw numa-unaware?                empty&lt;br /&gt;
        |  |     +--:(numa-aware)&lt;br /&gt;
        |  |        +--rw numa-node-policy&lt;br /&gt;
        |  |           +--rw node-cnt?     uint16&lt;br /&gt;
        |  |           +--rw mem-policy?   enumeration&lt;br /&gt;
        |  |           +--rw node* [id]&lt;br /&gt;
        |  |              +--rw id                      uint64&lt;br /&gt;
        |  |              +--rw vcpu* [id]&lt;br /&gt;
        |  |              |  +--rw id    uint64&lt;br /&gt;
        |  |              +--rw memory-mb?              uint64&lt;br /&gt;
        |  |              +--rw (om-numa-type)?&lt;br /&gt;
        |  |                 +--:(cores)&lt;br /&gt;
        |  |                 |  +--rw num-cores?        uint8&lt;br /&gt;
        |  |                 +--:(paired-threads)&lt;br /&gt;
        |  |                 |  +--rw paired-threads&lt;br /&gt;
        |  |                 |     +--rw num-paired-threads?   uint8&lt;br /&gt;
        |  |                 |     +--rw paired-thread-ids* [thread-a]&lt;br /&gt;
        |  |                 |        +--rw thread-a    uint8&lt;br /&gt;
        |  |                 |        +--rw thread-b?   uint8&lt;br /&gt;
        |  |                 +--:(threads)&lt;br /&gt;
        |  |                    +--rw num-threads?      uint8&lt;br /&gt;
        |  +--rw vswitch-epa&lt;br /&gt;
        |  |  +--rw ovs-acceleration?   enumeration&lt;br /&gt;
        |  |  +--rw ovs-offload?        enumeration&lt;br /&gt;
        |  +--rw hypervisor-epa&lt;br /&gt;
        |  |  +--rw type?      enumeration&lt;br /&gt;
        |  |  +--rw version?   string&lt;br /&gt;
        |  +--rw host-epa&lt;br /&gt;
        |  |  +--rw cpu-model?               enumeration&lt;br /&gt;
        |  |  +--rw cpu-arch?                enumeration&lt;br /&gt;
        |  |  +--rw cpu-vendor?              enumeration&lt;br /&gt;
        |  |  +--rw cpu-socket-count?        uint64&lt;br /&gt;
        |  |  +--rw cpu-core-count?          uint64&lt;br /&gt;
        |  |  +--rw cpu-core-thread-count?   uint64&lt;br /&gt;
        |  |  +--rw cpu-feature* [feature]&lt;br /&gt;
        |  |  |  +--rw feature    cpu-feature-type&lt;br /&gt;
        |  |  +--rw om-cpu-model-string?     string&lt;br /&gt;
        |  |  +--rw om-cpu-feature* [feature]&lt;br /&gt;
        |  |     +--rw feature    string&lt;br /&gt;
        |  +--rw alarm* [alarm-id]&lt;br /&gt;
        |  |  +--rw alarm-id                    string&lt;br /&gt;
        |  |  +--rw vnf-monitoring-param-ref?   -&amp;gt; ../../monitoring-param/id&lt;br /&gt;
        |  |  +--rw name?                       string&lt;br /&gt;
        |  |  +--rw description?                string&lt;br /&gt;
        |  |  +--rw vdur-id?                    string&lt;br /&gt;
        |  |  +--rw actions&lt;br /&gt;
        |  |  |  +--rw ok* [url]&lt;br /&gt;
        |  |  |  |  +--rw url    string&lt;br /&gt;
        |  |  |  +--rw insufficient-data* [url]&lt;br /&gt;
        |  |  |  |  +--rw url    string&lt;br /&gt;
        |  |  |  +--rw alarm* [url]&lt;br /&gt;
        |  |  |     +--rw url    string&lt;br /&gt;
        |  |  +--rw repeat?                     boolean&lt;br /&gt;
        |  |  +--rw enabled?                    boolean&lt;br /&gt;
        |  |  +--rw severity?                   alarm-severity-type&lt;br /&gt;
        |  |  +--rw statistic?                  alarm-statistic-type&lt;br /&gt;
        |  |  +--rw operation?                  relational-operation-type&lt;br /&gt;
        |  |  +--rw value?                      decimal64&lt;br /&gt;
        |  |  +--rw period?                     uint32&lt;br /&gt;
        |  |  +--rw evaluations?                uint32&lt;br /&gt;
        |  +--rw image?                       string&lt;br /&gt;
        |  +--rw image-checksum?              string&lt;br /&gt;
        |  +--rw alternative-images* [vim-type]&lt;br /&gt;
        |  |  +--rw vim-type          string&lt;br /&gt;
        |  |  +--rw image?            string&lt;br /&gt;
        |  |  +--rw image-checksum?   string&lt;br /&gt;
        |  +--rw vdu-configuration&lt;br /&gt;
        |  |  +--rw (config-method)?&lt;br /&gt;
        |  |  |  +--:(script)&lt;br /&gt;
        |  |  |  |  +--rw script&lt;br /&gt;
        |  |  |  |     +--rw script-type?   enumeration&lt;br /&gt;
        |  |  |  +--:(juju)&lt;br /&gt;
        |  |  |     +--rw juju&lt;br /&gt;
        |  |  |        +--rw charm?               string&lt;br /&gt;
        |  |  |        +--rw proxy?               boolean&lt;br /&gt;
        |  |  |        +--rw vca-relationships&lt;br /&gt;
        |  |  |           +--rw relation* [requires provides]&lt;br /&gt;
        |  |  |              +--rw requires    string&lt;br /&gt;
        |  |  |              +--rw provides    string&lt;br /&gt;
        |  |  +--rw config-primitive* [name]&lt;br /&gt;
        |  |  |  +--rw name                   string&lt;br /&gt;
        |  |  |  +--rw parameter* [name]&lt;br /&gt;
        |  |  |  |  +--rw name              string&lt;br /&gt;
        |  |  |  |  +--rw data-type?        manotypes:parameter-data-type&lt;br /&gt;
        |  |  |  |  +--rw mandatory?        boolean&lt;br /&gt;
        |  |  |  |  +--rw default-value?    string&lt;br /&gt;
        |  |  |  |  +--rw parameter-pool?   string&lt;br /&gt;
        |  |  |  |  +--rw read-only?        boolean&lt;br /&gt;
        |  |  |  |  +--rw hidden?           boolean&lt;br /&gt;
        |  |  |  +--rw user-defined-script?   string&lt;br /&gt;
        |  |  +--rw initial-config-primitive* [seq]&lt;br /&gt;
        |  |  |  +--rw seq                          uint64&lt;br /&gt;
        |  |  |  +--rw (primitive-type)?&lt;br /&gt;
        |  |  |     +--:(primitive-definition)&lt;br /&gt;
        |  |  |        +--rw name?                  string&lt;br /&gt;
        |  |  |        +--rw parameter* [name]&lt;br /&gt;
        |  |  |        |  +--rw name         string&lt;br /&gt;
        |  |  |        |  +--rw data-type?   manotypes:parameter-data-type&lt;br /&gt;
        |  |  |        |  +--rw value?       string&lt;br /&gt;
        |  |  |        +--rw user-defined-script?   string&lt;br /&gt;
        |  |  +--rw terminate-config-primitive* [seq]&lt;br /&gt;
        |  |  |  +--rw seq                    uint64&lt;br /&gt;
        |  |  |  +--rw name?                  string&lt;br /&gt;
        |  |  |  +--rw parameter* [name]&lt;br /&gt;
        |  |  |  |  +--rw name         string&lt;br /&gt;
        |  |  |  |  +--rw data-type?   manotypes:parameter-data-type&lt;br /&gt;
        |  |  |  |  +--rw value?       string&lt;br /&gt;
        |  |  |  +--rw user-defined-script?   string&lt;br /&gt;
        |  |  +--rw metrics* [name]&lt;br /&gt;
        |  |  |  +--rw name    string&lt;br /&gt;
        |  |  +--rw config-access&lt;br /&gt;
        |  |     +--rw ssh-access&lt;br /&gt;
        |  |        +--rw required?       boolean&lt;br /&gt;
        |  |        +--rw default-user?   string&lt;br /&gt;
        |  +--rw monitoring-param* [id]&lt;br /&gt;
        |  |  +--rw id                    string&lt;br /&gt;
        |  |  +--rw nfvi-metric?          manotypes:nfvi-metric-type&lt;br /&gt;
        |  |  +--rw interface-name-ref?   -&amp;gt; ../../interface/name&lt;br /&gt;
        |  +--rw (cloud-init-input)?&lt;br /&gt;
        |  |  +--:(inline)&lt;br /&gt;
        |  |  |  +--rw cloud-init?            string&lt;br /&gt;
        |  |  +--:(filename)&lt;br /&gt;
        |  |     +--rw cloud-init-file?       string&lt;br /&gt;
        |  +--rw supplemental-boot-data&lt;br /&gt;
        |  |  +--rw boot-data-drive?   boolean&lt;br /&gt;
        |  +--rw internal-connection-point* [id]&lt;br /&gt;
        |  |  +--rw name?                    string&lt;br /&gt;
        |  |  +--rw id                       string&lt;br /&gt;
        |  |  +--rw short-name?              string&lt;br /&gt;
        |  |  +--rw type?                    manotypes:connection-point-type&lt;br /&gt;
        |  |  +--rw port-security-enabled?   boolean&lt;br /&gt;
        |  |  +--rw internal-vld-ref?        -&amp;gt; ../../../internal-vld/id&lt;br /&gt;
        |  +--rw interface* [name]&lt;br /&gt;
        |  |  +--rw name                                   string&lt;br /&gt;
        |  |  +--rw position?                              uint32&lt;br /&gt;
        |  |  +--rw mgmt-interface?                        boolean&lt;br /&gt;
        |  |  +--rw type?                                  interface-type&lt;br /&gt;
        |  |  +--rw mac-address?                           string&lt;br /&gt;
        |  |  +--rw (connection-point-type)?&lt;br /&gt;
        |  |  |  +--:(internal)&lt;br /&gt;
        |  |  |  |  +--rw internal-connection-point-ref?   -&amp;gt; ../../internal-connection-point/id&lt;br /&gt;
        |  |  |  +--:(external)&lt;br /&gt;
        |  |  |     +--rw external-connection-point-ref?   -&amp;gt; ../../../connection-point/name&lt;br /&gt;
        |  |  +--rw virtual-interface&lt;br /&gt;
        |  |     +--rw type?        enumeration&lt;br /&gt;
        |  |     +--rw vpci?        string&lt;br /&gt;
        |  |     +--rw bandwidth?   uint64&lt;br /&gt;
        |  +--rw volumes* [name]&lt;br /&gt;
        |     +--rw name                    string&lt;br /&gt;
        |     +--rw description?            string&lt;br /&gt;
        |     +--rw size?                   uint64&lt;br /&gt;
        |     +--rw (volume-source)?&lt;br /&gt;
        |     |  +--:(ephemeral)&lt;br /&gt;
        |     |  |  +--rw ephemeral?        empty&lt;br /&gt;
        |     |  +--:(image)&lt;br /&gt;
        |     |     +--rw image?            string&lt;br /&gt;
        |     |     +--rw image-checksum?   string&lt;br /&gt;
        |     +--rw device-bus?             enumeration&lt;br /&gt;
        |     +--rw device-type?            enumeration&lt;br /&gt;
        +--rw vdu-dependency* [vdu-source-ref]&lt;br /&gt;
        |  +--rw vdu-source-ref        -&amp;gt; ../../vdu/id&lt;br /&gt;
        |  +--rw vdu-depends-on-ref?   -&amp;gt; ../../vdu/id&lt;br /&gt;
        +--rw service-function-chain?     enumeration&lt;br /&gt;
        +--rw service-function-type?      string&lt;br /&gt;
        +--rw http-endpoint* [path]&lt;br /&gt;
        |  +--rw path                     string&lt;br /&gt;
        |  +--rw https?                   boolean&lt;br /&gt;
        |  +--rw port?                    inet:port-number&lt;br /&gt;
        |  +--rw username?                string&lt;br /&gt;
        |  +--rw password?                string&lt;br /&gt;
        |  +--rw polling-interval-secs?   uint8&lt;br /&gt;
        |  +--rw method?                  manotypes:http-method&lt;br /&gt;
        |  +--rw headers* [key]&lt;br /&gt;
        |     +--rw key      string&lt;br /&gt;
        |     +--rw value?   string&lt;br /&gt;
        +--rw scaling-group-descriptor* [name]&lt;br /&gt;
        |  +--rw name                     string&lt;br /&gt;
        |  +--rw scaling-policy* [name]&lt;br /&gt;
        |  |  +--rw name                        string&lt;br /&gt;
        |  |  +--rw scaling-type?               manotypes:scaling-policy-type&lt;br /&gt;
        |  |  +--rw enabled?                    boolean&lt;br /&gt;
        |  |  +--rw scale-in-operation-type?    manotypes:scaling-criteria-operation&lt;br /&gt;
        |  |  +--rw scale-out-operation-type?   manotypes:scaling-criteria-operation&lt;br /&gt;
        |  |  +--rw threshold-time              uint32&lt;br /&gt;
        |  |  +--rw cooldown-time               uint32&lt;br /&gt;
        |  |  +--rw scaling-criteria* [name]&lt;br /&gt;
        |  |     +--rw name                              string&lt;br /&gt;
        |  |     +--rw scale-in-threshold?               decimal64&lt;br /&gt;
        |  |     +--rw scale-in-relational-operation?    manotypes:relational-operation-type&lt;br /&gt;
        |  |     +--rw scale-out-threshold?              decimal64&lt;br /&gt;
        |  |     +--rw scale-out-relational-operation?   manotypes:relational-operation-type&lt;br /&gt;
        |  |     +--rw vnf-monitoring-param-ref?         -&amp;gt; ../../../../monitoring-param/id&lt;br /&gt;
        |  +--rw vdu* [vdu-id-ref]&lt;br /&gt;
        |  |  +--rw vdu-id-ref    -&amp;gt; ../../../vdu/id&lt;br /&gt;
        |  |  +--rw count?        uint32&lt;br /&gt;
        |  +--rw min-instance-count?      uint32&lt;br /&gt;
        |  +--rw max-instance-count?      uint32&lt;br /&gt;
        |  +--rw scaling-config-action* [trigger]&lt;br /&gt;
        |     +--rw trigger                          manotypes:scaling-trigger&lt;br /&gt;
        |     +--rw vnf-config-primitive-name-ref?   -&amp;gt; ../../../vnf-configuration/config-primitive/name&lt;br /&gt;
        +--rw monitoring-param* [id]&lt;br /&gt;
        |  +--rw id                            string&lt;br /&gt;
        |  +--rw name?                         string&lt;br /&gt;
        |  +--rw aggregation-type?             aggregation-type&lt;br /&gt;
        |  +--rw (monitoring-type)?&lt;br /&gt;
        |  |  +--:(vdu-monitoring-param)&lt;br /&gt;
        |  |  |  +--rw vdu-monitoring-param&lt;br /&gt;
        |  |  |     +--rw vdu-ref?                    -&amp;gt; ../../../vdu/id&lt;br /&gt;
        |  |  |     +--rw vdu-monitoring-param-ref?   -&amp;gt; ../../../vdu[id = current()/../vdu-ref]/monitoring-param/id&lt;br /&gt;
        |  |  +--:(vnf-metric)&lt;br /&gt;
        |  |  |  +--rw vnf-metric&lt;br /&gt;
        |  |  |     +--rw vnf-metric-name-ref?   -&amp;gt; ../../../vnf-configuration/metrics/name&lt;br /&gt;
        |  |  +--:(vdu-metric)&lt;br /&gt;
        |  |     +--rw vdu-metric&lt;br /&gt;
        |  |        +--rw vdu-ref?               -&amp;gt; ../../../vdu/id&lt;br /&gt;
        |  |        +--rw vdu-metric-name-ref?   -&amp;gt; ../../../vdu[id = current()/../vdu-ref]/vdu-configuration/metrics/name&lt;br /&gt;
        |  +--rw http-endpoint-ref?            -&amp;gt; ../../http-endpoint/path&lt;br /&gt;
        |  +--rw json-query-method?            manotypes:json-query-method&lt;br /&gt;
        |  +--rw json-query-params&lt;br /&gt;
        |  |  +--rw json-path?     string&lt;br /&gt;
        |  |  +--rw object-path?   string&lt;br /&gt;
        |  +--rw description?                  string&lt;br /&gt;
        |  +--rw group-tag?                    string&lt;br /&gt;
        |  +--rw widget-type?                  manotypes:widget-type&lt;br /&gt;
        |  +--rw units?                        string&lt;br /&gt;
        |  +--rw value-type?                   param-value-type&lt;br /&gt;
        |  +--rw numeric-constraints&lt;br /&gt;
        |  |  +--rw min-value?   uint64&lt;br /&gt;
        |  |  +--rw max-value?   uint64&lt;br /&gt;
        |  +--rw text-constraints&lt;br /&gt;
        |  |  +--rw min-length?   uint8&lt;br /&gt;
        |  |  +--rw max-length?   uint8&lt;br /&gt;
        |  +--rw value-integer?                int64&lt;br /&gt;
        |  +--rw value-decimal?                decimal64&lt;br /&gt;
        |  +--rw value-string?                 string&lt;br /&gt;
        +--rw placement-groups* [name]&lt;br /&gt;
           +--rw name           string&lt;br /&gt;
           +--rw requirement?   string&lt;br /&gt;
           +--rw strategy?      enumeration&lt;br /&gt;
           +--rw member-vdus* [member-vdu-ref]&lt;br /&gt;
              +--rw member-vdu-ref    -&amp;gt; ../../../vdu/id&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===NSD tree===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Navigable version:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;http://osm-download.etsi.org/repository/osm/debian/ReleaseSIX/docs/osm-im/osm_im_trees/nsd.html&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Plain text version:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module: nsd&lt;br /&gt;
  +--rw nsd-catalog&lt;br /&gt;
     +--rw schema-version?   string&lt;br /&gt;
     +--rw nsd* [id]&lt;br /&gt;
        +--rw id                          string&lt;br /&gt;
        +--rw name                        string&lt;br /&gt;
        +--rw short-name?                 string&lt;br /&gt;
        +--rw vendor?                     string&lt;br /&gt;
        +--rw logo?                       string&lt;br /&gt;
        +--rw description?                string&lt;br /&gt;
        +--rw version?                    string&lt;br /&gt;
        +--rw connection-point* [name]&lt;br /&gt;
        |  +--rw name                               string&lt;br /&gt;
        |  +--rw floating-ip-required?              boolean&lt;br /&gt;
        |  +--rw type?                              manotypes:connection-point-type&lt;br /&gt;
        |  +--rw (connection)?&lt;br /&gt;
        |     +--:(vld-ref)&lt;br /&gt;
        |     |  +--rw vld-id-ref?                  -&amp;gt; ../../vld/id&lt;br /&gt;
        |     +--:(vnfd-connection-point-ref)&lt;br /&gt;
        |        +--rw member-vnf-index-ref?        -&amp;gt; ../../constituent-vnfd/member-vnf-index&lt;br /&gt;
        |        +--rw vnfd-id-ref?                 -&amp;gt; ../../constituent-vnfd[member-vnf-index = current()/../member-vnf-index-ref]/vnfd-id-ref&lt;br /&gt;
        |        +--rw vnfd-connection-point-ref?   -&amp;gt; /vnfd:vnfd-catalog/vnfd[vnfd:id = current()/../vnfd-id-ref]/connection-point/name&lt;br /&gt;
        +--rw scaling-group-descriptor* [name]&lt;br /&gt;
        |  +--rw name                     string&lt;br /&gt;
        |  +--rw scaling-policy* [name]&lt;br /&gt;
        |  |  +--rw name                        string&lt;br /&gt;
        |  |  +--rw scaling-type?               manotypes:scaling-policy-type&lt;br /&gt;
        |  |  +--rw enabled?                    boolean&lt;br /&gt;
        |  |  +--rw scale-in-operation-type?    manotypes:scaling-criteria-operation&lt;br /&gt;
        |  |  +--rw scale-out-operation-type?   manotypes:scaling-criteria-operation&lt;br /&gt;
        |  |  +--rw threshold-time              uint32&lt;br /&gt;
        |  |  +--rw cooldown-time               uint32&lt;br /&gt;
        |  |  +--rw scaling-criteria* [name]&lt;br /&gt;
        |  |     +--rw name                              string&lt;br /&gt;
        |  |     +--rw scale-in-threshold?               uint64&lt;br /&gt;
        |  |     +--rw scale-in-relational-operation?    manotypes:relational-operation-type&lt;br /&gt;
        |  |     +--rw scale-out-threshold?              uint64&lt;br /&gt;
        |  |     +--rw scale-out-relational-operation?   manotypes:relational-operation-type&lt;br /&gt;
        |  |     +--rw ns-monitoring-param-ref?          -&amp;gt; ../../../../monitoring-param/id&lt;br /&gt;
        |  +--rw vnfd-member* [member-vnf-index-ref]&lt;br /&gt;
        |  |  +--rw member-vnf-index-ref    -&amp;gt; ../../../constituent-vnfd/member-vnf-index&lt;br /&gt;
        |  |  +--rw count?                  uint32&lt;br /&gt;
        |  +--rw min-instance-count?      uint32&lt;br /&gt;
        |  +--rw max-instance-count?      uint32&lt;br /&gt;
        |  +--rw scaling-config-action* [trigger]&lt;br /&gt;
        |     +--rw trigger                         manotypes:scaling-trigger&lt;br /&gt;
        |     +--rw ns-config-primitive-name-ref?   -&amp;gt; ../../../ns-configuration/config-primitive/name&lt;br /&gt;
        +--rw vnffgd* [id]&lt;br /&gt;
        |  +--rw id             string&lt;br /&gt;
        |  +--rw name?          string&lt;br /&gt;
        |  +--rw short-name?    string&lt;br /&gt;
        |  +--rw vendor?        string&lt;br /&gt;
        |  +--rw description?   string&lt;br /&gt;
        |  +--rw version?       string&lt;br /&gt;
        |  +--rw rsp* [id]&lt;br /&gt;
        |  |  +--rw id                           string&lt;br /&gt;
        |  |  +--rw name?                        string&lt;br /&gt;
        |  |  +--rw vnfd-connection-point-ref* [member-vnf-index-ref]&lt;br /&gt;
        |  |     +--rw member-vnf-index-ref                 -&amp;gt; ../../../../constituent-vnfd/member-vnf-index&lt;br /&gt;
        |  |     +--rw order?                               uint8&lt;br /&gt;
        |  |     +--rw vnfd-id-ref?                         -&amp;gt; ../../../../constituent-vnfd[member-vnf-index = current()/../member-vnf-index-ref]/vnfd-id-ref&lt;br /&gt;
        |  |     +--rw vnfd-ingress-connection-point-ref?   string&lt;br /&gt;
        |  |     +--rw vnfd-egress-connection-point-ref?    string&lt;br /&gt;
        |  +--rw classifier* [id]&lt;br /&gt;
        |     +--rw id                           string&lt;br /&gt;
        |     +--rw name?                        string&lt;br /&gt;
        |     +--rw rsp-id-ref?                  -&amp;gt; ../../rsp/id&lt;br /&gt;
        |     +--rw match-attributes* [id]&lt;br /&gt;
        |     |  +--rw id                        string&lt;br /&gt;
        |     |  +--rw ip-proto?                 uint8&lt;br /&gt;
        |     |  +--rw source-ip-address?        inet:ip-address&lt;br /&gt;
        |     |  +--rw destination-ip-address?   inet:ip-address&lt;br /&gt;
        |     |  +--rw source-port?              inet:port-number&lt;br /&gt;
        |     |  +--rw destination-port?         inet:port-number&lt;br /&gt;
        |     +--rw member-vnf-index-ref?        -&amp;gt; ../../../constituent-vnfd/member-vnf-index&lt;br /&gt;
        |     +--rw vnfd-id-ref?                 -&amp;gt; ../../../constituent-vnfd[member-vnf-index = current()/../member-vnf-index-ref]/vnfd-id-ref&lt;br /&gt;
        |     +--rw vnfd-connection-point-ref?   string&lt;br /&gt;
        +--rw ip-profiles* [name]&lt;br /&gt;
        |  +--rw name                 string&lt;br /&gt;
        |  +--rw description?         string&lt;br /&gt;
        |  +--rw ip-profile-params&lt;br /&gt;
        |     +--rw ip-version?           inet:ip-version&lt;br /&gt;
        |     +--rw subnet-address?       inet:ip-prefix&lt;br /&gt;
        |     +--rw gateway-address?      inet:ip-address&lt;br /&gt;
        |     +--rw security-group?       string&lt;br /&gt;
        |     +--rw dns-server* [address]&lt;br /&gt;
        |     |  +--rw address    inet:ip-address&lt;br /&gt;
        |     +--rw dhcp-params&lt;br /&gt;
        |     |  +--rw enabled?         boolean&lt;br /&gt;
        |     |  +--rw start-address?   inet:ip-address&lt;br /&gt;
        |     |  +--rw count?           uint32&lt;br /&gt;
        |     +--rw subnet-prefix-pool?   string&lt;br /&gt;
        +--rw ns-configuration&lt;br /&gt;
        |  +--rw (config-method)?&lt;br /&gt;
        |  |  +--:(script)&lt;br /&gt;
        |  |  |  +--rw script&lt;br /&gt;
        |  |  |     +--rw script-type?   enumeration&lt;br /&gt;
        |  |  +--:(juju)&lt;br /&gt;
        |  |     +--rw juju&lt;br /&gt;
        |  |        +--rw charm?               string&lt;br /&gt;
        |  |        +--rw proxy?               boolean&lt;br /&gt;
        |  |        +--rw vca-relationships&lt;br /&gt;
        |  |           +--rw relation* [requires provides]&lt;br /&gt;
        |  |              +--rw requires    string&lt;br /&gt;
        |  |              +--rw provides    string&lt;br /&gt;
        |  +--rw config-primitive* [name]&lt;br /&gt;
        |  |  +--rw name                   string&lt;br /&gt;
        |  |  +--rw parameter* [name]&lt;br /&gt;
        |  |  |  +--rw name              string&lt;br /&gt;
        |  |  |  +--rw data-type?        manotypes:parameter-data-type&lt;br /&gt;
        |  |  |  +--rw mandatory?        boolean&lt;br /&gt;
        |  |  |  +--rw default-value?    string&lt;br /&gt;
        |  |  |  +--rw parameter-pool?   string&lt;br /&gt;
        |  |  |  +--rw read-only?        boolean&lt;br /&gt;
        |  |  |  +--rw hidden?           boolean&lt;br /&gt;
        |  |  +--rw user-defined-script?   string&lt;br /&gt;
        |  +--rw initial-config-primitive* [seq]&lt;br /&gt;
        |  |  +--rw seq                          uint64&lt;br /&gt;
        |  |  +--rw (primitive-type)?&lt;br /&gt;
        |  |     +--:(primitive-definition)&lt;br /&gt;
        |  |        +--rw name?                  string&lt;br /&gt;
        |  |        +--rw parameter* [name]&lt;br /&gt;
        |  |        |  +--rw name         string&lt;br /&gt;
        |  |        |  +--rw data-type?   manotypes:parameter-data-type&lt;br /&gt;
        |  |        |  +--rw value?       string&lt;br /&gt;
        |  |        +--rw user-defined-script?   string&lt;br /&gt;
        |  +--rw terminate-config-primitive* [seq]&lt;br /&gt;
        |  |  +--rw seq                    uint64&lt;br /&gt;
        |  |  +--rw name?                  string&lt;br /&gt;
        |  |  +--rw parameter* [name]&lt;br /&gt;
        |  |  |  +--rw name         string&lt;br /&gt;
        |  |  |  +--rw data-type?   manotypes:parameter-data-type&lt;br /&gt;
        |  |  |  +--rw value?       string&lt;br /&gt;
        |  |  +--rw user-defined-script?   string&lt;br /&gt;
        |  +--rw metrics* [name]&lt;br /&gt;
        |     +--rw name    string&lt;br /&gt;
        +--rw input-parameter-xpath* [xpath]&lt;br /&gt;
        |  +--rw xpath            string&lt;br /&gt;
        |  +--rw label?           string&lt;br /&gt;
        |  +--rw default-value?   string&lt;br /&gt;
        +--rw parameter-pool* [name]&lt;br /&gt;
        |  +--rw name     string&lt;br /&gt;
        |  +--rw range&lt;br /&gt;
        |     +--rw start-value    uint32&lt;br /&gt;
        |     +--rw end-value      uint32&lt;br /&gt;
        +--rw key-pair* [name]&lt;br /&gt;
        |  +--rw name    string&lt;br /&gt;
        |  +--rw key?    string&lt;br /&gt;
        +--rw user* [name]&lt;br /&gt;
        |  +--rw name         string&lt;br /&gt;
        |  +--rw user-info?   string&lt;br /&gt;
        |  +--rw key-pair* [name]&lt;br /&gt;
        |     +--rw name    string&lt;br /&gt;
        |     +--rw key?    string&lt;br /&gt;
        +--rw vld* [id]&lt;br /&gt;
        |  +--rw id                           string&lt;br /&gt;
        |  +--rw name?                        string&lt;br /&gt;
        |  +--rw short-name?                  string&lt;br /&gt;
        |  +--rw vendor?                      string&lt;br /&gt;
        |  +--rw description?                 string&lt;br /&gt;
        |  +--rw version?                     string&lt;br /&gt;
        |  +--rw type?                        manotypes:virtual-link-type&lt;br /&gt;
        |  +--rw root-bandwidth?              uint64&lt;br /&gt;
        |  +--rw leaf-bandwidth?              uint64&lt;br /&gt;
        |  +--rw provider-network&lt;br /&gt;
        |  |  +--rw physical-network?   string&lt;br /&gt;
        |  |  +--rw segmentation_id?    uint32&lt;br /&gt;
        |  +--rw mgmt-network?                boolean&lt;br /&gt;
        |  +--rw (init-params)?&lt;br /&gt;
        |  |  +--:(vim-network-ref)&lt;br /&gt;
        |  |  |  +--rw vim-network-name?      string&lt;br /&gt;
        |  |  +--:(vim-network-profile)&lt;br /&gt;
        |  |     +--rw ip-profile-ref?        -&amp;gt; ../../ip-profiles/name&lt;br /&gt;
        |  +--rw vnfd-connection-point-ref* [member-vnf-index-ref vnfd-connection-point-ref]&lt;br /&gt;
        |     +--rw member-vnf-index-ref         -&amp;gt; ../../../constituent-vnfd/member-vnf-index&lt;br /&gt;
        |     +--rw vnfd-connection-point-ref    -&amp;gt; /vnfd:vnfd-catalog/vnfd[vnfd:id = current()/../vnfd-id-ref]/connection-point/name&lt;br /&gt;
        |     +--rw vnfd-id-ref?                 -&amp;gt; ../../../constituent-vnfd[member-vnf-index = current()/../member-vnf-index-ref]/vnfd-id-ref&lt;br /&gt;
        |     +--rw ip-address?                  inet:ip-address&lt;br /&gt;
        +--rw constituent-vnfd* [member-vnf-index]&lt;br /&gt;
        |  +--rw member-vnf-index    string&lt;br /&gt;
        |  +--rw vnfd-id-ref?        -&amp;gt; /vnfd:vnfd-catalog/vnfd/id&lt;br /&gt;
        |  +--rw start-by-default?   boolean&lt;br /&gt;
        +--rw placement-groups* [name]&lt;br /&gt;
        |  +--rw name           string&lt;br /&gt;
        |  +--rw requirement?   string&lt;br /&gt;
        |  +--rw strategy?      enumeration&lt;br /&gt;
        |  +--rw member-vnfd* [member-vnf-index-ref]&lt;br /&gt;
        |     +--rw member-vnf-index-ref    -&amp;gt; ../../../constituent-vnfd/member-vnf-index&lt;br /&gt;
        |     +--rw vnfd-id-ref?            -&amp;gt; ../../../constituent-vnfd[member-vnf-index = current()/../member-vnf-index-ref]/vnfd-id-ref&lt;br /&gt;
        +--rw vnf-dependency* [vnf-source-ref]&lt;br /&gt;
        |  +--rw vnf-source-ref        -&amp;gt; /vnfd:vnfd-catalog/vnfd/id&lt;br /&gt;
        |  +--rw vnf-depends-on-ref?   -&amp;gt; /vnfd:vnfd-catalog/vnfd/id&lt;br /&gt;
        +--rw monitoring-param* [id]&lt;br /&gt;
           +--rw id                       string&lt;br /&gt;
           +--rw name?                    string&lt;br /&gt;
           +--rw value-type?              param-value-type&lt;br /&gt;
           +--rw numeric-constraints&lt;br /&gt;
           |  +--rw min-value?   uint64&lt;br /&gt;
           |  +--rw max-value?   uint64&lt;br /&gt;
           +--rw text-constraints&lt;br /&gt;
           |  +--rw min-length?   uint8&lt;br /&gt;
           |  +--rw max-length?   uint8&lt;br /&gt;
           +--rw value-integer?           int64&lt;br /&gt;
           +--rw value-decimal?           decimal64&lt;br /&gt;
           +--rw value-string?            string&lt;br /&gt;
           +--rw description?             string&lt;br /&gt;
           +--rw group-tag?               string&lt;br /&gt;
           +--rw widget-type?             manotypes:widget-type&lt;br /&gt;
           +--rw units?                   string&lt;br /&gt;
           +--rw aggregation-type?        aggregation-type&lt;br /&gt;
           +--rw vnfd-monitoring-param* [member-vnf-index-ref vnfd-monitoring-param-ref]&lt;br /&gt;
              +--rw vnfd-id-ref?                 -&amp;gt; ../../../constituent-vnfd[member-vnf-index = current()/../member-vnf-index-ref]/vnfd-id-ref&lt;br /&gt;
              +--rw vnfd-monitoring-param-ref    -&amp;gt; /vnfd:vnfd-catalog/vnfd[vnfd:id = current()/../vnfd-id-ref]/monitoring-param/id&lt;br /&gt;
              +--rw member-vnf-index-ref         -&amp;gt; ../../../constituent-vnfd/member-vnf-index&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===NST tree===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Navigable version:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;http://osm-download.etsi.org/repository/osm/debian/ReleaseSIX/docs/osm-im/osm_im_trees/nst.html&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Plain text version:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module: nst&lt;br /&gt;
  +--rw nst* [id]&lt;br /&gt;
     +--rw id                           string&lt;br /&gt;
     +--rw name                         string&lt;br /&gt;
     +--rw SNSSAI-identifier&lt;br /&gt;
     |  +--rw slice-service-type      network-slice-type&lt;br /&gt;
     |  +--rw slice-differentiator?   string&lt;br /&gt;
     +--rw quality-of-service&lt;br /&gt;
     |  +--rw id                        uint16&lt;br /&gt;
     |  +--rw resource-type?            resource-type&lt;br /&gt;
     |  +--rw priority-level?           uint16&lt;br /&gt;
     |  +--rw packet-delay-budget?      uint16&lt;br /&gt;
     |  +--rw packet-error-rate?        uint16&lt;br /&gt;
     |  +--rw default-max-data-burst?   uint16&lt;br /&gt;
     +--rw netslice-subnet* [id]&lt;br /&gt;
     |  +--rw id                          string&lt;br /&gt;
     |  +--rw description?                string&lt;br /&gt;
     |  +--rw is-shared-nss?              boolean&lt;br /&gt;
     |  +--rw nsd-ref                     -&amp;gt; /nsd:nsd-catalog/nsd/id&lt;br /&gt;
     |  +--rw instantiation-parameters&lt;br /&gt;
     |     +--rw vimAccountId    string&lt;br /&gt;
     |     +--rw ssh_keys?       string&lt;br /&gt;
     |     +--rw vnf* [member-vnf-index]&lt;br /&gt;
     |     |  +--rw member-vnf-index    string&lt;br /&gt;
     |     |  +--rw vimAccountId?       string&lt;br /&gt;
     |     |  +--rw vdu* [id]&lt;br /&gt;
     |     |  |  +--rw id           string&lt;br /&gt;
     |     |  |  +--rw volume* [name]&lt;br /&gt;
     |     |  |  |  +--rw name             string&lt;br /&gt;
     |     |  |  |  +--rw vim-volume-id    string&lt;br /&gt;
     |     |  |  +--rw interface* [name]&lt;br /&gt;
     |     |  |     +--rw name                    string&lt;br /&gt;
     |     |  |     +--rw ip-address?             inet:ip-address&lt;br /&gt;
     |     |  |     +--rw mac-address?            ietf-yang:mac-address&lt;br /&gt;
     |     |  |     +--rw floating-ip-required?   boolean&lt;br /&gt;
     |     |  +--rw internal-vld* [name]&lt;br /&gt;
     |     |     +--rw name                         string&lt;br /&gt;
     |     |     +--rw vim-network-name?            string&lt;br /&gt;
     |     |     +--rw ip-profile&lt;br /&gt;
     |     |     |  +--rw ip-version?        inet:ip-version&lt;br /&gt;
     |     |     |  +--rw subnet-address?    inet:ip-prefix&lt;br /&gt;
     |     |     |  +--rw gateway-address?   inet:ip-prefix&lt;br /&gt;
     |     |     |  +--rw dns-server* [address]&lt;br /&gt;
     |     |     |  |  +--rw address    inet:ip-address&lt;br /&gt;
     |     |     |  +--rw dhcp-params&lt;br /&gt;
     |     |     |     +--rw enabled?         boolean&lt;br /&gt;
     |     |     |     +--rw count?           uint8&lt;br /&gt;
     |     |     |     +--rw start-address?   inet:ip-address&lt;br /&gt;
     |     |     +--rw internal-connection-point* [id-ref]&lt;br /&gt;
     |     |        +--rw id-ref        string&lt;br /&gt;
     |     |        +--rw ip-address?   inet:ip-address&lt;br /&gt;
     |     +--rw vld* [name]&lt;br /&gt;
     |        +--rw name                         string&lt;br /&gt;
     |        +--rw vim-network-name?            string&lt;br /&gt;
     |        +--rw ip-profile&lt;br /&gt;
     |        |  +--rw ip-version?        inet:ip-version&lt;br /&gt;
     |        |  +--rw subnet-address?    inet:ip-prefix&lt;br /&gt;
     |        |  +--rw gateway-address?   inet:ip-prefix&lt;br /&gt;
     |        |  +--rw dns-server* [address]&lt;br /&gt;
     |        |  |  +--rw address    inet:ip-address&lt;br /&gt;
     |        |  +--rw dhcp-params&lt;br /&gt;
     |        |     +--rw enabled?         boolean&lt;br /&gt;
     |        |     +--rw count?           uint8&lt;br /&gt;
     |        |     +--rw start-address?   inet:ip-address&lt;br /&gt;
     |        +--rw vnfd-connection-point-ref* [member-vnf-index-ref vnfd-connection-point-ref]&lt;br /&gt;
     |           +--rw member-vnf-index-ref         -&amp;gt; /nsd:nsd-catalog/nsd/constituent-vnfd/member-vnf-index&lt;br /&gt;
     |           +--rw vnfd-connection-point-ref    -&amp;gt; /vnfd:vnfd-catalog/vnfd/connection-point/name&lt;br /&gt;
     |           +--rw ip-address?                  inet:ip-address&lt;br /&gt;
     +--rw netslice-connection-point* [name]&lt;br /&gt;
     |  +--rw name                              string&lt;br /&gt;
     |  +--rw floating-ip-required?             boolean&lt;br /&gt;
     |  +--rw (connection)?&lt;br /&gt;
     |     +--:(netslice-vld-ref)&lt;br /&gt;
     |     |  +--rw netslice-vld-id-ref?        -&amp;gt; ../../netslice-vld/id&lt;br /&gt;
     |     +--:(nsd-connection-point-ref)&lt;br /&gt;
     |        +--rw nsd-id-ref?                 -&amp;gt; /nsd:nsd-catalog/nsd/id&lt;br /&gt;
     |        +--rw nsd-connection-point-ref?   -&amp;gt; /nsd:nsd-catalog/nsd/connection-point/name&lt;br /&gt;
     +--rw netslice-vld* [id]&lt;br /&gt;
     |  +--rw id                          string&lt;br /&gt;
     |  +--rw name?                       string&lt;br /&gt;
     |  +--rw short-name?                 string&lt;br /&gt;
     |  +--rw vendor?                     string&lt;br /&gt;
     |  +--rw description?                string&lt;br /&gt;
     |  +--rw version?                    string&lt;br /&gt;
     |  +--rw type?                       manotypes:virtual-link-type&lt;br /&gt;
     |  +--rw root-bandwidth?             uint64&lt;br /&gt;
     |  +--rw leaf-bandwidth?             uint64&lt;br /&gt;
     |  +--rw provider-network&lt;br /&gt;
     |  |  +--rw physical-network?   string&lt;br /&gt;
     |  |  +--rw segmentation_id?    uint32&lt;br /&gt;
     |  +--rw mgmt-network?               boolean&lt;br /&gt;
     |  +--rw nss-connection-point-ref* [nss-ref nsd-connection-point-ref]&lt;br /&gt;
     |     +--rw nss-ref                     -&amp;gt; /nst/netslice-subnet/id&lt;br /&gt;
     |     +--rw nsd-connection-point-ref    -&amp;gt; /nsd:nsd-catalog/nsd/connection-point/name&lt;br /&gt;
     |     +--rw ip-address?                 inet:ip-address&lt;br /&gt;
     +--rw netslicefgd* [id]&lt;br /&gt;
        +--rw id             string&lt;br /&gt;
        +--rw name?          string&lt;br /&gt;
        +--rw short-name?    string&lt;br /&gt;
        +--rw vendor?        string&lt;br /&gt;
        +--rw description?   string&lt;br /&gt;
        +--rw version?       string&lt;br /&gt;
        +--rw rsp* [id]&lt;br /&gt;
        |  +--rw id                          string&lt;br /&gt;
        |  +--rw name?                       string&lt;br /&gt;
        |  +--rw nsd-connection-point-ref* [nsd-ref]&lt;br /&gt;
        |     +--rw nsd-ref                     -&amp;gt; /nsd:nsd-catalog/nsd/id&lt;br /&gt;
        |     +--rw order?                      uint8&lt;br /&gt;
        |     +--rw nsd-connection-point-ref?   -&amp;gt; /nsd:nsd-catalog/nsd/connection-point/name&lt;br /&gt;
        +--rw classifier* [id]&lt;br /&gt;
           +--rw id                          string&lt;br /&gt;
           +--rw name?                       string&lt;br /&gt;
           +--rw rsp-id-ref?                 -&amp;gt; ../../rsp/id&lt;br /&gt;
           +--rw match-attributes* [id]&lt;br /&gt;
           |  +--rw id                        string&lt;br /&gt;
           |  +--rw ip-proto?                 uint8&lt;br /&gt;
           |  +--rw source-ip-address?        inet:ip-address&lt;br /&gt;
           |  +--rw destination-ip-address?   inet:ip-address&lt;br /&gt;
           |  +--rw source-port?              inet:port-number&lt;br /&gt;
           |  +--rw destination-port?         inet:port-number&lt;br /&gt;
           +--rw nsd-ref?                    -&amp;gt; /nsd:nsd-catalog/nsd/id&lt;br /&gt;
           +--rw nsd-connection-point-ref?   -&amp;gt; /nsd:nsd-catalog/nsd/connection-point/name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===VNFR tree===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Navigable version:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;http://osm-download.etsi.org/repository/osm/debian/ReleaseSIX/docs/osm-im/osm_im_trees/vnfr.html&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Plain text version:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module: vnfr&lt;br /&gt;
  augment /osm-project:project:&lt;br /&gt;
    +--ro vnfr-catalog&lt;br /&gt;
       +--ro schema-version?   string&lt;br /&gt;
       +--ro vnfr* [id]&lt;br /&gt;
          +--ro id                       yang:uuid&lt;br /&gt;
          +--ro nsr-id-ref?              yang:uuid&lt;br /&gt;
          +--ro member-vnf-index-ref?    -&amp;gt; ../../../project-nsd:nsd-catalog/nsd/constituent-vnfd/member-vnf-index&lt;br /&gt;
          +--ro dashboard-url?           inet:uri&lt;br /&gt;
          +--ro name?                    string&lt;br /&gt;
          +--ro short-name?              string&lt;br /&gt;
          +--ro vendor?                  string&lt;br /&gt;
          +--ro description?             string&lt;br /&gt;
          +--ro version?                 string&lt;br /&gt;
          +--ro create-time?             uint32&lt;br /&gt;
          +--ro uptime?                  uint32&lt;br /&gt;
          +--ro vnfd&lt;br /&gt;
          |  +--ro id?                         string&lt;br /&gt;
          |  +--ro name                        string&lt;br /&gt;
          |  +--ro short-name?                 string&lt;br /&gt;
          |  +--ro vendor?                     string&lt;br /&gt;
          |  +--ro logo?                       string&lt;br /&gt;
          |  +--ro description?                string&lt;br /&gt;
          |  +--ro version?                    string&lt;br /&gt;
          |  +--ro vnf-configuration&lt;br /&gt;
          |  |  +--ro (config-method)?&lt;br /&gt;
          |  |  |  +--:(script)&lt;br /&gt;
          |  |  |  |  +--ro script&lt;br /&gt;
          |  |  |  |     +--ro script-type?   enumeration&lt;br /&gt;
          |  |  |  +--:(juju)&lt;br /&gt;
          |  |  |     +--ro juju&lt;br /&gt;
          |  |  |        +--ro charm?               string&lt;br /&gt;
          |  |  |        +--ro proxy?               boolean&lt;br /&gt;
          |  |  |        +--ro vca-relationships&lt;br /&gt;
          |  |  |           +--ro relation* [requires provides]&lt;br /&gt;
          |  |  |              +--ro requires    string&lt;br /&gt;
          |  |  |              +--ro provides    string&lt;br /&gt;
          |  |  +--ro config-primitive* [name]&lt;br /&gt;
          |  |  |  +--ro name                   string&lt;br /&gt;
          |  |  |  +--ro parameter* [name]&lt;br /&gt;
          |  |  |  |  +--ro name              string&lt;br /&gt;
          |  |  |  |  +--ro data-type?        manotypes:parameter-data-type&lt;br /&gt;
          |  |  |  |  +--ro mandatory?        boolean&lt;br /&gt;
          |  |  |  |  +--ro default-value?    string&lt;br /&gt;
          |  |  |  |  +--ro parameter-pool?   string&lt;br /&gt;
          |  |  |  |  +--ro read-only?        boolean&lt;br /&gt;
          |  |  |  |  +--ro hidden?           boolean&lt;br /&gt;
          |  |  |  +--ro user-defined-script?   string&lt;br /&gt;
          |  |  +--ro initial-config-primitive* [seq]&lt;br /&gt;
          |  |  |  +--ro seq                          uint64&lt;br /&gt;
          |  |  |  +--ro (primitive-type)?&lt;br /&gt;
          |  |  |     +--:(primitive-definition)&lt;br /&gt;
          |  |  |        +--ro name?                  string&lt;br /&gt;
          |  |  |        +--ro parameter* [name]&lt;br /&gt;
          |  |  |        |  +--ro name         string&lt;br /&gt;
          |  |  |        |  +--ro data-type?   manotypes:parameter-data-type&lt;br /&gt;
          |  |  |        |  +--ro value?       string&lt;br /&gt;
          |  |  |        +--ro user-defined-script?   string&lt;br /&gt;
          |  |  +--ro terminate-config-primitive* [seq]&lt;br /&gt;
          |  |  |  +--ro seq                    uint64&lt;br /&gt;
          |  |  |  +--ro name?                  string&lt;br /&gt;
          |  |  |  +--ro parameter* [name]&lt;br /&gt;
          |  |  |  |  +--ro name         string&lt;br /&gt;
          |  |  |  |  +--ro data-type?   manotypes:parameter-data-type&lt;br /&gt;
          |  |  |  |  +--ro value?       string&lt;br /&gt;
          |  |  |  +--ro user-defined-script?   string&lt;br /&gt;
          |  |  +--ro metrics* [name]&lt;br /&gt;
          |  |  |  +--ro name    string&lt;br /&gt;
          |  |  +--ro config-access&lt;br /&gt;
          |  |     +--ro ssh-access&lt;br /&gt;
          |  |        +--ro required?       boolean&lt;br /&gt;
          |  |        +--ro default-user?   string&lt;br /&gt;
          |  +--ro operational-status?         vnf-operational-status&lt;br /&gt;
          |  +--ro mgmt-interface&lt;br /&gt;
          |  |  +--ro (endpoint-type)?&lt;br /&gt;
          |  |  |  +--:(ip)&lt;br /&gt;
          |  |  |  |  +--ro ip-address?   inet:ip-address&lt;br /&gt;
          |  |  |  +--:(vdu-id)&lt;br /&gt;
          |  |  |  |  +--ro vdu-id?       -&amp;gt; ../../vdu/id&lt;br /&gt;
          |  |  |  +--:(cp)&lt;br /&gt;
          |  |  |     +--ro cp?           -&amp;gt; ../../connection-point/name&lt;br /&gt;
          |  |  +--ro port?               inet:port-number&lt;br /&gt;
          |  |  +--ro dashboard-params&lt;br /&gt;
          |  |     +--ro path?    string&lt;br /&gt;
          |  |     +--ro https?   boolean&lt;br /&gt;
          |  |     +--ro port?    inet:port-number&lt;br /&gt;
          |  +--ro internal-vld* [id]&lt;br /&gt;
          |  |  +--ro id                           string&lt;br /&gt;
          |  |  +--ro name?                        string&lt;br /&gt;
          |  |  +--ro short-name?                  string&lt;br /&gt;
          |  |  +--ro description?                 string&lt;br /&gt;
          |  |  +--ro type?                        manotypes:virtual-link-type&lt;br /&gt;
          |  |  +--ro root-bandwidth?              uint64&lt;br /&gt;
          |  |  +--ro leaf-bandwidth?              uint64&lt;br /&gt;
          |  |  +--ro internal-connection-point* [id-ref]&lt;br /&gt;
          |  |  |  +--ro id-ref        -&amp;gt; ../../../vdu/internal-connection-point/id&lt;br /&gt;
          |  |  |  +--ro ip-address?   inet:ip-address&lt;br /&gt;
          |  |  +--ro provider-network&lt;br /&gt;
          |  |  |  +--ro physical-network?   string&lt;br /&gt;
          |  |  |  +--ro segmentation_id?    uint32&lt;br /&gt;
          |  |  +--ro (init-params)?&lt;br /&gt;
          |  |     +--:(vim-network-ref)&lt;br /&gt;
          |  |     |  +--ro vim-network-name?      string&lt;br /&gt;
          |  |     +--:(vim-network-profile)&lt;br /&gt;
          |  |        +--ro ip-profile-ref?        string&lt;br /&gt;
          |  +--ro ip-profiles* [name]&lt;br /&gt;
          |  |  +--ro name                 string&lt;br /&gt;
          |  |  +--ro description?         string&lt;br /&gt;
          |  |  +--ro ip-profile-params&lt;br /&gt;
          |  |     +--ro ip-version?           inet:ip-version&lt;br /&gt;
          |  |     +--ro subnet-address?       inet:ip-prefix&lt;br /&gt;
          |  |     +--ro gateway-address?      inet:ip-address&lt;br /&gt;
          |  |     +--ro security-group?       string&lt;br /&gt;
          |  |     +--ro dns-server* [address]&lt;br /&gt;
          |  |     |  +--ro address    inet:ip-address&lt;br /&gt;
          |  |     +--ro dhcp-params&lt;br /&gt;
          |  |     |  +--ro enabled?         boolean&lt;br /&gt;
          |  |     |  +--ro start-address?   inet:ip-address&lt;br /&gt;
          |  |     |  +--ro count?           uint32&lt;br /&gt;
          |  |     +--ro subnet-prefix-pool?   string&lt;br /&gt;
          |  +--ro connection-point* [name]&lt;br /&gt;
          |  |  +--ro name                     string&lt;br /&gt;
          |  |  +--ro id?                      string&lt;br /&gt;
          |  |  +--ro short-name?              string&lt;br /&gt;
          |  |  +--ro type?                    manotypes:connection-point-type&lt;br /&gt;
          |  |  +--ro port-security-enabled?   boolean&lt;br /&gt;
          |  |  +--ro internal-vld-ref?        -&amp;gt; ../../internal-vld/id&lt;br /&gt;
          |  +--ro vdu* [id]&lt;br /&gt;
          |  |  +--ro id                           string&lt;br /&gt;
          |  |  +--ro name?                        string&lt;br /&gt;
          |  |  +--ro description?                 string&lt;br /&gt;
          |  |  +--ro pdu-type?                    string&lt;br /&gt;
          |  |  +--ro count?                       uint64&lt;br /&gt;
          |  |  +--ro mgmt-vpci?                   string&lt;br /&gt;
          |  |  +--ro vm-flavor&lt;br /&gt;
          |  |  |  +--ro vcpu-count?   uint16&lt;br /&gt;
          |  |  |  +--ro memory-mb?    uint64&lt;br /&gt;
          |  |  |  +--ro storage-gb?   uint64&lt;br /&gt;
          |  |  +--ro guest-epa&lt;br /&gt;
          |  |  |  +--ro trusted-execution?                 boolean&lt;br /&gt;
          |  |  |  +--ro mempage-size?                      enumeration&lt;br /&gt;
          |  |  |  +--ro (cpu-policy)?&lt;br /&gt;
          |  |  |  |  +--:(cpu-pinning)&lt;br /&gt;
          |  |  |  |  |  +--ro cpu-pinning-policy?          enumeration&lt;br /&gt;
          |  |  |  |  |  +--ro cpu-thread-pinning-policy?   enumeration&lt;br /&gt;
          |  |  |  |  +--:(cpu-quota)&lt;br /&gt;
          |  |  |  |     +--ro cpu-quota&lt;br /&gt;
          |  |  |  |        +--ro limit?     uint64&lt;br /&gt;
          |  |  |  |        +--ro reserve?   uint64&lt;br /&gt;
          |  |  |  |        +--ro shares?    uint64&lt;br /&gt;
          |  |  |  +--ro mem-quota&lt;br /&gt;
          |  |  |  |  +--ro limit?     uint64&lt;br /&gt;
          |  |  |  |  +--ro reserve?   uint64&lt;br /&gt;
          |  |  |  |  +--ro shares?    uint64&lt;br /&gt;
          |  |  |  +--ro disk-io-quota&lt;br /&gt;
          |  |  |  |  +--ro limit?     uint64&lt;br /&gt;
          |  |  |  |  +--ro reserve?   uint64&lt;br /&gt;
          |  |  |  |  +--ro shares?    uint64&lt;br /&gt;
          |  |  |  +--ro vif-quota&lt;br /&gt;
          |  |  |  |  +--ro limit?     uint64&lt;br /&gt;
          |  |  |  |  +--ro reserve?   uint64&lt;br /&gt;
          |  |  |  |  +--ro shares?    uint64&lt;br /&gt;
          |  |  |  +--ro pcie-device* [device-id]&lt;br /&gt;
          |  |  |  |  +--ro device-id    string&lt;br /&gt;
          |  |  |  |  +--ro count?       uint64&lt;br /&gt;
          |  |  |  +--ro (numa-policy)?&lt;br /&gt;
          |  |  |     +--:(numa-unaware)&lt;br /&gt;
          |  |  |     |  +--ro numa-unaware?                empty&lt;br /&gt;
          |  |  |     +--:(numa-aware)&lt;br /&gt;
          |  |  |        +--ro numa-node-policy&lt;br /&gt;
          |  |  |           +--ro node-cnt?     uint16&lt;br /&gt;
          |  |  |           +--ro mem-policy?   enumeration&lt;br /&gt;
          |  |  |           +--ro node* [id]&lt;br /&gt;
          |  |  |              +--ro id                      uint64&lt;br /&gt;
          |  |  |              +--ro vcpu* [id]&lt;br /&gt;
          |  |  |              |  +--ro id    uint64&lt;br /&gt;
          |  |  |              +--ro memory-mb?              uint64&lt;br /&gt;
          |  |  |              +--ro (om-numa-type)?&lt;br /&gt;
          |  |  |                 +--:(cores)&lt;br /&gt;
          |  |  |                 |  +--ro num-cores?        uint8&lt;br /&gt;
          |  |  |                 +--:(paired-threads)&lt;br /&gt;
          |  |  |                 |  +--ro paired-threads&lt;br /&gt;
          |  |  |                 |     +--ro num-paired-threads?   uint8&lt;br /&gt;
          |  |  |                 |     +--ro paired-thread-ids* [thread-a]&lt;br /&gt;
          |  |  |                 |        +--ro thread-a    uint8&lt;br /&gt;
          |  |  |                 |        +--ro thread-b?   uint8&lt;br /&gt;
          |  |  |                 +--:(threads)&lt;br /&gt;
          |  |  |                    +--ro num-threads?      uint8&lt;br /&gt;
          |  |  +--ro vswitch-epa&lt;br /&gt;
          |  |  |  +--ro ovs-acceleration?   enumeration&lt;br /&gt;
          |  |  |  +--ro ovs-offload?        enumeration&lt;br /&gt;
          |  |  +--ro hypervisor-epa&lt;br /&gt;
          |  |  |  +--ro type?      enumeration&lt;br /&gt;
          |  |  |  +--ro version?   string&lt;br /&gt;
          |  |  +--ro host-epa&lt;br /&gt;
          |  |  |  +--ro cpu-model?               enumeration&lt;br /&gt;
          |  |  |  +--ro cpu-arch?                enumeration&lt;br /&gt;
          |  |  |  +--ro cpu-vendor?              enumeration&lt;br /&gt;
          |  |  |  +--ro cpu-socket-count?        uint64&lt;br /&gt;
          |  |  |  +--ro cpu-core-count?          uint64&lt;br /&gt;
          |  |  |  +--ro cpu-core-thread-count?   uint64&lt;br /&gt;
          |  |  |  +--ro cpu-feature* [feature]&lt;br /&gt;
          |  |  |  |  +--ro feature    cpu-feature-type&lt;br /&gt;
          |  |  |  +--ro om-cpu-model-string?     string&lt;br /&gt;
          |  |  |  +--ro om-cpu-feature* [feature]&lt;br /&gt;
          |  |  |     +--ro feature    string&lt;br /&gt;
          |  |  +--ro alarm* [alarm-id]&lt;br /&gt;
          |  |  |  +--ro alarm-id                    string&lt;br /&gt;
          |  |  |  +--ro vnf-monitoring-param-ref?   -&amp;gt; ../../monitoring-param/id&lt;br /&gt;
          |  |  |  +--ro name?                       string&lt;br /&gt;
          |  |  |  +--ro description?                string&lt;br /&gt;
          |  |  |  +--ro vdur-id?                    string&lt;br /&gt;
          |  |  |  +--ro actions&lt;br /&gt;
          |  |  |  |  +--ro ok* [url]&lt;br /&gt;
          |  |  |  |  |  +--ro url    string&lt;br /&gt;
          |  |  |  |  +--ro insufficient-data* [url]&lt;br /&gt;
          |  |  |  |  |  +--ro url    string&lt;br /&gt;
          |  |  |  |  +--ro alarm* [url]&lt;br /&gt;
          |  |  |  |     +--ro url    string&lt;br /&gt;
          |  |  |  +--ro repeat?                     boolean&lt;br /&gt;
          |  |  |  +--ro enabled?                    boolean&lt;br /&gt;
          |  |  |  +--ro severity?                   alarm-severity-type&lt;br /&gt;
          |  |  |  +--ro statistic?                  alarm-statistic-type&lt;br /&gt;
          |  |  |  +--ro operation?                  relational-operation-type&lt;br /&gt;
          |  |  |  +--ro value?                      decimal64&lt;br /&gt;
          |  |  |  +--ro period?                     uint32&lt;br /&gt;
          |  |  |  +--ro evaluations?                uint32&lt;br /&gt;
          |  |  +--ro image?                       string&lt;br /&gt;
          |  |  +--ro image-checksum?              string&lt;br /&gt;
          |  |  +--ro alternative-images* [vim-type]&lt;br /&gt;
          |  |  |  +--ro vim-type          string&lt;br /&gt;
          |  |  |  +--ro image?            string&lt;br /&gt;
          |  |  |  +--ro image-checksum?   string&lt;br /&gt;
          |  |  +--ro vdu-configuration&lt;br /&gt;
          |  |  |  +--ro (config-method)?&lt;br /&gt;
          |  |  |  |  +--:(script)&lt;br /&gt;
          |  |  |  |  |  +--ro script&lt;br /&gt;
          |  |  |  |  |     +--ro script-type?   enumeration&lt;br /&gt;
          |  |  |  |  +--:(juju)&lt;br /&gt;
          |  |  |  |     +--ro juju&lt;br /&gt;
          |  |  |  |        +--ro charm?               string&lt;br /&gt;
          |  |  |  |        +--ro proxy?               boolean&lt;br /&gt;
          |  |  |  |        +--ro vca-relationships&lt;br /&gt;
          |  |  |  |           +--ro relation* [requires provides]&lt;br /&gt;
          |  |  |  |              +--ro requires    string&lt;br /&gt;
          |  |  |  |              +--ro provides    string&lt;br /&gt;
          |  |  |  +--ro config-primitive* [name]&lt;br /&gt;
          |  |  |  |  +--ro name                   string&lt;br /&gt;
          |  |  |  |  +--ro parameter* [name]&lt;br /&gt;
          |  |  |  |  |  +--ro name              string&lt;br /&gt;
          |  |  |  |  |  +--ro data-type?        manotypes:parameter-data-type&lt;br /&gt;
          |  |  |  |  |  +--ro mandatory?        boolean&lt;br /&gt;
          |  |  |  |  |  +--ro default-value?    string&lt;br /&gt;
          |  |  |  |  |  +--ro parameter-pool?   string&lt;br /&gt;
          |  |  |  |  |  +--ro read-only?        boolean&lt;br /&gt;
          |  |  |  |  |  +--ro hidden?           boolean&lt;br /&gt;
          |  |  |  |  +--ro user-defined-script?   string&lt;br /&gt;
          |  |  |  +--ro initial-config-primitive* [seq]&lt;br /&gt;
          |  |  |  |  +--ro seq                          uint64&lt;br /&gt;
          |  |  |  |  +--ro (primitive-type)?&lt;br /&gt;
          |  |  |  |     +--:(primitive-definition)&lt;br /&gt;
          |  |  |  |        +--ro name?                  string&lt;br /&gt;
          |  |  |  |        +--ro parameter* [name]&lt;br /&gt;
          |  |  |  |        |  +--ro name         string&lt;br /&gt;
          |  |  |  |        |  +--ro data-type?   manotypes:parameter-data-type&lt;br /&gt;
          |  |  |  |        |  +--ro value?       string&lt;br /&gt;
          |  |  |  |        +--ro user-defined-script?   string&lt;br /&gt;
          |  |  |  +--ro terminate-config-primitive* [seq]&lt;br /&gt;
          |  |  |  |  +--ro seq                    uint64&lt;br /&gt;
          |  |  |  |  +--ro name?                  string&lt;br /&gt;
          |  |  |  |  +--ro parameter* [name]&lt;br /&gt;
          |  |  |  |  |  +--ro name         string&lt;br /&gt;
          |  |  |  |  |  +--ro data-type?   manotypes:parameter-data-type&lt;br /&gt;
          |  |  |  |  |  +--ro value?       string&lt;br /&gt;
          |  |  |  |  +--ro user-defined-script?   string&lt;br /&gt;
          |  |  |  +--ro metrics* [name]&lt;br /&gt;
          |  |  |  |  +--ro name    string&lt;br /&gt;
          |  |  |  +--ro config-access&lt;br /&gt;
          |  |  |     +--ro ssh-access&lt;br /&gt;
          |  |  |        +--ro required?       boolean&lt;br /&gt;
          |  |  |        +--ro default-user?   string&lt;br /&gt;
          |  |  +--ro monitoring-param* [id]&lt;br /&gt;
          |  |  |  +--ro id                    string&lt;br /&gt;
          |  |  |  +--ro nfvi-metric?          manotypes:nfvi-metric-type&lt;br /&gt;
          |  |  |  +--ro interface-name-ref?   -&amp;gt; ../../interface/name&lt;br /&gt;
          |  |  +--ro (cloud-init-input)?&lt;br /&gt;
          |  |  |  +--:(inline)&lt;br /&gt;
          |  |  |  |  +--ro cloud-init?            string&lt;br /&gt;
          |  |  |  +--:(filename)&lt;br /&gt;
          |  |  |     +--ro cloud-init-file?       string&lt;br /&gt;
          |  |  +--ro supplemental-boot-data&lt;br /&gt;
          |  |  |  +--ro boot-data-drive?   boolean&lt;br /&gt;
          |  |  +--ro internal-connection-point* [id]&lt;br /&gt;
          |  |  |  +--ro name?                    string&lt;br /&gt;
          |  |  |  +--ro id                       string&lt;br /&gt;
          |  |  |  +--ro short-name?              string&lt;br /&gt;
          |  |  |  +--ro type?                    manotypes:connection-point-type&lt;br /&gt;
          |  |  |  +--ro port-security-enabled?   boolean&lt;br /&gt;
          |  |  |  +--ro internal-vld-ref?        -&amp;gt; ../../../internal-vld/id&lt;br /&gt;
          |  |  +--ro interface* [name]&lt;br /&gt;
          |  |  |  +--ro name                                   string&lt;br /&gt;
          |  |  |  +--ro position?                              uint32&lt;br /&gt;
          |  |  |  +--ro mgmt-interface?                        boolean&lt;br /&gt;
          |  |  |  +--ro type?                                  interface-type&lt;br /&gt;
          |  |  |  +--ro mac-address?                           string&lt;br /&gt;
          |  |  |  +--ro (connection-point-type)?&lt;br /&gt;
          |  |  |  |  +--:(internal)&lt;br /&gt;
          |  |  |  |  |  +--ro internal-connection-point-ref?   -&amp;gt; ../../internal-connection-point/id&lt;br /&gt;
          |  |  |  |  +--:(external)&lt;br /&gt;
          |  |  |  |     +--ro external-connection-point-ref?   -&amp;gt; ../../../connection-point/name&lt;br /&gt;
          |  |  |  +--ro virtual-interface&lt;br /&gt;
          |  |  |     +--ro type?        enumeration&lt;br /&gt;
          |  |  |     +--ro vpci?        string&lt;br /&gt;
          |  |  |     +--ro bandwidth?   uint64&lt;br /&gt;
          |  |  +--ro volumes* [name]&lt;br /&gt;
          |  |     +--ro name                    string&lt;br /&gt;
          |  |     +--ro description?            string&lt;br /&gt;
          |  |     +--ro size?                   uint64&lt;br /&gt;
          |  |     +--ro (volume-source)?&lt;br /&gt;
          |  |     |  +--:(ephemeral)&lt;br /&gt;
          |  |     |  |  +--ro ephemeral?        empty&lt;br /&gt;
          |  |     |  +--:(image)&lt;br /&gt;
          |  |     |     +--ro image?            string&lt;br /&gt;
          |  |     |     +--ro image-checksum?   string&lt;br /&gt;
          |  |     +--ro device-bus?             enumeration&lt;br /&gt;
          |  |     +--ro device-type?            enumeration&lt;br /&gt;
          |  +--ro vdu-dependency* [vdu-source-ref]&lt;br /&gt;
          |  |  +--ro vdu-source-ref        -&amp;gt; ../../vdu/id&lt;br /&gt;
          |  |  +--ro vdu-depends-on-ref?   -&amp;gt; ../../vdu/id&lt;br /&gt;
          |  +--ro service-function-chain?     enumeration&lt;br /&gt;
          |  +--ro service-function-type?      string&lt;br /&gt;
          |  +--ro http-endpoint* [path]&lt;br /&gt;
          |  |  +--ro path                     string&lt;br /&gt;
          |  |  +--ro https?                   boolean&lt;br /&gt;
          |  |  +--ro port?                    inet:port-number&lt;br /&gt;
          |  |  +--ro username?                string&lt;br /&gt;
          |  |  +--ro password?                string&lt;br /&gt;
          |  |  +--ro polling-interval-secs?   uint8&lt;br /&gt;
          |  |  +--ro method?                  manotypes:http-method&lt;br /&gt;
          |  |  +--ro headers* [key]&lt;br /&gt;
          |  |     +--ro key      string&lt;br /&gt;
          |  |     +--ro value?   string&lt;br /&gt;
          |  +--ro scaling-group-descriptor* [name]&lt;br /&gt;
          |  |  +--ro name                     string&lt;br /&gt;
          |  |  +--ro scaling-policy* [name]&lt;br /&gt;
          |  |  |  +--ro name                        string&lt;br /&gt;
          |  |  |  +--ro scaling-type?               manotypes:scaling-policy-type&lt;br /&gt;
          |  |  |  +--ro enabled?                    boolean&lt;br /&gt;
          |  |  |  +--ro scale-in-operation-type?    manotypes:scaling-criteria-operation&lt;br /&gt;
          |  |  |  +--ro scale-out-operation-type?   manotypes:scaling-criteria-operation&lt;br /&gt;
          |  |  |  +--ro threshold-time              uint32&lt;br /&gt;
          |  |  |  +--ro cooldown-time               uint32&lt;br /&gt;
          |  |  |  +--ro scaling-criteria* [name]&lt;br /&gt;
          |  |  |     +--ro name                              string&lt;br /&gt;
          |  |  |     +--ro scale-in-threshold?               decimal64&lt;br /&gt;
          |  |  |     +--ro scale-in-relational-operation?    manotypes:relational-operation-type&lt;br /&gt;
          |  |  |     +--ro scale-out-threshold?              decimal64&lt;br /&gt;
          |  |  |     +--ro scale-out-relational-operation?   manotypes:relational-operation-type&lt;br /&gt;
          |  |  |     +--ro vnf-monitoring-param-ref?         -&amp;gt; ../../../../monitoring-param/id&lt;br /&gt;
          |  |  +--ro vdu* [vdu-id-ref]&lt;br /&gt;
          |  |  |  +--ro vdu-id-ref    -&amp;gt; ../../../vdu/id&lt;br /&gt;
          |  |  |  +--ro count?        uint32&lt;br /&gt;
          |  |  +--ro min-instance-count?      uint32&lt;br /&gt;
          |  |  +--ro max-instance-count?      uint32&lt;br /&gt;
          |  |  +--ro scaling-config-action* [trigger]&lt;br /&gt;
          |  |     +--ro trigger                          manotypes:scaling-trigger&lt;br /&gt;
          |  |     +--ro vnf-config-primitive-name-ref?   -&amp;gt; ../../../vnf-configuration/config-primitive/name&lt;br /&gt;
          |  +--ro monitoring-param* [id]&lt;br /&gt;
          |  |  +--ro id                            string&lt;br /&gt;
          |  |  +--ro name?                         string&lt;br /&gt;
          |  |  +--ro aggregation-type?             aggregation-type&lt;br /&gt;
          |  |  +--ro (monitoring-type)?&lt;br /&gt;
          |  |  |  +--:(vdu-monitoring-param)&lt;br /&gt;
          |  |  |  |  +--ro vdu-monitoring-param&lt;br /&gt;
          |  |  |  |     +--ro vdu-ref?                    -&amp;gt; ../../../vdu/id&lt;br /&gt;
          |  |  |  |     +--ro vdu-monitoring-param-ref?   -&amp;gt; ../../../vdu[id = current()/../vdu-ref]/monitoring-param/id&lt;br /&gt;
          |  |  |  +--:(vnf-metric)&lt;br /&gt;
          |  |  |  |  +--ro vnf-metric&lt;br /&gt;
          |  |  |  |     +--ro vnf-metric-name-ref?   -&amp;gt; ../../../vnf-configuration/metrics/name&lt;br /&gt;
          |  |  |  +--:(vdu-metric)&lt;br /&gt;
          |  |  |     +--ro vdu-metric&lt;br /&gt;
          |  |  |        +--ro vdu-ref?               -&amp;gt; ../../../vdu/id&lt;br /&gt;
          |  |  |        +--ro vdu-metric-name-ref?   -&amp;gt; ../../../vdu[id = current()/../vdu-ref]/vdu-configuration/metrics/name&lt;br /&gt;
          |  |  +--ro http-endpoint-ref?            -&amp;gt; ../../http-endpoint/path&lt;br /&gt;
          |  |  +--ro json-query-method?            manotypes:json-query-method&lt;br /&gt;
          |  |  +--ro json-query-params&lt;br /&gt;
          |  |  |  +--ro json-path?     string&lt;br /&gt;
          |  |  |  +--ro object-path?   string&lt;br /&gt;
          |  |  +--ro description?                  string&lt;br /&gt;
          |  |  +--ro group-tag?                    string&lt;br /&gt;
          |  |  +--ro widget-type?                  manotypes:widget-type&lt;br /&gt;
          |  |  +--ro units?                        string&lt;br /&gt;
          |  |  +--ro value-type?                   param-value-type&lt;br /&gt;
          |  |  +--ro numeric-constraints&lt;br /&gt;
          |  |  |  +--ro min-value?   uint64&lt;br /&gt;
          |  |  |  +--ro max-value?   uint64&lt;br /&gt;
          |  |  +--ro text-constraints&lt;br /&gt;
          |  |  |  +--ro min-length?   uint8&lt;br /&gt;
          |  |  |  +--ro max-length?   uint8&lt;br /&gt;
          |  |  +--ro value-integer?                int64&lt;br /&gt;
          |  |  +--ro value-decimal?                decimal64&lt;br /&gt;
          |  |  +--ro value-string?                 string&lt;br /&gt;
          |  +--ro placement-groups* [name]&lt;br /&gt;
          |     +--ro name           string&lt;br /&gt;
          |     +--ro requirement?   string&lt;br /&gt;
          |     +--ro strategy?      enumeration&lt;br /&gt;
          |     +--ro member-vdus* [member-vdu-ref]&lt;br /&gt;
          |        +--ro member-vdu-ref    -&amp;gt; ../../../vdu/id&lt;br /&gt;
          +--ro vnfd-ref?                -&amp;gt; ../../../project-vnfd:vnfd-catalog/vnfd/id&lt;br /&gt;
          +--ro vnf-configuration&lt;br /&gt;
          |  +--ro (config-method)?&lt;br /&gt;
          |  |  +--:(script)&lt;br /&gt;
          |  |  |  +--ro script&lt;br /&gt;
          |  |  |     +--ro script-type?   enumeration&lt;br /&gt;
          |  |  +--:(juju)&lt;br /&gt;
          |  |     +--ro juju&lt;br /&gt;
          |  |        +--ro charm?               string&lt;br /&gt;
          |  |        +--ro proxy?               boolean&lt;br /&gt;
          |  |        +--ro vca-relationships&lt;br /&gt;
          |  |           +--ro relation* [requires provides]&lt;br /&gt;
          |  |              +--ro requires    string&lt;br /&gt;
          |  |              +--ro provides    string&lt;br /&gt;
          |  +--ro config-primitive* [name]&lt;br /&gt;
          |  |  +--ro name                   string&lt;br /&gt;
          |  |  +--ro parameter* [name]&lt;br /&gt;
          |  |  |  +--ro name              string&lt;br /&gt;
          |  |  |  +--ro data-type?        manotypes:parameter-data-type&lt;br /&gt;
          |  |  |  +--ro mandatory?        boolean&lt;br /&gt;
          |  |  |  +--ro default-value?    string&lt;br /&gt;
          |  |  |  +--ro parameter-pool?   string&lt;br /&gt;
          |  |  |  +--ro read-only?        boolean&lt;br /&gt;
          |  |  |  +--ro hidden?           boolean&lt;br /&gt;
          |  |  +--ro user-defined-script?   string&lt;br /&gt;
          |  +--ro initial-config-primitive* [seq]&lt;br /&gt;
          |  |  +--ro seq                          uint64&lt;br /&gt;
          |  |  +--ro (primitive-type)?&lt;br /&gt;
          |  |     +--:(primitive-definition)&lt;br /&gt;
          |  |        +--ro name?                  string&lt;br /&gt;
          |  |        +--ro parameter* [name]&lt;br /&gt;
          |  |        |  +--ro name         string&lt;br /&gt;
          |  |        |  +--ro data-type?   manotypes:parameter-data-type&lt;br /&gt;
          |  |        |  +--ro value?       string&lt;br /&gt;
          |  |        +--ro user-defined-script?   string&lt;br /&gt;
          |  +--ro terminate-config-primitive* [seq]&lt;br /&gt;
          |  |  +--ro seq                    uint64&lt;br /&gt;
          |  |  +--ro name?                  string&lt;br /&gt;
          |  |  +--ro parameter* [name]&lt;br /&gt;
          |  |  |  +--ro name         string&lt;br /&gt;
          |  |  |  +--ro data-type?   manotypes:parameter-data-type&lt;br /&gt;
          |  |  |  +--ro value?       string&lt;br /&gt;
          |  |  +--ro user-defined-script?   string&lt;br /&gt;
          |  +--ro metrics* [name]&lt;br /&gt;
          |     +--ro name    string&lt;br /&gt;
          +--ro mgmt-interface&lt;br /&gt;
          |  +--ro ip-address?   inet:ip-address&lt;br /&gt;
          |  +--ro port?         inet:port-number&lt;br /&gt;
          |  +--ro ssh-key&lt;br /&gt;
          |     +--ro public-key?         string&lt;br /&gt;
          |     +--ro private-key-file?   string&lt;br /&gt;
          +--ro internal-vlr* [vlr-ref]&lt;br /&gt;
          |  +--ro vlr-ref                          -&amp;gt; ../../../../vlr:vlr-catalog/vlr/id&lt;br /&gt;
          |  +--ro internal-connection-point-ref*   -&amp;gt; ../../vdur/internal-connection-point/id&lt;br /&gt;
          +--ro connection-point* [name]&lt;br /&gt;
          |  +--ro name                     string&lt;br /&gt;
          |  +--ro id?                      string&lt;br /&gt;
          |  +--ro short-name?              string&lt;br /&gt;
          |  +--ro type?                    manotypes:connection-point-type&lt;br /&gt;
          |  +--ro port-security-enabled?   boolean&lt;br /&gt;
          |  +--ro vlr-ref?                 -&amp;gt; ../../../../vlr:vlr-catalog/vlr/id&lt;br /&gt;
          |  +--ro ip-address?              inet:ip-address&lt;br /&gt;
          |  +--ro mac-address?             string&lt;br /&gt;
          |  +--ro connection-point-id?     string&lt;br /&gt;
          |  +--ro virtual-cps* [name]&lt;br /&gt;
          |     +--ro name                     string&lt;br /&gt;
          |     +--ro id?                      string&lt;br /&gt;
          |     +--ro short-name?              string&lt;br /&gt;
          |     +--ro type?                    manotypes:connection-point-type&lt;br /&gt;
          |     +--ro port-security-enabled?   boolean&lt;br /&gt;
          |     +--ro ip-address?              inet:ip-address&lt;br /&gt;
          |     +--ro mac-address?             string&lt;br /&gt;
          |     +--ro connection-point-id?     string&lt;br /&gt;
          +--ro vdur* [id]&lt;br /&gt;
          |  +--ro id                           yang:uuid&lt;br /&gt;
          |  +--ro name?                        string&lt;br /&gt;
          |  +--ro unique-short-name?           string&lt;br /&gt;
          |  +--ro vdu-id-ref?                  -&amp;gt; ../../vnfd/vdu/id&lt;br /&gt;
          |  +--ro vim-id?                      string&lt;br /&gt;
          |  +--ro flavor-id?                   string&lt;br /&gt;
          |  +--ro image-id?                    string&lt;br /&gt;
          |  +--ro management-ip?               inet:ip-address&lt;br /&gt;
          |  +--ro vm-management-ip?            inet:ip-address&lt;br /&gt;
          |  +--ro console-url?                 inet:uri&lt;br /&gt;
          |  +--ro vm-flavor&lt;br /&gt;
          |  |  +--ro vcpu-count?   uint16&lt;br /&gt;
          |  |  +--ro memory-mb?    uint64&lt;br /&gt;
          |  |  +--ro storage-gb?   uint64&lt;br /&gt;
          |  +--ro guest-epa&lt;br /&gt;
          |  |  +--ro trusted-execution?                 boolean&lt;br /&gt;
          |  |  +--ro mempage-size?                      enumeration&lt;br /&gt;
          |  |  +--ro (cpu-policy)?&lt;br /&gt;
          |  |  |  +--:(cpu-pinning)&lt;br /&gt;
          |  |  |  |  +--ro cpu-pinning-policy?          enumeration&lt;br /&gt;
          |  |  |  |  +--ro cpu-thread-pinning-policy?   enumeration&lt;br /&gt;
          |  |  |  +--:(cpu-quota)&lt;br /&gt;
          |  |  |     +--ro cpu-quota&lt;br /&gt;
          |  |  |        +--ro limit?     uint64&lt;br /&gt;
          |  |  |        +--ro reserve?   uint64&lt;br /&gt;
          |  |  |        +--ro shares?    uint64&lt;br /&gt;
          |  |  +--ro mem-quota&lt;br /&gt;
          |  |  |  +--ro limit?     uint64&lt;br /&gt;
          |  |  |  +--ro reserve?   uint64&lt;br /&gt;
          |  |  |  +--ro shares?    uint64&lt;br /&gt;
          |  |  +--ro disk-io-quota&lt;br /&gt;
          |  |  |  +--ro limit?     uint64&lt;br /&gt;
          |  |  |  +--ro reserve?   uint64&lt;br /&gt;
          |  |  |  +--ro shares?    uint64&lt;br /&gt;
          |  |  +--ro vif-quota&lt;br /&gt;
          |  |  |  +--ro limit?     uint64&lt;br /&gt;
          |  |  |  +--ro reserve?   uint64&lt;br /&gt;
          |  |  |  +--ro shares?    uint64&lt;br /&gt;
          |  |  +--ro pcie-device* [device-id]&lt;br /&gt;
          |  |  |  +--ro device-id    string&lt;br /&gt;
          |  |  |  +--ro count?       uint64&lt;br /&gt;
          |  |  +--ro (numa-policy)?&lt;br /&gt;
          |  |     +--:(numa-unaware)&lt;br /&gt;
          |  |     |  +--ro numa-unaware?                empty&lt;br /&gt;
          |  |     +--:(numa-aware)&lt;br /&gt;
          |  |        +--ro numa-node-policy&lt;br /&gt;
          |  |           +--ro node-cnt?     uint16&lt;br /&gt;
          |  |           +--ro mem-policy?   enumeration&lt;br /&gt;
          |  |           +--ro node* [id]&lt;br /&gt;
          |  |              +--ro id                      uint64&lt;br /&gt;
          |  |              +--ro vcpu* [id]&lt;br /&gt;
          |  |              |  +--ro id    uint64&lt;br /&gt;
          |  |              +--ro memory-mb?              uint64&lt;br /&gt;
          |  |              +--ro (om-numa-type)?&lt;br /&gt;
          |  |                 +--:(cores)&lt;br /&gt;
          |  |                 |  +--ro num-cores?        uint8&lt;br /&gt;
          |  |                 +--:(paired-threads)&lt;br /&gt;
          |  |                 |  +--ro paired-threads&lt;br /&gt;
          |  |                 |     +--ro num-paired-threads?   uint8&lt;br /&gt;
          |  |                 |     +--ro paired-thread-ids* [thread-a]&lt;br /&gt;
          |  |                 |        +--ro thread-a    uint8&lt;br /&gt;
          |  |                 |        +--ro thread-b?   uint8&lt;br /&gt;
          |  |                 +--:(threads)&lt;br /&gt;
          |  |                    +--ro num-threads?      uint8&lt;br /&gt;
          |  +--ro vswitch-epa&lt;br /&gt;
          |  |  +--ro ovs-acceleration?   enumeration&lt;br /&gt;
          |  |  +--ro ovs-offload?        enumeration&lt;br /&gt;
          |  +--ro hypervisor-epa&lt;br /&gt;
          |  |  +--ro type?      enumeration&lt;br /&gt;
          |  |  +--ro version?   string&lt;br /&gt;
          |  +--ro host-epa&lt;br /&gt;
          |  |  +--ro cpu-model?               enumeration&lt;br /&gt;
          |  |  +--ro cpu-arch?                enumeration&lt;br /&gt;
          |  |  +--ro cpu-vendor?              enumeration&lt;br /&gt;
          |  |  +--ro cpu-socket-count?        uint64&lt;br /&gt;
          |  |  +--ro cpu-core-count?          uint64&lt;br /&gt;
          |  |  +--ro cpu-core-thread-count?   uint64&lt;br /&gt;
          |  |  +--ro cpu-feature* [feature]&lt;br /&gt;
          |  |  |  +--ro feature    cpu-feature-type&lt;br /&gt;
          |  |  +--ro om-cpu-model-string?     string&lt;br /&gt;
          |  |  +--ro om-cpu-feature* [feature]&lt;br /&gt;
          |  |     +--ro feature    string&lt;br /&gt;
          |  +--ro supplemental-boot-data&lt;br /&gt;
          |  |  +--ro boot-data-drive?   boolean&lt;br /&gt;
          |  +--ro vdu-configuration&lt;br /&gt;
          |  |  +--ro (config-method)?&lt;br /&gt;
          |  |  |  +--:(script)&lt;br /&gt;
          |  |  |  |  +--ro script&lt;br /&gt;
          |  |  |  |     +--ro script-type?   enumeration&lt;br /&gt;
          |  |  |  +--:(juju)&lt;br /&gt;
          |  |  |     +--ro juju&lt;br /&gt;
          |  |  |        +--ro charm?               string&lt;br /&gt;
          |  |  |        +--ro proxy?               boolean&lt;br /&gt;
          |  |  |        +--ro vca-relationships&lt;br /&gt;
          |  |  |           +--ro relation* [requires provides]&lt;br /&gt;
          |  |  |              +--ro requires    string&lt;br /&gt;
          |  |  |              +--ro provides    string&lt;br /&gt;
          |  |  +--ro config-primitive* [name]&lt;br /&gt;
          |  |  |  +--ro name                   string&lt;br /&gt;
          |  |  |  +--ro parameter* [name]&lt;br /&gt;
          |  |  |  |  +--ro name              string&lt;br /&gt;
          |  |  |  |  +--ro data-type?        manotypes:parameter-data-type&lt;br /&gt;
          |  |  |  |  +--ro mandatory?        boolean&lt;br /&gt;
          |  |  |  |  +--ro default-value?    string&lt;br /&gt;
          |  |  |  |  +--ro parameter-pool?   string&lt;br /&gt;
          |  |  |  |  +--ro read-only?        boolean&lt;br /&gt;
          |  |  |  |  +--ro hidden?           boolean&lt;br /&gt;
          |  |  |  +--ro user-defined-script?   string&lt;br /&gt;
          |  |  +--ro initial-config-primitive* [seq]&lt;br /&gt;
          |  |  |  +--ro seq                          uint64&lt;br /&gt;
          |  |  |  +--ro (primitive-type)?&lt;br /&gt;
          |  |  |     +--:(primitive-definition)&lt;br /&gt;
          |  |  |        +--ro name?                  string&lt;br /&gt;
          |  |  |        +--ro parameter* [name]&lt;br /&gt;
          |  |  |        |  +--ro name         string&lt;br /&gt;
          |  |  |        |  +--ro data-type?   manotypes:parameter-data-type&lt;br /&gt;
          |  |  |        |  +--ro value?       string&lt;br /&gt;
          |  |  |        +--ro user-defined-script?   string&lt;br /&gt;
          |  |  +--ro terminate-config-primitive* [seq]&lt;br /&gt;
          |  |  |  +--ro seq                    uint64&lt;br /&gt;
          |  |  |  +--ro name?                  string&lt;br /&gt;
          |  |  |  +--ro parameter* [name]&lt;br /&gt;
          |  |  |  |  +--ro name         string&lt;br /&gt;
          |  |  |  |  +--ro data-type?   manotypes:parameter-data-type&lt;br /&gt;
          |  |  |  |  +--ro value?       string&lt;br /&gt;
          |  |  |  +--ro user-defined-script?   string&lt;br /&gt;
          |  |  +--ro metrics* [name]&lt;br /&gt;
          |  |     +--ro name    string&lt;br /&gt;
          |  +--ro monitoring-param* [id]&lt;br /&gt;
          |  |  +--ro id                    string&lt;br /&gt;
          |  |  +--ro nfvi-metric?          manotypes:nfvi-metric-type&lt;br /&gt;
          |  |  +--ro interface-name-ref?   -&amp;gt; ../../interface/name&lt;br /&gt;
          |  +--ro volumes* [name]&lt;br /&gt;
          |  |  +--ro name                    string&lt;br /&gt;
          |  |  +--ro volume-id?              string&lt;br /&gt;
          |  |  +--ro description?            string&lt;br /&gt;
          |  |  +--ro size?                   uint64&lt;br /&gt;
          |  |  +--ro (volume-source)?&lt;br /&gt;
          |  |  |  +--:(ephemeral)&lt;br /&gt;
          |  |  |  |  +--ro ephemeral?        empty&lt;br /&gt;
          |  |  |  +--:(image)&lt;br /&gt;
          |  |  |     +--ro image?            string&lt;br /&gt;
          |  |  |     +--ro image-checksum?   string&lt;br /&gt;
          |  |  +--ro device-bus?             enumeration&lt;br /&gt;
          |  |  +--ro device-type?            enumeration&lt;br /&gt;
          |  +--ro internal-connection-point* [id]&lt;br /&gt;
          |  |  +--ro name?                    string&lt;br /&gt;
          |  |  +--ro id                       string&lt;br /&gt;
          |  |  +--ro short-name?              string&lt;br /&gt;
          |  |  +--ro type?                    manotypes:connection-point-type&lt;br /&gt;
          |  |  +--ro port-security-enabled?   boolean&lt;br /&gt;
          |  |  +--ro ip-address?              inet:ip-address&lt;br /&gt;
          |  |  +--ro mac-address?             string&lt;br /&gt;
          |  |  +--ro connection-point-id?     string&lt;br /&gt;
          |  |  +--ro virtual-cps* [name]&lt;br /&gt;
          |  |     +--ro name                     string&lt;br /&gt;
          |  |     +--ro id?                      string&lt;br /&gt;
          |  |     +--ro short-name?              string&lt;br /&gt;
          |  |     +--ro type?                    manotypes:connection-point-type&lt;br /&gt;
          |  |     +--ro port-security-enabled?   boolean&lt;br /&gt;
          |  |     +--ro ip-address?              inet:ip-address&lt;br /&gt;
          |  |     +--ro mac-address?             string&lt;br /&gt;
          |  |     +--ro connection-point-id?     string&lt;br /&gt;
          |  +--ro interface* [name]&lt;br /&gt;
          |  |  +--ro name                                   string&lt;br /&gt;
          |  |  +--ro position?                              uint32&lt;br /&gt;
          |  |  +--ro type?                                  vnfd-base:interface-type&lt;br /&gt;
          |  |  +--ro (connection-point-type)?&lt;br /&gt;
          |  |  |  +--:(internal)&lt;br /&gt;
          |  |  |  |  +--ro internal-connection-point-ref?   -&amp;gt; ../../internal-connection-point/id&lt;br /&gt;
          |  |  |  +--:(external)&lt;br /&gt;
          |  |  |     +--ro external-connection-point-ref?   -&amp;gt; ../../../connection-point/name&lt;br /&gt;
          |  |  +--ro virtual-interface&lt;br /&gt;
          |  |     +--ro type?                    enumeration&lt;br /&gt;
          |  |     +--ro bandwidth?               uint64&lt;br /&gt;
          |  |     +--ro ovs-offload?             enumeration&lt;br /&gt;
          |  |     +--ro vendor-id?               string&lt;br /&gt;
          |  |     +--ro datapath-library?        string&lt;br /&gt;
          |  |     +--ro provider-network-name?   string&lt;br /&gt;
          |  +--ro operational-status?          vdu-operational-status&lt;br /&gt;
          |  +--ro placement-groups-info* [name]&lt;br /&gt;
          |     +--ro name                        string&lt;br /&gt;
          |     +--ro requirement?                string&lt;br /&gt;
          |     +--ro strategy?                   enumeration&lt;br /&gt;
          |     +--ro cloud-type?                 manotypes:cloud-account-type&lt;br /&gt;
          |     +--ro (cloud-provider)?&lt;br /&gt;
          |        +--:(openstack)&lt;br /&gt;
          |        |  +--ro availability-zone&lt;br /&gt;
          |        |  |  +--ro name?   string&lt;br /&gt;
          |        |  +--ro server-group&lt;br /&gt;
          |        |  |  +--ro name?   string&lt;br /&gt;
          |        |  +--ro host-aggregate* [metadata-key]&lt;br /&gt;
          |        |     +--ro metadata-key      string&lt;br /&gt;
          |        |     +--ro metadata-value?   string&lt;br /&gt;
          |        +--:(aws)&lt;br /&gt;
          |        |  +--ro aws-construct?        empty&lt;br /&gt;
          |        +--:(openmano)&lt;br /&gt;
          |        |  +--ro openmano-construct?   empty&lt;br /&gt;
          |        +--:(vsphere)&lt;br /&gt;
          |        |  +--ro vsphere-construct?    empty&lt;br /&gt;
          |        +--:(mock)&lt;br /&gt;
          |        |  +--ro mock-construct?       empty&lt;br /&gt;
          |        +--:(cloudsim)&lt;br /&gt;
          |           +--ro cloudsim-construct?   empty&lt;br /&gt;
          +--ro monitoring-param* [id]&lt;br /&gt;
          |  +--ro id                            string&lt;br /&gt;
          |  +--ro name?                         string&lt;br /&gt;
          |  +--ro aggregation-type?             aggregation-type&lt;br /&gt;
          |  +--ro (monitoring-type)?&lt;br /&gt;
          |     +--:(vdu-monitoring-param)&lt;br /&gt;
          |     |  +--ro vdu-monitoring-param&lt;br /&gt;
          |     |     +--ro vdu-ref?                    -&amp;gt; ../../../vdur/id&lt;br /&gt;
          |     |     +--ro vdu-monitoring-param-ref?   -&amp;gt; ../../../vdur[id = current()/../vdu-ref]/monitoring-param/id&lt;br /&gt;
          |     +--:(vnf-metric)&lt;br /&gt;
          |     |  +--ro vnf-metric&lt;br /&gt;
          |     |     +--ro vnf-metric-name-ref?   -&amp;gt; ../../../vnf-configuration/metrics/name&lt;br /&gt;
          |     +--:(vdu-metric)&lt;br /&gt;
          |        +--ro vdu-metric&lt;br /&gt;
          |           +--ro vdu-ref?               -&amp;gt; ../../../vdur/id&lt;br /&gt;
          |           +--ro vdu-metric-name-ref?   -&amp;gt; ../../../vdur[id = current()/../vdu-ref]/vdu-configuration/metrics/name&lt;br /&gt;
          +--ro operational-status?      vnf-operational-status&lt;br /&gt;
          +--ro config-status?           enumeration&lt;br /&gt;
          +--ro placement-groups-info* [name]&lt;br /&gt;
          |  +--ro name                        string&lt;br /&gt;
          |  +--ro requirement?                string&lt;br /&gt;
          |  +--ro strategy?                   enumeration&lt;br /&gt;
          |  +--ro cloud-type?                 manotypes:cloud-account-type&lt;br /&gt;
          |  +--ro (cloud-provider)?&lt;br /&gt;
          |     +--:(openstack)&lt;br /&gt;
          |     |  +--ro availability-zone&lt;br /&gt;
          |     |  |  +--ro name?   string&lt;br /&gt;
          |     |  +--ro server-group&lt;br /&gt;
          |     |  |  +--ro name?   string&lt;br /&gt;
          |     |  +--ro host-aggregate* [metadata-key]&lt;br /&gt;
          |     |     +--ro metadata-key      string&lt;br /&gt;
          |     |     +--ro metadata-value?   string&lt;br /&gt;
          |     +--:(aws)&lt;br /&gt;
          |     |  +--ro aws-construct?        empty&lt;br /&gt;
          |     +--:(openmano)&lt;br /&gt;
          |     |  +--ro openmano-construct?   empty&lt;br /&gt;
          |     +--:(vsphere)&lt;br /&gt;
          |     |  +--ro vsphere-construct?    empty&lt;br /&gt;
          |     +--:(mock)&lt;br /&gt;
          |     |  +--ro mock-construct?       empty&lt;br /&gt;
          |     +--:(cloudsim)&lt;br /&gt;
          |        +--ro cloudsim-construct?   empty&lt;br /&gt;
          +--ro cloud-config&lt;br /&gt;
             +--ro key-pair* [name]&lt;br /&gt;
             |  +--ro name    string&lt;br /&gt;
             |  +--ro key?    string&lt;br /&gt;
             +--ro user* [name]&lt;br /&gt;
                +--ro name         string&lt;br /&gt;
                +--ro user-info?   string&lt;br /&gt;
                +--ro key-pair* [name]&lt;br /&gt;
                   +--ro name    string&lt;br /&gt;
                   +--ro key?    string&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===NSR tree===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Navigable version:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;http://osm-download.etsi.org/repository/osm/debian/ReleaseSIX/docs/osm-im/osm_im_trees/nsr.html&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Plain text version:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module: nsr&lt;br /&gt;
  augment /osm-project:project:&lt;br /&gt;
    +--rw key-pair* [name]&lt;br /&gt;
       +--rw name    string&lt;br /&gt;
       +--rw key?    string&lt;br /&gt;
  augment /osm-project:project:&lt;br /&gt;
    +--rw ns-instance-config&lt;br /&gt;
       +--rw nsr* [id]&lt;br /&gt;
          +--rw schema-version?              string&lt;br /&gt;
          +--rw id                           yang:uuid&lt;br /&gt;
          +--rw name?                        string&lt;br /&gt;
          +--rw short-name?                  string&lt;br /&gt;
          +--rw description?                 string&lt;br /&gt;
          +--rw admin-status?                enumeration&lt;br /&gt;
          +--rw nsd&lt;br /&gt;
          |  +--rw id?                         string&lt;br /&gt;
          |  +--rw name                        string&lt;br /&gt;
          |  +--rw short-name?                 string&lt;br /&gt;
          |  +--rw vendor?                     string&lt;br /&gt;
          |  +--rw logo?                       string&lt;br /&gt;
          |  +--rw description?                string&lt;br /&gt;
          |  +--rw version?                    string&lt;br /&gt;
          |  +--rw connection-point* [name]&lt;br /&gt;
          |  |  +--rw name                               string&lt;br /&gt;
          |  |  +--rw floating-ip-required?              boolean&lt;br /&gt;
          |  |  +--rw type?                              manotypes:connection-point-type&lt;br /&gt;
          |  |  +--rw (connection)?&lt;br /&gt;
          |  |     +--:(vld-ref)&lt;br /&gt;
          |  |     |  +--rw vld-id-ref?                  -&amp;gt; ../../vld/id&lt;br /&gt;
          |  |     +--:(vnfd-connection-point-ref)&lt;br /&gt;
          |  |        +--rw member-vnf-index-ref?        -&amp;gt; ../../constituent-vnfd/member-vnf-index&lt;br /&gt;
          |  |        +--rw vnfd-id-ref?                 -&amp;gt; ../../constituent-vnfd[member-vnf-index = current()/../member-vnf-index-ref]/vnfd-id-ref&lt;br /&gt;
          |  |        +--rw vnfd-connection-point-ref?   -&amp;gt; /vnfd:vnfd-catalog/vnfd[vnfd:id = current()/../vnfd-id-ref]/connection-point/name&lt;br /&gt;
          |  +--rw scaling-group-descriptor* [name]&lt;br /&gt;
          |  |  +--rw name                     string&lt;br /&gt;
          |  |  +--rw scaling-policy* [name]&lt;br /&gt;
          |  |  |  +--rw name                        string&lt;br /&gt;
          |  |  |  +--rw scaling-type?               manotypes:scaling-policy-type&lt;br /&gt;
          |  |  |  +--rw enabled?                    boolean&lt;br /&gt;
          |  |  |  +--rw scale-in-operation-type?    manotypes:scaling-criteria-operation&lt;br /&gt;
          |  |  |  +--rw scale-out-operation-type?   manotypes:scaling-criteria-operation&lt;br /&gt;
          |  |  |  +--rw threshold-time              uint32&lt;br /&gt;
          |  |  |  +--rw cooldown-time               uint32&lt;br /&gt;
          |  |  |  +--rw scaling-criteria* [name]&lt;br /&gt;
          |  |  |     +--rw name                              string&lt;br /&gt;
          |  |  |     +--rw scale-in-threshold?               uint64&lt;br /&gt;
          |  |  |     +--rw scale-in-relational-operation?    manotypes:relational-operation-type&lt;br /&gt;
          |  |  |     +--rw scale-out-threshold?              uint64&lt;br /&gt;
          |  |  |     +--rw scale-out-relational-operation?   manotypes:relational-operation-type&lt;br /&gt;
          |  |  |     +--rw ns-monitoring-param-ref?          -&amp;gt; ../../../../monitoring-param/id&lt;br /&gt;
          |  |  +--rw vnfd-member* [member-vnf-index-ref]&lt;br /&gt;
          |  |  |  +--rw member-vnf-index-ref    -&amp;gt; ../../../constituent-vnfd/member-vnf-index&lt;br /&gt;
          |  |  |  +--rw count?                  uint32&lt;br /&gt;
          |  |  +--rw min-instance-count?      uint32&lt;br /&gt;
          |  |  +--rw max-instance-count?      uint32&lt;br /&gt;
          |  |  +--rw scaling-config-action* [trigger]&lt;br /&gt;
          |  |     +--rw trigger                         manotypes:scaling-trigger&lt;br /&gt;
          |  |     +--rw ns-config-primitive-name-ref?   -&amp;gt; ../../../ns-configuration/config-primitive/name&lt;br /&gt;
          |  +--rw vnffgd* [id]&lt;br /&gt;
          |  |  +--rw id             string&lt;br /&gt;
          |  |  +--rw name?          string&lt;br /&gt;
          |  |  +--rw short-name?    string&lt;br /&gt;
          |  |  +--rw vendor?        string&lt;br /&gt;
          |  |  +--rw description?   string&lt;br /&gt;
          |  |  +--rw version?       string&lt;br /&gt;
          |  |  +--rw rsp* [id]&lt;br /&gt;
          |  |  |  +--rw id                           string&lt;br /&gt;
          |  |  |  +--rw name?                        string&lt;br /&gt;
          |  |  |  +--rw vnfd-connection-point-ref* [member-vnf-index-ref]&lt;br /&gt;
          |  |  |     +--rw member-vnf-index-ref                 -&amp;gt; ../../../../constituent-vnfd/member-vnf-index&lt;br /&gt;
          |  |  |     +--rw order?                               uint8&lt;br /&gt;
          |  |  |     +--rw vnfd-id-ref?                         -&amp;gt; ../../../../constituent-vnfd[member-vnf-index = current()/../member-vnf-index-ref]/vnfd-id-ref&lt;br /&gt;
          |  |  |     +--rw vnfd-ingress-connection-point-ref?   string&lt;br /&gt;
          |  |  |     +--rw vnfd-egress-connection-point-ref?    string&lt;br /&gt;
          |  |  +--rw classifier* [id]&lt;br /&gt;
          |  |     +--rw id                           string&lt;br /&gt;
          |  |     +--rw name?                        string&lt;br /&gt;
          |  |     +--rw rsp-id-ref?                  -&amp;gt; ../../rsp/id&lt;br /&gt;
          |  |     +--rw match-attributes* [id]&lt;br /&gt;
          |  |     |  +--rw id                        string&lt;br /&gt;
          |  |     |  +--rw ip-proto?                 uint8&lt;br /&gt;
          |  |     |  +--rw source-ip-address?        inet:ip-address&lt;br /&gt;
          |  |     |  +--rw destination-ip-address?   inet:ip-address&lt;br /&gt;
          |  |     |  +--rw source-port?              inet:port-number&lt;br /&gt;
          |  |     |  +--rw destination-port?         inet:port-number&lt;br /&gt;
          |  |     +--rw member-vnf-index-ref?        -&amp;gt; ../../../constituent-vnfd/member-vnf-index&lt;br /&gt;
          |  |     +--rw vnfd-id-ref?                 -&amp;gt; ../../../constituent-vnfd[member-vnf-index = current()/../member-vnf-index-ref]/vnfd-id-ref&lt;br /&gt;
          |  |     +--rw vnfd-connection-point-ref?   string&lt;br /&gt;
          |  +--rw ip-profiles* [name]&lt;br /&gt;
          |  |  +--rw name                 string&lt;br /&gt;
          |  |  +--rw description?         string&lt;br /&gt;
          |  |  +--rw ip-profile-params&lt;br /&gt;
          |  |     +--rw ip-version?           inet:ip-version&lt;br /&gt;
          |  |     +--rw subnet-address?       inet:ip-prefix&lt;br /&gt;
          |  |     +--rw gateway-address?      inet:ip-address&lt;br /&gt;
          |  |     +--rw security-group?       string&lt;br /&gt;
          |  |     +--rw dns-server* [address]&lt;br /&gt;
          |  |     |  +--rw address    inet:ip-address&lt;br /&gt;
          |  |     +--rw dhcp-params&lt;br /&gt;
          |  |     |  +--rw enabled?         boolean&lt;br /&gt;
          |  |     |  +--rw start-address?   inet:ip-address&lt;br /&gt;
          |  |     |  +--rw count?           uint32&lt;br /&gt;
          |  |     +--rw subnet-prefix-pool?   string&lt;br /&gt;
          |  +--rw ns-configuration&lt;br /&gt;
          |  |  +--rw (config-method)?&lt;br /&gt;
          |  |  |  +--:(script)&lt;br /&gt;
          |  |  |  |  +--rw script&lt;br /&gt;
          |  |  |  |     +--rw script-type?   enumeration&lt;br /&gt;
          |  |  |  +--:(juju)&lt;br /&gt;
          |  |  |     +--rw juju&lt;br /&gt;
          |  |  |        +--rw charm?               string&lt;br /&gt;
          |  |  |        +--rw proxy?               boolean&lt;br /&gt;
          |  |  |        +--rw vca-relationships&lt;br /&gt;
          |  |  |           +--rw relation* [requires provides]&lt;br /&gt;
          |  |  |              +--rw requires    string&lt;br /&gt;
          |  |  |              +--rw provides    string&lt;br /&gt;
          |  |  +--rw config-primitive* [name]&lt;br /&gt;
          |  |  |  +--rw name                   string&lt;br /&gt;
          |  |  |  +--rw parameter* [name]&lt;br /&gt;
          |  |  |  |  +--rw name              string&lt;br /&gt;
          |  |  |  |  +--rw data-type?        manotypes:parameter-data-type&lt;br /&gt;
          |  |  |  |  +--rw mandatory?        boolean&lt;br /&gt;
          |  |  |  |  +--rw default-value?    string&lt;br /&gt;
          |  |  |  |  +--rw parameter-pool?   string&lt;br /&gt;
          |  |  |  |  +--rw read-only?        boolean&lt;br /&gt;
          |  |  |  |  +--rw hidden?           boolean&lt;br /&gt;
          |  |  |  +--rw user-defined-script?   string&lt;br /&gt;
          |  |  +--rw initial-config-primitive* [seq]&lt;br /&gt;
          |  |  |  +--rw seq                          uint64&lt;br /&gt;
          |  |  |  +--rw (primitive-type)?&lt;br /&gt;
          |  |  |     +--:(primitive-definition)&lt;br /&gt;
          |  |  |        +--rw name?                  string&lt;br /&gt;
          |  |  |        +--rw parameter* [name]&lt;br /&gt;
          |  |  |        |  +--rw name         string&lt;br /&gt;
          |  |  |        |  +--rw data-type?   manotypes:parameter-data-type&lt;br /&gt;
          |  |  |        |  +--rw value?       string&lt;br /&gt;
          |  |  |        +--rw user-defined-script?   string&lt;br /&gt;
          |  |  +--rw terminate-config-primitive* [seq]&lt;br /&gt;
          |  |  |  +--rw seq                    uint64&lt;br /&gt;
          |  |  |  +--rw name?                  string&lt;br /&gt;
          |  |  |  +--rw parameter* [name]&lt;br /&gt;
          |  |  |  |  +--rw name         string&lt;br /&gt;
          |  |  |  |  +--rw data-type?   manotypes:parameter-data-type&lt;br /&gt;
          |  |  |  |  +--rw value?       string&lt;br /&gt;
          |  |  |  +--rw user-defined-script?   string&lt;br /&gt;
          |  |  +--rw metrics* [name]&lt;br /&gt;
          |  |     +--rw name    string&lt;br /&gt;
          |  +--rw input-parameter-xpath* [xpath]&lt;br /&gt;
          |  |  +--rw xpath            string&lt;br /&gt;
          |  |  +--rw label?           string&lt;br /&gt;
          |  |  +--rw default-value?   string&lt;br /&gt;
          |  +--rw parameter-pool* [name]&lt;br /&gt;
          |  |  +--rw name     string&lt;br /&gt;
          |  |  +--rw range&lt;br /&gt;
          |  |     +--rw start-value    uint32&lt;br /&gt;
          |  |     +--rw end-value      uint32&lt;br /&gt;
          |  +--rw key-pair* [name]&lt;br /&gt;
          |  |  +--rw name    string&lt;br /&gt;
          |  |  +--rw key?    string&lt;br /&gt;
          |  +--rw user* [name]&lt;br /&gt;
          |  |  +--rw name         string&lt;br /&gt;
          |  |  +--rw user-info?   string&lt;br /&gt;
          |  |  +--rw key-pair* [name]&lt;br /&gt;
          |  |     +--rw name    string&lt;br /&gt;
          |  |     +--rw key?    string&lt;br /&gt;
          |  +--rw vld* [id]&lt;br /&gt;
          |  |  +--rw id                           string&lt;br /&gt;
          |  |  +--rw name?                        string&lt;br /&gt;
          |  |  +--rw short-name?                  string&lt;br /&gt;
          |  |  +--rw vendor?                      string&lt;br /&gt;
          |  |  +--rw description?                 string&lt;br /&gt;
          |  |  +--rw version?                     string&lt;br /&gt;
          |  |  +--rw type?                        manotypes:virtual-link-type&lt;br /&gt;
          |  |  +--rw root-bandwidth?              uint64&lt;br /&gt;
          |  |  +--rw leaf-bandwidth?              uint64&lt;br /&gt;
          |  |  +--rw provider-network&lt;br /&gt;
          |  |  |  +--rw physical-network?   string&lt;br /&gt;
          |  |  |  +--rw segmentation_id?    uint32&lt;br /&gt;
          |  |  +--rw mgmt-network?                boolean&lt;br /&gt;
          |  |  +--rw (init-params)?&lt;br /&gt;
          |  |  |  +--:(vim-network-ref)&lt;br /&gt;
          |  |  |  |  +--rw vim-network-name?      string&lt;br /&gt;
          |  |  |  +--:(vim-network-profile)&lt;br /&gt;
          |  |  |     +--rw ip-profile-ref?        -&amp;gt; ../../ip-profiles/name&lt;br /&gt;
          |  |  +--rw vnfd-connection-point-ref* [member-vnf-index-ref vnfd-connection-point-ref]&lt;br /&gt;
          |  |     +--rw member-vnf-index-ref         -&amp;gt; ../../../constituent-vnfd/member-vnf-index&lt;br /&gt;
          |  |     +--rw vnfd-id-ref?                 string&lt;br /&gt;
          |  |     +--rw vnfd-connection-point-ref    -&amp;gt; ../../../../../../project-vnfd:vnfd-catalog/vnfd[project-vnfd:id = current()/../vnfd-id-ref]/connection-point/name&lt;br /&gt;
          |  +--rw constituent-vnfd* [member-vnf-index]&lt;br /&gt;
          |  |  +--rw member-vnf-index    string&lt;br /&gt;
          |  |  +--rw vnfd-id-ref?        -&amp;gt; /osm-project:project[osm-project:name = current()/../../../../../name]/project-vnfd:vnfd-catalog/vnfd/id&lt;br /&gt;
          |  |  +--rw start-by-default?   boolean&lt;br /&gt;
          |  +--rw placement-groups* [name]&lt;br /&gt;
          |  |  +--rw name           string&lt;br /&gt;
          |  |  +--rw requirement?   string&lt;br /&gt;
          |  |  +--rw strategy?      enumeration&lt;br /&gt;
          |  |  +--rw member-vnfd* [member-vnf-index-ref]&lt;br /&gt;
          |  |     +--rw member-vnf-index-ref    -&amp;gt; ../../../constituent-vnfd/member-vnf-index&lt;br /&gt;
          |  |     +--rw vnfd-id-ref?            -&amp;gt; ../../../../../../project-vnfd:vnfd-catalog/vnfd/id&lt;br /&gt;
          |  +--rw vnf-dependency* [vnf-source-ref]&lt;br /&gt;
          |  |  +--rw vnf-source-ref        -&amp;gt; ../../../../../project-vnfd:vnfd-catalog/vnfd/id&lt;br /&gt;
          |  |  +--rw vnf-depends-on-ref?   -&amp;gt; ../../../../../project-vnfd:vnfd-catalog/vnfd/id&lt;br /&gt;
          |  +--rw monitoring-param* [id]&lt;br /&gt;
          |     +--rw id                       string&lt;br /&gt;
          |     +--rw name?                    string&lt;br /&gt;
          |     +--rw value-type?              param-value-type&lt;br /&gt;
          |     +--rw numeric-constraints&lt;br /&gt;
          |     |  +--rw min-value?   uint64&lt;br /&gt;
          |     |  +--rw max-value?   uint64&lt;br /&gt;
          |     +--rw text-constraints&lt;br /&gt;
          |     |  +--rw min-length?   uint8&lt;br /&gt;
          |     |  +--rw max-length?   uint8&lt;br /&gt;
          |     +--rw value-integer?           int64&lt;br /&gt;
          |     +--rw value-decimal?           decimal64&lt;br /&gt;
          |     +--rw value-string?            string&lt;br /&gt;
          |     +--rw description?             string&lt;br /&gt;
          |     +--rw group-tag?               string&lt;br /&gt;
          |     +--rw widget-type?             manotypes:widget-type&lt;br /&gt;
          |     +--rw units?                   string&lt;br /&gt;
          |     +--rw aggregation-type?        aggregation-type&lt;br /&gt;
          |     +--rw vnfd-monitoring-param* [member-vnf-index-ref vnfd-monitoring-param-ref]&lt;br /&gt;
          |        +--rw vnfd-id-ref?                 string&lt;br /&gt;
          |        +--rw vnfd-monitoring-param-ref    -&amp;gt; ../../../../../../project-vnfd:vnfd-catalog/vnfd[project-vnfd:id = current()/../vnfd-id-ref]/monitoring-param/id&lt;br /&gt;
          |        +--rw member-vnf-index-ref         -&amp;gt; ../../../constituent-vnfd/member-vnf-index&lt;br /&gt;
          +--rw input-parameter* [xpath]&lt;br /&gt;
          |  +--rw xpath    string&lt;br /&gt;
          |  +--rw value?   string&lt;br /&gt;
          +--rw scaling-group* [scaling-group-name-ref]&lt;br /&gt;
          |  +--rw scaling-group-name-ref    string&lt;br /&gt;
          |  +--rw instance* [id]&lt;br /&gt;
          |     +--rw id    uint16&lt;br /&gt;
          +--rw nsd-placement-group-maps* [placement-group-ref]&lt;br /&gt;
          |  +--rw placement-group-ref         string&lt;br /&gt;
          |  +--rw cloud-type?                 manotypes:cloud-account-type&lt;br /&gt;
          |  +--rw (cloud-provider)?&lt;br /&gt;
          |     +--:(openstack)&lt;br /&gt;
          |     |  +--rw availability-zone&lt;br /&gt;
          |     |  |  +--rw name?   string&lt;br /&gt;
          |     |  +--rw server-group&lt;br /&gt;
          |     |  |  +--rw name?   string&lt;br /&gt;
          |     |  +--rw host-aggregate* [metadata-key]&lt;br /&gt;
          |     |     +--rw metadata-key      string&lt;br /&gt;
          |     |     +--rw metadata-value?   string&lt;br /&gt;
          |     +--:(aws)&lt;br /&gt;
          |     |  +--rw aws-construct?        empty&lt;br /&gt;
          |     +--:(openmano)&lt;br /&gt;
          |     |  +--rw openmano-construct?   empty&lt;br /&gt;
          |     +--:(vsphere)&lt;br /&gt;
          |     |  +--rw vsphere-construct?    empty&lt;br /&gt;
          |     +--:(mock)&lt;br /&gt;
          |     |  +--rw mock-construct?       empty&lt;br /&gt;
          |     +--:(cloudsim)&lt;br /&gt;
          |        +--rw cloudsim-construct?   empty&lt;br /&gt;
          +--rw vnfd-placement-group-maps* [placement-group-ref vnfd-id-ref]&lt;br /&gt;
          |  +--rw vnfd-id-ref                 yang:uuid&lt;br /&gt;
          |  +--rw placement-group-ref         -&amp;gt; ../../../../project-vnfd:vnfd-catalog/vnfd[project-vnfd:id = current()/../vnfd-id-ref]/placement-groups/name&lt;br /&gt;
          |  +--rw cloud-type?                 manotypes:cloud-account-type&lt;br /&gt;
          |  +--rw (cloud-provider)?&lt;br /&gt;
          |     +--:(openstack)&lt;br /&gt;
          |     |  +--rw availability-zone&lt;br /&gt;
          |     |  |  +--rw name?   string&lt;br /&gt;
          |     |  +--rw server-group&lt;br /&gt;
          |     |  |  +--rw name?   string&lt;br /&gt;
          |     |  +--rw host-aggregate* [metadata-key]&lt;br /&gt;
          |     |     +--rw metadata-key      string&lt;br /&gt;
          |     |     +--rw metadata-value?   string&lt;br /&gt;
          |     +--:(aws)&lt;br /&gt;
          |     |  +--rw aws-construct?        empty&lt;br /&gt;
          |     +--:(openmano)&lt;br /&gt;
          |     |  +--rw openmano-construct?   empty&lt;br /&gt;
          |     +--:(vsphere)&lt;br /&gt;
          |     |  +--rw vsphere-construct?    empty&lt;br /&gt;
          |     +--:(mock)&lt;br /&gt;
          |     |  +--rw mock-construct?       empty&lt;br /&gt;
          |     +--:(cloudsim)&lt;br /&gt;
          |        +--rw cloudsim-construct?   empty&lt;br /&gt;
          +--rw ssh-authorized-key* [key-pair-ref]&lt;br /&gt;
          |  +--rw key-pair-ref    -&amp;gt; ../../../../key-pair/name&lt;br /&gt;
          +--rw user* [name]&lt;br /&gt;
             +--rw name                  string&lt;br /&gt;
             +--rw user-info?            string&lt;br /&gt;
             +--rw ssh-authorized-key* [key-pair-ref]&lt;br /&gt;
                +--rw key-pair-ref    -&amp;gt; ../../../../../key-pair/name&lt;br /&gt;
  augment /osm-project:project:&lt;br /&gt;
    +--ro ns-instance-opdata&lt;br /&gt;
       +--ro nsr* [ns-instance-config-ref]&lt;br /&gt;
          +--ro ns-instance-config-ref    -&amp;gt; ../../../ns-instance-config/nsr/id&lt;br /&gt;
          +--ro name-ref?                 -&amp;gt; ../../../ns-instance-config/nsr[id=current()/../ns-instance-config-ref]/name&lt;br /&gt;
          +--ro nsd-ref?                  -&amp;gt; ../../../ns-instance-config/nsr[id=current()/../ns-instance-config-ref]/nsd/id&lt;br /&gt;
          +--ro nsd-name-ref?             -&amp;gt; ../../../ns-instance-config/nsr[id=current()/../ns-instance-config-ref]/nsd/name&lt;br /&gt;
          +--ro create-time?              uint32&lt;br /&gt;
          +--ro uptime?                   uint32&lt;br /&gt;
          +--ro connection-point* [name]&lt;br /&gt;
          |  +--ro name    string&lt;br /&gt;
          |  +--ro type?   manotypes:connection-point-type&lt;br /&gt;
          +--ro vlr* [vlr-ref]&lt;br /&gt;
          |  +--ro vlr-ref                      -&amp;gt; ../../../../vlr:vlr-catalog/vlr/id&lt;br /&gt;
          |  +--ro vnfr-connection-point-ref* [vnfr-id]&lt;br /&gt;
          |     +--ro vnfr-id             -&amp;gt; ../../../../../vnfr:vnfr-catalog/vnfr/id&lt;br /&gt;
          |     +--ro connection-point?   -&amp;gt; ../../../../../vnfr:vnfr-catalog/vnfr[vnfr:id = current()/../vnfr-id]/connection-point/name&lt;br /&gt;
          +--ro constituent-vnfr-ref* [vnfr-id]&lt;br /&gt;
          |  +--ro vnfr-id    string&lt;br /&gt;
          +--ro scaling-group-record* [scaling-group-name-ref]&lt;br /&gt;
          |  +--ro scaling-group-name-ref    -&amp;gt; ../../../../ns-instance-config/nsr[id=current()/../../ns-instance-config-ref]/nsd/scaling-group-descriptor/name&lt;br /&gt;
          |  +--ro instance* [instance-id]&lt;br /&gt;
          |     +--ro instance-id      uint16&lt;br /&gt;
          |     +--ro is-default?      boolean&lt;br /&gt;
          |     +--ro op-status?       enumeration&lt;br /&gt;
          |     +--ro config-status?   config-states&lt;br /&gt;
          |     +--ro error-msg?       string&lt;br /&gt;
          |     +--ro create-time?     uint32&lt;br /&gt;
          |     +--ro vnfrs*           -&amp;gt; ../../../constituent-vnfr-ref/vnfr-id&lt;br /&gt;
          +--ro vnffgr* [id]&lt;br /&gt;
          |  +--ro id                    yang:uuid&lt;br /&gt;
          |  +--ro vnffgd-id-ref?        -&amp;gt; ../../../../ns-instance-config/nsr[id=current()/../../ns-instance-config-ref]/nsd/vnffgd/id&lt;br /&gt;
          |  +--ro vnffgd-name-ref?      -&amp;gt; ../../../../ns-instance-config/nsr[id=current()/../../ns-instance-config-ref]/nsd/vnffgd[id=current()/../vnffgd-id-ref]/name&lt;br /&gt;
          |  +--ro sdn-account?          string&lt;br /&gt;
          |  +--ro cloud-account?        string&lt;br /&gt;
          |  +--ro operational-status?   vnffgr-operational-status&lt;br /&gt;
          |  +--ro rsp* [id]&lt;br /&gt;
          |  |  +--ro id                           yang:uuid&lt;br /&gt;
          |  |  +--ro name?                        string&lt;br /&gt;
          |  |  +--ro rsp-id?                      yang:uuid&lt;br /&gt;
          |  |  +--ro vnffgd-rsp-id-ref?           -&amp;gt; ../../../../../ns-instance-config/nsr[id=current()/../../../ns-instance-config-ref]/nsd/vnffgd[id=current()/../../vnffgd-id-ref]/rsp/id&lt;br /&gt;
          |  |  +--ro vnffgd-rsp-name-ref?         -&amp;gt; ../../../../../ns-instance-config/nsr[id=current()/../../../ns-instance-config-ref]/nsd/vnffgd[id=current()/../../vnffgd-id-ref]/rsp[id=current()/../vnffgd-rsp-id-ref]/name&lt;br /&gt;
          |  |  +--ro classifier-name?             string&lt;br /&gt;
          |  |  +--ro path-id?                     uint32&lt;br /&gt;
          |  |  +--ro vnfr-connection-point-ref* [hop-number]&lt;br /&gt;
          |  |     +--ro hop-number                           uint8&lt;br /&gt;
          |  |     +--ro service-function-type?               string&lt;br /&gt;
          |  |     +--ro member-vnf-index-ref?                string&lt;br /&gt;
          |  |     +--ro vnfd-id-ref?                         string&lt;br /&gt;
          |  |     +--ro vnfr-id-ref?                         -&amp;gt; ../../../../../../vnfr:vnfr-catalog/vnfr/id&lt;br /&gt;
          |  |     +--ro vnfr-name-ref?                       -&amp;gt; ../../../../../../vnfr:vnfr-catalog/vnfr/name&lt;br /&gt;
          |  |     +--ro vnfr-ingress-connection-point-ref?   -&amp;gt; ../../../../../../vnfr:vnfr-catalog/vnfr[vnfr:id = current()/../vnfr-id-ref]/connection-point/name&lt;br /&gt;
          |  |     +--ro vnfr-egress-connection-point-ref?    -&amp;gt; ../../../../../../vnfr:vnfr-catalog/vnfr[vnfr:id = current()/../vnfr-id-ref]/connection-point/name&lt;br /&gt;
          |  |     +--ro service-index?                       uint8&lt;br /&gt;
          |  |     +--ro connection-point-params&lt;br /&gt;
          |  |     |  +--ro mgmt-address?   inet:ip-address&lt;br /&gt;
          |  |     |  +--ro name?           string&lt;br /&gt;
          |  |     |  +--ro port-id?        string&lt;br /&gt;
          |  |     |  +--ro vm-id?          string&lt;br /&gt;
          |  |     |  +--ro address?        inet:ip-address&lt;br /&gt;
          |  |     |  +--ro port?           inet:port-number&lt;br /&gt;
          |  |     +--ro service-function-forwarder&lt;br /&gt;
          |  |        +--ro name?         string&lt;br /&gt;
          |  |        +--ro ip-address?   inet:ip-address&lt;br /&gt;
          |  |        +--ro port?         inet:port-number&lt;br /&gt;
          |  +--ro classifier* [id]&lt;br /&gt;
          |     +--ro id                           yang:uuid&lt;br /&gt;
          |     +--ro name?                        string&lt;br /&gt;
          |     +--ro classifier-id*               yang:uuid&lt;br /&gt;
          |     +--ro rsp-id-ref?                  -&amp;gt; ../../rsp/id&lt;br /&gt;
          |     +--ro rsp-name?                    string&lt;br /&gt;
          |     +--ro vnfr-id-ref?                 -&amp;gt; ../../../../../vnfr:vnfr-catalog/vnfr/id&lt;br /&gt;
          |     +--ro vnfr-name-ref?               -&amp;gt; ../../../../../vnfr:vnfr-catalog/vnfr/name&lt;br /&gt;
          |     +--ro vnfr-connection-point-ref?   -&amp;gt; ../../../../../vnfr:vnfr-catalog/vnfr[vnfr:id = current()/../vnfr-id-ref]/connection-point/name&lt;br /&gt;
          |     +--ro port-id?                     string&lt;br /&gt;
          |     +--ro vm-id?                       string&lt;br /&gt;
          |     +--ro ip-address?                  string&lt;br /&gt;
          |     +--ro sff-name?                    string&lt;br /&gt;
          +--ro operational-status?       ns-operational-status&lt;br /&gt;
          +--ro ns-configuration&lt;br /&gt;
          |  +--ro (config-method)?&lt;br /&gt;
          |  |  +--:(script)&lt;br /&gt;
          |  |  |  +--ro script&lt;br /&gt;
          |  |  |     +--ro script-type?   enumeration&lt;br /&gt;
          |  |  +--:(juju)&lt;br /&gt;
          |  |     +--ro juju&lt;br /&gt;
          |  |        +--ro charm?               string&lt;br /&gt;
          |  |        +--ro proxy?               boolean&lt;br /&gt;
          |  |        +--ro vca-relationships&lt;br /&gt;
          |  |           +--ro relation* [requires provides]&lt;br /&gt;
          |  |              +--ro requires    string&lt;br /&gt;
          |  |              +--ro provides    string&lt;br /&gt;
          |  +--ro config-primitive* [name]&lt;br /&gt;
          |  |  +--ro name                   string&lt;br /&gt;
          |  |  +--ro parameter* [name]&lt;br /&gt;
          |  |  |  +--ro name              string&lt;br /&gt;
          |  |  |  +--ro data-type?        manotypes:parameter-data-type&lt;br /&gt;
          |  |  |  +--ro mandatory?        boolean&lt;br /&gt;
          |  |  |  +--ro default-value?    string&lt;br /&gt;
          |  |  |  +--ro parameter-pool?   string&lt;br /&gt;
          |  |  |  +--ro read-only?        boolean&lt;br /&gt;
          |  |  |  +--ro hidden?           boolean&lt;br /&gt;
          |  |  +--ro user-defined-script?   string&lt;br /&gt;
          |  +--ro initial-config-primitive* [seq]&lt;br /&gt;
          |  |  +--ro seq                          uint64&lt;br /&gt;
          |  |  +--ro (primitive-type)?&lt;br /&gt;
          |  |     +--:(primitive-definition)&lt;br /&gt;
          |  |        +--ro name?                  string&lt;br /&gt;
          |  |        +--ro parameter* [name]&lt;br /&gt;
          |  |        |  +--ro name         string&lt;br /&gt;
          |  |        |  +--ro data-type?   manotypes:parameter-data-type&lt;br /&gt;
          |  |        |  +--ro value?       string&lt;br /&gt;
          |  |        +--ro user-defined-script?   string&lt;br /&gt;
          |  +--ro terminate-config-primitive* [seq]&lt;br /&gt;
          |  |  +--ro seq                    uint64&lt;br /&gt;
          |  |  +--ro name?                  string&lt;br /&gt;
          |  |  +--ro parameter* [name]&lt;br /&gt;
          |  |  |  +--ro name         string&lt;br /&gt;
          |  |  |  +--ro data-type?   manotypes:parameter-data-type&lt;br /&gt;
          |  |  |  +--ro value?       string&lt;br /&gt;
          |  |  +--ro user-defined-script?   string&lt;br /&gt;
          |  +--ro metrics* [name]&lt;br /&gt;
          |     +--ro name    string&lt;br /&gt;
          +--ro config-status?            config-states&lt;br /&gt;
          +--ro monitoring-param* [id]&lt;br /&gt;
          |  +--ro value-type?            param-value-type&lt;br /&gt;
          |  +--ro numeric-constraints&lt;br /&gt;
          |  |  +--ro min-value?   uint64&lt;br /&gt;
          |  |  +--ro max-value?   uint64&lt;br /&gt;
          |  +--ro text-constraints&lt;br /&gt;
          |  |  +--ro min-length?   uint8&lt;br /&gt;
          |  |  +--ro max-length?   uint8&lt;br /&gt;
          |  +--ro value-integer?         int64&lt;br /&gt;
          |  +--ro value-decimal?         decimal64&lt;br /&gt;
          |  +--ro value-string?          string&lt;br /&gt;
          |  +--ro description?           string&lt;br /&gt;
          |  +--ro group-tag?             string&lt;br /&gt;
          |  +--ro widget-type?           manotypes:widget-type&lt;br /&gt;
          |  +--ro units?                 string&lt;br /&gt;
          |  +--ro aggregation-type?      aggregation-type&lt;br /&gt;
          |  +--ro id                     string&lt;br /&gt;
          |  +--ro name?                  string&lt;br /&gt;
          |  +--ro nsd-mon-param-ref?     -&amp;gt; ../../../../project-nsd:nsd-catalog/nsd[project-nsd:id = current()/../../nsd-ref]/monitoring-param/id&lt;br /&gt;
          |  +--ro vnfr-mon-param-ref* [vnfr-id-ref vnfr-mon-param-ref]&lt;br /&gt;
          |     +--ro vnfr-id-ref           yang:uuid&lt;br /&gt;
          |     +--ro vnfr-mon-param-ref    -&amp;gt; ../../../../../vnfr:vnfr-catalog/vnfr[vnfr:id = current()/../vnfr-id-ref]/monitoring-param/id&lt;br /&gt;
          +--ro config-agent-job* [job-id]&lt;br /&gt;
             +--ro job-id                uint64&lt;br /&gt;
             +--ro job-name?             string&lt;br /&gt;
             +--ro job-status?           enumeration&lt;br /&gt;
             +--ro triggered-by?         trigger-type&lt;br /&gt;
             +--ro create-time?          uint32&lt;br /&gt;
             +--ro job-status-details?   string&lt;br /&gt;
             +--ro parameter* [name]&lt;br /&gt;
             |  +--ro name         string&lt;br /&gt;
             |  +--ro data-type?   manotypes:parameter-data-type&lt;br /&gt;
             |  +--ro value?       string&lt;br /&gt;
             +--ro parameter-group* [name]&lt;br /&gt;
             |  +--ro name         string&lt;br /&gt;
             |  +--ro parameter* [name]&lt;br /&gt;
             |     +--ro name         string&lt;br /&gt;
             |     +--ro data-type?   manotypes:parameter-data-type&lt;br /&gt;
             |     +--ro value?       string&lt;br /&gt;
             +--ro vnfr* [id]&lt;br /&gt;
                +--ro id                yang:uuid&lt;br /&gt;
                +--ro vnf-job-status?   enumeration&lt;br /&gt;
                +--ro primitive* [name]&lt;br /&gt;
                   +--ro name                       string&lt;br /&gt;
                   +--ro parameter* [name]&lt;br /&gt;
                   |  +--ro name         string&lt;br /&gt;
                   |  +--ro data-type?   manotypes:parameter-data-type&lt;br /&gt;
                   |  +--ro value?       string&lt;br /&gt;
                   +--ro execution-id?              string&lt;br /&gt;
                   +--ro execution-status?          enumeration&lt;br /&gt;
                   +--ro execution-error-details?   string&lt;br /&gt;
&lt;br /&gt;
  rpcs:&lt;br /&gt;
    +---x get-ns-config-primitive-values&lt;br /&gt;
    |  +---w input&lt;br /&gt;
    |  |  +---w name            string&lt;br /&gt;
    |  |  +---w project-name?   -&amp;gt; /osm-project:project/name&lt;br /&gt;
    |  |  +---w nsr_id_ref      -&amp;gt; /osm-project:project[osm-project:name=current()/../nsr:project-name]/ns-instance-config/nsr/id&lt;br /&gt;
    |  +--ro output&lt;br /&gt;
    |     +--ro ns-parameter* [name]&lt;br /&gt;
    |     |  +--ro name     string&lt;br /&gt;
    |     |  +--ro value?   string&lt;br /&gt;
    |     +--ro ns-parameter-group* [name]&lt;br /&gt;
    |     |  +--ro name         string&lt;br /&gt;
    |     |  +--ro parameter* [name]&lt;br /&gt;
    |     |     +--ro name     string&lt;br /&gt;
    |     |     +--ro value?   string&lt;br /&gt;
    |     +--ro vnf-primitive-group* [member-vnf-index-ref]&lt;br /&gt;
    |        +--ro member-vnf-index-ref    string&lt;br /&gt;
    |        +--ro vnfd-id-ref?            string&lt;br /&gt;
    |        +--ro primitive* [index]&lt;br /&gt;
    |           +--ro index        uint32&lt;br /&gt;
    |           +--ro name?        string&lt;br /&gt;
    |           +--ro parameter* [name]&lt;br /&gt;
    |              +--ro name     string&lt;br /&gt;
    |              +--ro value?   string&lt;br /&gt;
    +---x exec-ns-config-primitive&lt;br /&gt;
    |  +---w input&lt;br /&gt;
    |  |  +---w name?                  string&lt;br /&gt;
    |  |  +---w project-name?          -&amp;gt; /osm-project:project/name&lt;br /&gt;
    |  |  +---w nsr_id_ref             -&amp;gt; /osm-project:project[osm-project:name=current()/../nsr:project-name]/ns-instance-config/nsr/id&lt;br /&gt;
    |  |  +---w triggered-by?          trigger-type&lt;br /&gt;
    |  |  +---w parameter* [name]&lt;br /&gt;
    |  |  |  +---w name         string&lt;br /&gt;
    |  |  |  +---w data-type?   manotypes:parameter-data-type&lt;br /&gt;
    |  |  |  +---w value?       string&lt;br /&gt;
    |  |  +---w parameter-group* [name]&lt;br /&gt;
    |  |  |  +---w name         string&lt;br /&gt;
    |  |  |  +---w parameter* [name]&lt;br /&gt;
    |  |  |     +---w name         string&lt;br /&gt;
    |  |  |     +---w data-type?   manotypes:parameter-data-type&lt;br /&gt;
    |  |  |     +---w value?       string&lt;br /&gt;
    |  |  +---w vnf-list* [member_vnf_index_ref]&lt;br /&gt;
    |  |  |  +---w member_vnf_index_ref    uint64&lt;br /&gt;
    |  |  |  +---w vnfr-id-ref?            yang:uuid&lt;br /&gt;
    |  |  |  +---w vnf-primitive* [index]&lt;br /&gt;
    |  |  |     +---w index        uint32&lt;br /&gt;
    |  |  |     +---w name?        string&lt;br /&gt;
    |  |  |     +---w parameter* [name]&lt;br /&gt;
    |  |  |        +---w name         string&lt;br /&gt;
    |  |  |        +---w data-type?   manotypes:parameter-data-type&lt;br /&gt;
    |  |  |        +---w value?       string&lt;br /&gt;
    |  |  +---w user-defined-script?   string&lt;br /&gt;
    |  +--ro output&lt;br /&gt;
    |     +--ro job-id?               uint64&lt;br /&gt;
    |     +--ro name?                 string&lt;br /&gt;
    |     +--ro project-name?         -&amp;gt; /osm-project:project/name&lt;br /&gt;
    |     +--ro nsr_id_ref            -&amp;gt; /osm-project:project[osm-project:name=current()/../nsr:project-name]/ns-instance-config/nsr/id&lt;br /&gt;
    |     +--ro triggered-by?         trigger-type&lt;br /&gt;
    |     +--ro create-time?          uint32&lt;br /&gt;
    |     +--ro job-status-details?   string&lt;br /&gt;
    |     +--ro parameter* [name]&lt;br /&gt;
    |     |  +--ro name         string&lt;br /&gt;
    |     |  +--ro data-type?   manotypes:parameter-data-type&lt;br /&gt;
    |     |  +--ro value?       string&lt;br /&gt;
    |     +--ro parameter-group* [name]&lt;br /&gt;
    |     |  +--ro name         string&lt;br /&gt;
    |     |  +--ro parameter* [name]&lt;br /&gt;
    |     |     +--ro name         string&lt;br /&gt;
    |     |     +--ro data-type?   manotypes:parameter-data-type&lt;br /&gt;
    |     |     +--ro value?       string&lt;br /&gt;
    |     +--ro vnf-out-list* [member_vnf_index_ref]&lt;br /&gt;
    |        +--ro member_vnf_index_ref    uint64&lt;br /&gt;
    |        +--ro vnfr-id-ref?            yang:uuid&lt;br /&gt;
    |        +--ro vnf-out-primitive* [index]&lt;br /&gt;
    |           +--ro index                      uint32&lt;br /&gt;
    |           +--ro name?                      string&lt;br /&gt;
    |           +--ro parameter* [name]&lt;br /&gt;
    |           |  +--ro name         string&lt;br /&gt;
    |           |  +--ro data-type?   manotypes:parameter-data-type&lt;br /&gt;
    |           |  +--ro value?       string&lt;br /&gt;
    |           +--ro execution-id?              string&lt;br /&gt;
    |           +--ro execution-status?          string&lt;br /&gt;
    |           +--ro execution-error-details?   string&lt;br /&gt;
    +---x exec-scale-in&lt;br /&gt;
    |  +---w input&lt;br /&gt;
    |  |  +---w project-name?             -&amp;gt; /osm-project:project/name&lt;br /&gt;
    |  |  +---w nsr_id_ref                -&amp;gt; /osm-project:project[osm-project:name=current()/../nsr:project-name]/ns-instance-config/nsr/id&lt;br /&gt;
    |  |  +---w scaling-group-name-ref    -&amp;gt; /osm-project:project[osm-project:name=current()/../nsr:project-name]/ns-instance-config/nsr[nsr:id=current()/../nsr_id_ref]/nsd/scaling-group-descriptor/name&lt;br /&gt;
    |  |  +---w instance-id               -&amp;gt; /osm-project:project[osm-project:name=current()/../nsr:project-name]/ns-instance-config/nsr[nsr:id=current()/../nsr_id_ref]/scaling-group[nsr:scaling-group-name-ref=current()/../scaling-group-name-ref]/instance/id&lt;br /&gt;
    |  +--ro output&lt;br /&gt;
    |     +--ro instance-id?   uint64&lt;br /&gt;
    +---x exec-scale-out&lt;br /&gt;
    |  +---w input&lt;br /&gt;
    |  |  +---w project-name?             -&amp;gt; /osm-project:project/name&lt;br /&gt;
    |  |  +---w nsr_id_ref                -&amp;gt; /osm-project:project[osm-project:name=current()/../nsr:project-name]/ns-instance-config/nsr/id&lt;br /&gt;
    |  |  +---w scaling-group-name-ref    -&amp;gt; /osm-project:project[osm-project:name=current()/../nsr:project-name]/ns-instance-config/nsr[nsr:id=current()/../nsr_id_ref]/nsd/scaling-group-descriptor/name&lt;br /&gt;
    |  |  +---w instance-id?              uint64&lt;br /&gt;
    |  +--ro output&lt;br /&gt;
    |     +--ro instance-id?   uint64&lt;br /&gt;
    +---x start-network-service&lt;br /&gt;
       +---w input&lt;br /&gt;
       |  +---w name                         string&lt;br /&gt;
       |  +---w project-name?                -&amp;gt; /osm-project:project/name&lt;br /&gt;
       |  +---w nsd_id_ref?                  -&amp;gt; /osm-project:project[osm-project:name=current()/../project-name]/project-nsd:nsd-catalog/nsd/id&lt;br /&gt;
       |  +---w input-parameter* [xpath]&lt;br /&gt;
       |  |  +---w xpath    string&lt;br /&gt;
       |  |  +---w value?   string&lt;br /&gt;
       |  +---w scaling-group* [scaling-group-name-ref]&lt;br /&gt;
       |  |  +---w scaling-group-name-ref    string&lt;br /&gt;
       |  |  +---w instance* [id]&lt;br /&gt;
       |  |     +---w id    uint16&lt;br /&gt;
       |  +---w nsd-placement-group-maps* [placement-group-ref]&lt;br /&gt;
       |  |  +---w placement-group-ref         string&lt;br /&gt;
       |  |  +---w cloud-type?                 manotypes:cloud-account-type&lt;br /&gt;
       |  |  +---w (cloud-provider)?&lt;br /&gt;
       |  |     +--:(openstack)&lt;br /&gt;
       |  |     |  +---w availability-zone&lt;br /&gt;
       |  |     |  |  +---w name?   string&lt;br /&gt;
       |  |     |  +---w server-group&lt;br /&gt;
       |  |     |  |  +---w name?   string&lt;br /&gt;
       |  |     |  +---w host-aggregate* [metadata-key]&lt;br /&gt;
       |  |     |     +---w metadata-key      string&lt;br /&gt;
       |  |     |     +---w metadata-value?   string&lt;br /&gt;
       |  |     +--:(aws)&lt;br /&gt;
       |  |     |  +---w aws-construct?        empty&lt;br /&gt;
       |  |     +--:(openmano)&lt;br /&gt;
       |  |     |  +---w openmano-construct?   empty&lt;br /&gt;
       |  |     +--:(vsphere)&lt;br /&gt;
       |  |     |  +---w vsphere-construct?    empty&lt;br /&gt;
       |  |     +--:(mock)&lt;br /&gt;
       |  |     |  +---w mock-construct?       empty&lt;br /&gt;
       |  |     +--:(cloudsim)&lt;br /&gt;
       |  |        +---w cloudsim-construct?   empty&lt;br /&gt;
       |  +---w vnfd-placement-group-maps* [placement-group-ref vnfd-id-ref]&lt;br /&gt;
       |     +---w vnfd-id-ref                 yang:uuid&lt;br /&gt;
       |     +---w placement-group-ref         -&amp;gt; /osm-project:project[osm-project:name=current()/../../project-name]/project-vnfd:vnfd-catalog/vnfd[project-vnfd:id = current()/../vnfd-id-ref]/placement-groups/name&lt;br /&gt;
       |     +---w cloud-type?                 manotypes:cloud-account-type&lt;br /&gt;
       |     +---w (cloud-provider)?&lt;br /&gt;
       |     |  +--:(openstack)&lt;br /&gt;
       |     |  |  +---w availability-zone&lt;br /&gt;
       |     |  |  |  +---w name?   string&lt;br /&gt;
       |     |  |  +---w server-group&lt;br /&gt;
       |     |  |  |  +---w name?   string&lt;br /&gt;
       |     |  |  +---w host-aggregate* [metadata-key]&lt;br /&gt;
       |     |  |     +---w metadata-key      string&lt;br /&gt;
       |     |  |     +---w metadata-value?   string&lt;br /&gt;
       |     |  +--:(aws)&lt;br /&gt;
       |     |  |  +---w aws-construct?        empty&lt;br /&gt;
       |     |  +--:(openmano)&lt;br /&gt;
       |     |  |  +---w openmano-construct?   empty&lt;br /&gt;
       |     |  +--:(vsphere)&lt;br /&gt;
       |     |  |  +---w vsphere-construct?    empty&lt;br /&gt;
       |     |  +--:(mock)&lt;br /&gt;
       |     |  |  +---w mock-construct?       empty&lt;br /&gt;
       |     |  +--:(cloudsim)&lt;br /&gt;
       |     |     +---w cloudsim-construct?   empty&lt;br /&gt;
       |     +---w ssh-authorized-key* [key-pair-ref]&lt;br /&gt;
       |     |  +---w key-pair-ref    -&amp;gt; /osm-project:project[osm-project:name=current()/../../../project-name]/key-pair/name&lt;br /&gt;
       |     +---w user* [name]&lt;br /&gt;
       |        +---w name                  string&lt;br /&gt;
       |        +---w user-info?            string&lt;br /&gt;
       |        +---w ssh-authorized-key* [key-pair-ref]&lt;br /&gt;
       |           +---w key-pair-ref    -&amp;gt; /osm-project:project[osm-project:name=current()/../../../../project-name]/key-pair/name&lt;br /&gt;
       +--ro output&lt;br /&gt;
          +--ro nsr-id?   yang:uuid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===NSI tree===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Navigable version:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;http://osm-download.etsi.org/repository/osm/debian/ReleaseSIX/docs/osm-im/osm_im_trees/nsi.html&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Plain text version:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module: nsi&lt;br /&gt;
  +--rw nsi* [id]&lt;br /&gt;
     +--rw id                          yang:uuid&lt;br /&gt;
     +--rw name                        string&lt;br /&gt;
     +--rw short-name?                 string&lt;br /&gt;
     +--rw description?                string&lt;br /&gt;
     +--rw nst-ref                     -&amp;gt; /nst:nst/id&lt;br /&gt;
     +--rw instantiation-parameters&lt;br /&gt;
     |  +--rw vimAccountId       string&lt;br /&gt;
     |  +--rw ssh_keys?          string&lt;br /&gt;
     |  +--rw netslice-subnet* [id]&lt;br /&gt;
     |  |  +--rw id              string&lt;br /&gt;
     |  |  +--rw vimAccountId    string&lt;br /&gt;
     |  |  +--rw ssh_keys?       string&lt;br /&gt;
     |  |  +--rw vnf* [member-vnf-index]&lt;br /&gt;
     |  |  |  +--rw member-vnf-index    string&lt;br /&gt;
     |  |  |  +--rw vimAccountId?       string&lt;br /&gt;
     |  |  |  +--rw vdu* [id]&lt;br /&gt;
     |  |  |  |  +--rw id           string&lt;br /&gt;
     |  |  |  |  +--rw volume* [name]&lt;br /&gt;
     |  |  |  |  |  +--rw name             string&lt;br /&gt;
     |  |  |  |  |  +--rw vim-volume-id    string&lt;br /&gt;
     |  |  |  |  +--rw interface* [name]&lt;br /&gt;
     |  |  |  |     +--rw name                    string&lt;br /&gt;
     |  |  |  |     +--rw ip-address?             inet:ip-address&lt;br /&gt;
     |  |  |  |     +--rw mac-address?            ietf-yang:mac-address&lt;br /&gt;
     |  |  |  |     +--rw floating-ip-required?   boolean&lt;br /&gt;
     |  |  |  +--rw internal-vld* [name]&lt;br /&gt;
     |  |  |     +--rw name                         string&lt;br /&gt;
     |  |  |     +--rw vim-network-name?            string&lt;br /&gt;
     |  |  |     +--rw ip-profile&lt;br /&gt;
     |  |  |     |  +--rw ip-version?        inet:ip-version&lt;br /&gt;
     |  |  |     |  +--rw subnet-address?    inet:ip-prefix&lt;br /&gt;
     |  |  |     |  +--rw gateway-address?   inet:ip-prefix&lt;br /&gt;
     |  |  |     |  +--rw dns-server* [address]&lt;br /&gt;
     |  |  |     |  |  +--rw address    inet:ip-address&lt;br /&gt;
     |  |  |     |  +--rw dhcp-params&lt;br /&gt;
     |  |  |     |     +--rw enabled?         boolean&lt;br /&gt;
     |  |  |     |     +--rw count?           uint8&lt;br /&gt;
     |  |  |     |     +--rw start-address?   inet:ip-address&lt;br /&gt;
     |  |  |     +--rw internal-connection-point* [id-ref]&lt;br /&gt;
     |  |  |        +--rw id-ref        string&lt;br /&gt;
     |  |  |        +--rw ip-address?   inet:ip-address&lt;br /&gt;
     |  |  +--rw vld* [name]&lt;br /&gt;
     |  |     +--rw name                         string&lt;br /&gt;
     |  |     +--rw vim-network-name?            string&lt;br /&gt;
     |  |     +--rw ip-profile&lt;br /&gt;
     |  |     |  +--rw ip-version?        inet:ip-version&lt;br /&gt;
     |  |     |  +--rw subnet-address?    inet:ip-prefix&lt;br /&gt;
     |  |     |  +--rw gateway-address?   inet:ip-prefix&lt;br /&gt;
     |  |     |  +--rw dns-server* [address]&lt;br /&gt;
     |  |     |  |  +--rw address    inet:ip-address&lt;br /&gt;
     |  |     |  +--rw dhcp-params&lt;br /&gt;
     |  |     |     +--rw enabled?         boolean&lt;br /&gt;
     |  |     |     +--rw count?           uint8&lt;br /&gt;
     |  |     |     +--rw start-address?   inet:ip-address&lt;br /&gt;
     |  |     +--rw vnfd-connection-point-ref* [member-vnf-index-ref vnfd-connection-point-ref]&lt;br /&gt;
     |  |        +--rw member-vnf-index-ref         -&amp;gt; /nsd:nsd-catalog/nsd/constituent-vnfd/member-vnf-index&lt;br /&gt;
     |  |        +--rw vnfd-connection-point-ref    -&amp;gt; /vnfd:vnfd-catalog/vnfd/connection-point/name&lt;br /&gt;
     |  |        +--rw ip-address?                  inet:ip-address&lt;br /&gt;
     |  +--rw netslice-vld* [name]&lt;br /&gt;
     |     +--rw name                        string&lt;br /&gt;
     |     +--rw vim-network-name?           string&lt;br /&gt;
     |     +--rw ip-profile&lt;br /&gt;
     |     |  +--rw ip-version?        inet:ip-version&lt;br /&gt;
     |     |  +--rw subnet-address?    inet:ip-prefix&lt;br /&gt;
     |     |  +--rw gateway-address?   inet:ip-prefix&lt;br /&gt;
     |     |  +--rw dns-server* [address]&lt;br /&gt;
     |     |  |  +--rw address    inet:ip-address&lt;br /&gt;
     |     |  +--rw dhcp-params&lt;br /&gt;
     |     |     +--rw enabled?         boolean&lt;br /&gt;
     |     |     +--rw count?           uint8&lt;br /&gt;
     |     |     +--rw start-address?   inet:ip-address&lt;br /&gt;
     |     +--rw nss-connection-point-ref* [nss-ref nsd-connection-point-ref]&lt;br /&gt;
     |        +--rw nss-ref                     -&amp;gt; /nst:nst/netslice-subnet/id&lt;br /&gt;
     |        +--rw nsd-connection-point-ref    -&amp;gt; /nsd:nsd-catalog/nsd/connection-point/name&lt;br /&gt;
     |        +--rw ip-address?                 inet:ip-address&lt;br /&gt;
     +--rw network-slice-template&lt;br /&gt;
     |  +--rw id                           string&lt;br /&gt;
     |  +--rw name                         string&lt;br /&gt;
     |  +--rw SNSSAI-identifier&lt;br /&gt;
     |  |  +--rw slice-service-type      network-slice-type&lt;br /&gt;
     |  |  +--rw slice-differentiator?   string&lt;br /&gt;
     |  +--rw quality-of-service&lt;br /&gt;
     |  |  +--rw id                        uint16&lt;br /&gt;
     |  |  +--rw resource-type?            resource-type&lt;br /&gt;
     |  |  +--rw priority-level?           uint16&lt;br /&gt;
     |  |  +--rw packet-delay-budget?      uint16&lt;br /&gt;
     |  |  +--rw packet-error-rate?        uint16&lt;br /&gt;
     |  |  +--rw default-max-data-burst?   uint16&lt;br /&gt;
     |  +--rw netslice-subnet* [id]&lt;br /&gt;
     |  |  +--rw id                          string&lt;br /&gt;
     |  |  +--rw description?                string&lt;br /&gt;
     |  |  +--rw is-shared-nss?              boolean&lt;br /&gt;
     |  |  +--rw nsd-ref                     -&amp;gt; /nsd:nsd-catalog/nsd/id&lt;br /&gt;
     |  |  +--rw instantiation-parameters&lt;br /&gt;
     |  |     +--rw vimAccountId    string&lt;br /&gt;
     |  |     +--rw ssh_keys?       string&lt;br /&gt;
     |  |     +--rw vnf* [member-vnf-index]&lt;br /&gt;
     |  |     |  +--rw member-vnf-index    string&lt;br /&gt;
     |  |     |  +--rw vimAccountId?       string&lt;br /&gt;
     |  |     |  +--rw vdu* [id]&lt;br /&gt;
     |  |     |  |  +--rw id           string&lt;br /&gt;
     |  |     |  |  +--rw volume* [name]&lt;br /&gt;
     |  |     |  |  |  +--rw name             string&lt;br /&gt;
     |  |     |  |  |  +--rw vim-volume-id    string&lt;br /&gt;
     |  |     |  |  +--rw interface* [name]&lt;br /&gt;
     |  |     |  |     +--rw name                    string&lt;br /&gt;
     |  |     |  |     +--rw ip-address?             inet:ip-address&lt;br /&gt;
     |  |     |  |     +--rw mac-address?            ietf-yang:mac-address&lt;br /&gt;
     |  |     |  |     +--rw floating-ip-required?   boolean&lt;br /&gt;
     |  |     |  +--rw internal-vld* [name]&lt;br /&gt;
     |  |     |     +--rw name                         string&lt;br /&gt;
     |  |     |     +--rw vim-network-name?            string&lt;br /&gt;
     |  |     |     +--rw ip-profile&lt;br /&gt;
     |  |     |     |  +--rw ip-version?        inet:ip-version&lt;br /&gt;
     |  |     |     |  +--rw subnet-address?    inet:ip-prefix&lt;br /&gt;
     |  |     |     |  +--rw gateway-address?   inet:ip-prefix&lt;br /&gt;
     |  |     |     |  +--rw dns-server* [address]&lt;br /&gt;
     |  |     |     |  |  +--rw address    inet:ip-address&lt;br /&gt;
     |  |     |     |  +--rw dhcp-params&lt;br /&gt;
     |  |     |     |     +--rw enabled?         boolean&lt;br /&gt;
     |  |     |     |     +--rw count?           uint8&lt;br /&gt;
     |  |     |     |     +--rw start-address?   inet:ip-address&lt;br /&gt;
     |  |     |     +--rw internal-connection-point* [id-ref]&lt;br /&gt;
     |  |     |        +--rw id-ref        string&lt;br /&gt;
     |  |     |        +--rw ip-address?   inet:ip-address&lt;br /&gt;
     |  |     +--rw vld* [name]&lt;br /&gt;
     |  |        +--rw name                         string&lt;br /&gt;
     |  |        +--rw vim-network-name?            string&lt;br /&gt;
     |  |        +--rw ip-profile&lt;br /&gt;
     |  |        |  +--rw ip-version?        inet:ip-version&lt;br /&gt;
     |  |        |  +--rw subnet-address?    inet:ip-prefix&lt;br /&gt;
     |  |        |  +--rw gateway-address?   inet:ip-prefix&lt;br /&gt;
     |  |        |  +--rw dns-server* [address]&lt;br /&gt;
     |  |        |  |  +--rw address    inet:ip-address&lt;br /&gt;
     |  |        |  +--rw dhcp-params&lt;br /&gt;
     |  |        |     +--rw enabled?         boolean&lt;br /&gt;
     |  |        |     +--rw count?           uint8&lt;br /&gt;
     |  |        |     +--rw start-address?   inet:ip-address&lt;br /&gt;
     |  |        +--rw vnfd-connection-point-ref* [member-vnf-index-ref vnfd-connection-point-ref]&lt;br /&gt;
     |  |           +--rw member-vnf-index-ref         -&amp;gt; /nsd:nsd-catalog/nsd/constituent-vnfd/member-vnf-index&lt;br /&gt;
     |  |           +--rw vnfd-connection-point-ref    -&amp;gt; /vnfd:vnfd-catalog/vnfd/connection-point/name&lt;br /&gt;
     |  |           +--rw ip-address?                  inet:ip-address&lt;br /&gt;
     |  +--rw netslice-connection-point* [name]&lt;br /&gt;
     |  |  +--rw name                              string&lt;br /&gt;
     |  |  +--rw floating-ip-required?             boolean&lt;br /&gt;
     |  |  +--rw (connection)?&lt;br /&gt;
     |  |     +--:(netslice-vld-ref)&lt;br /&gt;
     |  |     |  +--rw netslice-vld-id-ref?        -&amp;gt; ../../netslice-vld/id&lt;br /&gt;
     |  |     +--:(nsd-connection-point-ref)&lt;br /&gt;
     |  |        +--rw nsd-id-ref?                 -&amp;gt; /nsd:nsd-catalog/nsd/id&lt;br /&gt;
     |  |        +--rw nsd-connection-point-ref?   -&amp;gt; /nsd:nsd-catalog/nsd/connection-point/name&lt;br /&gt;
     |  +--rw netslice-vld* [id]&lt;br /&gt;
     |  |  +--rw id                          string&lt;br /&gt;
     |  |  +--rw name?                       string&lt;br /&gt;
     |  |  +--rw short-name?                 string&lt;br /&gt;
     |  |  +--rw vendor?                     string&lt;br /&gt;
     |  |  +--rw description?                string&lt;br /&gt;
     |  |  +--rw version?                    string&lt;br /&gt;
     |  |  +--rw type?                       manotypes:virtual-link-type&lt;br /&gt;
     |  |  +--rw root-bandwidth?             uint64&lt;br /&gt;
     |  |  +--rw leaf-bandwidth?             uint64&lt;br /&gt;
     |  |  +--rw provider-network&lt;br /&gt;
     |  |  |  +--rw physical-network?   string&lt;br /&gt;
     |  |  |  +--rw segmentation_id?    uint32&lt;br /&gt;
     |  |  +--rw mgmt-network?               boolean&lt;br /&gt;
     |  |  +--rw nss-connection-point-ref* [nss-ref nsd-connection-point-ref]&lt;br /&gt;
     |  |     +--rw nss-ref                     -&amp;gt; /nst:nst/netslice-subnet/id&lt;br /&gt;
     |  |     +--rw nsd-connection-point-ref    -&amp;gt; /nsd:nsd-catalog/nsd/connection-point/name&lt;br /&gt;
     |  |     +--rw ip-address?                 inet:ip-address&lt;br /&gt;
     |  +--rw netslicefgd* [id]&lt;br /&gt;
     |     +--rw id             string&lt;br /&gt;
     |     +--rw name?          string&lt;br /&gt;
     |     +--rw short-name?    string&lt;br /&gt;
     |     +--rw vendor?        string&lt;br /&gt;
     |     +--rw description?   string&lt;br /&gt;
     |     +--rw version?       string&lt;br /&gt;
     |     +--rw rsp* [id]&lt;br /&gt;
     |     |  +--rw id                          string&lt;br /&gt;
     |     |  +--rw name?                       string&lt;br /&gt;
     |     |  +--rw nsd-connection-point-ref* [nsd-ref]&lt;br /&gt;
     |     |     +--rw nsd-ref                     -&amp;gt; /nsd:nsd-catalog/nsd/id&lt;br /&gt;
     |     |     +--rw order?                      uint8&lt;br /&gt;
     |     |     +--rw nsd-connection-point-ref?   -&amp;gt; /nsd:nsd-catalog/nsd/connection-point/name&lt;br /&gt;
     |     +--rw classifier* [id]&lt;br /&gt;
     |        +--rw id                          string&lt;br /&gt;
     |        +--rw name?                       string&lt;br /&gt;
     |        +--rw rsp-id-ref?                 -&amp;gt; ../../rsp/id&lt;br /&gt;
     |        +--rw match-attributes* [id]&lt;br /&gt;
     |        |  +--rw id                        string&lt;br /&gt;
     |        |  +--rw ip-proto?                 uint8&lt;br /&gt;
     |        |  +--rw source-ip-address?        inet:ip-address&lt;br /&gt;
     |        |  +--rw destination-ip-address?   inet:ip-address&lt;br /&gt;
     |        |  +--rw source-port?              inet:port-number&lt;br /&gt;
     |        |  +--rw destination-port?         inet:port-number&lt;br /&gt;
     |        +--rw nsd-ref?                    -&amp;gt; /nsd:nsd-catalog/nsd/id&lt;br /&gt;
     |        +--rw nsd-connection-point-ref?   -&amp;gt; /nsd:nsd-catalog/nsd/connection-point/name&lt;br /&gt;
     +--ro nsr-ref-list* [nsr-ref]&lt;br /&gt;
     |  +--ro nsr-ref    -&amp;gt; /osm-project:project/nsr:ns-instance-opdata/nsr/ns-instance-config-ref&lt;br /&gt;
     +--ro vlr-list* [id]&lt;br /&gt;
        +--ro id    yang:uuid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Release TWO Descriptor Documentation (OLD)==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
The document below contains a  detailed description of the OSM Release TWO Models. Although a bit outdated, it can still be used as a reference to understand some of the fields in the VNFD and NSD.&lt;br /&gt;
&lt;br /&gt;
[[Media:OSM R2 Information Model.pdf]]&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=VNF_Primitives&amp;diff=6079</id>
		<title>VNF Primitives</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=VNF_Primitives&amp;diff=6079"/>
		<updated>2021-02-17T16:54:13Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
The following is a list of the default VNF primitives supported by OSM. These primitives, executed at Day 1 and Day 2, are the encapsulation of your operational logic.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Primitive&lt;br /&gt;
! Description&lt;br /&gt;
! Required&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
|  Config || Change the configuration of a VNF || No || [[VNF_Primitive_Config]]&lt;br /&gt;
|-&lt;br /&gt;
|  Upgrade || Perform a VNF Software Upgrade || No || [[VNF_Primitive_Upgrade]]&lt;br /&gt;
|-&lt;br /&gt;
|  Start || Start the VNF service || No || [[VNF_Primitive_Start]]&lt;br /&gt;
|-&lt;br /&gt;
|  Stop || Stop the VNF service || No || [[VNF_Primitive_Stop]]&lt;br /&gt;
|-&lt;br /&gt;
|  Restart || Stop the VNF service || No || [[VNF_Primitive_Restart]]&lt;br /&gt;
|-&lt;br /&gt;
|  Reboot || Reboot the VNF || No || [[VNF_Primitive_Reboot]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=Example_VNF_Charms&amp;diff=6078</id>
		<title>Example VNF Charms</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=Example_VNF_Charms&amp;diff=6078"/>
		<updated>2021-02-17T16:54:03Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
==Example VNF Charms==&lt;br /&gt;
&lt;br /&gt;
This page is intended to be an index to VNF charms written by members of the OSM community. Please feel free to add links to your own examples below.&lt;br /&gt;
&lt;br /&gt;
=== Ansible ===&lt;br /&gt;
&lt;br /&gt;
Under the scope of a H2020 project, [https://5ginfire.eu/ 5GinFIRE] has developed a [https://github.com/5GinFIRE/mano/tree/master/charms/ansible-charm charm that enables the configuration of a VNF, instantiated through OSM, using an Ansible playbook]. The charm builds off of the base vnfproxy and ansible-base layers, and provides a template ready for customization that supports the execution of an Ansible playbook within the Juju framework used by OSM.&lt;br /&gt;
&lt;br /&gt;
=== UbuntuVNF &#039;Say Hello&#039; Proxy Charm ===&lt;br /&gt;
&lt;br /&gt;
A single VDU VNF containing a simple proxy charm that takes a parameter (name) and sends a greeting to all the VM&#039;s terminals using the &#039;wall&#039; command.  It serves like an example that can be extended to send any command with parameters to VNFs. Download it from &amp;lt;span class=&amp;quot;newwin&amp;quot;&amp;gt;[https://github.com/gianpietro1/osmproxycharms here]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Video Transcoder VNFs ===&lt;br /&gt;
&lt;br /&gt;
Under the scope of a H2020 project, [https://5ginfire.eu/ 5GinFIRE] has developed two Video Transcoding VNFs. The first uses [https://github.com/5GinFIRE/opencv_transcoder_vnf OpenCV] and the other uses [https://github.com/5GinFIRE/ffmpeg_transcoder_vnf FFMpeg]. Both VNFs use systemd to run the transcoding service. The systemd services are configured using Juju charms.&lt;br /&gt;
There is also a small script that builds the VNF and NS packages that might be useful.&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=Creating_your_own_VNF_charm_(Release_THREE)&amp;diff=6077</id>
		<title>Creating your own VNF charm (Release THREE)</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=Creating_your_own_VNF_charm_(Release_THREE)&amp;diff=6077"/>
		<updated>2021-02-17T16:52:29Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
==Creating a VNF proxy charm==&lt;br /&gt;
&lt;br /&gt;
===What is a charm===&lt;br /&gt;
&lt;br /&gt;
A [https://jujucharms.com/docs/stable/charms charm] is a collection of scripts and metadata that encapsulate the distilled DevOps knowledge of experts in a particular product. These charms make it easy to reliably and repeatedly deploy applications, then scale them as required with minimal effort.&lt;br /&gt;
&lt;br /&gt;
Driven by [https://jujucharms.com/docs/stable/about-juju Juju], these charms manage the complete lifecycle of the application, including installation, configuration, clustering, and scaling.&lt;br /&gt;
&lt;br /&gt;
===What is a proxy charm===&lt;br /&gt;
&lt;br /&gt;
OSM Release THREE supports a limited version of charms that we call &amp;quot;proxy charms&amp;quot;. These charms is responsible for doing Day 1 configuration. Configurations are mapped to [https://jujucharms.com/docs/stable/actions Juju Actions] which manage configuration within the VNFD qcow2 image (over SSH, via RESTful API, etc).&lt;br /&gt;
&lt;br /&gt;
The diagram below illustrates the OSM workflow:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
+---------------------+    +---------------------+&lt;br /&gt;
|                     &amp;lt;----+                     |&lt;br /&gt;
|  Resource           |    |  Service            |&lt;br /&gt;
|  Orchestrator (RO)  +----&amp;gt;  Orchestrator (SO)  |&lt;br /&gt;
|                     |    |                     |&lt;br /&gt;
+------------------+--+    +-------+----^--------+&lt;br /&gt;
                   |               |    |&lt;br /&gt;
                   |               |    |&lt;br /&gt;
                   |               |    |&lt;br /&gt;
             +-----v-----+       +-v----+--+&lt;br /&gt;
             |           &amp;lt;-------+         |&lt;br /&gt;
             |  Virtual  |       |  Proxy  |&lt;br /&gt;
             |  Machine  |       |  Charm  |&lt;br /&gt;
             |           +-------&amp;gt;         |&lt;br /&gt;
             +-----------+       +---------+&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The SO directs the RO to create a virtual machine using the selected VNF image. When that has successfully completed, the SO will instantiate a LXD container, managed by Juju, with the proxy charm. The proxy charm will then communicate with the VNF virtual machine to do Day 1 configuration.&lt;br /&gt;
&lt;br /&gt;
===Creating a proxy charm===&lt;br /&gt;
&lt;br /&gt;
====Setup====&lt;br /&gt;
&lt;br /&gt;
We recommend that you are running Ubuntu 16.04 or newer, or [https://docs.snapcraft.io/core/install install snapd] on the Linux distribution of your choice.&lt;br /&gt;
&lt;br /&gt;
Install the &#039;&#039;charm&#039;&#039; snap, which provides the charm command and libraries necessary to compile your charm:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
snap install charm&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup your workspace for writing layers and building charms:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
mkdir -p ~/charms/layers&lt;br /&gt;
export JUJU_REPOSITORY=~/charms&lt;br /&gt;
export LAYER_PATH=$JUJU_REPOSITORY/layers&lt;br /&gt;
cd $LAYER_PATH&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Layers====&lt;br /&gt;
&lt;br /&gt;
Layers are individual components that, when combined, result in a finished product. The diagram below describes what our example &#039;&#039;pingpong&#039;&#039; charm looks like, followed by a walkthrough of how it is built. The completed charm is available in the [https://osm.etsi.org/gitweb/?p=osm/juju-charms.git;a=summary juju-charms] repository.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
+------------------+&lt;br /&gt;
|                  |&lt;br /&gt;
|      Layers      |&lt;br /&gt;
|                  |&lt;br /&gt;
|  +------------+  |&lt;br /&gt;
|  |            |  |&lt;br /&gt;
|  |    Base    |  |&lt;br /&gt;
|  |            |  |&lt;br /&gt;
|  +------+-----+  |&lt;br /&gt;
|         |        |&lt;br /&gt;
|  +------v-----+  |&lt;br /&gt;
|  |            |  |&lt;br /&gt;
|  |  sshproxy  |  |            +-----------------+&lt;br /&gt;
|  |            |  |            |                 |&lt;br /&gt;
|  +------+-----+  |            |     pingpong    |&lt;br /&gt;
|         |        +------------&amp;gt;                 |&lt;br /&gt;
|  +------v-----+  |            |      charm      |&lt;br /&gt;
|  |            |  |            |                 |&lt;br /&gt;
|  |  vnfproxy  |  |            +-----------------+&lt;br /&gt;
|  |            |  |&lt;br /&gt;
|  +------+-----+  |&lt;br /&gt;
|         |        |&lt;br /&gt;
|  +------v-----+  |&lt;br /&gt;
|  |            |  |&lt;br /&gt;
|  |  pingpong  |  |&lt;br /&gt;
|  |            |  |&lt;br /&gt;
|  +------------+  |&lt;br /&gt;
|                  |&lt;br /&gt;
+------------------+&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create the layer for your proxy charm:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
charm create pingpong&lt;br /&gt;
cd pingpong&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will create a charm layer ready for customization:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
├── config.yaml&lt;br /&gt;
├── icon.svg&lt;br /&gt;
├── layer.yaml&lt;br /&gt;
├── metadata.yaml&lt;br /&gt;
├── reactive&lt;br /&gt;
│   └── pingpong.py&lt;br /&gt;
├── README.ex&lt;br /&gt;
└── tests&lt;br /&gt;
    ├── 00-setup&lt;br /&gt;
    └── 10-deploy&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, modify &#039;&#039;layers.yaml&#039;&#039; to the following:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
includes:&lt;br /&gt;
    - layer:basic&lt;br /&gt;
    - layer:vnfproxy&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;[https://jujucharms.com/docs/stable/authors-charm-metadata metadata.yaml]&#039;&#039; file describes what your charm is and sets certain properties used by Juju.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
name: pingpong&lt;br /&gt;
summary: A service to test latency between machines.&lt;br /&gt;
maintainer: Adam Israel &amp;lt;adam.israel@canonical.com&amp;gt;&lt;br /&gt;
description: |&lt;br /&gt;
  The pingpong charm manages the pingpong vnfd deployed by Open Source Mano.&lt;br /&gt;
tags:&lt;br /&gt;
  - nfv&lt;br /&gt;
subordinate: false&lt;br /&gt;
series:&lt;br /&gt;
    - trusty&lt;br /&gt;
    - xenial&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This means that your charm will include the basic layer, required for all charms, and the vnfproxy layer, which has been designed to aid in the development in proxy charms by implementing common functionality.&lt;br /&gt;
&lt;br /&gt;
====Actions====&lt;br /&gt;
&lt;br /&gt;
There are three pieces that make up an action: &#039;&#039;actions.yaml&#039;&#039;, which define an action, the &#039;&#039;actions/&#039;&#039; directory where we&#039;ll place a small script that invokes the reactive framework, and the python code in &#039;&#039;reactive/pingpong.py&#039;&#039; that performs said action.&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;actions.yaml&#039;&#039;, we define the actions we wish to support:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
set-server:&lt;br /&gt;
    description: &amp;quot;Set the target IP address and port&amp;quot;&lt;br /&gt;
    params:&lt;br /&gt;
        server-ip:&lt;br /&gt;
            description: &amp;quot;IP on which the target service is listening.&amp;quot;&lt;br /&gt;
            type: string&lt;br /&gt;
            default: &amp;quot;&amp;quot;&lt;br /&gt;
        server-port:&lt;br /&gt;
            description: &amp;quot;Port on which the target service is listening.&amp;quot;&lt;br /&gt;
            type: integer&lt;br /&gt;
            default: 5555&lt;br /&gt;
    required:&lt;br /&gt;
        - server-ip&lt;br /&gt;
set-rate:&lt;br /&gt;
    description: &amp;quot;Set the rate of packet generation.&amp;quot;&lt;br /&gt;
    params:&lt;br /&gt;
        rate:&lt;br /&gt;
            description: &amp;quot;Packet rate.&amp;quot;&lt;br /&gt;
            type: integer&lt;br /&gt;
            default: 5&lt;br /&gt;
get-stats:&lt;br /&gt;
    description: &amp;quot;Get the stats.&amp;quot;&lt;br /&gt;
get-state:&lt;br /&gt;
    description: &amp;quot;Get the admin state of the target service.&amp;quot;&lt;br /&gt;
get-rate:&lt;br /&gt;
    description: &amp;quot;Get the rate set on the target service.&amp;quot;&lt;br /&gt;
get-server:&lt;br /&gt;
    description: &amp;quot;Get the target server and IP set&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
mkdir actions/&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each action, we need to create a script to invoke the reactive framework. This is a boilerplate script that will be used for every action. The first step is to create the first action script.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt;&#039;EOF&#039; &amp;gt;&amp;gt; actions/set-server&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
import sys&lt;br /&gt;
sys.path.append(&#039;lib&#039;)&lt;br /&gt;
&lt;br /&gt;
from charms.reactive import main&lt;br /&gt;
from charms.reactive import set_state&lt;br /&gt;
from charmhelpers.core.hookenv import action_fail, action_name&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
`set_state` only works here because it&#039;s flushed to disk inside the `main()`&lt;br /&gt;
loop. remove_state will need to be called inside the action method.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
set_state(&#039;actions.{}&#039;.format(action_name()))&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    main()&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    action_fail(repr(e))&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, make the file executable.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
chmod +x actions/set-server&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, copy this script for the remaining actions:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
cp actions/set-server actions/set-rate&lt;br /&gt;
cp actions/set-server actions/get-stats&lt;br /&gt;
cp actions/set-server actions/set-state&lt;br /&gt;
cp actions/set-server actions/get-rate&lt;br /&gt;
cp actions/set-server actions/get-server&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last step is to map the action to the command(s) to be run. To do this, open up reactive/pingpong.py and add this code.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
@when(&#039;actions.set-server&#039;)&lt;br /&gt;
def set_server():&lt;br /&gt;
    err = &#039;&#039;&lt;br /&gt;
    try:&lt;br /&gt;
        cmd = &amp;quot;&amp;quot;&lt;br /&gt;
        result, err = charms.sshproxy._run(cmd)&lt;br /&gt;
    except:&lt;br /&gt;
        action_fail(&#039;command failed:&#039; + err)&lt;br /&gt;
    else:&lt;br /&gt;
        action_set({&#039;outout&#039;: result})&lt;br /&gt;
    finally:&lt;br /&gt;
        remove_flag(&#039;actions.set-server&#039;)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reactive framework, coupled with the script in the &#039;&#039;actions/&#039;&#039; directory, maps the SO&#039;s invocation of the action to the block of code with the matching &#039;&#039;@when&#039;&#039; decorator. As demonstrated in the above code, it will execute a command via the ssh (configured automatically by the SO). You could replace with with calls to a REST API or any other RPC method. You can also run code against the LXD container running the charm.&lt;br /&gt;
 &lt;br /&gt;
====Building====&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready, you can create your charm via the &#039;&#039;charm build&#039;&#039; command:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ charm build&lt;br /&gt;
build: Composing into /home/stone/charms&lt;br /&gt;
build: Destination charm directory: /home/stone/charms/builds/pingpong&lt;br /&gt;
build: Please add a `repo` key to your layer.yaml, with a url from which your layer can be cloned.&lt;br /&gt;
build: Processing layer: layer:basic&lt;br /&gt;
build: Processing layer: layer:sshproxy&lt;br /&gt;
build: Processing layer: layer:vnfproxy&lt;br /&gt;
build: Processing layer: pingpong&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This combines all layers that you included, and those that they include, into a charm called &#039;&#039;pingpong&#039;&#039;, located in the &#039;&#039;~/charms/builds&#039;&#039; directory.&lt;br /&gt;
&lt;br /&gt;
====VNF Descriptor====&lt;br /&gt;
&lt;br /&gt;
In your Virtual Network Function Descriptor (VNFD), you specify the name of the charm as demonstrated below:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
vnfd:vnfd-catalog:&lt;br /&gt;
    vnfd:vnfd:&lt;br /&gt;
     -  vnfd:id: rift_pong_vnf&lt;br /&gt;
        vnfd:name: pong_vnf&lt;br /&gt;
        vnfd:vnf-configuration:&lt;br /&gt;
            vnfd:juju:&lt;br /&gt;
                vnfd:charm: pingpong&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then the compiled charm (from the builds directory) has to be packaged with the descriptor package under the charm directory. So the ping VNF with the charm would be:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
ping_vnf&lt;br /&gt;
├── charms&lt;br /&gt;
│   └── pingpong&lt;br /&gt;
├── checksums.txt&lt;br /&gt;
├── icons&lt;br /&gt;
├── images&lt;br /&gt;
├── ping_vnfd.yaml&lt;br /&gt;
├── README&lt;br /&gt;
└── scripts&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=Creating_your_own_VNF_package&amp;diff=6076</id>
		<title>Creating your own VNF package</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=Creating_your_own_VNF_package&amp;diff=6076"/>
		<updated>2021-02-17T16:52:12Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
This page illustrates how to create your own VNF package. As a previous step, it is highly convenient that you collect the internal structure of your VNF: its VDUs, the VDU information (flavor, interfaces, image, etc.), the VNF internal networks, and the external connection points. The presentation in this [https://osm-download.etsi.org/ftp/osm-3.0-three/1st-hackfest/presentations/20180117%20OSM%20Hackfest%20-%20Guidelines%20for%20VNF%20builders.pptx link] might help you collecting all the information.&lt;br /&gt;
&lt;br /&gt;
==VNF without primitives==&lt;br /&gt;
&lt;br /&gt;
===Using the CLI tool===&lt;br /&gt;
*Clone the devops repo:&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/devops&lt;br /&gt;
*Run the following command to create a folder with all the files required for a single-VM VNF package:&lt;br /&gt;
 ./devops/descriptor-packages/tools/generate_descriptor_pkg.sh -t vnfd --image &amp;lt;IMAGE_PATH&amp;gt; -c &amp;lt;VNF_NAME&amp;gt;&lt;br /&gt;
*A folder called &amp;lt;VNF_NAME&amp;gt;_vnfd will be created with all the files required for a VNF package.&lt;br /&gt;
*Edit the descriptor file &amp;lt;VNF_NAME&amp;gt;_vnfd.yaml.&lt;br /&gt;
**By default, the descriptor is prepared for a single-VM VNF.&lt;br /&gt;
**Add as many VMs as required.&lt;br /&gt;
**Add also Internal VLDs as required.&lt;br /&gt;
*Add any artifacts needed by the VNF (eg, charm, icons, images etc ...) to the appropriate folder and make sure it is referenced in the descriptor.&lt;br /&gt;
*Once done, you can generate the tar.gz VNF package with the command:&lt;br /&gt;
 ./devops/descriptor-packages/tools/generate_descriptor_pkg.sh -t vnfd -N &amp;lt;VNF_NAME&amp;gt;_vnfd&lt;br /&gt;
 #Note: the argument -N is optional and is intended to keep the package files after creating the package&lt;br /&gt;
&lt;br /&gt;
==VNF with primitives==&lt;br /&gt;
You will have to create a proxy charm for the VNF. You can follow the general instructions below:&lt;br /&gt;
*Clone the devops repo:&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/devops&lt;br /&gt;
*	Enter the juju-charms folder under devops and follow the instructions to create your own charm: [[Creating your own VNF charm (Release THREE)|Creating your own VNF charm]]&lt;br /&gt;
You can then follow the ping-pong example in OSM descriptor packages to integrate the charm into VNF primitives&lt;br /&gt;
&lt;br /&gt;
==Migrating old descriptors to current release==&lt;br /&gt;
Only file containing the VNFD or NSD descriptor need to be migrated. Clone the devops repo, run the utility for that and generate the package:&lt;br /&gt;
 git clone https://osm.etsi.org/gerrit/osm/devops&lt;br /&gt;
 ./devops/descriptor-packages/tools/upgrade_descriptor_version.py -i &amp;lt;old-descriptor-file&amp;gt; -o &amp;lt;new-descriptor-file&amp;gt;&lt;br /&gt;
 # generate package following the instructions of previous sections&lt;br /&gt;
&lt;br /&gt;
This command fails if package python-osm-im is not installed. Follow these guidelines to install it: [[#Installing_Python_OSM_IM_package | Installing_Python_OSM_IM_package]]&lt;br /&gt;
&lt;br /&gt;
==Validate descriptors==&lt;br /&gt;
This utility is under the &#039;devops&#039; repository. Clone it using the above steps. &lt;br /&gt;
Can be invoked with:&lt;br /&gt;
 ./devops/descriptor-packages/tools/validate_descriptor.py &amp;lt;DESCRIPTOR_FILE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is also integrated in the devops/descriptor-packages makefile system&lt;br /&gt;
 make test&lt;br /&gt;
&lt;br /&gt;
This command fails if package python-osm-im is not installed. Follow these guidelines to install it: [[#Installing_Python_OSM_IM_package | Installing_Python_OSM_IM_package]]&lt;br /&gt;
&lt;br /&gt;
==Installing Python OSM IM package==&lt;br /&gt;
Follow these steps to install it if needed:&lt;br /&gt;
 # Check that the current OSM debian repository is the current stable repo for the release:&lt;br /&gt;
 grep -h ^deb /etc/apt/sources.list /etc/apt/sources.list.d/* |grep osm-download&lt;br /&gt;
 #  should be similar to this, and should include IM component:&lt;br /&gt;
 #    deb [arch=amd64] https://osm-download.etsi.org/repository/osm/debian/ReleaseSIX stable IM osmclient devops&lt;br /&gt;
 &lt;br /&gt;
 # If missing, add repository with:&lt;br /&gt;
 curl &amp;quot;https://osm-download.etsi.org/repository/osm/debian/ReleaseSIX/OSM%20ETSI%20Release%20Key.gpg&amp;quot; | apt-key add -&lt;br /&gt;
 apt-get update &amp;amp;&amp;amp; add-apt-repository -y &amp;quot;deb [arch=amd64] https://osm-download.etsi.org/repository/osm/debian/ReleaseSIX stable IM osmclient devops&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Install/update python-osm-im and its dependencies&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install python-osm-im&lt;br /&gt;
 sudo -H pip install pyangbind&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_Release_SIX_Documentation&amp;diff=6075</id>
		<title>OSM Release SIX Documentation</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_Release_SIX_Documentation&amp;diff=6075"/>
		<updated>2021-02-17T16:51:16Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
[[File:8th_OSM_Hack.png|320px|right|top|link=https://osm.etsi.org/wikipub/index.php/8th_OSM_Hackfest]]  &lt;br /&gt;
&lt;br /&gt;
== Release SIX Quickstart ==&lt;br /&gt;
* In order to get started quickly and get familiar with the most common operations, you can refer to the [[OSM_Release_SIX | Release SIX Quickstart page]].&lt;br /&gt;
&lt;br /&gt;
== VNF and NS examples ==&lt;br /&gt;
* [[Examples from OSM Hackfests]]&lt;br /&gt;
&lt;br /&gt;
== Onboarding your own VNF and NS ==&lt;br /&gt;
* &#039;&#039;&#039;[http://osm-download.etsi.org/ftp/Documentation/vnf-onboarding-guidelines VNF Onboarding Guidelines]&#039;&#039;&#039;&lt;br /&gt;
* [[Creating_your_own_VNF_package | Create your own VNF package]] &lt;br /&gt;
* [[Creating_your_own_VNF_charm_(Release_THREE) | Creating your own VNF charm]]&lt;br /&gt;
** Some [[Example_VNF_Charms | examples of VNF Charms]] &lt;br /&gt;
** [[VNF_Primitives | Default VNF Primitives]] &lt;br /&gt;
* [[OSM_Information_Model | OSM Information Model]]&lt;br /&gt;
* [[Reference_VNF_and_NS_Descriptors | Information to create VNF and NS Descriptors]]&lt;br /&gt;
* [[OSM_Release_FOUR#Using_old_descriptors_from_Release_TWO | How to onboard old Release TWO descriptors]]&lt;br /&gt;
&lt;br /&gt;
== Specific installation methods ==&lt;br /&gt;
* [[How_to_run_OSM_on_Vagrant | How to run OSM on Vagrant]]&lt;br /&gt;
* [[How to upgrade the OSM Platform]]&lt;br /&gt;
* [[OSM_client#Installation | How to install OSM client separately]]&lt;br /&gt;
* [[Advanced OSM installation procedures]]&lt;br /&gt;
* [[How to install OSM in Amazon EC2 | How to install OSM in Amazon EC2]]&lt;br /&gt;
&lt;br /&gt;
== EPA and SDN Assist ==&lt;br /&gt;
* [[EPA_and_SDN_assist | How-to guide]]&lt;br /&gt;
* [[Openstack_configuration_(Release_FOUR)#Configure_Openstack_for_full_EPA_support_in_OSM | OpenStack configuration for EPA and SDN Assist]]&lt;br /&gt;
&lt;br /&gt;
== Reference material and self training ==&lt;br /&gt;
* [[OSM client]]:&lt;br /&gt;
** [[OSM_client#Installation | Installation]]&lt;br /&gt;
** [[OSM_client#Usage_(client_commands) | OSM client commands]]&lt;br /&gt;
** [[OSM_client#Enable_autocompletion | Enable autocompletion in OSM Client]]&lt;br /&gt;
* [[OSM instantiation parameters]]&lt;br /&gt;
* Using Monitoring and Autoscaling capabilities:&lt;br /&gt;
** [[OSM_Performance_Management | OSM Performance Management]]&lt;br /&gt;
** [[OSM_Fault_Management | OSM Fault Management]]&lt;br /&gt;
** [[OSM_Autoscaling | OSM Autoscaling]]&lt;br /&gt;
* 6th OSM Hackfest - full training material:&lt;br /&gt;
** [[5th_OSM_Hackfest#Agenda | Table of contents]]&lt;br /&gt;
** [https://osm-download.etsi.org/ftp/osm-5.0-five/6th-hackfest/presentations/ Documentation]&lt;br /&gt;
** [https://osm-download.etsi.org/ftp/osm-5.0-five/6th-hackfest/packages/ NS and VNF Packages] and [https://osm-download.etsi.org/ftp/osm-3.0-three/1st-hackfest/images/ VM images]&lt;br /&gt;
* [[NBI_API_Description| Description of the OSM North Bound Interface REST API]]&lt;br /&gt;
* [[VIM_emulator | How to use the VIM emulator]]&lt;br /&gt;
* [[OSM_E2E_tests | Tests to validate VIM capabilities]]&lt;br /&gt;
* [[OSM_workshops_and_events | OSM Workshops videos]]&lt;br /&gt;
* [[OSM_Technical_Videos | Other technical videos and demos]]&lt;br /&gt;
* [[OSM URN Namespace]]&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
* [[How to know the version of your current OSM installation]]&lt;br /&gt;
* [[Common issues and troubleshooting]]&lt;br /&gt;
* Have you detected any bug? Check [[How_to_report_issues | this guide]] to see how to report issues.&lt;br /&gt;
&lt;br /&gt;
== OSM Scope, Features and Integration Guidelines ==&lt;br /&gt;
&lt;br /&gt;
* [[OSM Scope, Functionality, Operation and Integration Guidelines]]&lt;br /&gt;
* [[Release notes and whitepapers]]&lt;br /&gt;
&lt;br /&gt;
== How to contribute ==&lt;br /&gt;
* [https://osm.etsi.org/about/how-to-join Joining the OSM community]&lt;br /&gt;
* Developer guides:&lt;br /&gt;
** [[Workflow_with_OSM_tools | Workflow with OSM tools (git, gerrit, bugzilla, etc.) (MUST READ for developers)]]&lt;br /&gt;
** [[Developer HowTo | Developer how-to (MUST READ for developers)]]&lt;br /&gt;
** [[Developer_HowTo_for_RO_Module | Developer how-to for RO]]&lt;br /&gt;
**[[How_to_upgrade_the_OSM_Platform#Upgrading_a_specific_component_to_use_your_own_cloned_repo_.28e.g._for_developing_purposes.29 | How to work with your own cloned repo for a specific component]]&lt;br /&gt;
* [https://opensourcemano.slack.com/ OSM Slack Workplace]&lt;br /&gt;
* Upcoming Hackfests and events:&lt;br /&gt;
** [[OSM workshops and events]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Feedback}}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_Release_SIX&amp;diff=6074</id>
		<title>OSM Release SIX</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_Release_SIX&amp;diff=6074"/>
		<updated>2021-02-17T16:51:05Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
[[File:8th_OSM_Hack.png|350px|right|top|link=https://osm.etsi.org/wikipub/index.php/8th_OSM_Hackfest]]  &lt;br /&gt;
&lt;br /&gt;
Open Source MANO (OSM) is an ETSI-hosted open source community delivering a production-quality MANO stack for NFV, capable of consuming openly published information models, available to everyone, suitable for all VNFs, operationally significant and VIM-independent. OSM is aligned to NFV ISG information models while providing first-hand feedback based on its implementation experience.&lt;br /&gt;
&lt;br /&gt;
Release SIX brings a number of improvements over previous releases. For the full list of new features, please refer to the Rel SIX White Paper or the [[OSM Release SIX Documentation]]. For a comprehensive overview of OSM functionalities, you can also refer to the [https://osm.etsi.org/images/OSM_EUAG_White_Paper_OSM_Scope_and_Functionality.pdf OSM Scope and Functionality White Paper] or to the release notes of previous OSM releases ([https://osm.etsi.org/images/OSM-Whitepaper-TechContent-ReleaseONE-FINAL.pdf ONE], [https://osm.etsi.org/images/OSM-Whitepaper-TechContent-ReleaseTWO-FINAL.pdf TWO], [https://osm.etsi.org/images/OSM-Whitepaper-TechContent-ReleaseTHREE-FINAL.pdf THREE],&lt;br /&gt;
[https://osm.etsi.org/images/OSM-Whitepaper-TechContent-ReleaseFOUR-FINAL.pdf FOUR], [https://osm.etsi.org/images/OSM-Whitepaper-TechContent-ReleaseFIVE-FINAL.pdf FIVE]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OSM in Practice&#039;&#039;&#039;&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=kCFxPV67Adw&lt;br /&gt;
|alignment=left&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Assumptions about interaction with VIMs and VNFs=&lt;br /&gt;
The following figure illustrates OSM interaction with VIMs and VNFs:&lt;br /&gt;
* OSM talks to the VIM for the deployment of VNFs and VLs connecting them&lt;br /&gt;
* OSM talks to the VNFs deployed in a VIM to run day-0, day-1 and day-2 configuration primitives.&lt;br /&gt;
&lt;br /&gt;
[[File:Osmtopology.png|600px|OSM Release SIX]]&lt;br /&gt;
&lt;br /&gt;
In order for OSM to work, it is assumed that:&lt;br /&gt;
* Each VIM has an API endpoint reachable from OSM&lt;br /&gt;
* Each VIM has a so called management network which provides IP address to VNFs&lt;br /&gt;
* That management network is reachable from OSM&lt;br /&gt;
&lt;br /&gt;
=Install OSM Release SIX=&lt;br /&gt;
&lt;br /&gt;
This release expands the cloud-native, &#039;&#039;dockerized&#039;&#039; OSM installation with the kafka bus for asynchronous communications, a lighter orchestrator with Network Services and Slicing capabilities, performance/fault/policy management features, a SOL005-aligned NBI, an enhanced GUI with a service composer, and OSM client leveraging the unified and improved REST API that the NBI exposes.&lt;br /&gt;
&lt;br /&gt;
== Default installation procedure ==&lt;br /&gt;
&lt;br /&gt;
All you need to run OSM Release SIX is a single server or VM with the following requirements:&lt;br /&gt;
* MINIMUM: 2 CPUs, 4 GB RAM, 20GB disk and a single interface with Internet access&lt;br /&gt;
* RECOMMENDED: 2 CPUs, 8 GB RAM, 40GB disk and a single interface with Internet access&lt;br /&gt;
* Base image:&lt;br /&gt;
** Ubuntu18.04 (64-bit variant required) (http://releases.ubuntu.com/18.04/), or&lt;br /&gt;
** Ubuntu16.04 (64-bit variant required) (http://releases.ubuntu.com/16.04/)&lt;br /&gt;
&lt;br /&gt;
Once you have prepared the host with the previous requirements, all you need to do is:&lt;br /&gt;
 wget https://osm-download.etsi.org/ftp/osm-6.0-six/install_osm.sh&lt;br /&gt;
 chmod +x install_osm.sh&lt;br /&gt;
 ./install_osm.sh&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TIP:&#039;&#039;&#039; In order to facilitate potential trobleshooting later, it is recommended to save the full log of your installation process:&lt;br /&gt;
 wget https://osm-download.etsi.org/ftp/osm-6.0-six/install_osm.sh&lt;br /&gt;
 chmod +x install_osm.sh&lt;br /&gt;
 ./install_osm.sh 2&amp;gt;&amp;amp;1 | tee osm_install_log.txt&lt;br /&gt;
&lt;br /&gt;
You will be asked if you want to proceed with the installation and configuration of LXD, juju, docker CE and the initialization of a local docker swarm, as pre-requirements. Please answer &amp;quot;y&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Then, some dialog messages related to LXD configuration will be shown. This is what you have to answer:&lt;br /&gt;
* Do you want to configure the LXD bridge? &#039;&#039;&#039;Yes&#039;&#039;&#039;&lt;br /&gt;
* Do you want to setup an IPv4 subnet? &#039;&#039;&#039;Yes&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;&amp;lt; &#039;&#039;&#039;Default values&#039;&#039;&#039; apply for next questions &amp;gt;&amp;gt;&#039;&#039;&lt;br /&gt;
* Do you want to setup an IPv6 subnet? &#039;&#039;&#039;No&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you want to run docker commands, you will also need to either reload the shell or run the following command to add your user to the &#039;docker&#039; group:&lt;br /&gt;
 newgrp docker&lt;br /&gt;
&lt;br /&gt;
===Installation including optional components===&lt;br /&gt;
&lt;br /&gt;
You can include optional components in your installation by adding the following flags:&lt;br /&gt;
* &#039;&#039;&#039;VIM Emulator:&#039;&#039;&#039; --vimemu (more information [[VIM emulator|here]])&lt;br /&gt;
* &#039;&#039;&#039;Performance Management additional stack (Grafana only):&#039;&#039;&#039; --pm_stack (more information [[OSM Performance Management|here]])&lt;br /&gt;
* &#039;&#039;&#039;Fault Management features with ELK:&#039;&#039;&#039; --elk_stack (more information [[OSM Fault Management|here]])&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 ./install_osm.sh --elk_stack --pm_stack --vimemu&lt;br /&gt;
&lt;br /&gt;
===Other installation options===&lt;br /&gt;
* You can also run OSM using a pre-built [https://app.vagrantup.com/osm/boxes/releasesix vagrant] image: [[How_to_run_OSM_on_Vagrant]]&lt;br /&gt;
* For other special installation options, please refer to the [[OSM_Release_SIX_Documentation#Alternative_installation_methods | release documentation]].&lt;br /&gt;
&lt;br /&gt;
==Checking your installation==&lt;br /&gt;
&lt;br /&gt;
After some time, you will get a fresh OSM Release SIX installation with its latest, pre-built docker images which are built daily. You can access to the UI in the following URL (user:admin, password: admin):  http://1.2.3.4, replacing 1.2.3.4 with the IP address of your host. &lt;br /&gt;
&lt;br /&gt;
[[File:Osm_lwb_ui_login.png|600px|OSM home]]&lt;br /&gt;
&lt;br /&gt;
[[File:Osm_lwb_ui.png|600px|OSM Release SIX installation result]]&lt;br /&gt;
&lt;br /&gt;
As a result of the installation, thirteen docker containers are created in the host (without considering optional stacks).  You can check they are running by issuing the following commands:&lt;br /&gt;
 docker stack ps osm |grep -i running&lt;br /&gt;
 docker service ls&lt;br /&gt;
&lt;br /&gt;
[[File:Osm_containers_rel5.png|600px|OSM Docker containers]]&lt;br /&gt;
&lt;br /&gt;
At any time, you can quickly relaunch your deployment by using the pre-built docker images, like this:&lt;br /&gt;
 docker stack rm osm &amp;amp;&amp;amp; sleep 60 # The sleep is for making sure the stack removal finishes before redeploying&lt;br /&gt;
 docker stack deploy -c /etc/osm/docker/docker-compose.yaml osm&lt;br /&gt;
&lt;br /&gt;
To check the logs of any container:&lt;br /&gt;
 docker service logs osm_lcm     # shows the logs of all containers (included dead containers) associated with LCM component.&lt;br /&gt;
 docker logs $(docker ps -aqf &amp;quot;name=osm_lcm&amp;quot; -n 1)  # shows the logs of the last existant LCM container&lt;br /&gt;
&lt;br /&gt;
OSM client, a python-based CLI for OSM, will be available as well in the host machine.&lt;br /&gt;
Via the OSM client, you can manage descriptors, NS and VIM complete lifecycle.&lt;br /&gt;
&lt;br /&gt;
=Adding VIM accounts=&lt;br /&gt;
Before proceeding, make sure that you have a site with a VIM configured to run with OSM. Different kinds of VIMs are currently supported by OSM:&lt;br /&gt;
*&#039;&#039;&#039;OpenVIM.&#039;&#039;&#039; Check the following link to know how to install and use openvim for OSM: [[OpenVIM installation | OpenVIM installation]]. Openvim must run in &#039;normal&#039; mode (not test or fake) to have real virtual machines reachable from OSM.&lt;br /&gt;
*&#039;&#039;&#039;OpenStack.&#039;&#039;&#039; Check the following link to learn how to configure OpenStack to be used by OSM: [[Openstack_configuration | Openstack configuration]]&lt;br /&gt;
*&#039;&#039;&#039;VMware vCloud Director.&#039;&#039;&#039; Check the following link to learn how to configure VMware VCD to be used by OSM: [[Configuring_VMware_vCloud_Director | Configuring VMware vCloud Director]]&lt;br /&gt;
*&#039;&#039;&#039;Amazon Web Services (AWS).&#039;&#039;&#039; Check the following link to learn how to configure AWS (EC2 and Virtual Private Cloud) to be used by OSM: [[Configuring_AWS | Configuring AWS for OSM]]&lt;br /&gt;
*&#039;&#039;&#039;Eclipse fog05 &#039;&#039;&#039; Check the following link to learn how to configure Eclipse fog05 to be used by OSM: [[Eclipse_fog05 | Configuring Eclipse fog05 for OSM]]&lt;br /&gt;
&lt;br /&gt;
OSM can manage external SDN controllers to perform the dataplane underlay network connectivity on behalf of the VIM. See [[EPA and SDN assist]]&lt;br /&gt;
&lt;br /&gt;
==Adding VIMs through OSM client==&lt;br /&gt;
===OpenVIM site===&lt;br /&gt;
Execute the following command, using the appropriate parameters (e.g. site name: &amp;quot;openvim-site&amp;quot;, IP address: 10.10.10.10, VIM tenant: &amp;quot;osm&amp;quot;)&lt;br /&gt;
 osm vim-create --name openvim-site --auth_url http://10.10.10.10:9080/openvim --account_type openvim \&lt;br /&gt;
    --description &amp;quot;Openvim site&amp;quot; --tenant osm --user dummy --password dummy&lt;br /&gt;
&lt;br /&gt;
===Openstack site===&lt;br /&gt;
Execute the following command, using the appropriate parameters (e.g. site name: &amp;quot;openstack-site&amp;quot;, IP address: 10.10.10.11, VIM tenant: &amp;quot;admin&amp;quot;, user: &amp;quot;admin&amp;quot;, password: &amp;quot;userpwd&amp;quot;)&lt;br /&gt;
 osm vim-create --name openstack-site --user admin --password userpwd \&lt;br /&gt;
     --auth_url http://10.10.10.11:5000/v2.0 --tenant admin --account_type openstack&lt;br /&gt;
&lt;br /&gt;
For advanced options, please refer to the [[Openstack_configuration#Add_openstack_to_OSM | OpenStack Setup Guide]].&lt;br /&gt;
&lt;br /&gt;
===VMware vCloud Director site===&lt;br /&gt;
*Execute the following command, using the appropriate parameters (e.g. site name: &amp;quot;vmware-site&amp;quot;, IP address: 10.10.10.12, VIM tenant: &amp;quot;vmware-tenant&amp;quot;, user: &amp;quot;osm&amp;quot;, password: &amp;quot;osm4u&amp;quot;, admin user: &amp;quot;admin&amp;quot;, admin password: &amp;quot;adminpwd&amp;quot;, organization: &amp;quot;orgVDC&amp;quot;)&lt;br /&gt;
 osm vim-create --name vmware-site --user osm --password osm4u --auth_url https://10.10.10.12 \&lt;br /&gt;
     --tenant vmware-tenant  --account_type vmware \&lt;br /&gt;
     --config &#039;{admin_username: user, admin_password: passwd, orgname: organization, nsx_manager: &amp;quot;http://10.10.10.12&amp;quot;,&lt;br /&gt;
     nsx_user: user, nsx_password: userpwd,&amp;quot;vcenter_port&amp;quot;: port, &amp;quot;vcenter_user&amp;quot;:user, &amp;quot;vcenter_password&amp;quot;:password,&lt;br /&gt;
     &amp;quot;vcenter_ip&amp;quot;: 10.10.10.14}&#039;&lt;br /&gt;
&lt;br /&gt;
For advanced options, please refer to the [[Configuring_VMware_vCloud_Director#Add_vCloud_using_OSM_Client | vCloud Director Setup Guide]].&lt;br /&gt;
&lt;br /&gt;
===VMware Integrated Openstack (VIO) site===&lt;br /&gt;
Execute the following command, using the appropriate parameters (e.g. site name: &amp;quot;openstack-site-vio4&amp;quot;, IP address: 10.10.10.12, VIM tenant: &amp;quot;admin&amp;quot;, user: &amp;quot;admin&amp;quot;, password: &amp;quot;passwd&amp;quot;)&lt;br /&gt;
 osm vim-create --name VIO --user admin --password passwd --auth_url https://10.10.10.12:5000/v3 --tenant admin \&lt;br /&gt;
     --account_type openstack --config &#039;{use_floating_ip: True, insecure: true, vim_type: VIO, APIversion: v3.3,&lt;br /&gt;
     dataplane_physical_net: dvs-46, &amp;quot;use_internal_endpoint&amp;quot;:true,&amp;quot;dataplane_net_vlan_range&amp;quot;:[&amp;quot;31-35&amp;quot;,&amp;quot;37-39&amp;quot;]}&#039;&lt;br /&gt;
&lt;br /&gt;
With respect to Openstack, the additional configuration for VIO is the following:&lt;br /&gt;
* &#039;&#039;&#039;vim_type&#039;&#039;&#039;: Set to &amp;quot;VIO&amp;quot; to use VMware Integrated openstack as VIM &lt;br /&gt;
* &#039;&#039;&#039;use_internal_endpoint&#039;&#039;&#039;: When true it allows use of private API endpoints&lt;br /&gt;
* &#039;&#039;&#039;dataplane_physical_net&#039;&#039;&#039;: The configured network_vlan_ranges at neutron for the SRIOV (binding direct) and passthrough (binding direct-physical) networks, e.g. &#039;physnet_sriov&#039; in the above configuration. In case of VMware Integrated Openstack (VIO) provide moref ID of distributed virtual switch, e.g &#039;dvs-46&#039; in above configuration.&lt;br /&gt;
* &#039;&#039;&#039;dataplane_net_vlan_range&#039;&#039;&#039;: In case of VMware Integrated Openstack (VIO) provide vlan ranges for the SRIOV (binding direct) networks in format [&#039;start_ID - end_ID&#039;]&lt;br /&gt;
&lt;br /&gt;
For common options, you may refer to the general [[Openstack_configuration#Add_openstack_to_OSM | OpenStack Setup Guide]].&lt;br /&gt;
&lt;br /&gt;
===Amazon Web Services (AWS) site===&lt;br /&gt;
*Execute the following command, using the appropriate parameters (e.g. site name: &amp;quot;aws-site&amp;quot;, VIM tenant: &amp;quot;admin&amp;quot;, user: &amp;quot;XXX&amp;quot;, password: &amp;quot;YYY&amp;quot;)&lt;br /&gt;
 osm vim-create --name aws-site --user XXX --password YYY --auth_url https://aws.amazon.com --tenant admin \&lt;br /&gt;
     --account_type aws --config &#039;{region_name: eu-central-1, flavor_info: {t2.nano: {cpus: 1, disk: 100, ram: 512},&lt;br /&gt;
     t2.micro: {cpus: 1, disk: 100, ram: 1024}, t2.small: {cpus: 1, disk: 100, ram: 2048},&lt;br /&gt;
     m1.small: {cpus: 1, disk: 160, ram: 1741}}}&#039;&lt;br /&gt;
For advanced options, please refer to the [[Configuring_AWS#Add_AWS_to_OSM | AWS Setup Guide]].&lt;br /&gt;
&lt;br /&gt;
=== Eclipse fog05 site===&lt;br /&gt;
*Execute the following command, using the appropriate parameters (e.g. runtime supported: &amp;quot;hypervisor&amp;quot;, cpu architecture: &amp;quot;arch&amp;quot;, user: &amp;quot;XXX&amp;quot;, password: &amp;quot;YYY&amp;quot;)&lt;br /&gt;
    osm vim-create --name fos --auth_url &amp;lt;rest proxy ip&amp;gt;:8080 --account_type fos --tenant osm --user dummy --password dummy --config &#039;{hypervisor: LXD}&#039;&lt;br /&gt;
&lt;br /&gt;
For advanced options, please refer to the [[Eclipse_fog05#Add_Eclipse_fog05_to_OSM | Eclipse fog05 setup guide]].&lt;br /&gt;
&lt;br /&gt;
==Adding VIMs through GUI==&lt;br /&gt;
Just access the &#039;&#039;VIM Accounts&#039;&#039; tab, click the &#039;&#039;New VIM&#039;&#039; button and fill the parameters accordingly.&lt;br /&gt;
&lt;br /&gt;
[[File:Osmvim.png|600px|AddingVIMUI]]&lt;br /&gt;
&lt;br /&gt;
=Deploying your first Network Service=&lt;br /&gt;
In this example we will deploy the following Network Service, consisting of two simple VNFs based on CirrOS connected by a simple VLD.&lt;br /&gt;
&lt;br /&gt;
[[File:cirros_2vnf_ns.png|500px|NS with 2 CirrOS VNF]]&lt;br /&gt;
&lt;br /&gt;
Before going on, download the required VNF and NS packages from this URL: https://osm-download.etsi.org/ftp/osm-3.0-three/examples/cirros_2vnf_ns/&lt;br /&gt;
&lt;br /&gt;
==Onboarding a VNF==&lt;br /&gt;
&lt;br /&gt;
The onboarding of a VNF in OSM involves adding the corresponding VNF package to the system. This process also assumes, as a pre-condition, that the corresponding VM images are available in the VIM(s) where it will be instantiated.&lt;br /&gt;
&lt;br /&gt;
===Uploading VM image(s) to the VIM(s)===&lt;br /&gt;
In this example, only a vanilla CirrOS 0.3.4 image is need. It can be obtained from the following link: http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img&lt;br /&gt;
&lt;br /&gt;
If not available, it would be required to upload the image into the VIM. Instructions differ from one VIM to another:&lt;br /&gt;
*In Openstack:&lt;br /&gt;
 openstack image create --file=&amp;quot;./cirros-0.3.4-x86_64-disk.img&amp;quot; --container-format=bare --disk-format=qcow2 cirros034&lt;br /&gt;
*In OpenVIM:&lt;br /&gt;
 #copy your image to the NFS shared folder (e.g. /mnt/openvim-nfs)&lt;br /&gt;
 cp ./cirros-0.3.4-x86_64-disk.img /mnt/openvim-nfs/&lt;br /&gt;
 openvim image-create --name cirros034 --path /mnt/openvim-nfs/cirros-0.3.4-x86_64-disk.img&lt;br /&gt;
&lt;br /&gt;
===VNF package onboarding===&lt;br /&gt;
&lt;br /&gt;
*From the UI:&lt;br /&gt;
**Go to Projects --&amp;gt; Admin --&amp;gt; VNF Packages (&#039;&#039;Open List&#039;&#039;)&lt;br /&gt;
**Click on the Onboard VNFD button&lt;br /&gt;
**Drag and drop the VNF package file cirros_vnf.tar.gz in the importing area.&lt;br /&gt;
[[File:vnfd_onboard_r4.png|600px|Onboarding a VNF]]&lt;br /&gt;
*From OSM client:&lt;br /&gt;
 osm vnfd-create cirros_vnf.tar.gz&lt;br /&gt;
 osm vnfd-list&lt;br /&gt;
&lt;br /&gt;
==Onboarding a NS==&lt;br /&gt;
*From the UI:&lt;br /&gt;
**Go to Projects --&amp;gt; Admin --&amp;gt; NS Packages (&#039;&#039;Open List&#039;&#039;)&lt;br /&gt;
**Click on the Onboard NSD button&lt;br /&gt;
**Drag and drop the NS package file cirros_2vnf_ns.tar.gz in the importing area.&lt;br /&gt;
[[File:nsd_onboard_r4.png|600px|Onboarding a NS]]&lt;br /&gt;
*From OSM client:&lt;br /&gt;
 osm nsd-create cirros_2vnf_ns.tar.gz&lt;br /&gt;
 osm nsd-list&lt;br /&gt;
&lt;br /&gt;
==Instantiating the NS==&lt;br /&gt;
*From the UI:&lt;br /&gt;
**Go to Projects --&amp;gt; Admin --&amp;gt; NS Packages (&#039;&#039;Open List&#039;&#039;)&lt;br /&gt;
**Next the NS descriptor to be instantiated, click on Launch&lt;br /&gt;
[[File:nsd_list.png|600px|Instantiating a NS (step 1)]] &lt;br /&gt;
**Fill the form, adding at least a name and selecting the VIM&lt;br /&gt;
[[File:new_ns.png|600px|Instantiating a NS (step 2)]] &lt;br /&gt;
* From OSM client:&lt;br /&gt;
 osm ns-create --nsd_name cirros_2vnf_ns --ns_name &amp;lt;ns-instance-name&amp;gt; --vim_account &amp;lt;data-center-name&amp;gt;&lt;br /&gt;
 osm ns-list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instantiation parameters can be specified using both CLI and UI. There are some examples collected in this wiki page: [[OSM instantiation parameters]].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Using old descriptors from Release TWO==&lt;br /&gt;
&lt;br /&gt;
Beware that old Release TWO descriptors cannot be directly used by OSM Release SIX.&lt;br /&gt;
&lt;br /&gt;
You should use this &#039;&#039;&#039;[[Creating your own VNF package#Migrating old descriptors to release SIX|conversion tool]]&#039;&#039;&#039; to convert them to Release SIX format and &#039;&#039;&#039;[[Creating your own VNF package|create the corresponding package]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=What&#039;s next?=&lt;br /&gt;
&lt;br /&gt;
If you want to learn more, you can refer to the rest of &#039;&#039;&#039;[[OSM_Release_SIX_Documentation | OSM documentation]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Feedback}}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_Autoscaling&amp;diff=6073</id>
		<title>OSM Autoscaling</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_Autoscaling&amp;diff=6073"/>
		<updated>2021-02-17T16:50:54Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
This is a new feature available since Release FIVE, which allows to automatically scale VNFs with a VDU granularity and based on any available metric.&lt;br /&gt;
&lt;br /&gt;
=== Reference diagram ===&lt;br /&gt;
&lt;br /&gt;
The following diagram summarizes the feature:&lt;br /&gt;
&lt;br /&gt;
[[File:osm_pol_as.png|800px|Diagram explaining auto-scaling support]]&lt;br /&gt;
&lt;br /&gt;
* Scaling descriptors can be included and be tied to automatic reaction to VIM/VNF metric thresholds.&lt;br /&gt;
* Supported metrics are both VIM and VNF metrics. More information about metrics collection can be found at the [[OSM_Performance_Management|Performance Management documentation]]&lt;br /&gt;
* An internal alarm manager has been added to MON through the &#039;mon-evaluator&#039; module, so that both VIM and VNF metrics can also trigger threshold-violation alarms and scaling actions. More information about this module can be found at the [[OSM_Fault_Management|Fault Management documentation]]&lt;br /&gt;
&lt;br /&gt;
=== Scaling Descriptor ===&lt;br /&gt;
&lt;br /&gt;
The scaling descriptor is part of a VNFD. Like the example below shows, it mainly specifies:&lt;br /&gt;
* An existing metric to be monitored, which should be pre-defined in the monitoring-param list (vnf-monitoring-param-ref).&lt;br /&gt;
* The VDU to be scaled (vdu-id-ref) and the amount of instances to scale per event (count)&lt;br /&gt;
* The thresholds to monitor (scale-in/out-threshold)&lt;br /&gt;
* The minimum and maximum amount of &#039;&#039;&#039;scaled instances&#039;&#039;&#039; to produce.&lt;br /&gt;
* The minimum time it should pass between scaling operations (cooldown-time)&lt;br /&gt;
&lt;br /&gt;
 scaling-group-descriptor:&lt;br /&gt;
 -   name: &amp;quot;cpu_autoscaling_descriptor&amp;quot;&lt;br /&gt;
     min-instance-count: 0&lt;br /&gt;
     max-instance-count: 10&lt;br /&gt;
     scaling-policy:&lt;br /&gt;
     -   name: &amp;quot;cpu_scaling_policy&amp;quot;&lt;br /&gt;
         scaling-type: &amp;quot;automatic&amp;quot;&lt;br /&gt;
         cooldown-time: 120&lt;br /&gt;
         scaling-criteria:&lt;br /&gt;
         -   name: &amp;quot;cpu_autoscaling_criteria&amp;quot;&lt;br /&gt;
             scale-in-threshold: 20&lt;br /&gt;
             scale-in-relational-operation: &amp;quot;LT&amp;quot;&lt;br /&gt;
             scale-out-threshold: 80&lt;br /&gt;
             scale-out-relational-operation: &amp;quot;GT&amp;quot;&lt;br /&gt;
             vnf-monitoring-param-ref: &amp;quot;vnf01_cpu_util&amp;quot;&lt;br /&gt;
     vdu:&lt;br /&gt;
     -   count: 1&lt;br /&gt;
         vdu-id-ref: vdu01&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
This will launch a Network Service formed by an HAProxy load balancer and an (autoscalable) Apache web server&lt;br /&gt;
Make sure:&lt;br /&gt;
# Your VIM has an accesible &#039;public&#039; network and a management network (in this case called &amp;quot;PUBLIC&amp;quot; and &amp;quot;vnf-mgmt&amp;quot;)&lt;br /&gt;
# Your VIM has the &#039;haproxy_ubuntu&#039; and &#039;apache_ubuntu&#039; images located [https://osm-download.etsi.org/ftp/osm-4.0-four/4th-hackfest/images/ here]&lt;br /&gt;
# You run the following command to match your VIM metrics telemetry system&#039;s granularity, if different than 300s (recommended for this example is 60s or Gnocchi&#039;s &amp;quot;medium archive-policy&amp;quot;): &lt;br /&gt;
 docker service update --env-add OS_DEFAULT_GRANULARITY=60 osm_mon&lt;br /&gt;
Get the descriptors:&lt;br /&gt;
 wget https://osm-download.etsi.org/ftp/osm-4.0-four/4th-hackfest/packages/webserver_vimmetric_autoscale_nsd.tar.gz&lt;br /&gt;
 wget https://osm-download.etsi.org/ftp/osm-4.0-four/4th-hackfest/packages/webserver_vimmetric_autoscale_vnfd.tar.gz&lt;br /&gt;
Onboard them&lt;br /&gt;
 osm vnfd-create webserver_vimmetric_autoscale_vnfd.tar.gz&lt;br /&gt;
 osm nsd-create webserver_vimmetric_autoscale_nsd.tar.gz&lt;br /&gt;
Launch the NS&lt;br /&gt;
 osm ns-create --ns_name web01 --nsd_name webserver_vimmetric_autoscale_ns --vim_account &amp;lt;VIM_ACCOUNT_NAME&amp;gt;|&amp;lt;VIM_ACCOUNT_ID&amp;gt;&lt;br /&gt;
 osm ns-list&lt;br /&gt;
 osm ns-show web01&lt;br /&gt;
Testing&lt;br /&gt;
# To ensure the NS is working, visit the Load balancer&#039;s IP at the public network using a browser, the page should show an OSM logo and active VDUs&lt;br /&gt;
# To check metrics at Prometheus, visit http://[OSM_IP]:9091 and look for osm_cpu_utilization and osm_average_memory_utilization (initial values could take some some minutes depending on your Telemetry system&#039;s granularity)&lt;br /&gt;
# To check metrics at Grafana, just install the OSM preconfigured version (./install_osm.sh -o pm_stack) and visit http://[OSM_IP]:3000 (admin / admin), you will find a sample dashboard (the two top charts correspond to this example)&lt;br /&gt;
# To increase CPU in this example to autoscale the web server, install Apache Bench in a client within reach (could be the OSM Host) and run it towards test.php&lt;br /&gt;
&lt;br /&gt;
 sudo apt install apache2-utils&lt;br /&gt;
 ab -n 5000000 -c 2 http://[load-balancer-ip]/test.php&lt;br /&gt;
 # This will stress CPU to 100% and trigger a scale-out operation in POL.&lt;br /&gt;
 # In this test, scaling will usually go up to 3 web servers before HAProxy spreads to load to reach a normal CPU level (w/ 60s granularity, 180s cooldown)&lt;br /&gt;
&lt;br /&gt;
Any of the VMs can be accessed through SSH to further monitor (with htop, for example), and there is an HAProxy UI at port http://[HAProxy_IP]:32700 (all credentials are osm / osm2018)&lt;br /&gt;
&lt;br /&gt;
{{Feedback}}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_Release_FIVE&amp;diff=6072</id>
		<title>OSM Release FIVE</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_Release_FIVE&amp;diff=6072"/>
		<updated>2021-02-17T16:50:39Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
[[File:7th_OSM_Hack.png|350px|right|top|link=https://osm.etsi.org/wikipub/index.php/7th_OSM_Hackfest]]  &lt;br /&gt;
&lt;br /&gt;
Open Source MANO (OSM) is an ETSI-hosted open source community delivering a production-quality MANO stack for NFV, capable of consuming openly published information models, available to everyone, suitable for all VNFs, operationally significant and VIM-independent. OSM is aligned to NFV ISG information models while providing first-hand feedback based on its implementation experience.&lt;br /&gt;
&lt;br /&gt;
Release FIVE brings a number of improvements over previous releases. For the full list of new features, please refer to the Rel FIVE White Paper or the [[OSM Release FIVE Documentation]]. For a comprehensive overview of OSM functionalities, you can also refer to the release notes of former releases ([https://osm.etsi.org/images/OSM-Whitepaper-TechContent-ReleaseONE-FINAL.pdf ONE], [https://osm.etsi.org/images/OSM-Whitepaper-TechContent-ReleaseTWO-FINAL.pdf TWO], [https://osm.etsi.org/images/OSM-Whitepaper-TechContent-ReleaseTHREE-FINAL.pdf THREE],&lt;br /&gt;
[https://osm.etsi.org/images/OSM-Whitepaper-TechContent-ReleaseFOUR-FINAL.pdf FOUR]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OSM in Practice&#039;&#039;&#039;&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=kCFxPV67Adw&lt;br /&gt;
|alignment=left&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Assumptions about interaction with VIMs and VNFs=&lt;br /&gt;
The following figure illustrates OSM interaction with VIMs and VNFs:&lt;br /&gt;
* OSM talks to the VIM for the deployment of VNFs and VLs connecting them&lt;br /&gt;
* OSM talks to the VNFs deployed in a VIM to run day-0, day-1 and day-2 configuration primitives.&lt;br /&gt;
&lt;br /&gt;
[[File:Osmtopology.png|600px|OSM Release 4]]&lt;br /&gt;
&lt;br /&gt;
In order for OSM to work, it is assumed that:&lt;br /&gt;
* Each VIM has an API endpoint reachable from OSM&lt;br /&gt;
* Each VIM has a so called management network which provides IP address to VNFs&lt;br /&gt;
* That management network is reachable from OSM&lt;br /&gt;
&lt;br /&gt;
=Install OSM Release FIVE=&lt;br /&gt;
&lt;br /&gt;
This release expands the cloud-native, &#039;&#039;dockerized&#039;&#039; OSM installation with the kafka bus for asynchronous communications, a lighter orchestrator with Network Services and Slicing capabilities, performance/fault/policy management features, a SOL005-aligned NBI, an enhanced GUI with a service composer, and OSM client leveraging the unified and improved REST API that the NBI exposes.&lt;br /&gt;
&lt;br /&gt;
== Default installation procedure ==&lt;br /&gt;
&lt;br /&gt;
All you need to run OSM Release FIVE is a single server or VM with the following requirements:&lt;br /&gt;
* MINIMUM: 2 CPUs, 4 GB RAM, 20GB disk and a single interface with Internet access&lt;br /&gt;
* RECOMMENDED: 2 CPUs, 8 GB RAM, 40GB disk and a single interface with Internet access&lt;br /&gt;
* Ubuntu16.04 (64-bit variant required) as base image (http://releases.ubuntu.com/16.04/)&lt;br /&gt;
&lt;br /&gt;
Once you have prepared the host with the previous requirements, all you need to do is:&lt;br /&gt;
 wget https://osm-download.etsi.org/ftp/osm-5.0-five/install_osm.sh&lt;br /&gt;
 chmod +x install_osm.sh&lt;br /&gt;
 ./install_osm.sh -t v5.0.5&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TIP:&#039;&#039;&#039; In order to facilitate potential trobleshooting later, it is recommended to save the full log of your installation process:&lt;br /&gt;
 wget https://osm-download.etsi.org/ftp/osm-5.0-five/install_osm.sh&lt;br /&gt;
 chmod +x install_osm.sh&lt;br /&gt;
 ./install_osm.sh -t v5.0.5 2&amp;gt;&amp;amp;1 | tee osm_install_log.txt&lt;br /&gt;
&lt;br /&gt;
You will be asked if you want to proceed with the installation and configuration of LXD, juju, docker CE and the initialization of a local docker swarm, as pre-requirements. Please answer &amp;quot;y&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Then, some dialog messages related to LXD configuration will be shown. This is what you have to answer:&lt;br /&gt;
* Do you want to configure the LXD bridge? &#039;&#039;&#039;Yes&#039;&#039;&#039;&lt;br /&gt;
* Do you want to setup an IPv4 subnet? &#039;&#039;&#039;Yes&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&amp;lt;&amp;lt; &#039;&#039;&#039;Default values&#039;&#039;&#039; apply for next questions &amp;gt;&amp;gt;&#039;&#039;&lt;br /&gt;
* Do you want to setup an IPv6 subnet? &#039;&#039;&#039;No&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you want to run docker commands, you will also need to either reload the shell or run the following command to add your user to the &#039;docker&#039; group:&lt;br /&gt;
 newgrp docker&lt;br /&gt;
&lt;br /&gt;
===Installation including optional components===&lt;br /&gt;
&lt;br /&gt;
You can include optional components in your installation by adding the following flags:&lt;br /&gt;
* &#039;&#039;&#039;VIM Emulator:&#039;&#039;&#039; --vimemu (more information [[VIM emulator|here]])&lt;br /&gt;
* &#039;&#039;&#039;Performance Management additional stack (Grafana only):&#039;&#039;&#039; --pm_stack (more information [[OSM Performance Management|here]])&lt;br /&gt;
* &#039;&#039;&#039;Fault Management features with ELK:&#039;&#039;&#039; --elk_stack (more information [[OSM Fault Management|here]])&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 ./install_osm.sh --elk_stack --pm_stack --vimemu&lt;br /&gt;
&lt;br /&gt;
===Other installation options===&lt;br /&gt;
* You can also run OSM using a pre-built [https://app.vagrantup.com/osm/boxes/releasefive vagrant] image: [[How_to_run_OSM_on_Vagrant]]&lt;br /&gt;
* For other special installation options, please refer to the [[OSM_Release_FIVE_Documentation#Alternative_installation_methods | release documentation]].&lt;br /&gt;
&lt;br /&gt;
==Checking your installation==&lt;br /&gt;
&lt;br /&gt;
After some time, you will get a fresh OSM Release FIVE installation with its latest, pre-built docker images which are built daily. You can access to the UI in the following URL (user:admin, password: admin):  http://1.2.3.4, replacing 1.2.3.4 with the IP address of your host. &lt;br /&gt;
&lt;br /&gt;
[[File:Osm_lwb_ui_login.png|600px|OSM home]]&lt;br /&gt;
&lt;br /&gt;
[[File:Osm_lwb_ui.png|600px|OSM Release FIVE installation result]]&lt;br /&gt;
&lt;br /&gt;
As a result of the installation, thirteen docker containers are created in the host (without considering optional stacks).  You can check they are running by issuing the following commands:&lt;br /&gt;
 docker stack ps osm |grep -i running&lt;br /&gt;
 docker service ls&lt;br /&gt;
&lt;br /&gt;
[[File:Osm_containers_rel5.png|600px|OSM Docker containers]]&lt;br /&gt;
&lt;br /&gt;
At any time, you can quickly relaunch your deployment by using the pre-built docker images, like this:&lt;br /&gt;
 docker stack rm osm &amp;amp;&amp;amp; sleep 60 # The sleep is for making sure the stack removal finishes before redeploying&lt;br /&gt;
 docker stack deploy -c /etc/osm/docker/docker-compose.yaml osm&lt;br /&gt;
&lt;br /&gt;
To check the logs of any container:&lt;br /&gt;
 docker service logs osm_lcm     # shows the logs of all containers (included dead containers) associated with LCM component.&lt;br /&gt;
 docker logs $(docker ps -aqf &amp;quot;name=osm_lcm&amp;quot; -n 1)  # shows the logs of the last existant LCM container&lt;br /&gt;
&lt;br /&gt;
OSM client, a python-based CLI for OSM, will be available as well in the host machine.&lt;br /&gt;
Via the OSM client, you can manage descriptors, NS and VIM complete lifecycle.&lt;br /&gt;
&lt;br /&gt;
=Adding VIM accounts=&lt;br /&gt;
Before proceeding, make sure that you have a site with a VIM configured to run with OSM. Different kinds of VIMs are currently supported by OSM:&lt;br /&gt;
*&#039;&#039;&#039;OpenVIM.&#039;&#039;&#039; Check the following link to know how to install and use openvim for OSM: [[OpenVIM installation | OpenVIM installation]]. Openvim must run in &#039;normal&#039; mode (not test or fake) to have real virtual machines reachable from OSM.&lt;br /&gt;
*&#039;&#039;&#039;OpenStack.&#039;&#039;&#039; Check the following link to learn how to configure OpenStack to be used by OSM: [[Openstack_configuration | Openstack configuration]]&lt;br /&gt;
*&#039;&#039;&#039;VMware vCloud Director.&#039;&#039;&#039; Check the following link to learn how to configure VMware VCD to be used by OSM: [[Configuring_VMware_vCloud_Director | Configuring VMware vCloud Director]]&lt;br /&gt;
*&#039;&#039;&#039;Amazon Web Services (AWS).&#039;&#039;&#039; Check the following link to learn how to configure AWS (EC2 and Virtual Private Cloud) to be used by OSM: [[Configuring_AWS | Configuring AWS for OSM]]&lt;br /&gt;
OSM can manage external SDN controllers to perform the dataplane underlay network connectivity on behalf of the VIM. See [[EPA and SDN assist]]&lt;br /&gt;
&lt;br /&gt;
==Adding VIMs through OSM client==&lt;br /&gt;
===OpenVIM site===&lt;br /&gt;
Execute the following command, using the appropriate parameters (e.g. site name: &amp;quot;openvim-site&amp;quot;, IP address: 10.10.10.10, VIM tenant: &amp;quot;osm&amp;quot;)&lt;br /&gt;
 osm vim-create --name openvim-site --auth_url http://10.10.10.10:9080/openvim --account_type openvim \&lt;br /&gt;
    --description &amp;quot;Openvim site&amp;quot; --tenant osm --user dummy --password dummy&lt;br /&gt;
&lt;br /&gt;
===Openstack site===&lt;br /&gt;
Execute the following command, using the appropriate parameters (e.g. site name: &amp;quot;openstack-site&amp;quot;, IP address: 10.10.10.11, VIM tenant: &amp;quot;admin&amp;quot;, user: &amp;quot;admin&amp;quot;, password: &amp;quot;userpwd&amp;quot;)&lt;br /&gt;
 osm vim-create --name openstack-site --user admin --password userpwd \&lt;br /&gt;
     --auth_url http://10.10.10.11:5000/v2.0 --tenant admin --account_type openstack&lt;br /&gt;
&lt;br /&gt;
For advanced options, please refer to the [[Openstack_configuration#Add_openstack_to_OSM | OpenStack Setup Guide]].&lt;br /&gt;
&lt;br /&gt;
===VMware vCloud Director site===&lt;br /&gt;
*Execute the following command, using the appropriate parameters (e.g. site name: &amp;quot;vmware-site&amp;quot;, IP address: 10.10.10.12, VIM tenant: &amp;quot;vmware-tenant&amp;quot;, user: &amp;quot;osm&amp;quot;, password: &amp;quot;osm4u&amp;quot;, admin user: &amp;quot;admin&amp;quot;, admin password: &amp;quot;adminpwd&amp;quot;, organization: &amp;quot;orgVDC&amp;quot;)&lt;br /&gt;
 osm vim-create --name vmware-site --user osm --password osm4u --auth_url https://10.10.10.12 \&lt;br /&gt;
     --tenant vmware-tenant  --account_type vmware \&lt;br /&gt;
     --config &#039;{admin_username: user, admin_password: passwd, orgname: organization, nsx_manager: &amp;quot;http://10.10.10.12&amp;quot;,&lt;br /&gt;
     nsx_user: user, nsx_password: userpwd,&amp;quot;vcenter_port&amp;quot;: port, &amp;quot;vcenter_user&amp;quot;:user, &amp;quot;vcenter_password&amp;quot;:password,&lt;br /&gt;
     &amp;quot;vcenter_ip&amp;quot;: 10.10.10.14}&#039;&lt;br /&gt;
&lt;br /&gt;
For advanced options, please refer to the [[Configuring_VMware_vCloud_Director#Add_vCloud_using_OSM_Client | vCloud Director Setup Guide]].&lt;br /&gt;
&lt;br /&gt;
===VMware Integrated Openstack (VIO) site===&lt;br /&gt;
Execute the following command, using the appropriate parameters (e.g. site name: &amp;quot;openstack-site-vio4&amp;quot;, IP address: 10.10.10.12, VIM tenant: &amp;quot;admin&amp;quot;, user: &amp;quot;admin&amp;quot;, password: &amp;quot;passwd&amp;quot;)&lt;br /&gt;
 osm vim-create --name VIO --user admin --password passwd --auth_url https://10.10.10.12:5000/v3 --tenant admin \&lt;br /&gt;
     --account_type openstack --config &#039;{use_floating_ip: True, insecure: true, vim_type: VIO, APIversion: v3.3,&lt;br /&gt;
     dataplane_physical_net: dvs-46, &amp;quot;use_internal_endpoint&amp;quot;:true,&amp;quot;dataplane_net_vlan_range&amp;quot;:[&amp;quot;31-35&amp;quot;,&amp;quot;37-39&amp;quot;]}&#039;&lt;br /&gt;
&lt;br /&gt;
With respect to Openstack, the additional configuration for VIO is the following:&lt;br /&gt;
* &#039;&#039;&#039;vim_type&#039;&#039;&#039;: Set to &amp;quot;VIO&amp;quot; to use VMware Integrated openstack as VIM &lt;br /&gt;
* &#039;&#039;&#039;use_internal_endpoint&#039;&#039;&#039;: When true it allows use of private API endpoints&lt;br /&gt;
* &#039;&#039;&#039;dataplane_physical_net&#039;&#039;&#039;: The configured network_vlan_ranges at neutron for the SRIOV (binding direct) and passthrough (binding direct-physical) networks, e.g. &#039;physnet_sriov&#039; in the above configuration. In case of VMware Integrated Openstack (VIO) provide moref ID of distributed virtual switch, e.g &#039;dvs-46&#039; in above configuration.&lt;br /&gt;
* &#039;&#039;&#039;dataplane_net_vlan_range&#039;&#039;&#039;: In case of VMware Integrated Openstack (VIO) provide vlan ranges for the SRIOV (binding direct) networks in format [&#039;start_ID - end_ID&#039;]&lt;br /&gt;
&lt;br /&gt;
For common options, you may refer to the general [[Openstack_configuration#Add_openstack_to_OSM | OpenStack Setup Guide]].&lt;br /&gt;
&lt;br /&gt;
===Amazon Web Services (AWS) site===&lt;br /&gt;
*Execute the following command, using the appropriate parameters (e.g. site name: &amp;quot;aws-site&amp;quot;, VIM tenant: &amp;quot;admin&amp;quot;, user: &amp;quot;XXX&amp;quot;, password: &amp;quot;YYY&amp;quot;)&lt;br /&gt;
 osm vim-create --name aws-site --user XXX --password YYY --auth_url https://aws.amazon.com --tenant admin \&lt;br /&gt;
     --account_type aws --config &#039;{region_name: eu-central-1, flavor_info: {t2.nano: {cpus: 1, disk: 100, ram: 512},&lt;br /&gt;
     t2.micro: {cpus: 1, disk: 100, ram: 1024}, t2.small: {cpus: 1, disk: 100, ram: 2048},&lt;br /&gt;
     m1.small: {cpus: 1, disk: 160, ram: 1741}}}&#039;&lt;br /&gt;
&lt;br /&gt;
For advanced options, please refer to the [[Configuring_AWS#Add_AWS_to_OSM | AWS Setup Guide]].&lt;br /&gt;
&lt;br /&gt;
==Adding VIMs through GUI==&lt;br /&gt;
Just access the &#039;&#039;VIM Accounts&#039;&#039; tab, click the &#039;&#039;New VIM&#039;&#039; button and fill the parameters accordingly.&lt;br /&gt;
&lt;br /&gt;
[[File:Osmvim.png|600px|AddingVIMUI]]&lt;br /&gt;
&lt;br /&gt;
=Deploying your first Network Service=&lt;br /&gt;
In this example we will deploy the following Network Service, consisting of two simple VNFs based on CirrOS connected by a simple VLD.&lt;br /&gt;
&lt;br /&gt;
[[File:cirros_2vnf_ns.png|500px|NS with 2 CirrOS VNF]]&lt;br /&gt;
&lt;br /&gt;
Before going on, download the required VNF and NS packages from this URL: https://osm-download.etsi.org/ftp/osm-3.0-three/examples/cirros_2vnf_ns/&lt;br /&gt;
&lt;br /&gt;
==Onboarding a VNF==&lt;br /&gt;
&lt;br /&gt;
The onboarding of a VNF in OSM involves adding the corresponding VNF package to the system. This process also assumes, as a pre-condition, that the corresponding VM images are available in the VIM(s) where it will be instantiated.&lt;br /&gt;
&lt;br /&gt;
===Uploading VM image(s) to the VIM(s)===&lt;br /&gt;
In this example, only a vanilla CirrOS 0.3.4 image is need. It can be obtained from the following link: http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img&lt;br /&gt;
&lt;br /&gt;
If not available, it would be required to upload the image into the VIM. Instructions differ from one VIM to another:&lt;br /&gt;
*In Openstack:&lt;br /&gt;
 openstack image create --file=&amp;quot;./cirros-0.3.4-x86_64-disk.img&amp;quot; --container-format=bare --disk-format=qcow2 cirros034&lt;br /&gt;
*In OpenVIM:&lt;br /&gt;
 #copy your image to the NFS shared folder (e.g. /mnt/openvim-nfs)&lt;br /&gt;
 cp ./cirros-0.3.4-x86_64-disk.img /mnt/openvim-nfs/&lt;br /&gt;
 openvim image-create --name cirros034 --path /mnt/openvim-nfs/cirros-0.3.4-x86_64-disk.img&lt;br /&gt;
&lt;br /&gt;
===VNF package onboarding===&lt;br /&gt;
&lt;br /&gt;
*From the UI:&lt;br /&gt;
**Go to Projects --&amp;gt; Admin --&amp;gt; VNF Packages (&#039;&#039;Open List&#039;&#039;)&lt;br /&gt;
**Click on the Onboard VNFD button&lt;br /&gt;
**Drag and drop the VNF package file cirros_vnf.tar.gz in the importing area.&lt;br /&gt;
[[File:vnfd_onboard_r4.png|600px|Onboarding a VNF]]&lt;br /&gt;
*From OSM client:&lt;br /&gt;
 osm vnfd-create cirros_vnf.tar.gz&lt;br /&gt;
 osm vnfd-list&lt;br /&gt;
&lt;br /&gt;
==Onboarding a NS==&lt;br /&gt;
*From the UI:&lt;br /&gt;
**Go to Projects --&amp;gt; Admin --&amp;gt; NS Packages (&#039;&#039;Open List&#039;&#039;)&lt;br /&gt;
**Click on the Onboard NSD button&lt;br /&gt;
**Drag and drop the NS package file cirros_2vnf_ns.tar.gz in the importing area.&lt;br /&gt;
[[File:nsd_onboard_r4.png|600px|Onboarding a NS]]&lt;br /&gt;
*From OSM client:&lt;br /&gt;
 osm nsd-create cirros_2vnf_ns.tar.gz&lt;br /&gt;
 osm nsd-list&lt;br /&gt;
&lt;br /&gt;
==Instantiating the NS==&lt;br /&gt;
*From the UI:&lt;br /&gt;
**Go to Projects --&amp;gt; Admin --&amp;gt; NS Packages (&#039;&#039;Open List&#039;&#039;)&lt;br /&gt;
**Next the NS descriptor to be instantiated, click on Launch&lt;br /&gt;
[[File:nsd_list.png|600px|Instantiating a NS (step 1)]] &lt;br /&gt;
**Fill the form, adding at least a name and selecting the VIM&lt;br /&gt;
[[File:new_ns.png|600px|Instantiating a NS (step 2)]] &lt;br /&gt;
* From OSM client:&lt;br /&gt;
 osm ns-create --nsd_name cirros_2vnf_ns --ns_name &amp;lt;ns-instance-name&amp;gt; --vim_account &amp;lt;data-center-name&amp;gt;&lt;br /&gt;
 osm ns-list&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instantiation parameters can be specified using both CLI and UI. There are some examples collected in this wiki page: [[OSM instantiation parameters]].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Using old descriptors from Release TWO==&lt;br /&gt;
&lt;br /&gt;
Beware that old Release TWO descriptors cannot be directly used by OSM Release FIVE.&lt;br /&gt;
&lt;br /&gt;
You should use this &#039;&#039;&#039;[[Creating your own VNF package#Migrating old descriptors to release FIVE|conversion tool]]&#039;&#039;&#039; to convert them to Release FIVE format and &#039;&#039;&#039;[[Creating your own VNF package|create the corresponding package]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=What&#039;s next?=&lt;br /&gt;
&lt;br /&gt;
If you want to learn more, you can refer to the rest of &#039;&#039;&#039;[[OSM_Release_FIVE_Documentation | OSM documentation]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Feedback}}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_Release_FOUR_Documentation&amp;diff=6071</id>
		<title>OSM Release FOUR Documentation</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_Release_FOUR_Documentation&amp;diff=6071"/>
		<updated>2021-02-17T16:50:05Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Release FOUR Quickstart ==&lt;br /&gt;
&lt;br /&gt;
* In order to get started quickly and get familiar with the most common operations, you can refer to the [[OSM_Release_FOUR | Release FOUR Quickstart page]].&lt;br /&gt;
&lt;br /&gt;
== VNF and NS examples ==&lt;br /&gt;
* [[Examples from OSM Hackfests]]&lt;br /&gt;
&lt;br /&gt;
== Onboarding your own VNF and NS ==&lt;br /&gt;
* [[Creating_your_own_VNF_package | Create your own VNF package]] &lt;br /&gt;
* [[Creating_your_own_VNF_charm_(Release_THREE) | Creating your own VNF charm]]&lt;br /&gt;
** Some [[Example_VNF_Charms | examples of VNF Charms]] &lt;br /&gt;
** [[VNF_Primitives | Default VNF Primitives]] &lt;br /&gt;
* [[OSM_Information_Model | OSM Information Model]]&lt;br /&gt;
* [[Reference_VNF_and_NS_Descriptors | Information to create VNF and NS Descriptors]]&lt;br /&gt;
* [[OSM_Release_FOUR#Using_old_descriptors_from_Release_TWO | How to onboard old Release TWO descriptors]]&lt;br /&gt;
&lt;br /&gt;
== Specific installation methods ==&lt;br /&gt;
* [[How_to_run_OSM_on_Vagrant | How to run OSM on Vagrant]]&lt;br /&gt;
* [[How to upgrade the OSM Platform]]&lt;br /&gt;
* [[How to install OSM client | How to install OSM client separately]]&lt;br /&gt;
* [[Advanced OSM installation procedures]]&lt;br /&gt;
* [[How to install OSM in Amazon EC2 | How to install OSM in Amazon EC2]]&lt;br /&gt;
* How to install the [[Classic OSM Build]] (OSM Release THREE 3.1)&lt;br /&gt;
* [[How_to_install_OSM_on_VirtualBox | How to install OSM on VirtualBox (Release THREE)]] (and access UI from the host without SSH tunnelling)&lt;br /&gt;
&lt;br /&gt;
== EPA and SDN Assist ==&lt;br /&gt;
* [[EPA_and_SDN_assist | How-to guide]]&lt;br /&gt;
* [[Openstack_configuration_(Release_FOUR)#Configure_Openstack_for_full_EPA_support_in_OSM | OpenStack configuration for EPA and SDN Assist]]&lt;br /&gt;
&lt;br /&gt;
== Reference material and self training ==&lt;br /&gt;
* [[OSM client]]:&lt;br /&gt;
** [[OSM_client#Installation | Installation]]&lt;br /&gt;
** [[OSM Client commands]]&lt;br /&gt;
** [[Enable autocompletion in OSM Client]]&lt;br /&gt;
* [[OSM instantiation parameters]]&lt;br /&gt;
* Using Monitoring capabilities:&lt;br /&gt;
** [[OSM_Performance_Management | Performance Management]]&lt;br /&gt;
** [[OSM_Fault_Management | OSM Fault Management]]&lt;br /&gt;
* 3rd OSM Hackfest - full training material:&lt;br /&gt;
** [[3rd_OSM_Hackfest#Agenda | Table of contents]]&lt;br /&gt;
** [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/presentations/ Documentation]&lt;br /&gt;
** [https://osm-download.etsi.org/ftp/osm-4.0-four/3rd-hackfest/packages/ NS and VNF Packages] and [https://osm-download.etsi.org/ftp/osm-3.0-three/1st-hackfest/images/ VM images]&lt;br /&gt;
* [[VIM_emulator | How to use the VIM emulator]]&lt;br /&gt;
* [[OSM_E2E_tests | Tests to validate VIM capabilities]]&lt;br /&gt;
* [[OSM_workshops_and_events | OSM Workshops videos]]&lt;br /&gt;
* [[OSM_Technical_Videos | Other technical videos and demos]]&lt;br /&gt;
* [https://osm.etsi.org/images/OSM-Whitepaper-TechContent-ReleaseFOUR-FINAL.pdf Release FOUR White Paper]&lt;br /&gt;
* [https://osm.etsi.org/images/OSM_White_Paper_Experience_implementing_NFV_specs_final.pdf OSM&#039;s End User Advisory Group White Paper]&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
* [[How to know the version of your current OSM installation]]&lt;br /&gt;
* [[Common issues and troubleshooting]]&lt;br /&gt;
* Have you detected any bug? Check [[How_to_report_issues_(Release_THREE) | this guide]] to see how to report issues.&lt;br /&gt;
&lt;br /&gt;
== How to contribute ==&lt;br /&gt;
* [https://osm.etsi.org/about/how-to-join Joining the OSM community]&lt;br /&gt;
* Developer guides:&lt;br /&gt;
** [[Workflow_with_OSM_tools | Workflow with OSM tools (git, gerrit, bugzilla, etc.) (MUST READ for developers)]]&lt;br /&gt;
** [[Developer HowTo | Developer how-to (MUST READ for developers)]]&lt;br /&gt;
** [[Developer_HowTo_for_RO_Module | Developer how-to for RO]]&lt;br /&gt;
**[[How_to_upgrade_the_OSM_Platform#Upgrading_a_specific_component_to_use_your_own_cloned_repo_.28e.g._for_developing_purposes.29 | How to work with your own cloned repo for a specific component]]&lt;br /&gt;
** [https://docs.google.com/document/d/1qL8_GRI81-2s4fFR_CnicUIhIbOeVQ-5H1TknGG-uAQ/edit MON Module Design Description (live document)]&lt;br /&gt;
* [https://opensourcemano.slack.com/ OSM Slack Workplace]&lt;br /&gt;
* Upcoming Hackfests and events:&lt;br /&gt;
** [[5th_OSM_Hackfest|5th OSM Hackfest - Barcelona]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Feedback}}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_Performance_Management&amp;diff=6064</id>
		<title>OSM Performance Management</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_Performance_Management&amp;diff=6064"/>
		<updated>2021-02-17T10:39:13Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;THIS PAGE IS DEPRECATED&#039;&#039;&#039;. OSM User Guide has been moved to a new location: &#039;&#039;&#039;https://osm.etsi.org/docs/user-guide/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
This documentation corresponds to Release SIX 6.0.0, previous documentation related to Performance Management has been deprecated.&lt;br /&gt;
&lt;br /&gt;
==Activating VNF Metrics Collection==&lt;br /&gt;
OSM MON features a &amp;quot;mon-collector&amp;quot; module which will collect metrics whenever specified at the descriptor level.&lt;br /&gt;
For metrics to be collected, they have to exist first at any of these two levels:&lt;br /&gt;
* NFVI - made available by VIM&#039;s Telemetry System&lt;br /&gt;
* VNF - made available by OSM VCA (Juju Metrics)&lt;br /&gt;
&lt;br /&gt;
Reference diagram:&lt;br /&gt;
&lt;br /&gt;
[[File:osm_pm_rel5.png|800px|OSM Performance Management Reference Diagram]]&lt;br /&gt;
&lt;br /&gt;
=== VIM Metrics ===&lt;br /&gt;
&lt;br /&gt;
For VIM metrics to be collected, your VIM should support a Telemetry system.  As of Release 5.0.5, metric collection has been tested with: &lt;br /&gt;
* OpenStack VIM with Keystone v3 authentication and legacy or Gnocchi-based telemetry services.  &lt;br /&gt;
* VMware vCloud Director with vRealizeOperations.&lt;br /&gt;
Other VIM types will soon be added during the Release FIVE cycle.&lt;br /&gt;
&lt;br /&gt;
Next step is to activate metrics collection at your VNFDs. Every metric to be collected from the VIM for each VDU has to be described both at the VDU level, and then at the VNF level.  For example:&lt;br /&gt;
&lt;br /&gt;
 vdu:&lt;br /&gt;
 id: vdu1&lt;br /&gt;
   ...  &lt;br /&gt;
   monitoring-param:&lt;br /&gt;
         - id: metric_vdu1_cpu&lt;br /&gt;
           nfvi-metric: cpu_utilization&lt;br /&gt;
         - id: metric_vdu1_memory&lt;br /&gt;
           nfvi-metric: average_memory_utilization&lt;br /&gt;
 ...&lt;br /&gt;
 monitoring-param:&lt;br /&gt;
 -   id: metric_vim_vnf1_cpu&lt;br /&gt;
     name: metric_vim_vnf1_cpu&lt;br /&gt;
     aggregation-type: AVERAGE&lt;br /&gt;
     vdu-monitoring-param:&lt;br /&gt;
       vdu-ref: vdu1&lt;br /&gt;
       vdu-monitoring-param-ref: metric_vdu1_cpu&lt;br /&gt;
 -   id: metric_vim_vnf1_memory&lt;br /&gt;
     name: metric_vim_vnf1_memory&lt;br /&gt;
     aggregation-type: AVERAGE&lt;br /&gt;
     vdu-monitoring-param:&lt;br /&gt;
       vdu-ref: vdu1&lt;br /&gt;
       vdu-monitoring-param-ref: metric_vdu1_memory&lt;br /&gt;
&lt;br /&gt;
As you can see, a list of &amp;quot;NFVI metrics&amp;quot; is defined first at the VDU level, which contains an ID and the corresponding normalized metric name (in this case, &amp;quot;cpu_utilization&amp;quot; and &amp;quot;average_memory_utilization&amp;quot;)&lt;br /&gt;
Then, at the VNF level, a list of monitoring-params is referred, with an ID, name, aggregation-type and their source (&#039;vdu-monitoring-param&#039; in this case)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Additional notes====&lt;br /&gt;
&lt;br /&gt;
* Available attributes and values can be directly explored at the [https://osm.etsi.org/wikipub/index.php/OSM_Information_Model OSM Information Model]&lt;br /&gt;
* A complete VNFD example can be downloaded from [https://osm-download.etsi.org/ftp/osm-4.0-four/4th-hackfest/packages/webserver_vimmetric_autoscale_vnfd.tar.gz here].&lt;br /&gt;
* Normalized metric names are: cpu_utilization, average_memory_utilization, disk_read_ops, disk_write_ops, disk_read_bytes, disk_write_bytes, packets_received, packets_sent, packets_out_dropped, packets_in_dropped&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====OpenStack specific notes====&lt;br /&gt;
&lt;br /&gt;
Since REL6 onwards, MON collects the last measure for the corresponding metric, so no further configuration is needed.&lt;br /&gt;
&lt;br /&gt;
====VMware vCD specific notes====&lt;br /&gt;
&lt;br /&gt;
Since REL6 onwards, MON collects all the normalized metrics, with the following exceptions:&lt;br /&gt;
&lt;br /&gt;
* packets_in_dropped is not available and will always return 0.&lt;br /&gt;
* packets_received cannot be measured.  Instead the number of bytes received for all interfaces is returned.&lt;br /&gt;
* packets_sent cannot be measured.  Instead the number of bytes sent for all interfaces is returned.&lt;br /&gt;
&lt;br /&gt;
The rolling average for vROPS metrics is always 5 minutes.  The collection interval is also 5 minutes, and can be changed, however, it will still report the rolling average for the past 5 minutes, just updated according to the collection interval.  See https://kb.vmware.com/s/article/67792 for more information.&lt;br /&gt;
&lt;br /&gt;
Although it is not receommended, if a more frequent interval is desired, the following procedure can be used to change the collection interval:&lt;br /&gt;
&lt;br /&gt;
* Log into vROPS as an admin.&lt;br /&gt;
* Navigate to Administration and expand Configuration.&lt;br /&gt;
* Select Inventory Explorer.&lt;br /&gt;
* Expand the Adapter Instances and select vCenter Server.&lt;br /&gt;
* Edit the vCenter Server instance and expand the Advanced Settings.&lt;br /&gt;
* Edit the Collection Interval (Minutes) value and set to the desired value.&lt;br /&gt;
* Click OK to save the change.&lt;br /&gt;
&lt;br /&gt;
=== VNF Metrics ===&lt;br /&gt;
&lt;br /&gt;
Metrics can also be collected directly from VNFs using VCA, through the [https://docs.jujucharms.com/2.4/en/developer-metrics Juju Metrics] framework. A simple charm containing a metrics.yaml file at its root folder specifies the metrics to be collected and the associated command.  &lt;br /&gt;
&lt;br /&gt;
For example, the following metrics.yaml file collects three metrics from the VNF, called &#039;users&#039;, &#039;load&#039; and &#039;load_pct&#039;&lt;br /&gt;
&lt;br /&gt;
 metrics:&lt;br /&gt;
    users:&lt;br /&gt;
      type: gauge&lt;br /&gt;
      description: &amp;quot;# of users&amp;quot;&lt;br /&gt;
      command: who|wc -l&lt;br /&gt;
    load:&lt;br /&gt;
      type: gauge&lt;br /&gt;
      description: &amp;quot;5 minute load average&amp;quot;&lt;br /&gt;
      command: cat /proc/loadavg |awk &#039;{print $1}&#039;&lt;br /&gt;
    load_pct:&lt;br /&gt;
      type: gauge&lt;br /&gt;
      description: &amp;quot;1 minute load average percent&amp;quot;&lt;br /&gt;
      command: cat /proc/loadavg  | awk &#039;{load_pct=$1*100.00} END {print load_pct}&#039;          &lt;br /&gt;
&lt;br /&gt;
Please note that the granularity of this metric collection method is fixed to 5 minutes and cannot be changed at this point.&lt;br /&gt;
&lt;br /&gt;
After metrics.yaml is available, there are two options for describing the metric collection in the VNFD:&lt;br /&gt;
&lt;br /&gt;
==== 1) VNF-level VNF metrics ====&lt;br /&gt;
&lt;br /&gt;
 mgmt-interface:&lt;br /&gt;
  cp: vdu_mgmt # is important to set the mgmt VDU or CP for metrics collection&lt;br /&gt;
 vnf-configuration:&lt;br /&gt;
   initial-config-primitive:&lt;br /&gt;
   ...&lt;br /&gt;
   juju:&lt;br /&gt;
     charm: testmetrics&lt;br /&gt;
   metrics:&lt;br /&gt;
     - name: load &lt;br /&gt;
     - name: load_pct&lt;br /&gt;
     - name: users  &lt;br /&gt;
 ...              &lt;br /&gt;
 monitoring-param:&lt;br /&gt;
 -   id: metric_vim_vnf1_load&lt;br /&gt;
     name: metric_vim_vnf1_load&lt;br /&gt;
     aggregation-type: AVERAGE&lt;br /&gt;
     vnf-metric:&lt;br /&gt;
       vnf-metric-name-ref: load&lt;br /&gt;
 -   id: metric_vim_vnf1_loadpct&lt;br /&gt;
     name: metric_vim_vnf1_loadpct&lt;br /&gt;
     aggregation-type: AVERAGE&lt;br /&gt;
     vnf-metric:&lt;br /&gt;
       vnf-metric-name-ref: load_pct&lt;br /&gt;
&lt;br /&gt;
Additional notes:&lt;br /&gt;
* Available attributes and values can be directly explored at the [https://osm.etsi.org/wikipub/index.php/OSM_Information_Model OSM Information Model]&lt;br /&gt;
* A complete VNFD example with VNF metrics collection (VNF-level) can be downloaded from [https://osm-download.etsi.org/ftp/osm-4.0-four/4th-hackfest/packages/ubuntuvm_vnfmetric_autoscale_vnfd.tar.gz here].&lt;br /&gt;
&lt;br /&gt;
==== 2) VDU-level VNF metrics ====&lt;br /&gt;
&lt;br /&gt;
 vdu:&lt;br /&gt;
 - id: vdu1&lt;br /&gt;
   ...&lt;br /&gt;
   interface:&lt;br /&gt;
   - ...&lt;br /&gt;
     mgmt-interface: true ! is important to set the mgmt interface for metrics collection&lt;br /&gt;
     ...&lt;br /&gt;
   vdu-configuration:&lt;br /&gt;
     initial-config-primitive:&lt;br /&gt;
     ...&lt;br /&gt;
     juju:&lt;br /&gt;
       charm: testmetrics&lt;br /&gt;
     metrics:&lt;br /&gt;
       - name: load &lt;br /&gt;
       - name: load_pct&lt;br /&gt;
       - name: users  &lt;br /&gt;
 ...              &lt;br /&gt;
 monitoring-param:&lt;br /&gt;
 -   id: metric_vim_vnf1_load&lt;br /&gt;
     name: metric_vim_vnf1_load&lt;br /&gt;
     aggregation-type: AVERAGE&lt;br /&gt;
     vdu-metric:&lt;br /&gt;
       vdu-ref: vdu1&lt;br /&gt;
       vdu-metric-name-ref: load&lt;br /&gt;
 -   id: metric_vim_vnf1_loadpct&lt;br /&gt;
     name: metric_vim_vnf1_loadpct&lt;br /&gt;
     aggregation-type: AVERAGE&lt;br /&gt;
     vdu-metric:&lt;br /&gt;
       vdu-ref: vdu1&lt;br /&gt;
       vdu-metric-name-ref: load_pct&lt;br /&gt;
&lt;br /&gt;
Additional notes:&lt;br /&gt;
* Available attributes and values can be directly explored at the [https://osm.etsi.org/wikipub/index.php/OSM_Information_Model OSM Information Model]&lt;br /&gt;
* A complete VNFD example with VNF metrics collection (VDU-level) can be downloaded from [https://osm-download.etsi.org/ftp/osm-4.0-four/4th-hackfest/packages/ubuntuvm_vnfvdumetric_autoscale_vnfd.tar.gz here]. &lt;br /&gt;
&lt;br /&gt;
As in VIM metrics, a list of &amp;quot;metrics&amp;quot; is defined first either at the VNF or VDU &amp;quot;configuration&amp;quot; level, which contain a name that comes from the metrics.yaml file. Then, at the VNF level, a list of monitoring-params is referred, with an ID, name, aggregation-type and their source, which can be a &amp;quot;vdu-metric&amp;quot; or a &amp;quot;vnf-metric&amp;quot; in this case.&lt;br /&gt;
&lt;br /&gt;
==Retrieving metrics from Prometheus TSDB==&lt;br /&gt;
&lt;br /&gt;
Once the metrics are being collected, they are stored in the Prometheus Time-Series DB &#039;&#039;&#039;with an &#039;osm_&#039; prefix&#039;&#039;&#039;, and there are a number of ways in which you can retrieve them.&lt;br /&gt;
&lt;br /&gt;
=== 1) Visualizing metrics in Prometheus UI ===&lt;br /&gt;
&lt;br /&gt;
Prometheus TSDB includes its own UI, which you can visit at http://[OSM_IP]:9091&lt;br /&gt;
&lt;br /&gt;
From there, you can:&lt;br /&gt;
* Type any metric name (i.e. osm_cpu_utilization) in the &#039;expression&#039; field and see its current value or a histogram.&lt;br /&gt;
* Visit the Status --&amp;gt; Target menu, to monitor the connection status between Prometheus and MON (through &#039;mon-exporter&#039;)&lt;br /&gt;
&lt;br /&gt;
[[File:osm_prometheus_rel5.png|800px|Screenshot of OSM Prometheus UI]]&lt;br /&gt;
&lt;br /&gt;
=== 2) Integrating Prometheus with Grafana ===&lt;br /&gt;
&lt;br /&gt;
There is a well-known integration between these two components that allows Grafana to easily show interactive graphs for any metric.  You can use any existing Grafana installation or the one that comes in OSM as the experimental &amp;quot;pm_stack&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
To install the &#039;pm_stack&#039; (which today includes only Grafana), in an existing OSM installation, run the installer in the following way:&lt;br /&gt;
 ./install_osm.sh -o pm_stack&lt;br /&gt;
Otherwise, if you are installing from scratch, you can simply run the installer with the pm_stack option.&lt;br /&gt;
 ./install.sh --pm_stack&lt;br /&gt;
&lt;br /&gt;
Once installed, access Grafana with its default credentials (admin / admin) at http://[OSM_IP_address]:3000 and by clicking the &#039;Manage&#039; option at the &#039;Dashboards&#039; menu (to the left), you will find a sample dashboard containing two graphs for VIM metrics, and two graphs for VNF metrics.  You can easily change them or add more, as desired.&lt;br /&gt;
&lt;br /&gt;
[[File:osm_grafana_rel5.png|800px|Screenshot of OSM Grafana UI]]&lt;br /&gt;
&lt;br /&gt;
=== 3) Interacting with Prometheus directly through its API ===&lt;br /&gt;
&lt;br /&gt;
Even though many analytics applications, like Grafana, include their own integration for Prometheus, some other applications do not include it out of the box or there is a need to build a custom integration.  &lt;br /&gt;
&lt;br /&gt;
In such cases, the [https://prometheus.io/docs/prometheus/latest/querying/api/ Prometheus HTTP API] can be used to gather any metrics.  A couple of examples are shown below:&lt;br /&gt;
&lt;br /&gt;
Example with Date range query&lt;br /&gt;
 curl &#039;http://localhost:9091/api/v1/query_range?query=osm_cpu_utilization&amp;amp;start=2018-12-03T14:10:00.000Z&amp;amp;end=2018-12-03T14:20:00.000Z&amp;amp;step=15s&#039;&lt;br /&gt;
&lt;br /&gt;
Example with Instant query&lt;br /&gt;
 curl &#039;http://localhost:9091/api/v1/query?query=osm_cpu_utilization&amp;amp;time=2018-12-03T14:14:00.000Z&#039;&lt;br /&gt;
&lt;br /&gt;
Further examples and API calls can be found at the [https://prometheus.io/docs/prometheus/latest/querying/api/ Prometheus HTTP API documentation].&lt;br /&gt;
&lt;br /&gt;
=== 4) Interacting directly with MON Collector ===&lt;br /&gt;
&lt;br /&gt;
The way Prometheus TSDB stores metrics is by querying Prometheus &#039;exporters&#039; periodically, which are set as &#039;targets&#039;.  Exporters expose current metrics in a specific format that Prometheus can understand, more information can be found [https://prometheus.io/docs/instrumenting/exporters/ here]&lt;br /&gt;
&lt;br /&gt;
OSM MON features a &amp;quot;mon-exporter&amp;quot; module that exports &#039;&#039;&#039;current metrics&#039;&#039;&#039; through port 8000.  Please note that this port is by default not being exposed outside the OSM docker&#039;s network.&lt;br /&gt;
&lt;br /&gt;
A tool that understands Prometheus &#039;exporters&#039; (for example, Elastic Metricbeat) can be plugged-in to integrate directly with &amp;quot;mon-exporter&amp;quot;.  To get an idea on how metrics look alike in this particular format, you could:&lt;br /&gt;
&lt;br /&gt;
1. Get into MON console&lt;br /&gt;
 docker exec -ti osm_mon.1.[id] bash&lt;br /&gt;
2. Install curl&lt;br /&gt;
 apt -y install curl&lt;br /&gt;
3. Use curl to get the current metrics list&lt;br /&gt;
 curl localhost:8000&lt;br /&gt;
&lt;br /&gt;
Please note that as long as the Prometheus container is up, it will continue retrieving and storing metrics in addition to any other tool/DB you connect to &amp;quot;mon-exporter&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== 5) Using your own TSDB ===&lt;br /&gt;
&lt;br /&gt;
OSM MON integrates Prometheus through a plugin/backend model, so if desired, other backends can be developed.  If interested in contributing with such option, you can ask for details at our Slack #mon channel or through the OSM Tech mailing list.&lt;br /&gt;
&lt;br /&gt;
==Default Infrastructure Status Collection==&lt;br /&gt;
OSM MON collects, automatically, &amp;quot;status metrics&amp;quot; for:&lt;br /&gt;
* VIMs - each VIM that OSM establishes contact with, the metric will be reflected with the name &#039;osm_vim_status&#039; in the TSDB.&lt;br /&gt;
* VMs - VMs for each VDU that OSM has instantiated, the metric will be reflected with the name &#039;osm_vm_status&#039; in the TSDB.&lt;br /&gt;
&lt;br /&gt;
Metrics will be &amp;quot;1&amp;quot; or &amp;quot;0&amp;quot; depending on the element availability.&lt;br /&gt;
&lt;br /&gt;
{{Feedback}}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=File:Madrid3.jpg&amp;diff=5192</id>
		<title>File:Madrid3.jpg</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=File:Madrid3.jpg&amp;diff=5192"/>
		<updated>2020-01-09T11:07:17Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM-MR8_Hackfest&amp;diff=5191</id>
		<title>OSM-MR8 Hackfest</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM-MR8_Hackfest&amp;diff=5191"/>
		<updated>2020-01-09T11:06:06Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:madrid3.jpg|750px|center|top]]&lt;br /&gt;
= Overview = &lt;br /&gt;
[[File:OSM-MR8_Hack.png|350px|right|top|link=https://portal.etsi.org/Meetings.aspx#/meeting?MtgId=37071]]  &lt;br /&gt;
&lt;br /&gt;
ETSI&#039;s Centre for Testing and Interoperability and the OSM community are organizing the 9th OSM Hackfest on 9-13 March 2020.  &lt;br /&gt;
&lt;br /&gt;
The event will be hosted by &#039;&#039;&#039;[https://www.telefonica.com/en/home Telefonica]&#039;&#039;&#039; in Madrid, Spain, co-located with the &#039;&#039;&#039;[https://portal.etsi.org/Meetings.aspx#/meeting?MtgId=37070 OSM-MR#8]&#039;&#039;&#039; meeting, offering a great opportunity to share and learn with OSM developers and module leaders, and explore opportunities for synergies and collaboration.&lt;br /&gt;
&lt;br /&gt;
Participation to OSM Hackfests is free and open to all upon &#039;&#039;&#039;[https://portal.etsi.org/Meetings.aspx#/meeting?MtgId=37071 Registration]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Venue ==&lt;br /&gt;
Distrito Telefónica - &lt;br /&gt;
&lt;br /&gt;
Edificio Central “A” - Auditorium &amp;quot;Sala de los Ciria&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ronda de la Comunicación, s/n&lt;br /&gt;
&lt;br /&gt;
28050 Madrid&lt;br /&gt;
&lt;br /&gt;
SPAIN&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;[https://osm.etsi.org/wikipub/images/a/a1/Meeting_Invitation_OSM_Mid-Release_8_Madrid.docx Download OSM-MR#8 invitation, hotel recommendations and Visa Invitation Letter]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:OSM_community_lucca.jpg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
= Scope =&lt;br /&gt;
This OSM Hackfest will allow new users to get familiar with &#039;&#039;&#039;OSM Release SEVEN&#039;&#039;&#039; and exercise all the new functionalities, from basic operations (installation, setup, common operations, etc.) to most advanced capabilities, such as 5G network slicing, orchestration of containerized network functions and hybrid network services, with a big focus on VNF on-boarding activities covering Day 0/1/2 operations.&lt;br /&gt;
&lt;br /&gt;
In addition, experienced users and developers will have the opportunity to hack into OSM, build complex examples, fine-tune, test and demonstrate experimental features on the OSM Remote Labs network.&lt;br /&gt;
&lt;br /&gt;
= Objectives =&lt;br /&gt;
OSM Hackfest participants will learn to :&lt;br /&gt;
* Install OSM and run some examples&lt;br /&gt;
* Get familiar with OSM&#039;s GUI and CLI&lt;br /&gt;
* Create basic VNF and NS Descriptors and build own packages&lt;br /&gt;
* Model and deploy Advanced Network Services with:&lt;br /&gt;
** Multi-VDU VNFs &lt;br /&gt;
** EPA capabilities&lt;br /&gt;
** Physical and Hybrid Network Functions&lt;br /&gt;
** Containerized Network Functions&lt;br /&gt;
* Model dynamic Life Cycle Management operations with Day-1 and Day-2 actions&lt;br /&gt;
* Configure Fault and Performance Management and close-loop operations&lt;br /&gt;
** Collecting, visualizing and reacting to metrics and events&lt;br /&gt;
* Model and Deploy 5G Network Slices &lt;br /&gt;
* Configure and Deploy Service Function Chaining&lt;br /&gt;
* Contribute, modify and experiment with OSM source code&lt;br /&gt;
** Perform basic troubleshooting&lt;br /&gt;
* Understand OSM CI/CD and Robot Framework&lt;br /&gt;
** Build complex examples and run own experimental testing&lt;br /&gt;
&lt;br /&gt;
= Who should attend =&lt;br /&gt;
* VNF vendors, who want to onboard their VNF in OSM following best practices&lt;br /&gt;
* System Integrators, who want to get started with OSM&lt;br /&gt;
* Service providers, who want to get first hand operational experience with OSM&lt;br /&gt;
* Academia and Universities, who are using or considering OSM as platform for their research activities in networking&lt;br /&gt;
* Experimented developers and users that want to share and test with the community&lt;br /&gt;
&lt;br /&gt;
[[File:OSM_hack_lucca2.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
* Seats are limited, [https://portal.etsi.org/Meetings.aspx#/meeting?MtgId=36290 registration] is mandatory&lt;br /&gt;
* Participants are expected to have user-level knowledge of Linux and be familiar with NFV and SDN concepts&lt;br /&gt;
* Laptop &lt;br /&gt;
* A remote environment will be made available for participants, if you prefer to install in your own laptop, please follow [https://osm.etsi.org/wikipub/index.php/OSM_Release_SIX#Default_installation_procedure the default installation procedure]. Main requirements: &lt;br /&gt;
** MINIMUM: 2 CPUs, 4 GB RAM, 20GB disk and a single interface with Internet access&lt;br /&gt;
** RECOMMENDED: 2 CPUs, 8 GB RAM, 40GB disk and a single interface with Internet access&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
= Agenda =&lt;br /&gt;
* &#039;&#039;Tentative: Please note the sessions&#039; times and contents may be subject to change&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;googlespreadsheet style=&amp;quot;width:850px; height:400px&amp;quot;&amp;gt;1oo4mlOkz4e3J3zw68FPhqVQTlD-EZ5mHVfreeNrNASY&amp;lt;/googlespreadsheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OSM Hackfest Sessions ==&lt;br /&gt;
* &#039;&#039;&#039;[http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%205GCity%20-%20Welcome.pdf Opening, Welcome &amp;amp; Logistics for the week]&#039;&#039;&#039; (ETSI, 5Gcity)&lt;br /&gt;
* &#039;&#039;&#039;[http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Session%200%20-%20Introduction%20to%20NFV%20and%20OSM.pdf Session 0: Introduction to NFV and OSM]&#039;&#039;&#039;  (Jose Miguel Guzman - Whitestack)&lt;br /&gt;
* &#039;&#039;&#039;[http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Demo%200%20-%20OSM%20in%20action.pdf Demo 0: OSM in Action]&#039;&#039;&#039; (Piotr Zuraniewski - TNO)&lt;br /&gt;
* &#039;&#039;&#039;[http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Session%201%20-%20Installation%20and%20first%20use.pdf Session 1: OSM Installation and first use (Release SIX)]&#039;&#039;&#039; Adrian Candel, Guillermo Calvino - Altran)&lt;br /&gt;
* &#039;&#039;&#039;Session 2: Basic Descriptors&#039;&#039;&#039;&lt;br /&gt;
** [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Session%202.1%20-%20Creating%20a%20basic%20VNF%20and%20NS.pdf Session 2.1 VNFDs and NSDs] (Abubakr Magzoub - Uni Lancaster)&lt;br /&gt;
** [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Session%202.2%20-%20Guidelines%20for%20VNF%20builders.pdf Session 2.2 Instructions to VNF Providers] (Adrian Candel, Guillermo Calvino - Altran)&lt;br /&gt;
* &#039;&#039;&#039;[http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Session%203%20-%20Modeling%20multi-VDU%20VNF.pdf Session 3: Modeling multi-VDU VNFs]&#039;&#039;&#039; (Adrian Candel, Guillermo Calvino - Altran)&lt;br /&gt;
* &#039;&#039;&#039;Session 4: Advanced Descriptors&#039;&#039;&#039;&lt;br /&gt;
** [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Session%204.1%20-%20Modeling%20EPA%20capabilities%20in%20VNF.pdf Session 4.1: Modeling EPA capabilities in VNF] (Tomas Villaseca - Whitestack)&lt;br /&gt;
** [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Session%204.2%20-%20Modeling%20EPA%20capabilities_%20SR-IOV.pdf Session 4.2: Modeling EPA capabilities: SR-IOV] (Gianpietro Lavado - Whitestack)&lt;br /&gt;
** [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Session%204.3%20-%20Physical%20Network%20Functions.pdf Session 4.3: Modeling Physical and Hybrid Network Functions]  (Tomas Villaseca - Whitestack)&lt;br /&gt;
* &#039;&#039;&#039;[http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Session%205%20-%20Adding%20day-0%20configuration%20to%20VNFs.pdf Session 5: Adding Day-0 configuration to your VNF]&#039;&#039;&#039; (Adrian Candel, Guillermo Calvino - Altran)&lt;br /&gt;
* &#039;&#039;&#039;[http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Session%206%20-%205G%20Network%20Slicing%20with%20OSM.pdf Session 6: 5G Network Slicing with OSM]&#039;&#039;&#039; (Felipe Vicens - Atos)&lt;br /&gt;
* &#039;&#039;&#039;Session 7: Adding day-1/day-2 configuration to your VNF&#039;&#039;&#039;&lt;br /&gt;
** [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Session%207.1%20-%20Introduction%20to%20Proxy%20Charms.pdf Session 7.1: Proxy Charms and Primitives] (Gianpietro Lavado - Whitestack)&lt;br /&gt;
** [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Session%207.2%20-%20Building%20a%20Proxy%20Charm.pdf Session 7.2: Building a Proxy Charm] (Mark Beierl - VMware)&lt;br /&gt;
** [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Session%207.3%20-%20New%20Native%20Charms.pdf Session 7.3: Native Charms] (Dominik Fleischmann, David Garcia - Canonical)&lt;br /&gt;
* &#039;&#039;&#039;[http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Session%208%20-%20OSM%20Service%20Assurance.pptx.pdf Session 8: Fault &amp;amp; Performance Management with OSM]&#039;&#039;&#039; (Gianpietro Lavado - Whitestack)&lt;br /&gt;
* &#039;&#039;&#039;Session 9: VNF On-boarding&#039;&#039;&#039;&lt;br /&gt;
** [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Session%209.1%20-%20VNF%20Onboarding%20Walkthrough.pdf Session 9.1: VNF On-boarding Walkthrough] (Gianpietro Lavado - Whitestack)&lt;br /&gt;
** Session 9.2: VNF On-boarding to VCD (Mark Beierl - VMware)&lt;br /&gt;
* &#039;&#039;&#039;[http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/8th%20OSM%20Hackfest%20-%20Session%2010%20-%20Service%20Function%20Chaining.pdf Session 10: Service Function Chaining]&#039;&#039;&#039; (Davide Borsatti - Uni Bologna)&lt;br /&gt;
* &#039;&#039;&#039;Session 11: CI/CD overview &amp;amp; Robot Framework&#039;&#039;&#039; (Javier Garcia Lloreda - TechMahindra)&lt;br /&gt;
* &#039;&#039;&#039;Session 12: How to Contribute to OSM&#039;&#039;&#039; (Javier Garcia Lloreda - TechMahindra)&lt;br /&gt;
&lt;br /&gt;
== 5G Day: &amp;quot;From Data-centers to the Edge with OSM&amp;quot; ==&lt;br /&gt;
As in previous editions, Wednesday afternoon will be dedicated to 5G experiences, pilots and research projects, this time focusing on Edge deployments. The agenda is as follows:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Keynote 5G day: [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/5Gday/OSM-5GDay_keynote.pdf An operator&#039;s view on the importance of OSM to realize the 5G vision.]&#039;&#039;&#039; (Pål Gronsund - Telenor): &#039;&#039;The presentation will highlight a set of 5G use cases implemented and problems to be solved with OSM as the orchestrator for end-to-end orchestration and automation.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G Day Session 1: [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/5Gday/Unified_5G_Edge_Operations.pdf Unified 5G Edge Operations Platform]&#039;&#039;&#039; (Joe Issaac - Wipro): &#039;&#039;Wipro&#039;s Universal Edge Networks Platform is delivered from our state-of-the-art Digital Operations Center. This is built on a set of best-of-breed products, tightly pre-integrated, with predefined rules and intelligence for a wide range of devices. With a high level of automation and cognitive capability, templatized processes, ready for roll-out, highly self-service-driven, data export facilities to clouds &amp;amp; advanced visualizations, the plaform is scalable to millions of nodes with ability to external integration to data lifecycle tools through a self service interface. This solution is ready to deploy edge-based on Wipro Blueprint available. It can host multiple vertical use cases that will be adopted to leverage 5G edges Use Smart-iConnect, Fan engagement, AirEnF, Analytics, etc.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G Day Session 2: [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/5Gday/5GaaS_presentation_for_OSM_v3a.pdf 5G as a Service (5GaaS) – easy access for 3rd parties to 5G technology]&#039;&#039;&#039; (Piotr Zuraniewski - TNO): &#039;&#039;Presentation of initial ideas about TNO 5G-as-a-Service (5GaaS) PoC platform. The aim of the platform is to provide engineers from the field of Information Technology (IT) with access to specific features of 5G cellular network technology, without requiring them to have an expert level understanding of the mobile technology involved. At the same time, the PoC platform also adds value to experts in 5G in terms of support for carrying out research on 5G services and technology.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G Day Session 3: [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/5Gday/5GEVE_OMS_hackfest_CNIT%20v2.pdf Orchestration of 5GCity edge computing with OSM: pilot trials and lessons learnt]&#039;&#039;&#039; (Shuaib Siddiqui - i2CAT): &#039;&#039;The 5GCity project is developing a distributed cloud and radio platform for municipalities and infrastructure owners acting as 5G Neutral Hosts. We orchestrate  a completely decentralised 3-tier architecture where compute, storage and networking are allocated between core and edge segments of the 5G network infrastructure. Our unified orchestration platform includes ETSI OSM at its core  to deliver 5G Network Services in sliced city infrastructures in Barcelona (ES), Bristol (UK) and Lucca (IT). We primarily run trials of Media Verticals use cases to assess how a Neutral Host operator can offer mobile connectivity solutions on demand. Through our platform and with ETSI OSM Release 6 we implement dedicated network slices for different media services in areas with a high concentration of users. The network edge is very critical for our project in terms of design and orchestration of multiple tiers. We have developed a multi-tier orchestrator to control OSM and fog05 MEAO, in addition to using fog05 as VIM in OSM. In this talk we will present experiences with OSM from or pilot trials and we will share some lessons learnt.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G Day Session 4: [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/5Gday/OSM_5G_Session_netOps.ai.pdf NetworkDevOps (netOps.ai 2.0) with Continuous Orchestration]&#039;&#039;&#039; (Manish Singh - Tech Mahindra): &#039;&#039;A complete automated Telco grade PAAS solution for 4G/5G functions with continuous release management, functional &amp;amp; performance validation, monitoring &amp;amp; continuous orchestration using OSM.  The entire scope of the PAAS solution is targeted to run multi-VNF LCM functionalities &amp;amp; provisioning 4G/5G network services orchestrated using OSM followed by certification procedures. Smooth rollout of the Production Sites &amp;amp; multi-vendor VNF deployments with any underneath Infra &amp;amp; Edge components. Providing CSP a clear idea about their 4G/5G Telco Cloud solution performance &amp;amp; OPEx. Using netops.ai CSP can evaluate any combination of multi-vendor composition &amp;amp; choose the best blended Telco cloud Infra &amp;amp; VNF to create the required network service.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G Day Session 5: [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/5Gday/OSM%20Hackfest8_Matilda_Project.pdf 5G-ready applications in Matilda - Demo]&#039;&#039;&#039; (Roberto Bruschi, Chiara Lombardo - CNIT): &#039;&#039;Part of the scope of the Matilda project is to design and develop a radically new prototypic framework of the Telecom Layer Platform able to support functional and performance requirements, as well as the effective lifecycle management of 5G-ready Vertical Applications. For that, we built a highly modular architecture aimed to dynamically control, abstract, and suitably expose the 5G network infrastructure resources and services to vertical applications in terms of network and computing slices, taking advantage of in OSM for managing the lifecycle and configuration of the network functions.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G Day Session 6: [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/5Gday/OSM_5G_DAY-NXW-5G-MEDIA-UHD_over_vCDN-v03.pdf Cognitive-driven Orchestration and Optimization of Cloud to Edge virtualized Content Delivery Networks]&#039;&#039;&#039; (Francesca Moscatelli - Nextworks): &#039;&#039;The “Ultra High Definition over virtualized Content Delivery Network” Pilot developed in the context of the EU funded 5G-MEDIA project (H2020 5GPPP phase 2 Innovation Action) shows how Media Service Providers can build flexible, adaptable and distributed core-to-edge vCDN services. Relying on the capabilities offered by the 5G-MEDIA Service Virtualization Platform, built around ETSI OSM, the adaptation and optimization of the service is performed at the edge of the network upon monitored application metrics and detected anomalies in traffic flows; the service chain is then re-adapted and re-configured automatically and dynamically for offering to the end-user a better QoE.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G Day Session 7: [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/5Gday/5GEVE_OMS_hackfest_CNIT%20v2.pdf Multi-site orchestration of end-to-end 5G networks: the 5G EVE approach for the inter-working of multiple 5G experiment facilities.]&#039;&#039;&#039; (Francesco Lombardo, Matteo Pergolesi - CNIT): &#039;&#039;The goal of 5G EVE is to provide a 5G platform for extensive trials of network services hosted on various European trial sites (Greece, Spain, France, and Italy). The interconnection and inter-operation between remote sites in different network domains is a big challenge. We introduce the concept of the Inter-Working Layer (IWL), a middle-ware to provide a common catalog of Network Service Descriptors, a common Life-Cycle Manager, and a Multi-Site top-level Orchestrator able to deploy and manage network services hosted on a single site or split on multiple sites. The OSM orchestrator is used in the trial sites of Turin (Italy) and Madrid (Spain). The usage of the platform is made user-friendly by the definition of high-level, intent-based blueprints to describe vertical services.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G Day Wrap-up: Mini-panel to resume, compare and sum up the findings from the previous presentations&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Hackfest Material ==&lt;br /&gt;
* [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/presentations/ Presentations]&lt;br /&gt;
* [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/packages/ Packages]&lt;br /&gt;
* [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/images/ Images]&lt;br /&gt;
* [http://osm-download.etsi.org/ftp/osm-6.0-six/8th-hackfest/other/ Other]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
= Remote Labs = &lt;br /&gt;
During OSM Hackfests participants build and try real examples of OSM interaction with different VIMs and NFV Infrastructures that are kindly made available by our community members through the OSM Remote Labs network. &lt;br /&gt;
[[File:OSM_RemoteLabs.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
= Previous Hackfests =&lt;br /&gt;
* [[8th OSM Hackfest | 8th OSM Hackfest - Lucca (Italy)]]&lt;br /&gt;
* [[7th OSM Hackfest | 7th OSM Hackfest - Patras (Greece)]]&lt;br /&gt;
* [[6th OSM Hackfest | 6th OSM Hackfest - Santa Clara (CA, USA)]]&lt;br /&gt;
* [[5th OSM Hackfest | 5th OSM Hackfest - Barcelona (Spain)]]&lt;br /&gt;
* [[4th OSM Hackfest | 4th OSM Hackfest - Palo Alto (CA, USA)]]&lt;br /&gt;
* [[3rd OSM Hackfest | 3rd OSM Hackfest - Oslo (Norway)]]&lt;br /&gt;
* [[2nd OSM Hackfest | 2nd OSM Hackfest - Madrid (Spain)]]&lt;br /&gt;
* [[1st OSM Hackfest | 1st OSM Hackfest - Sophia Antipolis (France)]]&lt;br /&gt;
&lt;br /&gt;
= Get involved in OpenSourceMANO =&lt;br /&gt;
* Join the [https://join.slack.com/t/opensourcemano/shared_invite/enQtMzQ3MzYzNTQ0NDIyLWVkNTE4ZjZjNWI0ZTQyN2VhOTI1MjViMzU1NWYwMWM3ODI4NTQyY2VlODA2ZjczMWIyYTFkZWNiZmFkM2M2ZDk OSM Community Slack Workspace]&lt;br /&gt;
* If your organisation is already an [https://portal.etsi.org/TBSiteMap/OSM/ListofOSMMembers.aspx OSM member], you can also:&lt;br /&gt;
**	[https://webapp.etsi.org/createaccount/ Request an EOL account] (if you don’t have one yet)&lt;br /&gt;
**	Subscribe [https://list.etsi.org/scripts/wa.exe?SUBED1=OSG_OSM&amp;amp;A=1 OSM general] and [https://list.etsi.org/scripts/wa.exe?SUBED1=OSM_TECH&amp;amp;A=1 OSM TECH] mailing lists&lt;br /&gt;
*	If your organisation is not yet an OSM member:&lt;br /&gt;
**	Learn [https://osm.etsi.org/about/how-to-join how to join], it is free and open to all&lt;br /&gt;
* Join the [https://osm.etsi.org/wikipub/index.php/OSM_Ecosystem OSM Ecosystem]&lt;br /&gt;
&lt;br /&gt;
= Contact =&lt;br /&gt;
Please send your technical questions to [mailto:OSM_TECH@list.etsi.org OSM_TECH@list.etsi.org] or join the [https://join.slack.com/t/opensourcemano/shared_invite/enQtMzQ3MzYzNTQ0NDIyLWVkNTE4ZjZjNWI0ZTQyN2VhOTI1MjViMzU1NWYwMWM3ODI4NTQyY2VlODA2ZjczMWIyYTFkZWNiZmFkM2M2ZDk OSM Community Slack Workspace]&lt;br /&gt;
&lt;br /&gt;
Questions about ETSI, joining OSM, this hackfest and future events can be sent to: [mailto:OSMSupport@etsi.org OSMSupport@etsi.org]&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=New_Index&amp;diff=5148</id>
		<title>New Index</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=New_Index&amp;diff=5148"/>
		<updated>2019-12-12T07:56:44Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|[[File:books.jpg|100px|left|top|link=https://osm.etsi.org/docs/osm-user-guide]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt;Check out the &#039;&#039;&#039;[https://osm.etsi.org/docs/user-guide/ OSM User Documentation]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are new to OSM, you might want to start by the &#039;&#039;&#039;[https://osm.etsi.org/docs/user-guide/01-quickstart.html Quick Start Guide]&#039;&#039;&#039; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:engine.jpg|100px|left|top|link=https://osm.etsi.org/docs/vnf-onboarding-guidelines]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt; Discover the &#039;&#039;&#039;[https://osm.etsi.org/docs/vnf-onboarding-guidelines VNF On-boarding Guidelines]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:code.png|100px|left|top|link=https://osm.etsi.org/docs/osm-developer-guide]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt; Access the &#039;&#039;&#039;[https://osm.etsi.org/docs/developer-guide Documentation for Developers]&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Upcoming_Hack.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_Hackfests]]   &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Register to an upcoming &#039;&#039;&#039;[[OSM Hackfests|OSM Hackfest]]&#039;&#039;&#039;. It is free and open to all. &amp;lt;/big&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Lego.jpg|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_PoCs]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Check out the &#039;&#039;&#039;[[OSM PoCs]]&#039;&#039;&#039;, or &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/OSM_PoC_Framework submit a PoC Proposal]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Ecosystem.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_Ecosystem]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
|&amp;lt;big&amp;gt; Discover the &#039;&#039;&#039;[[OSM Ecosystem]]&#039;&#039;&#039; and get your organisation listed! &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Outreach.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/Release_notes_and_whitepapers]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Check out the &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/Release_notes_and_whitepapers OSM Release Notes, White Papers]&#039;&#039;&#039;, &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/OSM_workshops_and_events Workshops, Events]&#039;&#039;&#039; and &#039;&#039;&#039;[http://www.youtube.com/c/OpenSourceMANO YouTube Channel]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:open-bw.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/Engage]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
|&amp;lt;big&amp;gt; &#039;&#039;&#039;[[Engage]]&#039;&#039;&#039; with the OSM Community. We are &#039;&#039;&#039;OPEN&#039;&#039;&#039;! &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=New_Index&amp;diff=5147</id>
		<title>New Index</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=New_Index&amp;diff=5147"/>
		<updated>2019-12-12T07:48:43Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|[[File:books.jpg|100px|left|top|link=https://osm.etsi.org/docs/osm-user-guide]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt;Check out the &#039;&#039;&#039;[https://osm.etsi.org/docs/user-guide/ OSM User Documentation]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are new to OSM, you might want to start by the &#039;&#039;&#039;[https://osm.etsi.org/docs/user-guide/01-quickstart.html Quick Start Guide]&#039;&#039;&#039; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:engine.jpg|100px|left|top|link=https://osm.etsi.org/docs/vnf-onboarding-guidelines]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt; Discover the &#039;&#039;&#039;[https://osm.etsi.org/docs/vnf-onboarding-guidelines VNF On-boarding Guidelines]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:code.png|100px|left|top|link=https://osm.etsi.org/docs/osm-developer-guide]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt; Access the &#039;&#039;&#039;[https://osm.etsi.org/docs/developer-guide Developer Documentation]&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Upcoming_Hack.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_Hackfests]]   &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Register to an upcoming &#039;&#039;&#039;[[OSM Hackfests|OSM Hackfest]]&#039;&#039;&#039;. It is free and open to all. &amp;lt;/big&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Lego.jpg|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_PoCs]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Check out the &#039;&#039;&#039;[[OSM PoCs]]&#039;&#039;&#039;, or &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/OSM_PoC_Framework submit a PoC Proposal]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Ecosystem.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_Ecosystem]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
|&amp;lt;big&amp;gt; Discover the &#039;&#039;&#039;[[OSM Ecosystem]]&#039;&#039;&#039; and get your organisation listed! &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Outreach.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/Release_notes_and_whitepapers]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Check out the &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/Release_notes_and_whitepapers OSM Release Notes, White Papers]&#039;&#039;&#039;, &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/OSM_workshops_and_events Workshops, Events]&#039;&#039;&#039; and &#039;&#039;&#039;[http://www.youtube.com/c/OpenSourceMANO YouTube Channel]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:open-bw.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/Engage]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
|&amp;lt;big&amp;gt; &#039;&#039;&#039;[[Engage]]&#039;&#039;&#039; with the OSM Community. We are &#039;&#039;&#039;OPEN&#039;&#039;&#039;! &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=New_Index&amp;diff=5146</id>
		<title>New Index</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=New_Index&amp;diff=5146"/>
		<updated>2019-12-12T07:46:19Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|[[File:books.jpg|100px|left|top|link=https://osm.etsi.org/docs/osm-user-guide]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt;Check out the &#039;&#039;&#039;[https://osm.etsi.org/docs/user-guide/ OSM User Documentation]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are a newbie you might want to start by the &#039;&#039;&#039;[https://osm.etsi.org/docs/user-guide/01-quickstart.html Quick Start Guide]&#039;&#039;&#039; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:engine.jpg|100px|left|top|link=https://osm.etsi.org/docs/vnf-onboarding-guidelines]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt; Discover the &#039;&#039;&#039;[https://osm.etsi.org/docs/vnf-onboarding-guidelines VNF On-boarding Guidelines]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:code.png|100px|left|top|link=https://osm.etsi.org/docs/osm-developer-guide]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt; Access the &#039;&#039;&#039;[https://osm.etsi.org/docs/developer-guide Developer Documentation]&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Upcoming_Hack.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_Hackfests]]   &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Register to an upcoming &#039;&#039;&#039;[[OSM Hackfests|OSM Hackfest]]&#039;&#039;&#039;. It is free and open to all. &amp;lt;/big&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Lego.jpg|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_PoCs]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Check out the &#039;&#039;&#039;[[OSM PoCs]]&#039;&#039;&#039;, or &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/OSM_PoC_Framework submit a PoC Proposal]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Ecosystem.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_Ecosystem]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
|&amp;lt;big&amp;gt; Discover the &#039;&#039;&#039;[[OSM Ecosystem]]&#039;&#039;&#039; and get your organisation listed! &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Outreach.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/Release_notes_and_whitepapers]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Check out the &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/Release_notes_and_whitepapers OSM Release Notes, White Papers]&#039;&#039;&#039;, &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/OSM_workshops_and_events Workshops, Events]&#039;&#039;&#039; and &#039;&#039;&#039;[http://www.youtube.com/c/OpenSourceMANO YouTube Channel]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:open-bw.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/Engage]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
|&amp;lt;big&amp;gt; &#039;&#039;&#039;[[Engage]]&#039;&#039;&#039; with the OSM Community. We are &#039;&#039;&#039;OPEN&#039;&#039;&#039;! &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=New_Index&amp;diff=5145</id>
		<title>New Index</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=New_Index&amp;diff=5145"/>
		<updated>2019-12-12T07:45:00Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|[[File:books.jpg|100px|left|top|link=https://osm.etsi.org/docs/osm-user-guide]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt;Check out the &#039;&#039;&#039;[https://osm.etsi.org/docs/user-guide/ OSM User Documentation]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are a newbie you might want to start by the &#039;&#039;&#039;[https://osm.etsi.org/docs/user-guide/01-quickstart.html Quick Start Guide]&#039;&#039;&#039; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:engine.jpg|100px|left|top|link=https://osm.etsi.org/docs/vnf-onboarding-guidelines]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt; Discover the &#039;&#039;&#039;[https://osm.etsi.org/docs/vnf-onboarding-guidelines VNF On-boarding Guidelines]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:code.png|100px|left|top|link=https://osm.etsi.org/docs/osm-developer-guide]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt; Access the &#039;&#039;&#039;[https://osm.etsi.org/docs/developer-guide OSM Developer Documentation]&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Upcoming_Hack.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_Hackfests]]   &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Register to an upcoming &#039;&#039;&#039;[[OSM Hackfests|OSM Hackfest]]&#039;&#039;&#039;. It is free and open to all. &amp;lt;/big&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Lego.jpg|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_PoCs]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Check out the &#039;&#039;&#039;[[OSM PoCs]]&#039;&#039;&#039;, or &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/OSM_PoC_Framework submit a PoC Proposal]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Ecosystem.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_Ecosystem]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
|&amp;lt;big&amp;gt; Discover the &#039;&#039;&#039;[[OSM Ecosystem]]&#039;&#039;&#039; and get your organisation listed! &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Outreach.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/Release_notes_and_whitepapers]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Check out the &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/Release_notes_and_whitepapers OSM Release Notes, White Papers]&#039;&#039;&#039;, &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/OSM_workshops_and_events Workshops, Events]&#039;&#039;&#039; and &#039;&#039;&#039;[http://www.youtube.com/c/OpenSourceMANO YouTube Channel]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:open-bw.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/Engage]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
|&amp;lt;big&amp;gt; &#039;&#039;&#039;[[Engage]]&#039;&#039;&#039; with the OSM Community. We are &#039;&#039;&#039;OPEN&#039;&#039;&#039;! &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=New_Index&amp;diff=5144</id>
		<title>New Index</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=New_Index&amp;diff=5144"/>
		<updated>2019-12-12T01:13:14Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|[[File:books.jpg|100px|left|top|link=https://osm.etsi.org/docs/osm-user-guide]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt;Check out the &#039;&#039;&#039;[https://osm.etsi.org/docs/user-guide/ OSM User Documentation]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are a newbie you might want to start by the &#039;&#039;&#039;[https://osm.etsi.org/docs/user-guide/01-quickstart.html Quick Start Guide]&#039;&#039;&#039; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:engine.jpg|100px|left|top|link=https://osm.etsi.org/docs/vnf-onboarding-guidelines]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt; Discover the &#039;&#039;&#039;[https://osm.etsi.org/docs/vnf-onboarding-guidelines VNF On-boarding Guidelines]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:code.png|100px|left|top|link=https://osm.etsi.org/docs/osm-developer-guide]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt; Access the &#039;&#039;&#039;[https://osm.etsi.org/docs/osm-developer-guide OSM Developer Documentation]&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Upcoming_Hack.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_Hackfests]]   &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Register to an upcoming &#039;&#039;&#039;[[OSM Hackfests|OSM Hackfest]]&#039;&#039;&#039;. It is free and open to all. &amp;lt;/big&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Lego.jpg|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_PoCs]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Check out the &#039;&#039;&#039;[[OSM PoCs]]&#039;&#039;&#039;, or &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/OSM_PoC_Framework submit a PoC Proposal]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Ecosystem.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_Ecosystem]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
|&amp;lt;big&amp;gt; Discover the &#039;&#039;&#039;[[OSM Ecosystem]]&#039;&#039;&#039; and get your organisation listed! &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Outreach.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/Release_notes_and_whitepapers]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Check out the &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/Release_notes_and_whitepapers OSM Release Notes, White Papers]&#039;&#039;&#039;, &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/OSM_workshops_and_events Workshops, Events]&#039;&#039;&#039; and &#039;&#039;&#039;[http://www.youtube.com/c/OpenSourceMANO YouTube Channel]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:open-bw.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/Engage]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
|&amp;lt;big&amp;gt; &#039;&#039;&#039;[[Engage]]&#039;&#039;&#039; with the OSM Community. We are &#039;&#039;&#039;OPEN&#039;&#039;&#039;! &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=New_Index&amp;diff=5143</id>
		<title>New Index</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=New_Index&amp;diff=5143"/>
		<updated>2019-12-12T01:11:31Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|[[File:books.jpg|100px|left|top|link=https://osm.etsi.org/docs/osm-user-guide]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt;Check out the &#039;&#039;&#039;[https://osm.etsi.org/docs/osm-user-guide OSM User Documentation]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are a newbie you might want to start by the &#039;&#039;&#039;[https://osm.etsi.org/docs/user-guide/01-quickstart.html Quick Start Guide]&#039;&#039;&#039; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:engine.jpg|100px|left|top|link=https://osm.etsi.org/docs/vnf-onboarding-guidelines]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt; Discover the &#039;&#039;&#039;[https://osm.etsi.org/docs/vnf-onboarding-guidelines VNF On-boarding Guidelines]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:code.png|100px|left|top|link=https://osm.etsi.org/docs/osm-developer-guide]]  &lt;br /&gt;
||[[File:Space.png|20px]]       &lt;br /&gt;
| &amp;lt;big&amp;gt; Access the &#039;&#039;&#039;[https://osm.etsi.org/docs/osm-developer-guide OSM Developer Documentation]&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Upcoming_Hack.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_Hackfests]]   &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Register to an upcoming &#039;&#039;&#039;[[OSM Hackfests|OSM Hackfest]]&#039;&#039;&#039;. It is free and open to all. &amp;lt;/big&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Lego.jpg|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_PoCs]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Check out the &#039;&#039;&#039;[[OSM PoCs]]&#039;&#039;&#039;, or &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/OSM_PoC_Framework submit a PoC Proposal]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Ecosystem.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/OSM_Ecosystem]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
|&amp;lt;big&amp;gt; Discover the &#039;&#039;&#039;[[OSM Ecosystem]]&#039;&#039;&#039; and get your organisation listed! &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Outreach.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/Release_notes_and_whitepapers]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
| &amp;lt;big&amp;gt; Check out the &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/Release_notes_and_whitepapers OSM Release Notes, White Papers]&#039;&#039;&#039;, &#039;&#039;&#039;[https://osm.etsi.org/wikipub/index.php/OSM_workshops_and_events Workshops, Events]&#039;&#039;&#039; and &#039;&#039;&#039;[http://www.youtube.com/c/OpenSourceMANO YouTube Channel]&#039;&#039;&#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:open-bw.png|100px|left|top|link=https://osm.etsi.org/wikipub/index.php/Engage]]  &lt;br /&gt;
||[[File:Space.png|20px]]        &lt;br /&gt;
|&amp;lt;big&amp;gt; &#039;&#039;&#039;[[Engage]]&#039;&#039;&#039; with the OSM Community. We are &#039;&#039;&#039;OPEN&#039;&#039;&#039;! &amp;lt;/big&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_Release_SIX_Documentation&amp;diff=4776</id>
		<title>OSM Release SIX Documentation</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_Release_SIX_Documentation&amp;diff=4776"/>
		<updated>2019-09-18T11:08:20Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:7th_OSM_Hack.png|320px|right|top|link=https://osm.etsi.org/wikipub/index.php/7th_OSM_Hackfest]]  &lt;br /&gt;
&lt;br /&gt;
== Release SIX Quickstart ==&lt;br /&gt;
* In order to get started quickly and get familiar with the most common operations, you can refer to the [[OSM_Release_SIX | Release SIX Quickstart page]].&lt;br /&gt;
&lt;br /&gt;
== VNF and NS examples ==&lt;br /&gt;
* [[Examples from OSM Hackfests]]&lt;br /&gt;
&lt;br /&gt;
== Onboarding your own VNF and NS ==&lt;br /&gt;
* &#039;&#039;&#039;[http://osm-download.etsi.org/ftp/Documentation/vnf-onboarding-guidelines VNF Onboarding Guidelines]&#039;&#039;&#039;&lt;br /&gt;
* [[Creating_your_own_VNF_package | Create your own VNF package]] &lt;br /&gt;
* [[Creating_your_own_VNF_charm_(Release_THREE) | Creating your own VNF charm]]&lt;br /&gt;
** Some [[Example_VNF_Charms | examples of VNF Charms]] &lt;br /&gt;
** [[VNF_Primitives | Default VNF Primitives]] &lt;br /&gt;
* [[OSM_Information_Model | OSM Information Model]]&lt;br /&gt;
* [[Reference_VNF_and_NS_Descriptors | Information to create VNF and NS Descriptors]]&lt;br /&gt;
* [[OSM_Release_FOUR#Using_old_descriptors_from_Release_TWO | How to onboard old Release TWO descriptors]]&lt;br /&gt;
&lt;br /&gt;
== Specific installation methods ==&lt;br /&gt;
* [[How_to_run_OSM_on_Vagrant | How to run OSM on Vagrant]]&lt;br /&gt;
* [[How to upgrade the OSM Platform]]&lt;br /&gt;
* [[OSM_client#Installation | How to install OSM client separately]]&lt;br /&gt;
* [[Advanced OSM installation procedures]]&lt;br /&gt;
* [[How to install OSM in Amazon EC2 | How to install OSM in Amazon EC2]]&lt;br /&gt;
&lt;br /&gt;
== EPA and SDN Assist ==&lt;br /&gt;
* [[EPA_and_SDN_assist | How-to guide]]&lt;br /&gt;
* [[Openstack_configuration_(Release_FOUR)#Configure_Openstack_for_full_EPA_support_in_OSM | OpenStack configuration for EPA and SDN Assist]]&lt;br /&gt;
&lt;br /&gt;
== Reference material and self training ==&lt;br /&gt;
* [[OSM client]]:&lt;br /&gt;
** [[OSM_client#Installation | Installation]]&lt;br /&gt;
** [[OSM_client#Usage_(client_commands) | OSM client commands]]&lt;br /&gt;
** [[OSM_client#Enable_autocompletion | Enable autocompletion in OSM Client]]&lt;br /&gt;
* [[OSM instantiation parameters]]&lt;br /&gt;
* Using Monitoring and Autoscaling capabilities:&lt;br /&gt;
** [[OSM_Performance_Management | OSM Performance Management]]&lt;br /&gt;
** [[OSM_Fault_Management | OSM Fault Management]]&lt;br /&gt;
** [[OSM_Autoscaling | OSM Autoscaling]]&lt;br /&gt;
* 6th OSM Hackfest - full training material:&lt;br /&gt;
** [[5th_OSM_Hackfest#Agenda | Table of contents]]&lt;br /&gt;
** [https://osm-download.etsi.org/ftp/osm-5.0-five/6th-hackfest/presentations/ Documentation]&lt;br /&gt;
** [https://osm-download.etsi.org/ftp/osm-5.0-five/6th-hackfest/packages/ NS and VNF Packages] and [https://osm-download.etsi.org/ftp/osm-3.0-three/1st-hackfest/images/ VM images]&lt;br /&gt;
* [[NBI_API_Description| Description of the OSM North Bound Interface REST API]]&lt;br /&gt;
* [[VIM_emulator | How to use the VIM emulator]]&lt;br /&gt;
* [[OSM_E2E_tests | Tests to validate VIM capabilities]]&lt;br /&gt;
* [[OSM_workshops_and_events | OSM Workshops videos]]&lt;br /&gt;
* [[OSM_Technical_Videos | Other technical videos and demos]]&lt;br /&gt;
* [[OSM URN Namespace]]&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
* [[How to know the version of your current OSM installation]]&lt;br /&gt;
* [[Common issues and troubleshooting]]&lt;br /&gt;
* Have you detected any bug? Check [[How_to_report_issues_(Release_THREE) | this guide]] to see how to report issues.&lt;br /&gt;
&lt;br /&gt;
== OSM Scope, Features and Integration Guidelines ==&lt;br /&gt;
&lt;br /&gt;
* [[OSM Scope, Functionality, Operation and Integration Guidelines]]&lt;br /&gt;
* [[Release notes and whitepapers]]&lt;br /&gt;
&lt;br /&gt;
== How to contribute ==&lt;br /&gt;
* [https://osm.etsi.org/about/how-to-join Joining the OSM community]&lt;br /&gt;
* Developer guides:&lt;br /&gt;
** [[Workflow_with_OSM_tools | Workflow with OSM tools (git, gerrit, bugzilla, etc.) (MUST READ for developers)]]&lt;br /&gt;
** [[Developer HowTo | Developer how-to (MUST READ for developers)]]&lt;br /&gt;
** [[Developer_HowTo_for_RO_Module | Developer how-to for RO]]&lt;br /&gt;
**[[How_to_upgrade_the_OSM_Platform#Upgrading_a_specific_component_to_use_your_own_cloned_repo_.28e.g._for_developing_purposes.29 | How to work with your own cloned repo for a specific component]]&lt;br /&gt;
* [https://opensourcemano.slack.com/ OSM Slack Workplace]&lt;br /&gt;
* Upcoming Hackfests and events:&lt;br /&gt;
** [[OSM workshops and events]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Feedback}}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_Scope,_Functionality,_Operation_and_Integration_Guidelines&amp;diff=4430</id>
		<title>OSM Scope, Functionality, Operation and Integration Guidelines</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_Scope,_Functionality,_Operation_and_Integration_Guidelines&amp;diff=4430"/>
		<updated>2019-04-06T21:44:30Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;background:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;&#039;&#039;A more up-to-date version can be found in the [http://osm-download.etsi.org/ftp/Documentation/201902-osm-scope-white-paper EUAG White Paper discussion this topic]&#039;&#039;&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following guide provides a thorough review os OSM&#039;s scope and its functionality, its regular operation, and the guidelines for integration with other platforms.&lt;br /&gt;
&lt;br /&gt;
==== CHAPTERS ====&lt;br /&gt;
&lt;br /&gt;
# [[Service Platform view and Layered Service Architectures]]&lt;br /&gt;
# [[OSM Scope and Functionality]]&lt;br /&gt;
# [[Platform Operation view: management of OSM as Manager Platform]]&lt;br /&gt;
# [[OSM Integration Guidelines]]&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_Scope,_Functionality,_Operation_and_Integration_Guidelines&amp;diff=4429</id>
		<title>OSM Scope, Functionality, Operation and Integration Guidelines</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_Scope,_Functionality,_Operation_and_Integration_Guidelines&amp;diff=4429"/>
		<updated>2019-04-06T21:43:58Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;background:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;&#039;&#039;A more up-to-date version can be found in the [http://osm-download.etsi.org/ftp/Documentation/201902-osm-scope-white-paper EUAG White Paper on this topic]&#039;&#039;&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following guide provides a thorough review os OSM&#039;s scope and its functionality, its regular operation, and the guidelines for integration with other platforms.&lt;br /&gt;
&lt;br /&gt;
==== CHAPTERS ====&lt;br /&gt;
&lt;br /&gt;
# [[Service Platform view and Layered Service Architectures]]&lt;br /&gt;
# [[OSM Scope and Functionality]]&lt;br /&gt;
# [[Platform Operation view: management of OSM as Manager Platform]]&lt;br /&gt;
# [[OSM Integration Guidelines]]&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=File:Alfonso_at_ZTA_2019.jpg&amp;diff=4427</id>
		<title>File:Alfonso at ZTA 2019.jpg</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=File:Alfonso_at_ZTA_2019.jpg&amp;diff=4427"/>
		<updated>2019-03-29T10:21:44Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
	<entry>
		<id>https://osm.etsi.org/wikipub/index.php?title=OSM_workshops_and_events&amp;diff=4426</id>
		<title>OSM workshops and events</title>
		<link rel="alternate" type="text/html" href="https://osm.etsi.org/wikipub/index.php?title=OSM_workshops_and_events&amp;diff=4426"/>
		<updated>2019-03-29T10:21:21Z</updated>

		<summary type="html">&lt;p&gt;Ramonsalguer: /* OSM Release FIVE Demos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:6hackdate.png|350px|right|top|link=https://osm.etsi.org/wikipub/index.php/6th_OSM_Hackfest]]  &lt;br /&gt;
&lt;br /&gt;
The OSM community regularly gets together to educate, exchange information and to engage with a broad range of people interested in MANO.&lt;br /&gt;
&lt;br /&gt;
Agendas, registration links, presentations and videos from these sessions can be found on this page.&lt;br /&gt;
&lt;br /&gt;
== 6th OSM Hackfest @OSM#7, Santa Clara (May 13-17, 2019) ==&lt;br /&gt;
Register at [[6th OSM Hackfest]] &lt;br /&gt;
&lt;br /&gt;
== OSM Workshop @ Zero Touch Automation Congress 2019, Madrid (March 26, 2019) ==&lt;br /&gt;
&lt;br /&gt;
=== (Re-)introduction to OSM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Francisco-Javier Ramón Salguero (Chair ETSI Open Source MANO | Telefónica)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:FJ.jpg|600px|top]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[ [[media:Introduction_to_OSM_ZTA_2019-FJ.pdf|Download Presentation]] ]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== TSC Perspective. OSM Architecture Overview - Release FIVE and beyond===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Vanessa Little (TSC Chair, ETSI Open Source MANO | VMware)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Vanessa.jpg|600px|top]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[ [[media:TSC_Perspective_ZTA_2019-Vanessa.pdf|Download Presentation]] ]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===VNF Onboarding Task Force===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Gianpietro Lavado (VNFONB TF Chair, ETSI Open Source MANO | Whitestack)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gianpietro.jpg|600px|top]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[ [[media:VNF_Onboarding_ZTA_2019-Gianpietro.pdf|Download Presentation]] ]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== OSM in practice===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Gerardo Garcia de Blas (TSC, ETSI Open Source MANO | Telefonica)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gerardo.jpg|600px|top]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[ [[media:OSM_in_practice_ZTA_2019-Gerardo.pdf|Download Presentation]] ]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== OSM Release FIVE Demos ===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Alfonso Tierno (RO MDL, ETSI Open Source MANO | Telefonica)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Alfonso at ZTA 2019.jpg|600px|top]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Gianpietro Lavado (VNFONB TF Chair, ETSI Open Source MANO | Whitestack)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Alfonso &amp;amp; Gianpietro.jpg|600px|top]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[ [[media:OSM_Demos_ZTA_2019-Alfonso&amp;amp;Gianpietro.pdf|Download Presentation]] ]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== OSM Demos @MWC19 Barcelona (25-18 February, 2019) ==&lt;br /&gt;
See [[OSM@MWC19]]&lt;br /&gt;
&lt;br /&gt;
== 5th OSM Hackfest @OSM-MR#6, Barcelona (Feb 4-8, 2019) ==&lt;br /&gt;
See [[5th OSM Hackfest]]&lt;br /&gt;
&lt;br /&gt;
== 4th OSM Hackfest @OSM#6, Palo Alto (Oct 29 - Nov 2, 2018) ==&lt;br /&gt;
See [[4th OSM Hackfest]]&lt;br /&gt;
&lt;br /&gt;
== OSM Workshop @ SDN &amp;amp; NFV World Congress 2018, The Hague (October 10, 2018) ==&lt;br /&gt;
&lt;br /&gt;
=== (Re-)introduction to OSM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Francisco-Javier Ramón Salguero (Chair ETSI Open Source MANO | Telefónica)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=51EKdEnbvHc&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[ [[media:Introduction_to_OSM_SDN_NFV_WC_2018-FJ.pdf|Download Presentation]] ]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== TSC Perspective. OSM Architecture Overview &amp;amp; Look Ahead to Rel FIVE ===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Vanessa Little (TSC Chair, ETSI Open Source MANO | VMware)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=pGGgy7SYi2E&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[ [[media:TSC_Perspective_SDN_NFV_WC_2018-Vanessa.pdf|Download Presentation]] ]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== OSM in practice===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Gerardo Garcia de Blas (TSC, ETSI Open Source MANO | Telefonica)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Gianpietro Lavado (MON MDL, ETSI Open Source MANO | Whitestack)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=kCFxPV67Adw&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[ [[media:OSM_in_practice_SDN_NFV_WC_2018-Gerardo&amp;amp;Gianpietro.pdf|Download Presentation]] ]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 3rd OSM Hackfest @OSM-MR#5, Oslo (June 25-29, 2018) ==&lt;br /&gt;
See [[3rd OSM Hackfest]]&lt;br /&gt;
&lt;br /&gt;
== OSM @ OpenStack Summit, Vancouver (May 22, 2018) ==&lt;br /&gt;
&lt;br /&gt;
=== Building end-to-end NFV with OpenStack and OpensSourceMANO ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Gianpietro Lavado (MON MDL, ETSI Open Source MANO | Whitestack)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=njTm7T-VNcw&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[ [https://www.openstack.org/assets/presentation-media/Achieving-end-to-end-NFV-with-OpenStack-and-Open-Source-MANO.pdf Download Presentation] ]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== OSM Workshop @ NFV &amp;amp; Zero-Touch World Congress 2018, San Jose (April 25, 2018) ==&lt;br /&gt;
&lt;br /&gt;
===Welcome===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Luis Jorge Romero | Director General | ETSI&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=1tvgpOdX_wg&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== (Re-)introduction to OSM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Francisco-Javier Ramón Salguero (Chair ETSI Open Source MANO | Telefónica)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=7c5vwa4YYPQ&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== TSC Perspective. OSM Architecture and Data Model Overview ===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Vanessa Little (TSC, ETSI Open Source MANO | VMware)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=hAdWEoF6H8Y&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== OSM End User Advisory Group (Operators) Perspective ===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Don Clarke (OSM EUAG | CableLabs)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=3X7AidkliLg&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== OSM PoC Framework and Demos===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Vanesa Little (TSC, ETSI Open Source MANO | VMware)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=Egp71oSU35M&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== OSM Release FOUR Ligthweight Build and Demo ===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Gianpietro Lavado (MON MDL, ETSI Open Source MANO | Whitestack)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=KgsaA-HCX40&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== AWS in OSM and  Public/Private Cloud Use Cases===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Shoma Chakravarty (ETSI Open Source MANO | Amazon Web Services)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=-WgBa_i8ZQY&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Closing Remarks ===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Francisco-Javier Ramón Salguero (Chair ETSI Open Source MANO | Telefónica)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=lQ5bVfifDFc&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== OSM Tutorial @OSM#5 Louisville (April 9, 2018) ==&lt;br /&gt;
See [[OSM Tutorial]]&lt;br /&gt;
&lt;br /&gt;
== 2nd OSM Hackfest @ Zero-Touch and Carrier Automation Congress, Madrid (March 21-23, 2018) ==&lt;br /&gt;
See [[2nd OSM Hackfest]]&lt;br /&gt;
&lt;br /&gt;
== OSM Workshop @ Zero-Touch and Carrier Automation Congress, Madrid (March 20, 2018) ==&lt;br /&gt;
&lt;br /&gt;
=== (Re-)introduction to OSM ===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Francisco-Javier Ramón Salguero (Chair ETSI Open Source MANO | Telefónica)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This session provides an overview of the OSM community foundation, project, structure. The technical scope and ambition for the project will be described and an overview of the accomplishments that have been delivered with the third OSM release will be provided. &lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=bG2wawrOqj0&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[ [[media:Introduction_to_OSM___Zero_Touch_Carrier_Automation_Congress - FJ.pdf|Download Presentation]] ]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== OSM End User Advisory Group (Operators) Perspective ===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Serge Manning (OSM EUAG | Sprint)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This session provides a telecom operator perspective on OSM – including a view on the significance of open source and the orchestration space in the industry in general, and the OSM community in particular. The importance of the accomplishments in the latest OSM release, the role OSM can play in standards development and what success over the next six months will look like.&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=g-sc7PYkXRw&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[ [[media:OSM_EUAG_Perspective_for_ZT_Workshop - Serge.pdf|Download Presentation]] ]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== TSC Perspective. OSM Architecture and Data Model Overview ===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Vanessa Little (TSC, ETSI Open Source MANO | VMware)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This session provides an overview of the OSM architecture, the functional split in the modules, the mapping between OSM and the ETSI NFV MANO logical view. It also provides an overview of the OSM data models for the VNF Descriptor (VNFD) and the Network Service Descriptors (NSD) and how some of the salient attributes are handled in OSM.&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=kyrjNrdmo_c&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[ [[media:OSM_Architecture_and_Data_Models - Vanessa.pdf|Download Presentation]] ]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Using OSM: VNF/NS On-boarding and instantiation ===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Gerardo Garcia de Blas  (TSC, ETSI Open Source MANO | Telefonica)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This session will focus on demonstrating the OSM User Interface, including VNF package creation, on-boarding capabilities and the new functionality enabled in OSM Release THREE.&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=Vu2HYN1PVJw&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== OSM CI/CD and Remote Labs network ===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Silvia Almagia  (ETSI Open Source MANO | ETSI)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This session will provide an overview of the OSM CI/CD pipeline, and how OSM is leveraging the Hub for Interoperability and Validation at ETSI (HIVE) to build a network of Remote Labs allowing for a DevOps approach that combines system and automated interoperability testing with 3rd party NFV solutions.&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=dQZeNbHWalM&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[ [[media:OSM CI-CD and Remote Labs network - Silvia.pdf|Download Presentation]] ]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Day-0, day-1 and day-2 configuration in OSM ===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Gerardo Garcia de Blas  (TSC, ETSI Open Source MANO | Telefonica)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This session will provide an overview of the different enablers in OSM to automate VNF configuration at the different operation stages.&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=vteNtXmszFw&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[ [[media:day-1_and_day-2_configuration_in_OSM___Zero_Touch_Car - Gerardo.pdf|Download Presentation]] ]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== OSM PoC Framework and POC with OSM with VMware Integrated Openstack in MEC architectures===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Vanesa Little (TSC, ETSI Open Source MANO | VMware)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This session will provide an overview of the OSM POC framework, and how to create an official OSM POC that will be endorsed by the community.&lt;br /&gt;
&lt;br /&gt;
The latest OSM POC, OSM Release 3 with VMware Integrated Openstack with MEC architectures. This POC will showcase leveraging OSM as an orchestrator to deploy and maintain edge services in several different use cases that make use of the same hardware footprint, as well as discuss the overall infrastructure topology. These use cases include video transcode at the network Edge with ffmpeg, using Fortinet as an sGW in vRAN edge scenarios, SD-WAN with Vyatta vRouter and operational intelligence for distributed architectures.&lt;br /&gt;
&lt;br /&gt;
{{#evu:&lt;br /&gt;
https://www.youtube.com/watch?v=WUxP5_Sr23I&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[ [[media:POC_Framework_and_Demo - Vanessa.pdf|Download Presentation]] ]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OSM Demos 1) EPA capabilities; 2) Day-0, day-1 and day-2 configuration  ===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Gerardo Garcia de Blas  (TSC, ETSI Open Source MANO | Telefonica)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This session will illustrate two of the most interesting features of OSM: firstly, the support of data-plane VNFs requesting EPA capabilities, and secondly the built-in automation of VNF configuration.&lt;br /&gt;
&lt;br /&gt;
{{#evu:&lt;br /&gt;
https://www.youtube.com/watch?v=06NQqouRjV8&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Closing Remarks ===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Francisco-Javier Ramón Salguero (Chair ETSI Open Source MANO | Telefónica)&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#evu:https://www.youtube.com/watch?v=jc1pxEzEH6w&lt;br /&gt;
|alignment=inline&lt;br /&gt;
|dimensions=&amp;quot;120&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== OSM Tutorial @OSM-MR#4 Rome (Feb 5, 2018) ==&lt;br /&gt;
See [[OSM Tutorial]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 1st OSM Hackfest @ 2nd ETSI NFV Plugtests, Sophia Antipolis (January 15-19, 2018) ==&lt;br /&gt;
See [[1st OSM Hackfest]]&lt;br /&gt;
&lt;br /&gt;
== OSM Workshop @ SDN &amp;amp; NFV World Congress 2017, The Hague (October, 2017) ==&lt;br /&gt;
&lt;br /&gt;
See [[OSM Workshop @SDN NVF World Congress 2017, The Hague]]&lt;br /&gt;
&lt;br /&gt;
== OSM Workshop @ NFV World Congress 2017, San Jose (May 2, 2017) ==&lt;br /&gt;
See [[OSM Workshop @NFV World Congress 2017, San Jose]]&lt;br /&gt;
&lt;br /&gt;
== MPLS+SDN+NFV World (March 2017) ==&lt;br /&gt;
&lt;br /&gt;
See [[OSM@MPLS + SDN + NFV World, Paris (March 2017)]]&lt;br /&gt;
&lt;br /&gt;
== SDN World Congress (October 2016) ==&lt;br /&gt;
&lt;br /&gt;
See [[OSM Workshop @SDN World Congress 2016, The Hague]]&lt;br /&gt;
&lt;br /&gt;
== NFV World Congress (April 2016) ==&lt;br /&gt;
&lt;br /&gt;
See [http://play.webvideocore.net/popplayer.php?it=8epou4jdvs4k NFV World Congress 2016 (San José, April 2016) - Keynote]&lt;br /&gt;
&lt;br /&gt;
== Layer 123 Webinar (March 2016) ==&lt;br /&gt;
&lt;br /&gt;
See [https://www.brighttalk.com/webcast/6985/198141?utm_campaign=LinkedIn&amp;amp;utm_content=&amp;amp;utm_source=brighttalk-sharing&amp;amp;utm_medium=web&amp;amp;utm_term Layer 123 Webinar (March 2016): Introducing OSM – Open Source MANO for NFV]&lt;br /&gt;
&lt;br /&gt;
== ONS (March 2016) ==&lt;br /&gt;
&lt;br /&gt;
See [[OSM@ONS16]]&lt;br /&gt;
&lt;br /&gt;
== MWC 16 (February 2016) ==&lt;br /&gt;
See [[OSM@MWC16]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Feedback}}&lt;/div&gt;</summary>
		<author><name>Ramonsalguer</name></author>
	</entry>
</feed>