Skip to content

feat: make enroll-netdev re-runnable via find-or-create PUC-1905#2158

Open
nidzrai wants to merge 1 commit into
mainfrom
argo-netdev-enroll-idempotent
Open

feat: make enroll-netdev re-runnable via find-or-create PUC-1905#2158
nidzrai wants to merge 1 commit into
mainfrom
argo-netdev-enroll-idempotent

Conversation

@nidzrai

@nidzrai nidzrai commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Parent PR : #2144

Possible through enroll-netdev

  • Operation Notes
  • Create a netdev node fresh enroll
  • Create N ports any number, labeled
  • Add a port new label in the list
  • Update switch_info / port_id , local_link_connection converges
  • Update physical_network per port
  • Set or correct category (like I it forced to network )
  • Set / updatee switch_id optional per-port override; explicit wins, else preserve
  • Edit a port's MAC in place same label + new unique MAC (NIC replacement)
  • Update resource_class node-level
  • Set/update external_cmdb_id including 0
  • Re-run safely no-op when nothing changed
  • Recover a partial failure resubmit same name, no cleanup needed
  • Drive node to available state-aware manage/provide, auto steps available , manageable for edits [No manual step-down required ]

Manual Operation

  • Delete a port (shrink) workflow warns + keeps the orphan; openstack baremetal port delete (node must be manageable)
  • Rename a port label fails safely with a clear error; rename via openstack, or delete + re-add
  • Move/swap a MAC between existing ports on the same node fails safely; do it by hand
  • Reuse a MAC that's on another port fails; delete/rename that port first
  • Name collides with a non-netdev (server) node refused; pick a different name
  • Node in an in-use state (active, deploying) refused; handle that node separately
  • Remove/unset external_cmdb_id workflow only sets, never clears; unset via openstack
  • Delete the node always manual

Detailed Testing logs :

Fresh enroll (2 labeled ports)

~ 🐍 openstack on ☁️  uc-dev-infra(baremetal) took 5s
❯ argo -n argo-events submit --from wftmpl/enroll-netdev \
  -p name=nidhi-nd \
  -p physical_network=fake-physnet \
  -p ports='[{"label":"port1","mac":"02:de:ad:be:ef:01","switch":"sw-1","intf":"Eth1/1"},{"label":"port2","mac":"02:de:ad:be:ef:02","switch":"sw-2","intf":"Eth1/2"}]'


~ 🐍 openstack on ☁️  uc-dev-infra(baremetal) took 6s
❯ openstack baremetal port list --node bf257688-2716-4527-b101-20d742e90d47  --long
+----------+----------+------------+-------+-----------+----------+--------+-----------------------+----------------+-------------+------------------+------------+---------------+-------------+----------------+
| uuid     | address  | created_at | extra | node_uuid | category | vendor | local_link_connection | portgroup_uuid | pxe_enabled | physical_network | updated_at | internal_info | is_smartnic | name           |
+----------+----------+------------+-------+-----------+----------+--------+-----------------------+----------------+-------------+------------------+------------+---------------+-------------+----------------+
| 63df04bc | 02:de:ad | 2026-07-   |       | bf257688- | network  | None   | {'switch_id':         | None           | True        | fake-physnet     | None       | {}            | False       | nidhi-nd:port1 |
| -14e7-   | :be:ef:0 | 27T13:58:5 |       | 2716-     |          |        | '00:00:00:00:00:00',  |                |             |                  |            |               |             |                |
| 4dff-    | 1        | 4+00:00    |       | 4527-     |          |        | 'switch_info':        |                |             |                  |            |               |             |                |
| b278-    |          |            |       | b101-     |          |        | 'sw-1', 'port_id':    |                |             |                  |            |               |             |                |
| 32b53434 |          |            |       | 20d742e90 |          |        | 'Eth1/1'}             |                |             |                  |            |               |             |                |
| ed4c     |          |            |       | d47       |          |        |                       |                |             |                  |            |               |             |                |
| 3724dc18 | 02:de:ad | 2026-07-   |       | bf257688- | network  | None   | {'switch_id':         | None           | True        | fake-physnet     | None       | {}            | False       | nidhi-nd:port2 |
| -bcbb-   | :be:ef:0 | 27T13:58:5 |       | 2716-     |          |        | '00:00:00:00:00:00',  |                |             |                  |            |               |             |                |
| 4533-    | 2        | 5+00:00    |       | 4527-     |          |        | 'switch_info':        |                |             |                  |            |               |             |                |
| 9942-    |          |            |       | b101-     |          |        | 'sw-2', 'port_id':    |                |             |                  |            |               |             |                |
| e9d2e2af |          |            |       | 20d742e90 |          |        | 'Eth1/2'}             |                |             |                  |            |               |             |                |
| 2af7     |          |            |       | d47       |          |        |                       |                |             |                  |            |               |             |                |
+----------+----------+------------+-------+-----------+----------+--------+-----------------------+----------------+-------------+------------------+------------+---------------+-------------+----------------+

