one icon indicating copy to clipboard operation
one copied to clipboard

Virtual Machine Pool XMLElements are missing USER_TEMPLATE

Open dann1 opened this issue 1 year ago • 0 comments

Description When iterating a VirtualMachinePool object to get all of the vms as XMLElements, the vms are missing the USER_TEMPLATE section.

The code in question is

vm_pool = VirtualMachinePool.new(client)
rc      = vm_pool.info_all

raise rc.message if OpenNebula.is_error?(rc)

vms = vm_pool.retrieve_xmlelements('/VM_POOL/VM')

The vms array will contain vm XML elements without USER_TEMPLATE

To Reproduce

Use the following ruby code as an example

require 'opennebula'
include OpenNebula

CREDENTIALS = ''# your credentials here
ENDPOINT = ''#oned wherever it is running
client = Client.new(CREDENTIALS, ENDPOINT)

vm_pool = VirtualMachinePool.new(client)
rc      = vm_pool.info_all

raise rc.message if OpenNebula.is_error?(rc)

vms = vm_pool.retrieve_xmlelements('/VM_POOL/VM')

vms.each do |vm|
    puts '---------'
    puts vm['ID']
    puts '---------'
    puts vm['USER_TEMPLATE']
    puts '---------'

    vm = VirtualMachine.new_with_id(vm['ID'], client)
    rc = vm.info
    raise rc.message if OpenNebula.is_error?(rc)

    puts '=========='
    puts vm['ID']
    puts '=========='
    puts vm['USER_TEMPLATE']
    puts '=========='
end

And it will output

---------
315
---------

---------
==========
315
==========
ONEAPP_VNF_DHCP4_ENABLED,ONEAPP_VNF_DHCP4_INTERFACES,ONEAPP_VNF_DHCP4_LEASE_TIME,ONEAPP_VNF_DNS_ENABLED,ONEAPP_VNF_DNS_INTERFACES,ONEAPP_VNF_DNS_MAX_CACHE_TTL,ONEAPP_VNF_DNS_USE_ROOTSERVERS,ONEAPP_VNF_HAPROXY_ENABLED,ONEAPP_VNF_HAPROXY_INTERFACES,ONEAPP_VNF_LB_ENABLED,ONEAPP_VNF_LB_INTERFACES,ONEAPP_VNF_NAT4_ENABLED,ONEAPP_VNF_NAT4_INTERFACES_OUT,ONEAPP_VNF_SDNAT4_ENABLED,ONEAPP_VNF_SDNAT4_INTERFACEStrueNO3600NO3600YESNONOYESeth0NOO|boolean|Enable DHCPv4| |NOO|text|DHCP4 - Listening InterfacesO|number|DHCP4 - Lease Time [sec]| |3600O|boolean|Enable DNS Server| |NOO|text|DNS - Listening InterfacesO|number|DNS - Maximum Caching Time [sec]| |3600O|boolean|DNS - Use Rootservers| |YESO|boolean|Enable HAProxy| |NOO|text|HAProxy - InterfacesO|boolean|Enable LoadBalancer| |NOO|text|LoadBalancer - InterfacesO|boolean|Enable NAT| |NOO|text|NAT - Outgoing InterfacesO|boolean|Enable SDNAT| |NOO|text|SDNAT - Mapped InterfacesYES
==========
---------
312
---------
ENERGYENERGY=50
---------
==========
312
==========
0YESYESFAASENERGYENERGY=50512
==========

The difference content wise is clear. Although it looks like SCHED_REQUIREMENTS and SCHED_DS are correctly loaded. However, everything else is missing.

Expected behavior The second part of the loop in the code where the VM is loaded individually by its ID works as expected

    vm = VirtualMachine.new_with_id(vm['ID'], client)
    rc = vm.info
    raise rc.message if OpenNebula.is_error?(rc)

Additional context Even using the user_template_str method yields nil on the vm from the vm_pool yields nil.

The VMs user template in question for this report

