- if possible use vector<unique_ptr<Attribute>> as argument for Template::remove for automatic cleanup
- if possible use 'VectorAttributeinstead ofAttributeforTemplate::remove- theremovemethod has dynamic cast to correct type and deletes attributes, which can't be casted. So no need to add loop with casting after theremove` method
- At few places added checks for empty vector to avoid very rare crashes on malformed Templates
This commit adds support for sharing IPs among several VMs. When a AR is
marked as shared several VMs can request the same IP address either
through a NIC or NIC_ALIAS.
- Shared AR's cannot assign IP address automatically, an specific IP
needs to be requested.
- Shared AR's have some restrictions:
- Shared AR cannot use external IPAM
- Shared AR can only be of type IP4 or IP6_STATIC
- Shared AR cannot update IPAM or SHARED attribute
- Shared AR cannot make reservations
- Shared AR cannot hold by mac
- NICs / NIC_ALIAS using Shared IP will include SHARED=YES
co-authored-by: Jorge Miguel Lobo Escalona <jlobo@opennebula.io>
co-authored-by: MarioRobres <mrobres@opennebula.io>
This commits introduces a new framework for OpenNebula, it is based on
standard the OpenNebula middleware access driver (mad) model. Benefits
compared to the current implementation:
* Less overhead on API server and streamlined communications
* Ease integration with third party schedulers
* New "optimize" action to balance the workload of a cluster
* Embedded Plan Manager to apply optimization and deployment plans with
custom parameters for the scheduling window
* Custom optimization policies per cluster
This commits introduces 2 schedulers:
* Rank scheduler based on the match-making algorithm present in 6.x
series
* OpenNebula DRS an optimization algorithm based on an ILP solver for
placement and cluster optimization
Also new API calls has been added for onecluster as well as the CLI
updates to expose them.
co-authored-by: MarioRobres <mrobres@opennebula.io>
co-authored-by: Pavel Czerny <pczerny@opennebula.io>
co-authored-by: Mirko Stojiljkovic <mstojiljkovic@opennebula.io>
co-authored-by: Valentyn Bohdan <vbohdan@opennebula.io>
The new attribute does not allocate extra IPs on NICs with FLOATING_IP =
yes and FLOATING_ONLY = yes. The NIC will only containg a random MAC
address and VROUTER_IP/MAC.
This commit also checks that network mode auto is not used for NIC of a
VROUTER
(cherry picked from commit 18c7816074)
- SHORT_ADDRESS can be used to select specific devices (useful on
homogenous clusters or nic attach operations). This name has been
selected because of:
1. It is the attrbute shown host info
2. It does not collide with the reserved ADDRESS attribute
- New test and add functions that considers both allocation methods: by
name (VENDOR/CLASS/DEVICE) or address (SHORT_ADDRESS)
- Parameter check on VM creation
- revert and add method use the same pci_attribute function to add info
to the VM PCI attribute
- Remove well-known attributes when parsing PCI devices (ADDRESS,
PREV_ADDRES, BUS, FUNCTION, SLOT, NUMA_NODE, UUID)
- Support for attach and detach NIC with PCI attributes
* onevm_exec.rb looks for PCI devices for ATTACH=YES when attaching/detaching an interface
* script action are now written in Ruby
* KVM module with common actions (hostdev/interface device str)
* Minor changes in xmlparser and OpenNebulaVM classes
- PCI selection options to onevm nic-attach:
* pci short_address
* pci_device device ID
* pci_vendor vendor ID
* pci_class class ID
- VF can be configured by setting some parameters through IP link (e.g.
MAC or VLAN_ID). This commit includes a mixin to activate_vf
* one_vmm_exec.rb looks for PCI VN_MAD drivers
* VM class (VNM) adds a @pcis array
* activate_vf should be called in the pre stage. The following drivers
acticate VFs (VLAN_ID is implemented as 802.1Q tag)
- 802.1Q
- bridge
- fw
- ovswitch
* Supported attributes for VF:
- MAC
- VLAN_ID
- spoof checking (SPOOFCHK)
- trust (TRUST)
- Predictable PCI addresses for guests is only enabled if PCI bus 1
is present (PCI bridge bus cannot be hotplugged)
- Improve integration with Libvirt/QEMU:
* When attach, only activate the VF being attached
* Attach: Use <interface> and not <hostdev> for VF. There seems to be a race
condition between accessing the vfio device and permission setup.
* Attach: Remove address on attach as it may fail beacuse PCI controller
is not present, e.g.:
ATTACHNIC: Could not attach NIC to 28534240: error: Failed to attach device
from /dev/fd/63 error: XML error: Invalid PCI address 0000:01:01.0.
Only PCI buses up to 0 are available ExitCode: 1
* Detach: Detach always use <hostdev> as libvirt fails to identified the
device just by address when using <interface>
- Suntone Support: The "Hardware" profile of a network interface (NIC) of a VM can be of three types, now exposed in Sunstone:
* "Emulated" it includes the hardware model emulated by Qemu
* "PCI - Automatic" oned hw scheduler will pick the best PCI device for the NIC
* "PCI - Manual" user can specify the PCI device by its short-address as shown in host information
This commits also enables the attach/detach operations on PCI based NICs in Suntone. *Note*: only for KVM VMs
(reverts commit aafd5f3014)
(reverts commit 671ef0b2d91aba00b1e6c63e19c4a50c3af20f6f)
- SHORT_ADDRESS can be used to select specific devices (useful on
homogenous clusters or nic attach operations). This name has been
selected because of:
1. It is the attrbute shown host info
2. It does not collide with the reserved ADDRESS attribute
- New test and add functions that considers both allocation methods: by
name (VENDOR/CLASS/DEVICE) or address (SHORT_ADDRESS)
- Parameter check on VM creation
- revert and add method use the same pci_attribute function to add info
to the VM PCI attribute
- Remove well-known attributes when parsing PCI devices (ADDRESS,
PREV_ADDRES, BUS, FUNCTION, SLOT, NUMA_NODE, UUID)
- Support for attach and detach NIC with PCI attributes
* onevm_exec.rb looks for PCI devices for ATTACH=YES when attaching/detaching an interface
* script action are now written in Ruby
* KVM module with common actions (hostdev/interface device str)
* Minor changes in xmlparser and OpenNebulaVM classes
- PCI selection options to onevm nic-attach:
* pci short_address
* pci_device device ID
* pci_vendor vendor ID
* pci_class class ID
- VF can be configured by setting some parameters through IP link (e.g.
MAC or VLAN_ID). This commit includes a mixin to activate_vf.
* one_vmm_exec.rb looks for PCI VN_MAD drivers
* VM class (VNM) adds a @pcis array
* activate_vf should be called in the pre stage. The following drivers
acticate VFs (VLAN_ID is implemented as 802.1Q tag)
- 802.1Q
- bridge
- fw
- ovswitch
- Improve integration with Libvirt/QEMU:
* When attach, only activate the VF being attached
* Attach: Use <interface> and not <hostdev> for VF. There seems to be a race
condition between accessing the vfio device and permission setup.
* Attach: Remove address on attach as it may fail beacuse PCI controller
is not present, e.g.:
ATTACHNIC: Could not attach NIC to 28534240: error: Failed to attach device
from /dev/fd/63 error: XML error: Invalid PCI address 0000:01:01.0.
Only PCI buses up to 0 are available ExitCode: 1
* Detach: Detach always use <hostdev> as libvirt fails to identified the
device just by address when using <interface>
* Modify VM context generation.
* Modify attach/detach nic functionality.
* Modify CLI nic-attach, so an alias can be attached.
Co-authored-by: Alejandro Huertas <ahuertas@opennebula.systems>
logic in oned to delay NIC/context resolution till deployment time. Also
scheduler has been extended to use the match-making algorithm to networks.
Sunstone interface changes to select auto networks.