~ 🐍 openstack on ☁️  uc-dev-infra(baremetal) took 4s
❯ openstack --os-cloud uc-dev-infra baremetal node show nidhi-nd -c provision_state -c driver -c resource_class -c extra
+-----------------+-----------+
| Field           | Value     |
+-----------------+-----------+
| driver          | netdev    |
| extra           | {}        |
| provision_state | available |
| resource_class  | generic   |
+-----------------+-----------+
(openstack)  

Rerunning the same command is no-op

update CMDB id

~ 🐍 openstack on ☁️  uc-dev-infra(baremetal) took 9s
❯ openstack --os-cloud uc-dev-infra baremetal node show nidhi-nd-cmdb -c extra
+-------+----------------------------------+
| Field | Value                            |
+-------+----------------------------------+
| extra | {'external_cmdb_id': 'CMDB-123'} |
+-------+----------------------------------+

update Metadata-only (resource_class) on available

~ 🐍 openstack on ☁️  uc-dev-infra(baremetal) took 6s
❯ argo -n argo-events submit --from wftmpl/enroll-netdev \
  -p name=nidhi-nd \
  -p physical_network=fake-physnet \
  -p resource_class=switch \
  -p ports='[{"label":"port1","mac":"02:de:ad:be:ef:01","switch":"sw-1","intf":"Eth1/1"},{"label":"port2","mac":"02:de:ad:be:ef:02","switch":"sw-2","intf":"Eth1/2"}]'


~ 🐍 openstack on ☁️  uc-dev-infra(baremetal)
❯ openstack --os-cloud uc-dev-infra baremetal node show nidhi-nd -c provision_state -c driver -c resource_class -c extra
+-----------------+-----------+
| Field           | Value     |
+-----------------+-----------+
| driver          | netdev    |
| extra           | {}        |
| provision_state | available |
| resource_class  | switch    |
+-----------------+-----------+

Update ports metadata , steping dowm to manageable (argo log )

~ 🐍 openstack on ☁️  uc-dev-infra(baremetal) took 5s
❯ argo -n argo-events submit --from wftmpl/enroll-netdev \
  -p name=nidhi-nd \
  -p physical_network=fake-physnet \
  -p resource_class=switch \
  -p ports='[{"label":"port1","mac":"02:de:ad:be:ef:01","switch":"NEW-sw-1","intf":"Eth9/9"},{"label":"port2","mac":"02:de:ad:be:ef:02","switch":"sw-2","intf":"Eth1/2"}]'

~ 🐍 openstack on ☁️  uc-dev-infra(baremetal) took 4s
❯ argo -n argo-events logs enroll-netdev-5qhdm -f
Flag --oidc-use-pkce has been deprecated, use --oidc-pkce-method instead. For the most providers, you don't need to set the flag.
enroll-netdev-5qhdm-enroll-netdev-930250783: 2026-07-27 14:07:17 +0000 - understack_workflows.main.enroll_netdev - INFO - Starting enroll-netdev workflow name=nidhi-nd physical_network=fake-physnet resource_class=switch port_count=2
enroll-netdev-5qhdm-enroll-netdev-930250783: 2026-07-27 14:07:17 +0000 - understack_workflows.main.enroll_netdev - INFO - No external_cmdb_id provided
enroll-netdev-5qhdm-enroll-netdev-930250783: 2026-07-27 14:07:18 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Reusing existing netdev node name=nidhi-nd provision_state=available
enroll-netdev-5qhdm-enroll-netdev-930250783: 2026-07-27 14:07:18 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Port name=nidhi-nd:port2 mac=02:de:ad:be:ef:02 already up to date, skipping
enroll-netdev-5qhdm-enroll-netdev-930250783: 2026-07-27 14:07:18 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Stepping available  manageable to apply port changes
enroll-netdev-5qhdm-enroll-netdev-930250783: 2026-07-27 14:07:19 +0000 - understack_workflows.ironic_node - INFO - bf257688-2716-4527-b101-20d742e90d47 requesting provision state manage
enroll-netdev-5qhdm-enroll-netdev-930250783: 2026-07-27 14:07:19 +0000 - understack_workflows.ironic_node - INFO - Waiting for node bf257688-2716-4527-b101-20d742e90d47 to enter provision state manageable
enroll-netdev-5qhdm-enroll-netdev-930250783: 2026-07-27 14:07:20 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Updating existing port uuid=63df04bc-14e7-4dff-b278-32b53434ed4c mac=02:de:ad:be:ef:01 patch=[{'op': 'add', 'path': '/local_link_connection', 'value': {'switch_id': '00:00:00:00:00:00', 'switch_info': 'NEW-sw-1', 'port_id': 'Eth9/9'}}]
enroll-netdev-5qhdm-enroll-netdev-930250783: 2026-07-27 14:07:22 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Requesting provide transition, expecting available
enroll-netdev-5qhdm-enroll-netdev-930250783: 2026-07-27 14:07:22 +0000 - understack_workflows.ironic_node - INFO - bf257688-2716-4527-b101-20d742e90d47 requesting provision state provide
enroll-netdev-5qhdm-enroll-netdev-930250783: 2026-07-27 14:07:23 +0000 - understack_workflows.ironic_node - INFO - Waiting for node bf257688-2716-4527-b101-20d742e90d47 to enter provision state available
enroll-netdev-5qhdm-enroll-netdev-930250783: 2026-07-27 14:07:23 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Node is available
enroll-netdev-5qhdm-enroll-netdev-930250783: 2026-07-27 14:07:23 +0000 - understack_workflows.main.enroll_netdev - INFO - Completed enroll-netdev workflow name=nidhi-nd node_uuid=bf257688-2716-4527-b101-20d742e90d47
enroll-netdev-5qhdm-enroll-netdev-930250783: time="2026-07-27T14:07:24.629Z" level=info msg="sub-process exited" argo=true error="<nil>"



+----------------+----------------+----------------+-------+----------------+----------+--------+-----------------------+----------------+-------------+------------------+----------------+---------------+-------------+----------------+
| uuid           | address        | created_at     | extra | node_uuid      | category | vendor | local_link_connection | portgroup_uuid | pxe_enabled | physical_network | updated_at     | internal_info | is_smartnic | name           |
+----------------+----------------+----------------+-------+----------------+----------+--------+-----------------------+----------------+-------------+------------------+----------------+---------------+-------------+----------------+
| 63df04bc-14e7- | 02:de:ad:be:ef | 2026-07-       |       | bf257688-2716- | network  | None   | {'switch_id':         | None           | True        | fake-physnet     | 2026-07-       | {}            | False       | nidhi-nd:port1 |
| 4dff-b278-     | :01            | 27T13:58:54+00 |       | 4527-b101-     |          |        | '00:00:00:00:00:00',  |                |             |                  | 27T14:07:21+00 |               |             |                |
| 32b53434ed4c   |                | :00            |       | 20d742e90d47   |          |        | 'switch_info': 'NEW-  |                |             |                  | :00            |               |             |                |
|                |                |                |       |                |          |        | sw-1', 'port_id':     |                |             |                  |                |               |             |                |
|                |                |                |       |                |          |        | 'Eth9/9'}             |                |             |                  |                |               |             |                |
| 3724dc18-bcbb- | 02:de:ad:be:ef | 2026-07-       |       | bf257688-2716- | network  | None   | {'switch_id':         | None           | True        | fake-physnet     | None           | {}            | False       | nidhi-nd:port2 |
| 4533-9942-     | :02            | 27T13:58:55+00 |       | 4527-b101-     |          |        | '00:00:00:00:00:00',  |                |             |                  |                |               |             |                |
| e9d2e2af2af7   |                | :00            |       | 20d742e90d47   |          |        | 'switch_info':        |                |             |                  |                |               |             |                |
|                |                |                |       |                |          |        | 'sw-2', 'port_id':    |                |             |                  |                |               |             |                |
|                |                |                |       |                |          |        | 'Eth1/2'}             |                |             |                  |                |               |             |                |
+----------------+----------------+----------------+-------+----------------+----------+--------+-----------------------+----------------+-------------+------------------+----------------+---------------+-------------+----------------+



Updating switch Id on port 1:

~ 🐍 openstack on ☁️  uc-dev-infra(baremetal) took 5s
❯ argo -n argo-events submit --from wftmpl/enroll-netdev \
  -p name=nidhi-nd \
  -p physical_network=fake-physnet \
  -p resource_class=switch \
  -p ports='[{"label":"port1","mac":"02:de:ad:be:ef:01","switch":"NEW-sw-1","intf":"Eth9/9","switch_id":"aa:bb:cc:dd:ee:ff"},{"label":"port2","mac":"02:de:ad:be:ef:02","switch":"sw-2","intf":"Eth1/2"}]'

