-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Extensions Framework & Orchestrate Anything #9752
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Extensions Framework & Orchestrate Anything #9752
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #9752 +/- ##
============================================
+ Coverage 16.58% 16.81% +0.23%
- Complexity 13989 14403 +414
============================================
Files 5743 5806 +63
Lines 510706 515397 +4691
Branches 62119 62700 +581
============================================
+ Hits 84689 86657 +1968
- Misses 416543 418941 +2398
- Partials 9474 9799 +325
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
This pull request has merge conflicts. Dear author, please fix the conflicts and sync your branch with the base branch. |
@blueorangutan package |
@harikrishna-patnala a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress. |
Packaging result [SF]: ✔️ el8 ✔️ el9 ✖️ debian ✔️ suse15. SL-JID 11530 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@harikrishna-patnala , I noticed I had started reviewing this and abandonned it. I was about half way anf will leave you the comments now. I will revisit after 4.20 is out.
api/src/main/java/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java
Outdated
Show resolved
Hide resolved
@@ -67,6 +70,9 @@ public class UpdateHostCmd extends BaseCmd { | |||
@Parameter(name = ApiConstants.ANNOTATION, type = CommandType.STRING, description = "Add an annotation to this host", since = "4.11", authorized = {RoleType.Admin}) | |||
private String annotation; | |||
|
|||
@Parameter(name = ApiConstants.EXTERNAL_DETAILS, type = CommandType.MAP, description = "Details in key/value pairs using format externaldetails[i].keyname=keyvalue. Example: externaldetails[0].endpoint.url=urlvalue", since = "4.21.0") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
details
instead of external...
...src/main/java/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java
Outdated
Show resolved
Hide resolved
@@ -359,9 +362,21 @@ public Map<String, String> getDetails() { | |||
} | |||
} | |||
} | |||
|
|||
detailsMap.putAll(getExternalDetails()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
see? these are just details
.
} | ||
|
||
public void setDetails(Map<String, String> details) { | ||
_details = details; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
_details = details; | |
this.details = details; |
} else if (template.getFormat() == ImageFormat.BAREMETAL) { | ||
logger.debug("%s has format [{}]. Skipping ROOT volume [{}] allocation.", template.toString(), ImageFormat.BAREMETAL, rootVolumeName); | ||
} else if (template.getFormat() == ImageFormat.BAREMETAL || template.getFormat() == ImageFormat.EXTERNAL) { | ||
logger.debug(String.format("%s has format [%s]. Skipping ROOT volume [%s] allocation.", template.toString(), template.getFormat(), rootVolumeName)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
logger.debug(String.format("%s has format [%s]. Skipping ROOT volume [%s] allocation.", template.toString(), template.getFormat(), rootVolumeName)); | |
logger.debug("{} has format [{}]. Skipping ROOT volume [{}] allocation.", template.toString(), template.getFormat(), rootVolumeName); |
engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
Outdated
Show resolved
Hide resolved
engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
Outdated
Show resolved
Hide resolved
@blueorangutan package |
@rohityadavcloud a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress. |
Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ debian ✔️ suse15. SL-JID 11592 |
engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
Outdated
Show resolved
Hide resolved
engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
Outdated
Show resolved
Hide resolved
engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
Outdated
Show resolved
Hide resolved
...hestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
Outdated
Show resolved
Hide resolved
...hestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
Outdated
Show resolved
Hide resolved
server/src/main/java/com/cloud/network/guru/GuestNetworkGuru.java
Outdated
Show resolved
Hide resolved
server/src/main/java/com/cloud/network/router/NetworkHelperImpl.java
Outdated
Show resolved
Hide resolved
@DaanHoogland I see many other custom detail parameters in a few other APIs, such as vnfdetails, domaindetails, accountdetails, and a few more. In this case, I would like to keep this as a separate parameter because these are the only details that are important if the hypervisor type is External. The other parameters are just meant to fit into CloudStack's workflow. The core purpose of this feature is to send these external details to the external provisioner. |
This pull request has merge conflicts. Dear author, please fix the conflicts and sync your branch with the base branch. |
This pull request has merge conflicts. Dear author, please fix the conflicts and sync your branch with the base branch. |
[SF] Trillian test result (tid-13658)
|
@blueorangutan package |
@abh1sar a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress. |
Packaging result [SF]: ✔️ el8 ✔️ el9 ✖️ debian ✔️ suse15. SL-JID 13994 |
Signed-off-by: Abhishek Kumar <[email protected]>
Signed-off-by: Abhishek Kumar <[email protected]>
@blueorangutan package |
@shwstppr a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress. |
@blueorangutan package |
@abh1sar a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@shwstppr I won’t be getting through this today but have some questions so far. I will continue later.
@@ -60,6 +61,7 @@ public enum State { | |||
private int wait; //in second | |||
private boolean bypassHostMaintenance = false; | |||
private transient long requestSequence = 0L; | |||
protected Map<String, Map<String, String>> externalDetails; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there a reason these should be called externalDetails
, and not just details
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@DaanHoogland yes, externalDetails is more appropriate here as these are filtered details and used by extensions specific code. Many of the resources already have a details property and would be a bit confusing.
Also, Answer class that extends Command has a member named details
@@ -270,4 +270,6 @@ Network createPrivateNetwork(String networkName, String displayText, long physic | |||
List<InternalLoadBalancerElementService> getInternalLoadBalancerElements(); | |||
|
|||
boolean handleCksIsoOnNetworkVirtualRouter(Long virtualRouterId, boolean mount) throws ResourceUnavailableException; | |||
|
|||
String getNsxSegmentId(long domainId, long accountId, long zoneId, Long vpcId, long networkId); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is this a rebase issue? seems unrelated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe @harikrishna-patnala can give some insight on this. Probably idea is to get a VLAN ID equivalent identifier from SDNs and it should come from that SDN plugin instead defining it in NetworkService. I'll have a look
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Its related to the PR only but specific to Nsx. yes, if we can move it to NetworkService, it will be good. thanks @shwstppr
Packaging result [SF]: ✔️ el8 ✔️ el9 ✖️ debian ✔️ suse15. SL-JID 14007 |
Packaging result [SF]: ✔️ el8 ✔️ el9 ✖️ debian ✔️ suse15. SL-JID 14009 |
@blueorangutan package |
@abh1sar a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress. |
Packaging result [SF]: ✔️ el8 ✔️ el9 ✖️ debian ✔️ suse15. SL-JID 14016 |
Signed-off-by: Abhishek Kumar <[email protected]>
Signed-off-by: Abhishek Kumar <[email protected]>
Signed-off-by: Abhishek Kumar <[email protected]>
@blueorangutan package |
@shwstppr a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress. |
Packaging result [SF]: ✔️ el8 ✔️ el9 ✖️ debian ✔️ suse15. SL-JID 14025 |
@blueorangutan package |
@sureshanaparti a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress. |
Description
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. This design specification outlines the architecture, payload structure, execution flow, and integration guidelines necessary to implement, register, and manage extensions effectively within the CloudStack environment.
For the initial implementation of the Extensions Framework, only Orchestrator-type extensions will be supported. These extensions enable seamless integration of external VM deployment and lifecycle management systems into CloudStack
A design document is made with more details at https://cwiki.apache.org/confluence/display/CLOUDSTACK/CloudStack+Extensions+Framework+-++Orchestartor+or+External+Deployment+Integration
Documentation PR: apache/cloudstack-documentation#523
Types of changes
Feature/Enhancement Scale or Bug Severity
Feature/Enhancement Scale
Screenshots (if appropriate):
Extensions List:
Create Extension Form:
Extension View:

Add Custom Action Form:

Run Custom Action Form:

Run Action:

Built-in Extensions:
