Node Discovery

As an alternative to creating an inventory file (instackenv.json) and enrolling nodes from it, you can discover and enroll the nodes automatically.

TripleO supports two approaches to the discovery process:

Automatic enrollment of new nodes

You can enable ironic-inspector to automatically enroll all unknown nodes that boot the introspection ramdisk. See ironic-inspector discovery documentation for more details on the process.

Configuration

Set the following in your undercloud.conf before installing the undercloud:

enable_node_discovery = True

Make sure to get (or build) and upload the introspection image, as described in Basic Deployment (CLI).

Basic usage

After the discovery is enabled, any node that boots the introspection ramdisk and posts back to ironic-inspector will be enrolled in ironic. Make sure the nodes are connected to the provisioning network, and default to booting from PXE. Power them on using any available means (e.g. by pushing the power button on them).

New nodes appear in the enroll state by default and use the pxe_ipmitool driver (configurable via the discovery_default_driver option in undercloud.conf). You have to set the power credentials for these nodes and make them available. See Bare Metal Node States for details.

Using introspection rules

Alternatively, you can use ironic-inspector introspection rules to automatically set the power credentials based on certain properties.

For example, to set the same credentials for all new nodes, you can use the following rules:

[
    {
        "description": "Set default IPMI credentials",
        "conditions": [
            {"op": "eq", "field": "data://auto_discovered", "value": true}
        ],
        "actions": [
            {"action": "set-attribute", "path": "driver_info/ipmi_username",
             "value": "admin"},
            {"action": "set-attribute", "path": "driver_info/ipmi_password",
             "value": "paSSw0rd"}
        ]
    }
]

To set specific credentials for a certain vendor, use something like:

[
    {
        "description": "Set default IPMI credentials",
        "conditions": [
            {"op": "eq", "field": "data://auto_discovered", "value": true},
            {"op": "ne", "field": "data://inventory.system_vendor.manufacturer",
             "value": "Dell Inc."}
        ],
        "actions": [
            {"action": "set-attribute", "path": "driver_info/ipmi_username",
             "value": "admin"},
            {"action": "set-attribute", "path": "driver_info/ipmi_password",
             "value": "paSSw0rd"}
        ]
    },
    {
        "description": "Set the vendor driver for Dell hardware",
        "conditions": [
            {"op": "eq", "field": "data://auto_discovered", "value": true},
            {"op": "eq", "field": "data://inventory.system_vendor.manufacturer",
             "value": "Dell Inc."}
        ],
        "actions": [
            {"action": "set-attribute", "path": "driver", "value": "pxe_drac"},
            {"action": "set-attribute", "path": "driver_info/drac_username",
             "value": "admin"},
            {"action": "set-attribute", "path": "driver_info/drac_password",
             "value": "paSSw0rd"},
            {"action": "set-attribute", "path": "driver_info/drac_address",
             "value": "{data[inventory][bmc_address]}"}
        ]
    }
]

The rules should be put to a file and uploaded to ironic-inspector before the discovery process:

baremetal introspection rule import /path/to/rules.json

See Node matching with resource classes and profiles for more examples on introspection rules.

Scanning BMC range

You can discover new nodes by scanning an IP range for accessible BMCs. You need to provide a set of credentials to try, and optionally a list of ports. Use the following command to run the scan:

openstack overcloud node discover --range <RANGE> \
    --credentials <USER1:PASSWORD1> --credentials <USER2:PASSWORD2>

Here, <RANGE> is an IP range, e.g. 10.0.0.0/24. Credentials are provided separated by a colon, e.g. root:calvin.

With this approach, new nodes end up in manageable state, and will already have the deploy properties, such as deploy kernel/ramdisk, assigned.

You can use the same command to introspect the nodes and make them available for deployment:

openstack overcloud node discover --range <RANGE> \
    --credentials <USER1:PASSWORD1> --credentials <USER2:PASSWORD2> \
    --introspect --provide

The resulting node UUIDs will be printed on the screen.