Argo log : 
enroll-netdev-l84rc-enroll-netdev-3502888293: 2026-07-27 14:10:01 +0000 - understack_workflows.main.enroll_netdev - INFO - Starting enroll-netdev workflow name=nidhi-nd physical_network=fake-physnet resource_class=switch port_count=2
enroll-netdev-l84rc-enroll-netdev-3502888293: 2026-07-27 14:10:01 +0000 - understack_workflows.main.enroll_netdev - INFO - No external_cmdb_id provided
enroll-netdev-l84rc-enroll-netdev-3502888293: 2026-07-27 14:10:02 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Reusing existing netdev node name=nidhi-nd provision_state=available
enroll-netdev-l84rc-enroll-netdev-3502888293: 2026-07-27 14:10:02 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Port name=nidhi-nd:port2 mac=02:de:ad:be:ef:02 already up to date, skipping
enroll-netdev-l84rc-enroll-netdev-3502888293: 2026-07-27 14:10:02 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Stepping available  manageable to apply port changes
enroll-netdev-l84rc-enroll-netdev-3502888293: 2026-07-27 14:10:03 +0000 - understack_workflows.ironic_node - INFO - bf257688-2716-4527-b101-20d742e90d47 requesting provision state manage
enroll-netdev-l84rc-enroll-netdev-3502888293: 2026-07-27 14:10:04 +0000 - understack_workflows.ironic_node - INFO - Waiting for node bf257688-2716-4527-b101-20d742e90d47 to enter provision state manageable
enroll-netdev-l84rc-enroll-netdev-3502888293: 2026-07-27 14:10:04 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Updating existing port uuid=63df04bc-14e7-4dff-b278-32b53434ed4c mac=02:de:ad:be:ef:01 patch=[{'op': 'add', 'path': '/local_link_connection', 'value': {'switch_id': 'aa:bb:cc:dd:ee:ff', 'switch_info': 'NEW-sw-1', 'port_id': 'Eth9/9'}}]
enroll-netdev-l84rc-enroll-netdev-3502888293: 2026-07-27 14:10:06 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Requesting provide transition, expecting available
enroll-netdev-l84rc-enroll-netdev-3502888293: 2026-07-27 14:10:06 +0000 - understack_workflows.ironic_node - INFO - bf257688-2716-4527-b101-20d742e90d47 requesting provision state provide
enroll-netdev-l84rc-enroll-netdev-3502888293: 2026-07-27 14:10:07 +0000 - understack_workflows.ironic_node - INFO - Waiting for node bf257688-2716-4527-b101-20d742e90d47 to enter provision state available
enroll-netdev-l84rc-enroll-netdev-3502888293: 2026-07-27 14:10:07 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Node is available

if we omit , anything from ports while upadting the metadata is still preserved :
Omit switch_id on re-run, preserved (change switch_info only)

~ 🐍 openstack on ☁️  uc-dev-infra(baremetal) took 5s
❯ argo -n argo-events submit --from wftmpl/enroll-netdev \
  -p name=nidhi-nd \
  -p physical_network=fake-physnet \
  -p resource_class=switch \
  -p ports='[{"label":"port1","mac":"02:de:ad:be:ef:01","switch":"NEW-sw-1","intf":"Eth9/9","switch_id":"aa:bb:cc:dd:ee:ff"},{"label":"port2","mac":"02:de:ad:be:ef:02","switch":"sw-2","intf":"Eth1/2"}]'


  argo -n argo-events submit --from wftmpl/enroll-netdev \
  -p name=nidhi-nd \
  -p physical_network=fake-physnet \
  -p resource_class=switch \
  -p ports='[{"label":"port1","mac":"02:de:ad:be:ef:01","switch":"NEWER-sw-1","intf":"Eth9/9"},{"label":"port2","mac":"02:de:ad:be:ef:02","switch":"sw-2","intf":"Eth1/2"}]'


