mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-02 20:02:29 +01:00
Bug 11522 - New agent manager
introduce ResourceState and ResourceStateAdapter
This commit is contained in:
parent
443385471f
commit
ce3d810f51
78
api/src/com/cloud/resource/ResourceState.java
Executable file
78
api/src/com/cloud/resource/ResourceState.java
Executable file
@ -0,0 +1,78 @@
|
||||
package com.cloud.resource;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.cloud.utils.fsm.StateMachine;
|
||||
|
||||
public enum ResourceState {
|
||||
Enabled,
|
||||
Disabled,
|
||||
Unmanaged,
|
||||
PrepareForMaintenace,
|
||||
ErrorInMaintenance,
|
||||
Maintenance;
|
||||
|
||||
public enum Action {
|
||||
InternalCreating("Resource is creating"),
|
||||
AdminEnable("Admin enables"),
|
||||
AdminDisable("Admin disables"),
|
||||
ClusterUnmanage("Cluster is unmanaged"),
|
||||
ClusterManage("Cluster is managed"),
|
||||
AdminAskMaintenace("Admin asks to enter maintenance"),
|
||||
AdminCancelMaintenance("Admin asks to cancel maintenance"),
|
||||
InternalEnterMaintenance("Resource enters maintenance"),
|
||||
Unmanaged("Admin turns a host into umanaged state"),
|
||||
AdminAskReconnect("Admin triggers a reconnect"),
|
||||
UpdatePassword("Admin updates password of host"),
|
||||
UnableToMigrate("Management server migrates VM failed"),
|
||||
DeleteHost("Admin delete a host");
|
||||
|
||||
private final String comment;
|
||||
private Action(String comment) {
|
||||
this.comment = comment;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return this.comment;
|
||||
}
|
||||
}
|
||||
|
||||
public ResourceState getNextState(Action a) {
|
||||
return s_fsm.getNextState(this, a);
|
||||
}
|
||||
|
||||
public ResourceState[] getFromStates(Action a) {
|
||||
List<ResourceState> from = s_fsm.getFromStates(this, a);
|
||||
return from.toArray(new ResourceState[from.size()]);
|
||||
}
|
||||
|
||||
public Set<Action> getPossibleActions() {
|
||||
return s_fsm.getPossibleEvents(this);
|
||||
}
|
||||
|
||||
public static String[] toString(ResourceState... states) {
|
||||
String[] strs = new String[states.length];
|
||||
for (int i=0; i<states.length; i++) {
|
||||
strs[i] = states[i].toString();
|
||||
}
|
||||
return strs;
|
||||
}
|
||||
|
||||
protected static final StateMachine<ResourceState, Action> s_fsm = new StateMachine<ResourceState, Action>();
|
||||
static {
|
||||
s_fsm.addTransition(null, Action.InternalCreating, ResourceState.Enabled);
|
||||
s_fsm.addTransition(ResourceState.Enabled, Action.AdminEnable, ResourceState.Enabled);
|
||||
s_fsm.addTransition(ResourceState.Enabled, Action.AdminDisable, ResourceState.Disabled);
|
||||
s_fsm.addTransition(ResourceState.Enabled, Action.ClusterUnmanage, ResourceState.Unmanaged);
|
||||
s_fsm.addTransition(ResourceState.Enabled, Action.AdminAskMaintenace, ResourceState.PrepareForMaintenace);
|
||||
s_fsm.addTransition(ResourceState.Disabled, Action.AdminEnable, ResourceState.Enabled);
|
||||
s_fsm.addTransition(ResourceState.Disabled, Action.AdminDisable, ResourceState.Disabled);
|
||||
s_fsm.addTransition(ResourceState.Disabled, Action.ClusterUnmanage, ResourceState.Unmanaged);
|
||||
s_fsm.addTransition(ResourceState.Unmanaged, Action.ClusterUnmanage, ResourceState.Unmanaged);
|
||||
s_fsm.addTransition(ResourceState.Unmanaged, Action.ClusterManage, ResourceState.Disabled);
|
||||
s_fsm.addTransition(ResourceState.PrepareForMaintenace, Action.InternalEnterMaintenance, ResourceState.Maintenance);
|
||||
s_fsm.addTransition(ResourceState.PrepareForMaintenace, Action.AdminCancelMaintenance, ResourceState.Enabled);
|
||||
s_fsm.addTransition(ResourceState.Maintenance, Action.AdminCancelMaintenance, ResourceState.Enabled);
|
||||
}
|
||||
}
|
||||
47
server/src/com/cloud/resource/ResourceStateAdapter.java
Executable file
47
server/src/com/cloud/resource/ResourceStateAdapter.java
Executable file
@ -0,0 +1,47 @@
|
||||
package com.cloud.resource;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.cloud.agent.api.StartupAnswer;
|
||||
import com.cloud.agent.api.StartupCommand;
|
||||
import com.cloud.exception.ConnectionException;
|
||||
import com.cloud.host.HostVO;
|
||||
import com.cloud.utils.component.Adapter;
|
||||
|
||||
public interface ResourceStateAdapter extends Adapter {
|
||||
static public enum Event {
|
||||
CREATE_HOST_VO_FOR_CONNECTED,
|
||||
CREATE_HOST_VO_FOR_DIRECT_CONNECT,
|
||||
DELETE_HOST,
|
||||
}
|
||||
|
||||
static public class DeleteHostAnswer {
|
||||
private boolean isContinue;
|
||||
private boolean isException;
|
||||
|
||||
public DeleteHostAnswer(boolean isContinue) {
|
||||
this.isContinue = isContinue;
|
||||
this.isException = false;
|
||||
}
|
||||
|
||||
public DeleteHostAnswer(boolean isContinue, boolean isException) {
|
||||
this.isContinue = isContinue;
|
||||
this.isException = isException;
|
||||
}
|
||||
|
||||
public boolean getIsContinue() {
|
||||
return this.isContinue;
|
||||
}
|
||||
|
||||
public boolean getIsException() {
|
||||
return this.isException;
|
||||
}
|
||||
}
|
||||
|
||||
public HostVO createHostVO(HostVO host, StartupCommand[] cmd);
|
||||
|
||||
public HostVO createHostVO(HostVO host, final StartupCommand[] startup, ServerResource resource, Map<String, String> details, List<String> hostTags);
|
||||
|
||||
public DeleteHostAnswer deleteHost(HostVO host, boolean isForced, boolean isForceDeleteStorage) throws UnableDeleteHostException;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user