diff --git a/ansible/filter_plugins/bmc_type.py b/ansible/filter_plugins/bmc_type.py new file mode 100644 index 000000000..e15d5dcbc --- /dev/null +++ b/ansible/filter_plugins/bmc_type.py @@ -0,0 +1,15 @@ +def bmc_type_from_system_vendor(system_vendor): + if not system_vendor: + return None + if system_vendor.get('manufacturer') == 'Dell Inc.': + return 'idrac' + return None + + +class FilterModule(object): + """BMC type filters.""" + + def filters(self): + return { + 'bmc_type_from_system_vendor': bmc_type_from_system_vendor, + } diff --git a/ansible/group_vars/all/inspector b/ansible/group_vars/all/inspector index ce3258e7a..4d8a92ef9 100644 --- a/ansible/group_vars/all/inspector +++ b/ansible/group_vars/all/inspector @@ -207,6 +207,68 @@ inspector_rule_lldp_switch_port_desc_to_name: path: "name" value: "{data[all_interfaces][{{ inspector_rule_var_lldp_switch_port_interface }}][lldp_processed][switch_port_description]}" +# Ironic inspector rule to initialise system vendor data in the node's metadata. +inspector_rule_save_system_vendor_init: + description: "Intiialise system vendor data in Ironic node metadata" + conditions: + - field: "data://inventory.system_vendor" + op: "is-empty" + invert: True + - field: "node://extra.system_vendor" + op: "is-empty" + actions: + - action: "set-attribute" + path: "extra/system_vendor" + value: {} + +# Ironic inspector rule to save system vendor manufacturer data in the node's +# metadata. +inspector_rule_save_system_vendor_manufacturer: + description: "Save system vendor manufacturer data in Ironic node metadata" + conditions: + - field: "data://inventory.system_vendor" + op: "is-empty" + invert: True + - field: "data://inventory.system_vendor.manufacturer" + op: "is-empty" + invert: True + actions: + - action: "set-attribute" + path: "extra/system_vendor/manufacturer" + value: "{data[inventory][system_vendor][manufacturer]}" + +# Ironic inspector rule to save system vendor serial number in the node's +# metadata. +inspector_rule_save_system_vendor_serial_number: + description: "Save system vendor serial number in Ironic node metadata" + conditions: + - field: "data://inventory.system_vendor" + op: "is-empty" + invert: True + - field: "data://inventory.system_vendor.serial_number" + op: "is-empty" + invert: True + actions: + - action: "set-attribute" + path: "extra/system_vendor/serial_number" + value: "{data[inventory][system_vendor][serial_number]}" + +# Ironic inspector rule to save system vendor product name in the node's +# metadata. +inspector_rule_save_system_vendor_product_name: + description: "Save system vendor product name in Ironic node metadata" + conditions: + - field: "data://inventory.system_vendor" + op: "is-empty" + invert: True + - field: "data://inventory.system_vendor.product_name" + op: "is-empty" + invert: True + actions: + - action: "set-attribute" + path: "extra/system_vendor/product_name" + value: "{data[inventory][system_vendor][product_name]}" + # Ironic inspector rule to save introspection data to the node. inspector_rule_save_data: description: "Save introspection data to Ironic node" @@ -226,6 +288,10 @@ inspector_rules_default: - "{{ inspector_rule_root_hint_serial }}" - "{{ inspector_rule_set_pxe_interface_mac }}" - "{{ inspector_rule_lldp_switch_port_desc_to_name }}" + - "{{ inspector_rule_save_system_vendor_init }}" + - "{{ inspector_rule_save_system_vendor_manufacturer }}" + - "{{ inspector_rule_save_system_vendor_serial_number }}" + - "{{ inspector_rule_save_system_vendor_product_name }}" # List of additional ironic inspector rules. inspector_rules_extra: [] diff --git a/ansible/overcloud-inventory-discover.yml b/ansible/overcloud-inventory-discover.yml index 7719cdf1b..98bc52a58 100644 --- a/ansible/overcloud-inventory-discover.yml +++ b/ansible/overcloud-inventory-discover.yml @@ -30,6 +30,8 @@ {% for host in ironic_inventory.baremetal.hosts %} {% set hostvars=ironic_inventory._meta.hostvars[host] %} {% set ipmi_address=hostvars.driver_info.ipmi_address | default %} - {{ host }} ipmi_address={{ ipmi_address }} + {% set system_vendor=hostvars.extra.system_vendor | default %} + {% set bmc_type=system_vendor | bmc_type_from_system_vendor %} + {{ host }} ipmi_address={{ ipmi_address }} bmc_type={{ bmc_type }} {% endfor %} dest: "{{ kayobe_config_path }}/inventory/controllers"