~ 🐍 openstack on ☁️  uc-dev-infra(baremetal) took 29s
❯ openstack baremetal port list --node bf257688-2716-4527-b101-20d742e90d47  --long
+----------+----------+------------+-------+-----------+----------+--------+-----------------------+----------------+-------------+------------------+------------+---------------+-------------+--------------+
| uuid     | address  | created_at | extra | node_uuid | category | vendor | local_link_connection | portgroup_uuid | pxe_enabled | physical_network | updated_at | internal_info | is_smartnic | name         |
+----------+----------+------------+-------+-----------+----------+--------+-----------------------+----------------+-------------+------------------+------------+---------------+-------------+--------------+
| 63df04bc | 02:de:ad | 2026-07-   |       | bf257688- | network  | None   | {'switch_id':         | None           | True        | fake-physnet     | 2026-07-   | {}            | False       | nidhi-       |
| -14e7-   | :be:ef:0 | 27T13:58:5 |       | 2716-     |          |        | 'aa:bb:cc:dd:ee:ff',  |                |             |                  | 27T14:10:0 |               |             | nd:port1     |
| 4dff-    | 1        | 4+00:00    |       | 4527-     |          |        | 'switch_info': 'NEW-  |                |             |                  | 6+00:00    |               |             |              |
| b278-    |          |            |       | b101-     |          |        | sw-1', 'port_id':     |                |             |                  |            |               |             |              |
| 32b53434 |          |            |       | 20d742e90 |          |        | 'Eth9/9'}             |                |             |                  |            |               |             |              |
| ed4c     |          |            |       | d47       |          |        |                       |                |             |                  |            |               |             |              |
| 3724dc18 | 02:de:ad | 2026-07-   |       | bf257688- | network  | None   | {'switch_id':         | None           | True        | fake-physnet     | None       | {}            | False       | nidhi-       |
| -bcbb-   | :be:ef:0 | 27T13:58:5 |       | 2716-     |          |        | '00:00:00:00:00:00',  |                |             |                  |            |               |             | nd:port2     |
| 4533-    | 2        | 5+00:00    |       | 4527-     |          |        | 'switch_info':        |                |             |                  |            |               |             |              |
| 9942-    |          |            |       | b101-     |          |        | 'sw-2', 'port_id':    |                |             |                  |            |               |             |              |
| e9d2e2af |          |            |       | 20d742e90 |          |        | 'Eth1/2'}             |                |             |                  |            |               |             |              |
| 2af7     |          |            |       | d47       |          |        |                       |                |             |                  |            |               |             |              |
+----------+----------+------------+-------+-----------+----------+--------+-----------------------+----------------+-------------+------------------+------------+---------------+-------------+--------------+


MAC Edit:

argo -n argo-events submit --from wftmpl/enroll-netdev \
  -p name=nidhi-nd \
  -p physical_network=fake-physnet \
  -p resource_class=switch \
  -p ports='[{"label":"port1","mac":"02:de:ad:be:ef:09","switch":"NEWER-sw-1","intf":"Eth9/9"},{"label":"port2","mac":"02:de:ad:be:ef:02","switch":"sw-2","intf":"Eth1/2"}]'

  tack on ☁️  uc-dev-infra(baremetal) took 6s
❯ argo -n argo-events logs enroll-netdev-xc9l4 -f
Flag --oidc-use-pkce has been deprecated, use --oidc-pkce-method instead. For the most providers, you don't need to set the flag.
enroll-netdev-xc9l4-enroll-netdev-242961740: 2026-07-27 14:16:52 +0000 - understack_workflows.main.enroll_netdev - INFO - Starting enroll-netdev workflow name=nidhi-nd physical_network=fake-physnet resource_class=switch port_count=2
enroll-netdev-xc9l4-enroll-netdev-242961740: 2026-07-27 14:16:52 +0000 - understack_workflows.main.enroll_netdev - INFO - No external_cmdb_id provided
enroll-netdev-xc9l4-enroll-netdev-242961740: 2026-07-27 14:16:53 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Reusing existing netdev node name=nidhi-nd provision_state=available
enroll-netdev-xc9l4-enroll-netdev-242961740: 2026-07-27 14:16:53 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Port name=nidhi-nd:port2 mac=02:de:ad:be:ef:02 already up to date, skipping
enroll-netdev-xc9l4-enroll-netdev-242961740: 2026-07-27 14:16:53 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Stepping available  manageable to apply port changes
enroll-netdev-xc9l4-enroll-netdev-242961740: 2026-07-27 14:16:54 +0000 - understack_workflows.ironic_node - INFO - bf257688-2716-4527-b101-20d742e90d47 requesting provision state manage
enroll-netdev-xc9l4-enroll-netdev-242961740: 2026-07-27 14:16:55 +0000 - understack_workflows.ironic_node - INFO - Waiting for node bf257688-2716-4527-b101-20d742e90d47 to enter provision state manageable
enroll-netdev-xc9l4-enroll-netdev-242961740: 2026-07-27 14:16:55 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Updating existing port uuid=63df04bc-14e7-4dff-b278-32b53434ed4c mac=02:de:ad:be:ef:01 patch=[{'op': 'add', 'path': '/address', 'value': '02:de:ad:be:ef:09'}]
enroll-netdev-xc9l4-enroll-netdev-242961740: 2026-07-27 14:16:57 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Requesting provide transition, expecting available
enroll-netdev-xc9l4-enroll-netdev-242961740: 2026-07-27 14:16:57 +0000 - understack_workflows.ironic_node - INFO - bf257688-2716-4527-b101-20d742e90d47 requesting provision state provide
enroll-netdev-xc9l4-enroll-netdev-242961740: 2026-07-27 14:16:58 +0000 - understack_workflows.ironic_node - INFO - Waiting for node bf257688-2716-4527-b101-20d742e90d47 to enter provision state available
enroll-netdev-xc9l4-enroll-netdev-242961740: 2026-07-27 14:16:58 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Node is available
enroll-netdev-xc9l4-enroll-netdev-242961740: 2026-07-27 14:16:58 +0000 - understack_workflows.main.enroll_netdev - INFO - Completed enroll-netdev workflow name=nidhi-nd node_uuid=bf257688-2716-4527-b101-20d742e90d47
enroll-netdev-xc9l4-enroll-netdev-242961740: time="2026-07-27T14:16:59.369Z" level=info msg="sub-process exited" argo=true error="<nil>"

