Hi,

We have a Python-SDK script to find MAC dupes in our infrastructure.

I'm attaching the script, you just need to set the URI, USERNAME, PASSWORD, CERTPATH and MACPOOLS variables.

Hope this helps.

Regards,

Nicolás

El 2022-03-25 14:35, Gianluca Cecchi escribió:
Sorry, incomplete message sent...

today I had a problem about conflicting MAC between two different VMs.
The source of the problem was a VM created on env1 managed by engine1
and then transferred some weeks ago to env2 managed by engine2.
The two envs share some networks and during migration I didn't change
the mac of the vnic after completing it.
So the mac was left free from env1 and used in env2.

The default mac pools are different ones between env1 and env2.
So today in env1 I created a new vm on the same vlan as the previous
one and oVirt assigned the previous one mac, now freed on it,
originating big problems...
I found an article (https://access.redhat.com/solutions/695383) to
search in the engine web admin by mac, but it was for version 3.2 and
it seems it doesn't work in 4.4.10.
In VMs page I search filling the query with

mac = my_mac
or

Vms: mac = my_mac

but it keeps thinking with 3 squares blinking in the page. I have not
so many VMs to justify time elapsing... (less then 50)

Can I search for mac? How?

Thanks,

Gianluca

On Fri, Mar 25, 2022 at 3:27 PM Gianluca Cecchi
<gianluca.cec...@gmail.com> wrote:

Hello,
today I had a problem about conflicting MAC.
The source of problem was a VM transferred from an engine
environment
_______________________________________________
Users mailing list -- users@ovirt.org
To unsubscribe send an email to users-le...@ovirt.org
Privacy Statement: https://www.ovirt.org/privacy-policy.html
oVirt Code of Conduct:
https://www.ovirt.org/community/about/community-guidelines/
List Archives:
https://lists.ovirt.org/archives/list/users@ovirt.org/message/2UN4APDMFAJEWXKAIEKREIFERH2WHAS4/
#!/usr/bin/env python

import os.path
from sys import exit

from ovirtsdk4 import Connection, types

URI = 'https://your-fqdn/ovirt-engine/api'
USERNAME = 'admin@internal'
PASSWORD = 'your-pass'
CERTPATH = '/etc/ssl/certs/your-cert-path.cert'

# Don't touch
MACOCTETS = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f',
             '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f',
             '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f',
             '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f',
             '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f',
             '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f',
             '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f',
             '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f',
             '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f',
             '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f',
             'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af',
             'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf',
             'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf',
             'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df',
             'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef',
             'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff']


# Replace this with your active MAC address pools, WITHOUT the last octet
MACPOOLS = ['00:11:22:33:44', '00:55:66:77:88']

conn = Connection(
   url=URI,
   username=USERNAME,
   password=PASSWORD,
   ca_file=CERTPATH
)

if not conn.test(raise_exception=False):
    print("ERROR: Can't connect (credentials?)")
    exit(1)

vms_macs = {}

sys_serv = conn.system_service()
vms_serv = sys_serv.vms_service()

macs = []
for vm in vms_serv.list():
    nics = conn.follow_link(vm.nics)
    for nic in nics:
        if nic.mac.address in vms_macs:
            vms_macs[nic.mac.address].append(vm.name)
        else:
            vms_macs[nic.mac.address] = [vm.name]
        macs.append(nic.mac.address)

def find_unused_mac():
    global MACOCTETS, MACPOOLS, macs

    for pool in MACPOOLS:
        for octet in MACOCTETS:
            mac = "%s:%s" % (pool, octet)
            if mac not in macs:
                macs.append(mac)
                return mac
    return None

have_dupes = False
for mac, vms in vms_macs.items():
    if len(vms) > 1:
        have_dupes = True
        print("Dupe found! MAC: %s, VMs: %s" % (mac, vms))

if not have_dupes:
    print("No MAC dupes.")
_______________________________________________
Users mailing list -- users@ovirt.org
To unsubscribe send an email to users-le...@ovirt.org
Privacy Statement: https://www.ovirt.org/privacy-policy.html
oVirt Code of Conduct: 
https://www.ovirt.org/community/about/community-guidelines/
List Archives: 
https://lists.ovirt.org/archives/list/users@ovirt.org/message/AIPDVMZKGSZSKYV3F5U3R7PF3FTDNLAO/

Reply via email to