kayobe/ansible/group_vars/all/inspector
Pierre Riteau 010681d7d9 Filter out switch port descriptions on Ruckus switches
Some Ruckus switches, e.g. the Ruckus ICX 7150, advertise switch
interface names as switch port descriptions. Unlike Dell switches, there
is no space character between port type and port number. For example:
GigabitEthernet1/1/9.

Update regular expression to match both styles.

Change-Id: I359b07abadc8665ff0a8c3407ca0fc5effc504cf
Story: 2007532
Task: 39343
2020-04-09 08:35:45 +02:00

340 lines
13 KiB
Plaintext

---
###############################################################################
# Ironic inspector PXE configuration.
# List of extra kernel parameters for the inspector default PXE configuration.
inspector_extra_kernel_options: "{{ ipa_kernel_options }}"
# URL of Ironic Python Agent (IPA) kernel image.
inspector_ipa_kernel_upstream_url: "{{ ipa_kernel_upstream_url }}"
# URL of checksum of Ironic Python Agent (IPA) kernel image.
inspector_ipa_kernel_checksum_url: "{{ ipa_kernel_checksum_url }}"
# Algorithm of checksum of Ironic Python Agent (IPA) kernel image.
inspector_ipa_kernel_checksum_algorithm: "{{ ipa_kernel_checksum_algorithm }}"
# URL of Ironic Python Agent (IPA) ramdisk image.
inspector_ipa_ramdisk_upstream_url: "{{ ipa_ramdisk_upstream_url }}"
# URL of checksum of Ironic Python Agent (IPA) ramdisk image.
inspector_ipa_ramdisk_checksum_url: "{{ ipa_ramdisk_checksum_url }}"
# Algorithm of checksum of Ironic Python Agent (IPA) ramdisk image.
inspector_ipa_ramdisk_checksum_algorithm: "{{ ipa_ramdisk_checksum_algorithm }}"
###############################################################################
# Ironic inspector processing configuration.
# List of of default inspector processing plugins.
inspector_processing_hooks_default:
- ramdisk_error
- scheduler
- validate_interfaces
- capabilities
- pci_devices
- local_link_connection
- lldp_basic
# List of of additional inspector processing plugins.
inspector_processing_hooks_extra: []
# List of of additional inspector processing plugins.
inspector_processing_hooks: >
{{ inspector_processing_hooks_default + inspector_processing_hooks_extra }}
# Which MAC addresses to add as ports during introspection. One of 'all',
# 'active' or 'pxe'.
inspector_add_ports: "pxe"
# Which ports to keep after introspection. One of 'all', 'present', or 'added'.
inspector_keep_ports: "added"
# Whether to enable discovery of nodes not managed by Ironic.
inspector_enable_discovery: True
# The Ironic driver with which to register newly discovered nodes.
inspector_discovery_enroll_node_driver: "ipmi"
###############################################################################
# Ironic inspector configuration.
# Ironic inspector IPMI username to set.
inspector_ipmi_username: "{{ ipmi_username }}"
# Ironic inspector IPMI password to set.
inspector_ipmi_password: "{{ ipmi_password }}"
# Ironic inspector default network interface name on which to check for an LLDP
# switch port description to use as the node's name.
inspector_lldp_switch_port_interface_default: eth0
# Ironic inspector map from hostname to network interface name on which to
# check for an LLDP switch port description to use as the node's name.
inspector_lldp_switch_port_interface_map: {}
###############################################################################
# Ironic inspector introspection rules configuration.
# IPMI username referenced by inspector rule.
inspector_rule_var_ipmi_username:
# IPMI password referenced by inspector rule.
inspector_rule_var_ipmi_password:
# Ironic inspector rule to set IPMI credentials.
inspector_rule_ipmi_credentials:
description: "Set IPMI driver_info if no credentials"
conditions:
- field: "node://driver_info.ipmi_username"
op: "is-empty"
- field: "node://driver_info.ipmi_password"
op: "is-empty"
actions:
- action: "set-attribute"
path: "driver_info/ipmi_username"
value: "{{ inspector_rule_var_ipmi_username }}"
- action: "set-attribute"
path: "driver_info/ipmi_password"
value: "{{ inspector_rule_var_ipmi_password }}"
# Deployment kernel referenced by inspector rule.
inspector_rule_var_deploy_kernel:
# Ironic inspector rule to set deployment kernel.
inspector_rule_deploy_kernel:
description: "Set deploy kernel"
conditions:
- field: "node://driver_info.deploy_kernel"
op: "is-empty"
actions:
- action: "set-attribute"
path: "driver_info/deploy_kernel"
value: "{{ inspector_rule_var_deploy_kernel }}"
# Deployment ramdisk referenced by inspector rule.
inspector_rule_var_deploy_ramdisk:
# Ironic inspector rule to set deployment ramdisk.
inspector_rule_deploy_ramdisk:
description: "Set deploy ramdisk"
conditions:
- field: "node://driver_info.deploy_ramdisk"
op: "is-empty"
actions:
- action: "set-attribute"
path: "driver_info/deploy_ramdisk"
value: "{{ inspector_rule_var_deploy_ramdisk }}"
# Ironic inspector rule to set local boot capability
inspector_rule_local_boot:
description: "Set local boot capability"
conditions: []
actions:
- action: "set-capability"
name: "boot_option"
value: "local"
# Ironic inspector rule to initialise root device hints.
inspector_rule_root_hint_init:
description: "Initialise root device hint"
conditions:
- field: "node://properties.root_device"
op: "is-empty"
actions:
# Inspector can't combine references to introspection data with non-string
# types, see https://bugs.launchpad.net/ironic-inspector/+bug/1670768. We
# must therefore first set the root_device property to an empty dict, then
# update the fields within it.
- action: "set-attribute"
path: "properties/root_device"
value: {}
# Ironic inspector rule to set serial root device hint.
inspector_rule_root_hint_serial:
description: "Set serial root device hint"
conditions:
- field: "data://root_disk.serial"
op: "is-empty"
invert: True
actions:
- action: "set-attribute"
path: "properties/root_device/serial"
value: "{data[root_disk][serial]}"
# Ironic inspector rule to set the interface on which the node PXE booted.
inspector_rule_set_pxe_interface_mac:
description: "Set node PXE interface MAC address"
conditions:
- field: "data://boot_interface"
op: "is-empty"
invert: True
actions:
- action: "set-attribute"
path: "extra/pxe_interface_mac"
value: "{data[boot_interface]}"
# Name of network interface to use for LLDP referenced by switch port
# description rule.
inspector_rule_var_lldp_switch_port_interface:
# Ironic inspector rule to set the node's name from an interface's LLDP switch
# port description.
inspector_rule_lldp_switch_port_desc_to_name:
description: "Set node name from {{ inspector_rule_var_lldp_switch_port_interface }} LLDP switch port description"
conditions:
# Check for the existence of the switch_port_description field.
- field: "data://all_interfaces.{{ inspector_rule_var_lldp_switch_port_interface }}"
op: "is-empty"
invert: True
- field: "data://all_interfaces.{{ inspector_rule_var_lldp_switch_port_interface }}.lldp_processed"
op: "is-empty"
invert: True
- field: "data://all_interfaces.{{ inspector_rule_var_lldp_switch_port_interface }}.lldp_processed.switch_port_description"
op: "is-empty"
invert: True
# Filter out switch port descriptions using the switch's interface names.
# On some switches (including Dell Network OS 9.10(0.1) and some Ruckus
# switches), the port description TLV is sent but contains the interface
# name rather than the interface's description. Dell switches use a space
# character between port type and port number, while Ruckus switches don't.
- field: "data://all_interfaces.{{inspector_rule_var_lldp_switch_port_interface}}.lldp_processed.switch_port_description"
op: "matches"
value: "^GigabitEthernet ?([0-9/]*)$"
invert: True
- field: "data://all_interfaces.{{inspector_rule_var_lldp_switch_port_interface}}.lldp_processed.switch_port_description"
op: "matches"
value: "^TenGigabitEthernet ?([0-9/]*)$"
invert: True
- field: "data://all_interfaces.{{inspector_rule_var_lldp_switch_port_interface}}.lldp_processed.switch_port_description"
op: "matches"
value: "^fortyGigE ?([0-9/]*)$"
invert: True
- field: "data://all_interfaces.{{inspector_rule_var_lldp_switch_port_interface}}.lldp_processed.switch_port_description"
op: "matches"
value: "^Port-channel ?([0-9/]*)$"
invert: True
actions:
- action: "set-attribute"
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: "Initialise 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"
conditions: []
actions:
- action: "set-attribute"
path: "extra/introspection_data"
value: "{data}"
# List of default ironic inspector rules.
inspector_rules_default:
- "{{ inspector_rule_ipmi_credentials }}"
- "{{ inspector_rule_deploy_kernel }}"
- "{{ inspector_rule_deploy_ramdisk }}"
- "{{ inspector_rule_local_boot }}"
- "{{ inspector_rule_root_hint_init }}"
- "{{ 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: []
# List of all ironic inspector rules.
inspector_rules: "{{ inspector_rules_default + inspector_rules_extra }}"
###############################################################################
# Dell switch LLDP workaround configuration.
# Some Dell switch OSs (including Dell Network OS 9.10(0.1)) do not support
# sending interface port description TLVs correctly. Instead of sending the
# interface description, they send the interface name (e.g. TenGigabitEthernet
# 1/1/1). This breaks the discovery process which relies on Ironic node
# introspection data containing the node's name in the interface port
# description. We work around this here by creating an introspection rule for
# each ironic node that matches against the switch system and the relevant
# interface name, then sets the node's name appropriately.
# Ansible group containing switch hosts to which the workaround should be
# applied.
inspector_dell_switch_lldp_workaround_group:
###############################################################################
# Inspection store configuration.
# The inspection store provides a Swift-like service for storing inspection
# data which may be useful in environments without Swift.
# Whether the inspection data store is enabled.
inspector_store_enabled: "{{ kolla_enable_ironic | bool and not kolla_enable_swift | bool }}"
# Port on which the inspection data store should listen.
inspector_store_port: 8080