I figured it out:

I noticed that the cockpit was running this command:

/usr/bin/python3.8 /usr/bin/ansible-playbook /usr/share/ovirt-hosted-engine-setup/ansible/trigger_role.yml --tags=get_network_interfaces --skip-tags=always -e he_just_collect_network_interfaces=True --module-path=/usr/share/ovirt-hosted-engine-setup/ansible --inventory=localhost

ERROR! the playbook: /usr/share/ovirt-hosted-engine-setup/ansible/trigger_role.yml could not be found

The directory "/usr/share/ovirt-hosted-engine-setup/ansible" doesn't exist. It looks like it was renamed to "/usr/share/ovirt-hosted-engine-setup/he_ansible"

This command that I ran on all three nodes worked around the bug:

ln -s /usr/share/ovirt-hosted-engine-setup/he_ansible/ /usr/share/ovirt-hosted-engine-setup/ansible

I created a pull request

https://github.com/oVirt/cockpit-ovirt/pull/27/commits

Thanks,
Dax Kelson

On Wed, Jul 6, 2022 at 3:03 PM Dax Kelson <daxkelson@gmail.com> wrote:
TL;DR hyperconverged install. Gluster install works, hosted engine fails with "no valid network interface has ben found"

I have a three node hyperconverged cluster that had previously been running oVirt 4.4 successfully.

A fully wipe and clean install of 4.5.1 was attempted with: 

ovirt-node-ng-installer-4.5.1-2022062306.el8.iso

On each node, there are two statically configured 10Gb ethernet interfaces (and some unused 1Gb interfaces)

enp5s0f0 - ovirt management/VM network (default gateway is on this network)
enp5s0f1 - gluster network (isolated network)

Name resolution is done via /etc/hosts on each node:

100.64.0.7 node1-ovirt node1-ovirt.local
100.64.0.8 node2-ovirt node2-ovirt.local
100.64.0.9 node3-ovirt node3-ovirt.local
100.79.192.1 node1-ovirt-storage node1-ovirt-storage.local
100.79.192.2 node2-ovirt-storage node2-ovirt-storage.local
100.79.192.3 node3-ovirt-storage node3-ovirt-storage.local

Attempting to install the hosted engine fails with:

System data could not be retrieved!
No valid network interface has been found
If you are using Bonds or VLANs Use the following naming conventions:
- VLAN interfaces: physical_device.VLAN_ID (for example, eth0.23, eth1.128, enp3s0.50)
- Bond interfaces: bond*number* (for example, bond0, bond1)
- VLANs on bond interfaces: bond*number*.VLAN_ID (for example, bond0.50, bond1.128)
* Supported bond modes: active-backup, balance-xor, broadcast, 802.3ad
* Networking teaming is not supported and will cause errors
Here is the network setup on node1:

[root@node1-ovirt ovirt]# ip -4 addr ls
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
6: enp5s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 100.64.0.7/20 brd 100.64.15.255 scope global noprefixroute enp5s0f0
       valid_lft forever preferred_lft forever
7: enp5s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 100.79.192.1/24 brd 100.79.192.255 scope global noprefixroute enp5s0f1
       valid_lft forever preferred_lft forever
8: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
[root@node1-ovirt ovirt]#

My troubleshooting is that the failure is /probably/ coming from this file, but I'm not sure why:

/usr/share/ansible/collections/ansible_collections/ovirt/ovirt/roles/hosted_engine_setup/tasks/pre_checks/001_validate_network_interfaces.yml

Help?

Thanks!
Dax Kelson