~ 🐍 openstack on ☁️  uc-dev-infra(baremetal)
❯ openstack baremetal port list --node bf257688-2716-4527-b101-20d742e90d47  --long
+-----------------------+-------------------+-----------------------+-------+-----------------------+----------+--------+-----------------------+----------------+-------------+------------------+---------------------------+---------------+-------------+----------------+
| uuid                  | address           | created_at            | extra | node_uuid             | category | vendor | local_link_connection | portgroup_uuid | pxe_enabled | physical_network | updated_at                | internal_info | is_smartnic | name           |
+-----------------------+-------------------+-----------------------+-------+-----------------------+----------+--------+-----------------------+----------------+-------------+------------------+---------------------------+---------------+-------------+----------------+
| 63df04bc-14e7-4dff-   | 02:de:ad:be:ef:09 | 2026-07-              |       | bf257688-2716-4527-   | network  | None   | {'switch_id':         | None           | True        | fake-physnet     | 2026-07-27T14:16:56+00:00 | {}            | False       | nidhi-nd:port1 |
| b278-32b53434ed4c     |                   | 27T13:58:54+00:00     |       | b101-20d742e90d47     |          |        | 'aa:bb:cc:dd:ee:ff',  |                |             |                  |                           |               |             |                |
|                       |                   |                       |       |                       |          |        | 'switch_info':        |                |             |                  |                           |               |             |                |
|                       |                   |                       |       |                       |          |        | 'NEWER-sw-1',         |                |             |                  |                           |               |             |                |
|                       |



Mac collission (port3 wants port1's MAC) , fails safely

~ 🐍 openstack on ☁️  uc-dev-infra(baremetal) took 5s
❯ argo -n argo-events submit --from wftmpl/enroll-netdev \
  -p name=nidhi-nd \
  -p physical_network=fake-physnet \
  -p resource_class=switch \
  -p ports='[{"label":"port1","mac":"02:de:ad:be:ef:09","switch":"NEWER-sw-1","intf":"Eth9/9"},{"label":"port2","mac":"02:de:ad:be:ef:02","switch":"sw-2","intf":"Eth1/2"},{"label":"port3","mac":"02:de:ad:be:ef:09","switch":"sw-3","intf":"Eth1/3"}]'

Flag --oidc-use-pkce has been deprecated, use --oidc-pkce-method instead. For the most providers, you don't need to set the flag.
Name:                enroll-netdev-v4s8m
Namespace:           argo-events
ServiceAccount:      unset
Status:              Pending
Created:             Mon Jul 27 19:49:50 +0530 (now)
Progress:
Parameters:
  name:              nidhi-nd
  physical_network:  fake-physnet
  resource_class:    switch
  ports:             [{"label":"port1","mac":"02:de:ad:be:ef:09","switch":"NEWER-sw-1","intf":"Eth9/9"},{"label":"port2","mac":"02:de:ad:be:ef:02","switch":"sw-2","intf":"Eth1/2"},{"label":"port3","mac":"02:de:ad:be:ef:09","switch":"sw-3","intf":"Eth1/3"}]
(openstack)
~ 🐍 openstack on ☁️  uc-dev-infra(baremetal) took 5s
❯ argo -n argo-events logs enroll-netdev-v4s8m -f
Flag --oidc-use-pkce has been deprecated, use --oidc-pkce-method instead. For the most providers, you don't need to set the flag.
enroll-netdev-v4s8m-enroll-netdev-479259856: Traceback (most recent call last):
enroll-netdev-v4s8m-enroll-netdev-479259856:   File "/opt/venv/bin/enroll-netdev", line 10, in <module>
enroll-netdev-v4s8m-enroll-netdev-479259856:     sys.exit(main())
enroll-netdev-v4s8m-enroll-netdev-479259856:              ^^^^^^
enroll-netdev-v4s8m-enroll-netdev-479259856:   File "/opt/venv/lib/python3.12/site-packages/understack_workflows/main/enroll_netdev.py", line 65, in main
enroll-netdev-v4s8m-enroll-netdev-479259856:     enroll(
enroll-netdev-v4s8m-enroll-netdev-479259856:   File "/opt/venv/lib/python3.12/site-packages/understack_workflows/main/enroll_netdev.py", line 141, in enroll
enroll-netdev-v4s8m-enroll-netdev-479259856:     netdev_ports = build_netdev_ports(ports)
enroll-netdev-v4s8m-enroll-netdev-479259856:                    ^^^^^^^^^^^^^^^^^^^^^^^^^
enroll-netdev-v4s8m-enroll-netdev-479259856:   File "/opt/venv/lib/python3.12/site-packages/understack_workflows/main/enroll_netdev.py", line 118, in build_netdev_ports
enroll-netdev-v4s8m-enroll-netdev-479259856:     raise ValueError(f"Duplicate MAC {entry['mac']} in ports list")
enroll-netdev-v4s8m-enroll-netdev-479259856: ValueError: Duplicate MAC 02:de:ad:be:ef:09 in ports list
enroll-netdev-v4s8m-enroll-netdev-479259856: time="2026-07-27T14:19:55.872Z" level=info msg="sub-process exited" argo=true error="<nil>"
enroll-netdev-v4s8m-enroll-netdev-479259856: Error: exit status 1
(openstack)

Grow (add port3, unique MAC)

argo -n argo-events submit --from wftmpl/enroll-netdev \
  -p name=nidhi-nd \
  -p physical_network=fake-physnet \
  -p resource_class=switch \
  -p ports='[{"label":"port1","mac":"02:de:ad:be:ef:09","switch":"NEWER-sw-1","intf":"Eth9/9"},{"label":"port2","mac":"02:de:ad:be:ef:02","switch":"sw-2","intf":"Eth1/2"},{"label":"port3","mac":"02:de:ad:be:ef:03","switch":"sw-3","intf":"Eth1/3"}]'


  ~ 🐍 openstack on ☁️  uc-dev-infra(baremetal)
❯ openstack baremetal port list --node bf257688-2716-4527-b101-20d742e90d47  --long
+------------+------------+------------+-------+------------+----------+--------+-----------------------+----------------+-------------+------------------+------------+---------------+-------------+----------------+
| uuid       | address    | created_at | extra | node_uuid  | category | vendor | local_link_connection | portgroup_uuid | pxe_enabled | physical_network | updated_at | internal_info | is_smartnic | name           |
+------------+------------+------------+-------+------------+----------+--------+-----------------------+----------------+-------------+------------------+------------+---------------+-------------+----------------+
| 63df04bc-  | 02:de:ad:b | 2026-07-   |       | bf257688-  | network  | None   | {'switch_id':         | None           | True        | fake-physnet     | 2026-07-   | {}            | False       | nidhi-nd:port1 |
| 14e7-4dff- | e:ef:09    | 27T13:58:5 |       | 2716-4527- |          |        | 'aa:bb:cc:dd:ee:ff',  |                |             |                  | 27T14:16:5 |               |             |                |
| b278-      |            | 4+00:00    |       | b101-      |          |        | 'switch_info':        |                |             |                  | 6+00:00    |               |             |                |
| 32b53434ed |            |            |       | 20d742e90d |          |        | 'NEWER-sw-1',         |                |             |                  |            |               |             |                |
| 4c         |            |            |       | 47         |          |        | 'port_id': 'Eth9/9'}  |                |             |                  |            |               |             |                |
| 3724dc18-  | 02:de:ad:b | 2026-07-   |       | bf257688-  | network  | None   | {'switch_id':         | None           | True        | fake-physnet     | None       | {}            | False       | nidhi-nd:port2 |
| bcbb-4533- | e:ef:02    | 27T13:58:5 |       | 2716-4527- |          |        | '00:00:00:00:00:00',  |                |             |                  |            |               |             |                |
| 9942-      |            | 5+00:00    |       | b101-      |          |        | 'switch_info':        |                |             |                  |            |               |             |                |
| e9d2e2af2a |            |            |       | 20d742e90d |          |        | 'sw-2', 'port_id':    |                |             |                  |            |               |             |                |
| f7         |            |            |       | 47         |          |        | 'Eth1/2'}             |                |             |                  |            |               |             |                |
| 36742226-  | 02:de:ad:b | 2026-07-   |       | bf257688-  | network  | None   | {'switch_id':         | None           | True        | fake-physnet     | None       | {}            | False       | nidhi-nd:port3 |
| e2bf-4361- | e:ef:03    | 27T14:21:4 |       | 2716-4527- |          |        | '00:00:00:00:00:00',  |                |             |                  |            |               |             |                |
| 9e06-      |            | 4+00:00    |       | b101-      |          |        | 'switch_info':        |                |             |                  |            |               |             |                |
| 88f8e1090e |            |            |       | 20d742e90d |          |        | 'sw-3', 'port_id':    |                |             |                  |            |               |             |                |
| db         |            |            |       | 47         |          |        | 'Eth1/3'}             |                |             |                  |            |               |             |                |
+------------+------------+------------+-------+------------+----------+--------+-----------------------+----------------+-------------+------------------+------------+---------------+-------------+----------------+

Rename a label clear error

argo -n argo-events submit --from wftmpl/enroll-netdev \
  -p name=nidhi-nd \
  -p physical_network=fake-physnet \
  -p resource_class=switch \
  -p ports='[{"label":"port1-renamed","mac":"02:de:ad:be:ef:09","switch":"NEWER-sw-1","intf":"Eth9/9"},{"label":"port2","mac":"02:de:ad:be:ef:02","switch":"sw-2","intf":"Eth1/2"}]'


enroll-netdev-5xbqh-enroll-netdev-2233511172: 2026-07-27 14:22:48 +0000 - understack_workflows.main.enroll_netdev - INFO - No external_cmdb_id provided
enroll-netdev-5xbqh-enroll-netdev-2233511172: 2026-07-27 14:22:49 +0000 - understack_workflows.main.enroll_netdev - INFO - [node:bf257688-2716-4527-b101-20d742e90d47] Reusing existing netdev node name=nidhi-nd provision_state=available
enroll-netdev-5xbqh-enroll-netdev-2233511172: Traceback (most recent call last):
enroll-netdev-5xbqh-enroll-netdev-2233511172:   File "/opt/venv/bin/enroll-netdev", line 10, in <module>
enroll-netdev-5xbqh-enroll-netdev-2233511172:     sys.exit(main())
enroll-netdev-5xbqh-enroll-netdev-2233511172:              ^^^^^^
enroll-netdev-5xbqh-enroll-netdev-2233511172:   File "/opt/venv/lib/python3.12/site-packages/understack_workflows/main/enroll_netdev.py", line 65, in main
enroll-netdev-5xbqh-enroll-netdev-2233511172:     enroll(
enroll-netdev-5xbqh-enroll-netdev-2233511172:   File "/opt/venv/lib/python3.12/site-packages/understack_workflows/main/enroll_netdev.py", line 176, in enroll
enroll-netdev-5xbqh-enroll-netdev-2233511172:     plan_netdev_port(
enroll-netdev-5xbqh-enroll-netdev-2233511172:   File "/opt/venv/lib/python3.12/site-packages/understack_workflows/main/enroll_netdev.py", line 394, in plan_netdev_port
enroll-netdev-5xbqh-enroll-netdev-2233511172:     raise RuntimeError(
enroll-netdev-5xbqh-enroll-netdev-2233511172: RuntimeError: [node:bf257688-2716-4527-b101-20d742e90d47] Cannot create port nidhi-nd:port1-renamed with MAC 02:de:ad:be:ef:09: that MAC is already used by port 63df04bc-14e7-4dff-b278-32b53434ed4c name=nidhi-nd:port1. Delete or rename that existing port manually if this is an intentional label change.
enroll-netdev-5xbqh-enroll-netdev-2233511172: time="2026-07-27T14:22:50.202Z" level=info msg="sub-process exited" argo=true error="<nil>"
enroll-netdev-5xbqh-enroll-netdev-2233511172: Error: exit status 1

@nidzrai
nidzrai marked this pull request as draft July 22, 2026 13:18
@nidzrai
nidzrai marked this pull request as ready for review July 23, 2026 09:32
@nidzrai
nidzrai force-pushed the argo-netdev-enroll-idempotent branch 5 times, most recently from 272643e to 8a1fadd Compare July 27, 2026 14:47
@nidzrai
nidzrai force-pushed the argo-netdev-enroll-idempotent branch from 8a1fadd to fe3430e Compare July 27, 2026 14:55
@nidzrai
nidzrai requested review from a team, cardoe and mfencik July 27, 2026 15:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant