This is an automated email from the ASF dual-hosted git repository. sureshanaparti pushed a change to branch healthcheck-main in repository https://gitbox.apache.org/repos/asf/cloudstack.git
discard 53dfb0b5c29 4.21/main Health Check, please don't merge this! add cca8b2fef90 Extensions Framework & Orchestrate Anything (#9752) add 9cdc285ca9e 4.21/main Health Check, please don't merge this! This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (53dfb0b5c29) \ N -- N -- N refs/heads/healthcheck-main (9cdc285ca9e) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omit" are not gone; other references still refer to them. Any revisions marked "discard" are gone forever. No new revisions were added by this update. Summary of changes: .github/workflows/ci.yml | 5 +- api/src/main/java/com/cloud/agent/api/Command.java | 14 +- .../com/cloud/agent/api/to/VirtualMachineTO.java | 14 + api/src/main/java/com/cloud/event/EventTypes.java | 28 +- .../main/java/com/cloud/hypervisor/Hypervisor.java | 1 + .../main/java/com/cloud/network/NetworkModel.java | 2 + .../java/com/cloud/network/NetworkService.java | 9 +- .../java/com/cloud/network/nsx/NsxService.java | 4 +- api/src/main/java/com/cloud/storage/Storage.java | 1 + .../com/cloud/template/VirtualMachineTemplate.java | 2 + .../main/java/com/cloud/vm/VmDetailConstants.java | 8 + .../java/org/apache/cloudstack/acl/RoleType.java | 27 + .../org/apache/cloudstack/alert/AlertService.java | 1 + .../cloudstack/api/ApiCommandResourceType.java | 4 +- .../org/apache/cloudstack/api/ApiConstants.java | 26 +- .../java/org/apache/cloudstack/api/BaseCmd.java | 11 + .../api/command/admin/cluster/AddClusterCmd.java | 32 +- .../api/command/admin/cluster/ListClustersCmd.java | 37 +- .../api/command/admin/host/AddHostCmd.java | 12 +- .../api/command/admin/host/UpdateHostCmd.java | 15 +- .../admin/offering/CreateServiceOfferingCmd.java | 16 +- .../admin/offering/UpdateServiceOfferingCmd.java | 11 + .../api/command/admin/vm/MigrateVMCmd.java | 5 + .../command/user/config/ListCapabilitiesCmd.java | 1 + .../command/user/template/ListTemplatesCmd.java | 12 +- .../command/user/template/RegisterTemplateCmd.java | 23 +- .../api/command/user/vm/DeployVMCmd.java | 73 +- .../cloudstack/api/command/user/vm/ListVMsCmd.java | 10 + .../api/response/CapabilitiesResponse.java | 9 + .../cloudstack/api/response/ClusterResponse.java | 34 + .../response/CreateConsoleEndpointResponse.java | 2 +- .../ExtensionCustomActionParameterResponse.java | 58 + .../response/ExtensionCustomActionResponse.java | 184 ++ .../api/response/ExtensionResourceResponse.java | 95 + .../cloudstack/api/response/ExtensionResponse.java | 182 ++ .../cloudstack/api/response/HostResponse.java | 35 +- .../response/RouterHealthCheckResultResponse.java | 2 +- .../cloudstack/api/response/TemplateResponse.java | 22 + .../api/response/UnmanageVMInstanceResponse.java | 2 +- .../CustomActionResultResponse.java} | 51 +- .../org/apache/cloudstack/extension/Extension.java | 44 + .../extension/ExtensionCustomAction.java | 386 +++++ .../cloudstack/extension/ExtensionHelper.java | 21 +- .../cloudstack/extension/ExtensionResourceMap.java | 34 + .../command/admin/cluster/ListClustersCmdTest.java | 83 + .../extension/ExtensionCustomActionTest.java | 484 ++++++ build/replace.properties | 1 + client/conf/server.properties.in | 3 + client/pom.xml | 5 + .../api/PrepareExternalProvisioningAnswer.java | 51 + .../api/PrepareExternalProvisioningCommand.java | 28 +- .../com/cloud/agent/api/RunCustomActionAnswer.java | 25 +- .../cloud/agent/api/RunCustomActionCommand.java | 44 +- .../main/java/com/cloud/agent/api/StopCommand.java | 17 +- debian/cloudstack-common.install | 1 + debian/cloudstack-management.install | 2 + debian/cloudstack-management.postinst | 3 + debian/rules | 3 + .../com/cloud/hypervisor/ExternalProvisioner.java | 61 + .../java/com/cloud/template/TemplateManager.java | 3 +- engine/orchestration/pom.xml | 5 + .../com/cloud/agent/manager/AgentManagerImpl.java | 20 +- .../agent/manager/ClusteredAgentManagerImpl.java | 9 +- .../com/cloud/vm/VirtualMachineManagerImpl.java | 234 ++- .../engine/orchestration/NetworkOrchestrator.java | 24 +- .../cloud/vm/VirtualMachineManagerImplTest.java | 315 +++- .../src/main/java/com/cloud/dc/dao/ClusterDao.java | 2 + .../main/java/com/cloud/dc/dao/ClusterDaoImpl.java | 25 + .../java/com/cloud/host/dao/HostDetailsDao.java | 3 + .../com/cloud/host/dao/HostDetailsDaoImpl.java | 32 + .../dao/PhysicalNetworkTrafficTypeDaoImpl.java | 2 +- .../main/java/com/cloud/storage/VMTemplateVO.java | 13 +- .../java/com/cloud/storage/dao/VMTemplateDao.java | 2 + .../com/cloud/storage/dao/VMTemplateDaoImpl.java | 11 + .../resourcedetail/ResourceDetailsDao.java | 3 + .../resourcedetail/ResourceDetailsDaoBase.java | 14 + .../resources/META-INF/db/schema-42010to42100.sql | 315 ++++ .../META-INF/db/views/cloud.template_view.sql | 6 +- .../cloud/storage/dao/VMTemplateDaoImplTest.java | 17 + .../storage/image/TemplateServiceImpl.java | 4 +- .../storage/image/store/TemplateObject.java | 5 + extensions/HyperV/hyperv.py | 302 ++++ extensions/Proxmox/proxmox.sh | 413 +++++ framework/extensions/pom.xml | 54 + .../extensions/api/AddCustomActionCmd.java | 175 ++ .../extensions/api/CreateExtensionCmd.java | 140 ++ .../extensions/api/DeleteCustomActionCmd.java | 96 ++ .../extensions/api/DeleteExtensionCmd.java | 104 ++ .../extensions/api/ListCustomActionCmd.java | 110 ++ .../extensions/api/ListExtensionsCmd.java | 114 ++ .../extensions/api/RegisterExtensionCmd.java | 118 ++ .../extensions/api/RunCustomActionCmd.java | 121 ++ .../extensions/api/UnregisterExtensionCmd.java | 109 ++ .../extensions/api/UpdateCustomActionCmd.java | 197 +++ .../extensions/api/UpdateExtensionCmd.java | 136 ++ .../command/CleanupExtensionFilesCommand.java | 20 +- .../extensions/command/ExtensionBaseCommand.java | 63 + .../command/ExtensionRoutingUpdateCommand.java | 23 +- .../command/ExtensionServerActionBaseCommand.java | 24 +- .../command/GetExtensionPathChecksumCommand.java | 20 +- .../command/PrepareExtensionPathCommand.java | 20 +- .../extensions/dao/ExtensionCustomActionDao.java | 18 +- .../dao/ExtensionCustomActionDaoImpl.java | 59 + .../dao/ExtensionCustomActionDetailsDao.java | 19 +- .../dao/ExtensionCustomActionDetailsDaoImpl.java | 23 +- .../framework/extensions/dao/ExtensionDao.java | 17 +- .../framework/extensions/dao/ExtensionDaoImpl.java | 45 + .../extensions/dao/ExtensionDetailsDao.java | 19 +- .../extensions/dao/ExtensionDetailsDaoImpl.java | 23 +- .../extensions/dao/ExtensionResourceMapDao.java | 19 +- .../dao/ExtensionResourceMapDaoImpl.java | 70 + .../dao/ExtensionResourceMapDetailsDao.java | 19 +- .../dao/ExtensionResourceMapDetailsDaoImpl.java | 23 +- .../extensions/manager/ExtensionsManager.java | 90 + .../extensions/manager/ExtensionsManagerImpl.java | 1593 +++++++++++++++++ .../vo/ExtensionCustomActionDetailsVO.java | 97 ++ .../extensions/vo/ExtensionCustomActionVO.java | 215 +++ .../extensions/vo/ExtensionDetailsVO.java | 97 ++ .../vo/ExtensionResourceMapDetailsVO.java | 97 ++ .../extensions/vo/ExtensionResourceMapVO.java | 122 ++ .../framework/extensions/vo/ExtensionVO.java | 179 ++ .../spring-framework-extensions-core-context.xml | 36 + .../extensions/api/AddCustomActionCmdTest.java | 224 +++ .../extensions/api/CreateExtensionCmdTest.java | 97 ++ .../extensions/api/DeleteCustomActionCmdTest.java | 81 + .../extensions/api/DeleteExtensionCmdTest.java | 90 + .../extensions/api/ListCustomActionCmdTest.java | 153 ++ .../extensions/api/ListExtensionsCmdTest.java | 92 + .../extensions/api/RegisterExtensionCmdTest.java | 133 ++ .../extensions/api/RunCustomActionCmdTest.java | 127 ++ .../extensions/api/UnregisterExtensionCmdTest.java | 124 ++ .../extensions/api/UpdateCustomActionCmdTest.java | 240 +++ .../extensions/api/UpdateExtensionCmdTest.java | 168 ++ .../command/ExtensionBaseCommandTest.java | 78 + .../dao/ExtensionCustomActionDaoImplTest.java | 68 + .../extensions/dao/ExtensionDaoImplTest.java | 51 + .../dao/ExtensionResourceMapDaoImplTest.java | 86 + .../manager/ExtensionsManagerImplTest.java | 1809 ++++++++++++++++++++ framework/pom.xml | 1 + packaging/debian/replace.properties | 1 + packaging/el8/cloud.spec | 8 + packaging/el8/replace.properties | 1 + plugins/hypervisors/external/pom.xml | 44 + .../agent/manager/ExternalAgentManager.java | 17 +- .../agent/manager/ExternalAgentManagerImpl.java | 55 + .../agent/manager/ExternalServerPlanner.java | 183 ++ .../agent/manager/ExternalTemplateAdapter.java | 279 +++ .../cloudstack/guru/ExternalHypervisorGuru.java | 114 ++ .../discoverer/ExternalServerDiscoverer.java | 294 ++++ .../ExternalPathPayloadProvisioner.java | 832 +++++++++ .../external/resource/ExternalResource.java | 376 ++++ .../core/spring-external-core-context.xml | 31 + .../cloudstack/external-compute/module.properties | 16 +- .../spring-external-compute-context.xml | 31 + .../external-discoverer/module.properties | 16 +- .../spring-external-discoverer-context.xml | 34 + .../cloudstack/external-planner/module.properties | 16 +- .../spring-external-planner-context.xml | 34 + .../cloudstack/external-storage/module.properties | 16 +- .../spring-external-storage-context.xml | 32 + .../agent/manager/ExternalTemplateAdapterTest.java | 173 ++ .../discoverer/ExternalServerDiscovererTest.java | 182 ++ .../ExternalPathPayloadProvisionerTest.java | 750 ++++++++ .../external/resource/ExternalResourceTest.java | 93 + .../java/com/cloud/hypervisor/guru/VMwareGuru.java | 2 +- .../apache/cloudstack/service/NsxServiceImpl.java | 33 +- plugins/pom.xml | 1 + .../hypervisor/external/provisioner/provisioner.sh | 147 ++ server/pom.xml | 6 + .../java/com/cloud/alert/AlertManagerImpl.java | 14 +- .../main/java/com/cloud/api/ApiResponseHelper.java | 1 + .../java/com/cloud/api/query/QueryManagerImpl.java | 55 +- .../com/cloud/api/query/dao/HostJoinDaoImpl.java | 9 +- .../cloud/api/query/dao/TemplateJoinDaoImpl.java | 8 +- .../com/cloud/api/query/vo/TemplateJoinVO.java | 21 + .../com/cloud/capacity/CapacityManagerImpl.java | 17 + .../main/java/com/cloud/configuration/Config.java | 2 +- .../configuration/ConfigurationManagerImpl.java | 53 +- .../deploy/DeploymentPlanningManagerImpl.java | 12 +- .../java/com/cloud/deploy/FirstFitPlanner.java | 2 +- .../java/com/cloud/network/NetworkModelImpl.java | 26 +- .../java/com/cloud/network/NetworkServiceImpl.java | 26 +- .../com/cloud/network/as/AutoScaleManagerImpl.java | 4 + .../cloud/network/router/NetworkHelperImpl.java | 12 +- .../java/com/cloud/network/vpc/VpcManagerImpl.java | 1 + .../java/com/cloud/resource/DiscovererBase.java | 20 +- .../com/cloud/resource/ResourceManagerImpl.java | 157 +- .../com/cloud/server/ManagementServerImpl.java | 36 +- .../java/com/cloud/storage/TemplateProfile.java | 11 +- .../com/cloud/storage/VolumeApiServiceImpl.java | 24 +- .../cloud/template/HypervisorTemplateAdapter.java | 136 +- .../java/com/cloud/template/TemplateAdapter.java | 5 +- .../com/cloud/template/TemplateAdapterBase.java | 206 ++- .../com/cloud/template/TemplateManagerImpl.java | 31 +- .../main/java/com/cloud/vm/UserVmManagerImpl.java | 31 +- .../cloud/vm/snapshot/VMSnapshotManagerImpl.java | 15 +- .../affinity/AffinityGroupServiceImpl.java | 7 + .../consoleproxy/ConsoleAccessManagerImpl.java | 6 + .../core/spring-server-core-managers-context.xml | 5 + .../com/cloud/api/query/QueryManagerImplTest.java | 256 +-- .../ConfigurationManagerImplTest.java | 51 + .../com/cloud/network/MockNetworkModelImpl.java | 5 + .../com/cloud/network/NetworkModelImplTest.java | 139 +- .../com/cloud/network/NetworkServiceImplTest.java | 51 + .../cloud/template/TemplateManagerImplTest.java | 28 +- .../java/com/cloud/vm/UserVmManagerImplTest.java | 2 +- .../java/com/cloud/vpc/MockNetworkManagerImpl.java | 16 +- .../java/com/cloud/vpc/MockNetworkModelImpl.java | 5 + test/integration/smoke/test_extension_custom.py | 619 +++++++ .../test_extension_custom_action_lifecycle.py | 281 +++ test/integration/smoke/test_extension_lifecycle.py | 480 ++++++ tools/apidoc/gen_toc.py | 6 +- tools/marvin/marvin/lib/base.py | 125 ++ ui/public/locales/en.json | 74 +- ui/src/components/view/ActionButton.vue | 4 +- ui/src/components/view/DetailsTab.vue | 37 +- ui/src/components/view/InfoCard.vue | 11 + ui/src/components/view/ListView.vue | 12 +- ui/src/components/view/ObjectListTable.vue | 89 + ui/src/components/view/SearchView.vue | 36 +- ui/src/components/widgets/DetailsInput.vue | 186 ++ ui/src/components/widgets/Status.vue | 8 + ui/src/config/router.js | 4 + ui/src/config/section/compute.js | 45 +- ui/src/config/section/extension.js | 147 ++ ui/src/config/section/extension/customaction.js | 94 + ui/src/config/section/image.js | 4 +- ui/src/config/section/infra/clusters.js | 18 +- ui/src/config/section/infra/hosts.js | 14 +- ui/src/config/section/offering.js | 10 +- ui/src/core/lazy_lib/icons_use.js | 4 + ui/src/main.js | 4 +- .../src/utils/extension.js | 29 +- ui/src/utils/plugins.js | 55 +- ui/src/views/AutogenView.vue | 49 +- ui/src/views/compute/CreateKubernetesCluster.vue | 4 +- ui/src/views/compute/DeployVM.vue | 102 +- ui/src/views/compute/InstanceTab.vue | 2 +- ui/src/views/extension/AddCustomAction.vue | 247 +++ ui/src/views/extension/CreateExtension.vue | 256 +++ .../views/extension/ExtensionCustomActionsTab.vue | 274 +++ ui/src/views/extension/ExtensionResourcesTab.vue | 135 ++ .../extension/ExternalConfigurationDetails.vue | 115 ++ ui/src/views/extension/ParametersInput.vue | 328 ++++ ui/src/views/extension/RegisterExtension.vue | 200 +++ ui/src/views/extension/RunCustomAction.vue | 386 +++++ ui/src/views/extension/UpdateCustomAction.vue | 232 +++ ui/src/views/extension/UpdateExtension.vue | 160 ++ ui/src/views/iam/CreateRole.vue | 2 +- ui/src/views/image/RegisterOrUploadTemplate.vue | 79 +- ui/src/views/image/UpdateTemplate.vue | 7 +- ui/src/views/infra/ClusterAdd.vue | 421 ++--- ui/src/views/infra/HostAdd.vue | 509 +++--- ui/src/views/infra/HostUpdate.vue | 34 +- ui/src/views/network/NicsTab.vue | 10 +- ui/src/views/offering/AddComputeOffering.vue | 33 +- utils/src/main/java/com/cloud/utils/FileUtil.java | 15 + .../java/com/cloud/utils/json/JsonMergeUtil.java | 108 ++ .../com/cloud/utils/json/JsonMergeUtilTest.java | 108 ++ 259 files changed, 22308 insertions(+), 1528 deletions(-) create mode 100644 api/src/main/java/org/apache/cloudstack/api/response/ExtensionCustomActionParameterResponse.java create mode 100644 api/src/main/java/org/apache/cloudstack/api/response/ExtensionCustomActionResponse.java create mode 100644 api/src/main/java/org/apache/cloudstack/api/response/ExtensionResourceResponse.java create mode 100644 api/src/main/java/org/apache/cloudstack/api/response/ExtensionResponse.java copy api/src/main/java/org/apache/cloudstack/{api/response/UnmanageVMInstanceResponse.java => extension/CustomActionResultResponse.java} (56%) create mode 100644 api/src/main/java/org/apache/cloudstack/extension/Extension.java create mode 100644 api/src/main/java/org/apache/cloudstack/extension/ExtensionCustomAction.java copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => api/src/main/java/org/apache/cloudstack/extension/ExtensionHelper.java (63%) create mode 100644 api/src/main/java/org/apache/cloudstack/extension/ExtensionResourceMap.java create mode 100644 api/src/test/java/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmdTest.java create mode 100644 api/src/test/java/org/apache/cloudstack/extension/ExtensionCustomActionTest.java create mode 100644 core/src/main/java/com/cloud/agent/api/PrepareExternalProvisioningAnswer.java copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => core/src/main/java/com/cloud/agent/api/PrepareExternalProvisioningCommand.java (62%) copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => core/src/main/java/com/cloud/agent/api/RunCustomActionAnswer.java (63%) copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => core/src/main/java/com/cloud/agent/api/RunCustomActionCommand.java (52%) create mode 100644 engine/components-api/src/main/java/com/cloud/hypervisor/ExternalProvisioner.java create mode 100755 extensions/HyperV/hyperv.py create mode 100755 extensions/Proxmox/proxmox.sh create mode 100644 framework/extensions/pom.xml create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/api/AddCustomActionCmd.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/api/CreateExtensionCmd.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/api/DeleteCustomActionCmd.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/api/DeleteExtensionCmd.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/api/ListCustomActionCmd.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/api/ListExtensionsCmd.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/api/RegisterExtensionCmd.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/api/RunCustomActionCmd.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/api/UnregisterExtensionCmd.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/api/UpdateCustomActionCmd.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/api/UpdateExtensionCmd.java copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/command/CleanupExtensionFilesCommand.java (63%) create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/command/ExtensionBaseCommand.java copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/command/ExtensionRoutingUpdateCommand.java (64%) copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/command/ExtensionServerActionBaseCommand.java (63%) copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/command/GetExtensionPathChecksumCommand.java (63%) copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/command/PrepareExtensionPathCommand.java (63%) copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/dao/ExtensionCustomActionDao.java (68%) create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/dao/ExtensionCustomActionDaoImpl.java copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/dao/ExtensionCustomActionDetailsDao.java (66%) copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/dao/ExtensionCustomActionDetailsDaoImpl.java (58%) copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/dao/ExtensionDao.java (66%) create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/dao/ExtensionDaoImpl.java copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/dao/ExtensionDetailsDao.java (66%) copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/dao/ExtensionDetailsDaoImpl.java (61%) copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/dao/ExtensionResourceMapDao.java (59%) create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/dao/ExtensionResourceMapDaoImpl.java copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/dao/ExtensionResourceMapDetailsDao.java (66%) copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/dao/ExtensionResourceMapDetailsDaoImpl.java (58%) create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/manager/ExtensionsManager.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/manager/ExtensionsManagerImpl.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/vo/ExtensionCustomActionDetailsVO.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/vo/ExtensionCustomActionVO.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/vo/ExtensionDetailsVO.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/vo/ExtensionResourceMapDetailsVO.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/vo/ExtensionResourceMapVO.java create mode 100644 framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/vo/ExtensionVO.java create mode 100644 framework/extensions/src/main/resources/META-INF/cloudstack/core/spring-framework-extensions-core-context.xml create mode 100644 framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/api/AddCustomActionCmdTest.java create mode 100644 framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/api/CreateExtensionCmdTest.java create mode 100644 framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/api/DeleteCustomActionCmdTest.java create mode 100644 framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/api/DeleteExtensionCmdTest.java create mode 100644 framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/api/ListCustomActionCmdTest.java create mode 100644 framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/api/ListExtensionsCmdTest.java create mode 100644 framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/api/RegisterExtensionCmdTest.java create mode 100644 framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/api/RunCustomActionCmdTest.java create mode 100644 framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/api/UnregisterExtensionCmdTest.java create mode 100644 framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/api/UpdateCustomActionCmdTest.java create mode 100644 framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/api/UpdateExtensionCmdTest.java create mode 100644 framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/command/ExtensionBaseCommandTest.java create mode 100644 framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/dao/ExtensionCustomActionDaoImplTest.java create mode 100644 framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/dao/ExtensionDaoImplTest.java create mode 100644 framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/dao/ExtensionResourceMapDaoImplTest.java create mode 100644 framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/manager/ExtensionsManagerImplTest.java create mode 100644 plugins/hypervisors/external/pom.xml copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => plugins/hypervisors/external/src/main/java/org/apache/cloudstack/agent/manager/ExternalAgentManager.java (63%) create mode 100644 plugins/hypervisors/external/src/main/java/org/apache/cloudstack/agent/manager/ExternalAgentManagerImpl.java create mode 100644 plugins/hypervisors/external/src/main/java/org/apache/cloudstack/agent/manager/ExternalServerPlanner.java create mode 100644 plugins/hypervisors/external/src/main/java/org/apache/cloudstack/agent/manager/ExternalTemplateAdapter.java create mode 100644 plugins/hypervisors/external/src/main/java/org/apache/cloudstack/guru/ExternalHypervisorGuru.java create mode 100644 plugins/hypervisors/external/src/main/java/org/apache/cloudstack/hypervisor/external/discoverer/ExternalServerDiscoverer.java create mode 100644 plugins/hypervisors/external/src/main/java/org/apache/cloudstack/hypervisor/external/provisioner/ExternalPathPayloadProvisioner.java create mode 100644 plugins/hypervisors/external/src/main/java/org/apache/cloudstack/hypervisor/external/resource/ExternalResource.java create mode 100644 plugins/hypervisors/external/src/main/resources/META-INF/cloudstack/core/spring-external-core-context.xml copy build/replace.properties => plugins/hypervisors/external/src/main/resources/META-INF/cloudstack/external-compute/module.properties (75%) create mode 100644 plugins/hypervisors/external/src/main/resources/META-INF/cloudstack/external-compute/spring-external-compute-context.xml copy build/replace.properties => plugins/hypervisors/external/src/main/resources/META-INF/cloudstack/external-discoverer/module.properties (75%) create mode 100644 plugins/hypervisors/external/src/main/resources/META-INF/cloudstack/external-discoverer/spring-external-discoverer-context.xml copy build/replace.properties => plugins/hypervisors/external/src/main/resources/META-INF/cloudstack/external-planner/module.properties (75%) create mode 100644 plugins/hypervisors/external/src/main/resources/META-INF/cloudstack/external-planner/spring-external-planner-context.xml copy build/replace.properties => plugins/hypervisors/external/src/main/resources/META-INF/cloudstack/external-storage/module.properties (75%) create mode 100644 plugins/hypervisors/external/src/main/resources/META-INF/cloudstack/external-storage/spring-external-storage-context.xml create mode 100644 plugins/hypervisors/external/src/test/java/org/apache/cloudstack/agent/manager/ExternalTemplateAdapterTest.java create mode 100644 plugins/hypervisors/external/src/test/java/org/apache/cloudstack/hypervisor/external/discoverer/ExternalServerDiscovererTest.java create mode 100644 plugins/hypervisors/external/src/test/java/org/apache/cloudstack/hypervisor/external/provisioner/ExternalPathPayloadProvisionerTest.java create mode 100644 plugins/hypervisors/external/src/test/java/org/apache/cloudstack/hypervisor/external/resource/ExternalResourceTest.java create mode 100755 scripts/vm/hypervisor/external/provisioner/provisioner.sh create mode 100644 test/integration/smoke/test_extension_custom.py create mode 100644 test/integration/smoke/test_extension_custom_action_lifecycle.py create mode 100644 test/integration/smoke/test_extension_lifecycle.py create mode 100644 ui/src/components/view/ObjectListTable.vue create mode 100644 ui/src/components/widgets/DetailsInput.vue create mode 100644 ui/src/config/section/extension.js create mode 100644 ui/src/config/section/extension/customaction.js copy engine/schema/src/main/java/com/cloud/host/dao/HostDetailsDao.java => ui/src/utils/extension.js (63%) create mode 100644 ui/src/views/extension/AddCustomAction.vue create mode 100644 ui/src/views/extension/CreateExtension.vue create mode 100644 ui/src/views/extension/ExtensionCustomActionsTab.vue create mode 100644 ui/src/views/extension/ExtensionResourcesTab.vue create mode 100644 ui/src/views/extension/ExternalConfigurationDetails.vue create mode 100644 ui/src/views/extension/ParametersInput.vue create mode 100644 ui/src/views/extension/RegisterExtension.vue create mode 100644 ui/src/views/extension/RunCustomAction.vue create mode 100644 ui/src/views/extension/UpdateCustomAction.vue create mode 100644 ui/src/views/extension/UpdateExtension.vue create mode 100644 utils/src/main/java/com/cloud/utils/json/JsonMergeUtil.java create mode 100644 utils/src/test/java/com/cloud/utils/json/JsonMergeUtilTest.java