root@pedev:~# onevm show 315 -j | jq .VM.USER_TEMPLATE
{
  "INPUTS_ORDER": "ONEAPP_VNF_DHCP4_ENABLED,ONEAPP_VNF_DHCP4_INTERFACES,ONEAPP_VNF_DHCP4_LEASE_TIME,ONEAPP_VNF_DNS_ENABLED,ONEAPP_VNF_DNS_INTERFACES,ONEAPP_VNF_DNS_MAX_CACHE_TTL,ONEAPP_VNF_DNS_USE_ROOTSERVERS,ONEAPP_VNF_HAPROXY_ENABLED,ONEAPP_VNF_HAPROXY_INTERFACES,ONEAPP_VNF_LB_ENABLED,ONEAPP_VNF_LB_INTERFACES,ONEAPP_VNF_NAT4_ENABLED,ONEAPP_VNF_NAT4_INTERFACES_OUT,ONEAPP_VNF_SDNAT4_ENABLED,ONEAPP_VNF_SDNAT4_INTERFACES",
  "LXD_SECURITY_PRIVILEGED": "true",
  "ONEAPP_VNF_DHCP4_ENABLED": "NO",
  "ONEAPP_VNF_DHCP4_LEASE_TIME": "3600",
  "ONEAPP_VNF_DNS_ENABLED": "NO",
  "ONEAPP_VNF_DNS_MAX_CACHE_TTL": "3600",
  "ONEAPP_VNF_DNS_USE_ROOTSERVERS": "YES",
  "ONEAPP_VNF_HAPROXY_ENABLED": "NO",
  "ONEAPP_VNF_LB_ENABLED": "NO",
  "ONEAPP_VNF_NAT4_ENABLED": "YES",
  "ONEAPP_VNF_NAT4_INTERFACES_OUT": "eth0",
  "ONEAPP_VNF_SDNAT4_ENABLED": "NO",
  "USER_INPUTS": {
    "ONEAPP_VNF_DHCP4_ENABLED": "O|boolean|Enable DHCPv4| |NO",
    "ONEAPP_VNF_DHCP4_INTERFACES": "O|text|DHCP4 - Listening Interfaces",
    "ONEAPP_VNF_DHCP4_LEASE_TIME": "O|number|DHCP4 - Lease Time [sec]| |3600",
    "ONEAPP_VNF_DNS_ENABLED": "O|boolean|Enable DNS Server| |NO",
    "ONEAPP_VNF_DNS_INTERFACES": "O|text|DNS - Listening Interfaces",
    "ONEAPP_VNF_DNS_MAX_CACHE_TTL": "O|number|DNS - Maximum Caching Time [sec]| |3600",
    "ONEAPP_VNF_DNS_USE_ROOTSERVERS": "O|boolean|DNS - Use Rootservers| |YES",
    "ONEAPP_VNF_HAPROXY_ENABLED": "O|boolean|Enable HAProxy| |NO",
    "ONEAPP_VNF_HAPROXY_INTERFACES": "O|text|HAProxy - Interfaces",
    "ONEAPP_VNF_LB_ENABLED": "O|boolean|Enable LoadBalancer| |NO",
    "ONEAPP_VNF_LB_INTERFACES": "O|text|LoadBalancer - Interfaces",
    "ONEAPP_VNF_NAT4_ENABLED": "O|boolean|Enable NAT| |NO",
    "ONEAPP_VNF_NAT4_INTERFACES_OUT": "O|text|NAT - Outgoing Interfaces",
    "ONEAPP_VNF_SDNAT4_ENABLED": "O|boolean|Enable SDNAT| |NO",
    "ONEAPP_VNF_SDNAT4_INTERFACES": "O|text|SDNAT - Mapped Interfaces"
  },
  "VROUTER": "YES"
}

and

root@pedev:~# onevm show 312 -j | jq .VM.USER_TEMPLATE
{
  "FLAVOURS": "0",
  "HOT_RESIZE": {
    "CPU_HOT_ADD_ENABLED": "YES",
    "MEMORY_HOT_ADD_ENABLED": "YES"
  },
  "ROLE_NAME": "FAAS",
  "SCHED_RANK": "ENERGY",
  "SCHED_REQUIREMENTS": "ENERGY=50",
  "SERVICE_ID": "512"
}

Progress Status

  • [ ] Code committed
  • [ ] Testing - QA
  • [ ] Documentation (Release notes - resolved issues, compatibility, known issues)

dann1 avatar Feb 13 '24 15:02 dann1