Commit Graph

37 Commits

Author SHA1 Message Date
Wei Zhou b6018da361
NE: pass physical network and network details and payload in a JSON file 2026-05-13 08:58:06 +02:00
Wei Zhou 055f9e61d8
NE: refactor the ovn support 2026-05-13 08:58:03 +02:00
Wei Zhou ae23e19bb8 create method runVirtualMachineCustomAction 2026-05-12 10:16:27 +01:00
Wei Zhou a20e39e584 framework: Add command constants 2026-05-12 10:16:27 +01:00
Wei Zhou b6500ca7e3 extension: remove resourceId and resourceType from listExtensions 2026-05-12 10:16:27 +01:00
Marco Sinhoreli f6dc4f36ad NE: persist OVN broadcast type and URI on Network for vif.binding=lswitch
Companion to the NIC-level URI override -- when an extension declares
vif.binding=lswitch, the Network row itself should advertise
``broadcast_domain_type=Lswitch`` and ``broadcast_uri=ovn://cs-net-<id>``
so listNetworks / details views are consistent with what the OVN
control plane represents.

Without this hook the GuestNetworkGuru still allocated a VLAN at
design time, which leaks back into the UI:

   VLAN/VNI:        138
   Broadcast URI:   vlan://138

Apply the override on a successful ``implement-network`` script return
in NetworkExtensionElement.implement().  The VLAN that the guru
allocated stays as a ghost in op_dc_vnet_alloc -- it is never used on
the wire because the VIF attaches to br-int and traffic flows through
OVN's logical pipeline over geneve.  Releasing the VLAN back to the
pool would require intercepting the design phase and is out of scope
for this hook.

Verified end-to-end: i-2-27-VM on network 216 now lists

   networks.broadcast_uri          = ovn://cs-net-216
   networks.broadcast_domain_type  = Lswitch
   nics.broadcast_uri              = ovn://cs-net-216
   nics.isolation_uri              = ovn://cs-net-216

The OVN NB LSP / OVS iface-id / OVN SB Port_Binding remain bound, as
before.
2026-05-12 10:16:27 +01:00
Marco Sinhoreli c3aaf658b1 NE: persist OVN broadcast/isolation URI on NIC for vif.binding=lswitch
Delta 1 already overrides nic.setBroadcastType(Lswitch) on the
NicProfile during prepare() so the KVM agent picks the OVS Lswitch
path. But the underlying nics row still carried the cosmetic
``vlan://<id>`` URI allocated by GuestNetworkGuru at design-time, which
is misleading on listNics / DB queries: a NIC sitting on an OVN
logical switch should not advertise a VLAN URI.

Override broadcast_uri and isolation_uri on the NicProfile to
``ovn://cs-net-<networkId>`` (the convention used by the legacy
ovn-plugin) and persist the same on the nics row via nicDao.update.
The VLAN that the guru allocated stays as a ghost in
op_dc_vnet_alloc -- it is never used on the wire because the VIF
attaches to br-int and traffic flows through OVN's logical pipeline
over geneve. Releasing the VLAN back to the pool would require
intercepting the design phase, which is out of scope for this hook.

Verified end-to-end: i-2-24-VM on network 214 now lists

   broadcast_uri = ovn://cs-net-214
   isolation_uri = ovn://cs-net-214

and the OVN NB LSP / OVS iface-id / OVN SB Port_Binding remain
correctly bound to the chassis, as before.
2026-05-12 10:16:27 +01:00
Marco Sinhoreli 0edce199a0 NE: VIF binding hooks for OVS-backed extensions
CloudStack's existing OvsVifDriver already binds NICs correctly when the
NicProfile's BroadcastDomainType is Lswitch: it emits libvirt
<virtualport type='openvswitch' interfaceid='<nic.getUuid()>'/> and
libvirt sets external_ids:iface-id atomically with tap creation.  No
agent patch is required for OVS-backed extensions to consume this path
-- they just need (a) a way to opt in, and (b) nic.getUuid() carried in
per-NIC script commands so the SDN-side port identifier can match.

Add the framework hooks to enable this without any KVM agent change:

