Discover node properties and capabilities for ucs drivers

https://bugs.launchpad.net/ironic/+bug/1526359

This proposal adds the ability to inspect/update hardware properties and auto-create ports for Cisco UCS B/C/M-servers managed by Cisco UCS Manager. It uses out-of-band H/W inspection utility provided by UcsSdk.

Note

This specification has been retired as the vendor specific UCS driers are no longer available in Ironic. This was a result of the Open Source UcsSdk library no longer being maintained.

Problem description

Node inspection automatically collects node properties. These properties are required for scheduling or for deploy (ports creation). Today UCS drivers doesn’t support node inspection. Enhance UCS drivers to support node inspection.

Proposed change

This spec proposes change to enhance UCS drivers to support node inspection that discovers node properties and capabilities of Cisco UCS B/C/M-series servers managed by Cisco UCSM. This is done by using out-of-band H/W inspection interface provided by UcsSdk Python library.

The following mandatory properties will be discovered and updated in node.properties as discussed in http://specs.openstack.org/openstack/ironic-specs/specs/kilo/ironic-node-properties-discovery.html

  • memory size

  • CPUs

  • CPU architecture

  • NIC(s) MAC address

  • disks

The following additional properties are of interest to UCS drivers and will be discovered and updated to node.properties as capabilities:

  • UCS Host Firmware pack

    capability name : ucs_host_firmware_package possible values : it can vary hardware to hardware.

  • Server Name/Model

    capability name : server_model possible values : it can vary hardware to hardware.

  • RAID level

    capability name : max_raid_level possible values : 0,1,5,6,10

  • secure boot capability

    capability name : secure_boot possible values : true, false

  • PCI (GPU) devices

    capability name : pci_gpu_devices possible values : count of such devices.

  • SR-IOV capabilities

    capability name : sr_iov_devices possible values : count of such devices.

  • NIC Capacity

    capability name : nic_capacity possible values : value with unit.

  • TPM Support

    capability name : trusted_boot possible values : true, false

  • Multi LUN support

    capability name : multi_lun possible values : true, false

  • CDN (Consistent Device Name) Support

    capability name : cdn possible values : true, false

  • VXLAN Capability

    capability name : vxlan possible values : true, false

  • NV GRE Capability

    capability name : nv_gre_devices possible values : count of such devices

  • NET FLOW Capability

    capability name : supports_net_flow possible values : true, false

  • FlexFlash Capability

    capability name : flex_flash possible values : true, false

  • UCS service-profile template name

    capability name : ucs_sp_template possible values : service profile template name

The properties which are already set will be overridden at reinvocation of inspect_hardware() except for NICs. If a port already exists, it will not create a new port for that MAC address. It will take care of adding as well as deleting of the ports for NIC changes [2]. Not all the capabilities are applicable to all Cisco UCS B/C/M-series server models. If a property is not applicable to the hardware, the property will not be added/updated in node.properties as capabilities. Inspection fetches only those capabilities applicable to the specific server model.

Inspection returns failure in the following cases:
  • Failed to get basic properties.

  • Failed to get capabilities, due to service-profile configuration errors.

  • Communication errors with UCS Manager.

UCS specific module changes:

  • Implement the InspectInterface method inspect_hardware().

Alternatives

These properties can be discovered manually outside the ironic and node.properties updated accordingly with the discovered properties.

Data model impact

None.

State Machine Impact

None

REST API impact

None.

Client (CLI) impact

None

RPC API impact

None.

Driver API impact

None.

Nova driver impact

None.

Ramdisk impact

N/A

Security impact

None.

Other end user impact

None.

Scalability impact

None.

Performance Impact

None.

Other deployer impact

None.

Developer impact

None.

Implementation

Assignee(s)

Primary assignee:

saripurigopi

Work Items

  • Implementation of the InspectInterface class and its methods inspect_hardware(), validate() and get_properties().

Dependencies

  • This feature is targeted for Cisco UCS B/C/M-series servers managed by UCS Manager 2.2(4b) or above. All the capabilities listed might not be available with older versions of UCS Manager (like 2.2(3b)).

  • Depends on UcsSdk library.

Testing

Unit tests will be added conforming to ironic testing requirements, mocking UcsSdk. It will get tested on real hardware by UCS team with the available hardware models to the team.

Upgrades and Backwards Compatibility

No impact.

Documentation Impact

‘Hardware Inspection’ section will be added and updated accordingly in doc/source/drivers/ucs.rst.

References

1. UcsSdk library: * https://github.com/CiscoUCS/UcsSdk * https://pypi.org/project/UcsSdk

2. Introspect spec: * https://github.com/openstack/ironic-specs/blob/master/specs/kilo/ironic-node-properties-discovery.rst