By now, you probably figure CloudStack can be put together by using many different pieces of code.  It's all rather confusing as there are various pieces.  How do one start?  What is the glue that binds them together?  This page is about what this is.

Components

CloudStack deploys the following types of components.  They are all singletons and handle data flowing through them but each have different purpose.

Type

Purpose

Example

Notes

Manager

Singleton to control a process.

VirtualMachineManager

 

Adapter

Different ways to implement the same functionality. Adapters are often used by Managers when the process arrives at a step when there can be multiple ways to implement that step.

FirstFitDeploymentPlanner

 

DAO

Data Access Layer

HostDao

See Database Access for more details.

Service

Java API that supports the Platform API

UserVmService

 

PluggableService

Defines a set of Platform APIs to be inserted into CloudStack.

F5ExternalLoadBalancerElementService

 

SystemIntegrityChecker

Code to ensure system integrity for CloudStack management server to start.

DatabaseUpgradeChecker

 

ComponenLibrary

Collection of Managers, Adapters, DAOs etc to be deployed.

DefaultComponentLibrary

 

Interceptor

Interceptors that implement aspect programming patterns to allow for process enforcement.

DatabaseCallback

Probably don't want to mess with this one.

Components Loading

The components that are loaded is defined in components.xml.  The following is an example.

<?xml version="1.0"?>
<components.xml>
<system-integrity-checker>
<checker name="ManagementServerNode"/>
<checker name="DatabaseIntegrityChecker"/>
<checker name="DatabaseUpgradeChecker"/>
</system-integrity-checker>
<interceptor library="com.cloud.configuration.DefaultInterceptorLibrary"/>
<management-server library="com.cloud.configuration.DefaultComponentLibrary">
<adapters key="com.cloud.network.guru.NetworkGuru">
<adapter name="GuestNetworkGuru"/>
<adapter name="OvsGuestNetworkGuru"/>
<adapter name="PublicNetworkGuru"/>
<adapter name="PodBasedNetworkGuru"/>
<adapter name="ControlNetworkGuru"/>
<adapter name="DirectNetworkGuru"/>
<adapter name="DirectPodBasedNetworkGuru"/>
</adapters>
</management-server>
</components.xml>


  • No labels