* ExtensionHelper.VIF_BINDING_DETAIL_KEY ("vif.binding") -- new
  top-level extension detail.  Currently supported value: "lswitch".

* NetworkExtensionElement.prepare(...) -- when the extension owning the
  NIC's network declares vif.binding=lswitch in its extension_details,
  override nic.setBroadcastType(Networks.BroadcastDomainType.Lswitch).
  OvsVifDriver on the KVM agent then picks the existing Lswitch path
  unchanged.  Without the opt-in, the previous default (typically Vlan)
  is preserved -- existing reference extensions like network-namespace
  are unaffected.

* NetworkExtensionElement.getNicUuidArgs(network, nic) -- helper that
  returns ["--nic-uuid", "<uuid>"] only when vif.binding=lswitch is
  declared.  Wired into add-dhcp-entry, remove-dhcp-entry,
  add-dns-entry, save-vm-data, save-password, save-userdata,
  save-sshkey, and save-hypervisor-hostname.  Extensions that do not
  declare the hint never see --nic-uuid, so backwards-compatible.

* README -- new section "VIF Binding for OVS-backed Extensions"
  documenting the contract end-to-end: cmk createExtension snippet,
  what prepare() does, how --nic-uuid flows, why the extension never
  writes iface-id remotely on the boot path.  Also notes the new
  argument in the add-dhcp-entry table.

