mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Refactor: Cleanup duplicate code Make use of Java 8 default implementation in interfaces, to remove code duplication between XxxCmd and XxxCmdAsAdmin. Refactor checkFormat by pre-calculating the supported extensions. Also make use of this in ImageStoreUtil. Makes it easier to add new file and compression formats.
142 lines
4.6 KiB
Java
142 lines
4.6 KiB
Java
// Licensed to the Apache Software Foundation (ASF) under one
|
|
// or more contributor license agreements. See the NOTICE file
|
|
// distributed with this work for additional information
|
|
// regarding copyright ownership. The ASF licenses this file
|
|
// to you under the Apache License, Version 2.0 (the
|
|
// "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
package com.cloud.template;
|
|
|
|
import java.util.Date;
|
|
import java.util.Map;
|
|
|
|
import org.apache.cloudstack.acl.ControlledEntity;
|
|
import org.apache.cloudstack.api.Identity;
|
|
import org.apache.cloudstack.api.InternalIdentity;
|
|
|
|
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
|
import com.cloud.storage.Storage.ImageFormat;
|
|
import com.cloud.storage.Storage.TemplateType;
|
|
import com.cloud.utils.fsm.StateMachine2;
|
|
import com.cloud.utils.fsm.StateObject;
|
|
|
|
public interface VirtualMachineTemplate extends ControlledEntity, Identity, InternalIdentity, StateObject<VirtualMachineTemplate.State> {
|
|
enum State {
|
|
Active,
|
|
Inactive,
|
|
NotUploaded,
|
|
UploadInProgress,
|
|
UploadError,
|
|
UploadAbandoned;
|
|
|
|
public static StateMachine2<State, Event, VirtualMachineTemplate> getStateMachine() {
|
|
return s_fsm;
|
|
}
|
|
|
|
private final static StateMachine2<State, Event, VirtualMachineTemplate> s_fsm = new StateMachine2<State, Event, VirtualMachineTemplate>();
|
|
static {
|
|
s_fsm.addTransition(new StateMachine2.Transition<State, Event>(NotUploaded, Event.OperationTimeout, UploadAbandoned, null));
|
|
s_fsm.addTransition(new StateMachine2.Transition<State, Event>(NotUploaded, Event.UploadRequested, UploadInProgress, null));
|
|
s_fsm.addTransition(new StateMachine2.Transition<State, Event>(NotUploaded, Event.OperationSucceeded, Active, null));
|
|
s_fsm.addTransition(new StateMachine2.Transition<State, Event>(NotUploaded, Event.OperationFailed, UploadError, null));
|
|
s_fsm.addTransition(new StateMachine2.Transition<State, Event>(UploadInProgress, Event.OperationSucceeded, Active, null));
|
|
s_fsm.addTransition(new StateMachine2.Transition<State, Event>(UploadInProgress, Event.OperationFailed, UploadError, null));
|
|
s_fsm.addTransition(new StateMachine2.Transition<State, Event>(UploadInProgress, Event.OperationTimeout, UploadError, null));
|
|
}
|
|
}
|
|
|
|
enum Event {
|
|
OperationFailed,
|
|
OperationSucceeded,
|
|
UploadRequested,
|
|
OperationTimeout;
|
|
}
|
|
|
|
public static enum BootloaderType {
|
|
PyGrub, HVM, External, CD
|
|
};
|
|
|
|
public enum TemplateFilter {
|
|
featured, // returns templates that have been marked as featured and public
|
|
self, // returns templates that have been registered or created by the calling user
|
|
selfexecutable, // same as self, but only returns templates that are ready to be deployed with
|
|
shared, // including templates that have been granted to the calling user by another user
|
|
sharedexecutable, // ready templates that have been granted to the calling user by another user
|
|
executable, // templates that are owned by the calling user, or public templates, that can be used to deploy a
|
|
community, // returns templates that have been marked as public but not featured
|
|
all // all templates (only usable by admins)
|
|
}
|
|
|
|
@Override
|
|
State getState();
|
|
|
|
boolean isFeatured();
|
|
|
|
/**
|
|
* @return public or private template
|
|
*/
|
|
boolean isPublicTemplate();
|
|
|
|
boolean isExtractable();
|
|
|
|
/**
|
|
* @return name
|
|
*/
|
|
String getName();
|
|
|
|
ImageFormat getFormat();
|
|
|
|
boolean isRequiresHvm();
|
|
|
|
String getDisplayText();
|
|
|
|
boolean isEnablePassword();
|
|
|
|
boolean isEnableSshKey();
|
|
|
|
boolean isCrossZones();
|
|
|
|
Date getCreated();
|
|
|
|
long getGuestOSId();
|
|
|
|
boolean isBootable();
|
|
|
|
TemplateType getTemplateType();
|
|
|
|
HypervisorType getHypervisorType();
|
|
|
|
int getBits();
|
|
|
|
String getUniqueName();
|
|
|
|
String getUrl();
|
|
|
|
String getChecksum();
|
|
|
|
Long getSourceTemplateId();
|
|
|
|
String getTemplateTag();
|
|
|
|
Map getDetails();
|
|
|
|
boolean isDynamicallyScalable();
|
|
|
|
Long getParentTemplateId();
|
|
|
|
long getUpdatedCount();
|
|
|
|
void incrUpdatedCount();
|
|
|
|
Date getUpdated();
|
|
}
|