Result: an OVN extension (or any future OVS-backed extension) gets
correct VIF binding by adding a single detail key at extension creation
time.  No host-side agent patch, no libvirt patch, no OVS schema
change.
2026-05-12 10:16:27 +01:00
Wei Zhou 7f9d3e350f Update framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/network/README.md 2026-05-12 10:16:27 +01:00
Wei Zhou de2eced11b NE: check vpc CustomAction provider instead of first tier and cleanup UI 2026-05-12 10:16:27 +01:00
Wei Zhou 600a65226b NE: apply copilot's suggestions 2026-05-12 10:16:27 +01:00
Wei Zhou d409852b45 NE: more unit tests and UI optimization 2026-05-12 10:16:27 +01:00
Wei Zhou eb300ca1e7 network extension: add service CustomAction 2026-05-12 10:16:27 +01:00
Wei Zhou 5a3fdc0485 api/server: apply suggestions 2026-05-12 10:16:27 +01:00
Wei Zhou ffc5d8eee3 ExtensionsManagerImpl: minor changes 2026-05-12 10:16:27 +01:00
Wei Zhou 966be69605 add unit tests 2026-05-12 10:16:27 +01:00
Wei Zhou b3dea2673b gha: fix EOF and license 2026-05-12 10:16:27 +01:00
Wei Zhou b39eeac0d7 Network Extension: Orchestrate external Network devices 2026-05-12 10:16:27 +01:00
Suresh Kumar Anaparti a4a52c9665
Merge branch '4.22' 2026-05-08 20:57:36 +05:30
Daan Hoogland 3e688b0197 Merge tag '4.22.0.1' into 4.22 2026-05-06 11:13:45 +02:00
Abhishek Kumar 2eef7aa9a2 adding default deny keys also when there are no other keys 2026-04-30 13:52:39 +02:00
Daan Hoogland 82bfa9fb3f Merge branch '4.22' 2026-04-14 14:50:44 +02:00
Daan Hoogland 1085da4ef8 Merge commit '19b4ef106931aa1d6a8fed06984009d86760e4de' into 4.22 2026-04-14 13:15:05 +02:00
Daan Hoogland d6f4fc3ac4 Updating pom.xml version numbers for release 22.0.1 2026-04-13 11:53:00 +02:00
Abhishek Kumar 95816b44e9 extensions: allow reserved resource details
Adds a new request parameter for create/updateExtension API to allow
operator to provide detail names for the extension resources which will be reserved to be used by the extension. The end user won't be able to view or add details with these details names for the resource.

Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
2026-02-22 18:08:03 +01:00
Erik Böck e32d08e50e
Create new generic method for resource UUID obtention in event's descriptions (#12502) 2026-02-05 11:23:40 +01:00
Harikrishna Patnala dbda673e1f Updating pom.xml version numbers for release 4.23.0.0-SNAPSHOT
Signed-off-by: Harikrishna Patnala <harikrishna.patnala@gmail.com>
2025-11-05 16:54:39 +05:30
Harikrishna Patnala d160731b9f Updating pom.xml version numbers for release 4.22.1.0-SNAPSHOT
Signed-off-by: Harikrishna Patnala <harikrishna.patnala@gmail.com>
2025-11-05 16:07:07 +05:30
Harikrishna Patnala 71f47d6130 Updating pom.xml version numbers for release 4.22.0.0
Signed-off-by: Harikrishna Patnala <harikrishna.patnala@gmail.com>
2025-10-30 19:23:56 +05:30
Abhishek Kumar d8766418e0 extensions: custom action entity access 2025-10-17 14:08:28 +05:30
Abhishek Kumar 0ca63f36a5
api,server,ui: allow cleaning up external details for host and serviceoffering (#11548) 2025-10-13 16:21:43 +02:00
Abhishek Kumar a15fbd9bcc
refactor: remove use of term entry-point from extensions code base (#11488)
Addresses #11483

Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
2025-10-08 15:42:43 +05:30
Abhishek Kumar 928972f767
extension/proxmox: add console access for instances (#11601)
This PR introduces console access support for instances deployed using Orchestrator Extensions, available via either VNC or a direct URL.

- CloudStack queries the extension using the getconsole action.
- For VNC-based access, the extension must return host/port/ticket details. CloudStack then forwards these to the Console Proxy VM (CPVM) in the instance’s zone. It is assumed that the CPVM can reach the specified host and port.
- For direct URL access, the extension returns a console URL with the protocol set to `direct`. The URL is then provided directly to the user.
- The built-in Proxmox Orchestrator Extension now supports console access via VNC. The extension calls the Proxmox API to fetch console details and returns them in the required format.

Also, adds changes to send caller details to the extension payload.
```
# cat /var/lib/cloudstack/management/extensions/Proxmox/02b650f6-bb98-49cb-8cac-82b7a78f43a2.json | jq
{
  "caller": {
    "roleid": "6b86674b-7e61-11f0-ba77-1e00c8000158",
    "rolename": "Root Admin",
    "name": "admin",
    "roletype": "Admin",
    "id": "93567ed9-7e61-11f0-ba77-1e00c8000158",
    "type": "ADMIN"
  },
  "virtualmachineid": "126f4562-1f0f-4313-875e-6150cabeb72f",
  ...
```

Documentation PR: https://github.com/apache/cloudstack-documentation/pull/560

---------

Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
2025-09-27 08:54:27 +05:30
Suresh Kumar Anaparti 1033be4b31
Updating pom.xml version numbers for release 4.22.0.0-SNAPSHOT
Signed-off-by: Suresh Kumar Anaparti <sureshkumar.anaparti@gmail.com>
2025-08-28 12:00:42 +05:30
Suresh Kumar Anaparti f9513b47bf
Updating pom.xml version numbers for release 4.21.0.0
Signed-off-by: Suresh Kumar Anaparti <sureshkumar.anaparti@gmail.com>
2025-08-22 11:42:37 +05:30
Abhishek Kumar 4aed972e78
api,server,extensions: allow updating extension resource map details (#11303)
* api,server,extensions: allow updating extension resource map details

This PR makes changes for allowing updating details for an extension resource mapping.
Currently, extensions only support Cluster to be registered therefore changes has been added to updateCluster functionality.

Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
2025-07-29 10:25:52 +05:30
Harikrishna cca8b2fef9
Extensions Framework & Orchestrate Anything (#9752)
The Extensions Framework in Apache CloudStack is designed to provide a flexible and standardised mechanism for integrating external systems and custom workflows into CloudStack’s orchestration process. By defining structured hook points during key operations—such as virtual machine deployment, resource preparation, and lifecycle events—the framework allows administrators and developers to extend CloudStack’s behaviour without modifying its core codebase.
2025-07-28 10:41:17 +05:30