/**
* Copyright (C) 2009-2015 Dell, Inc
* See annotations for authorship information
*
* ====================================================================
* Licensed 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 org.dasein.cloud.joyent.compute;
import org.dasein.cloud.*;
import org.dasein.cloud.compute.*;
import org.dasein.cloud.joyent.SmartDataCenter;
import org.dasein.cloud.util.NamingConstraints;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collections;
import java.util.Locale;
/**
* Describes the capabilities of Joyent with respect to Dasein virtual machine operations.
* <p>Created by Stas Maksimov: 04/03/2014 14:15</p>
*
* @author Stas Maksimov
* @version 2014.03 initial version
* @since 2014.03
*/
public class MachineCapabilities extends AbstractCapabilities<SmartDataCenter> implements VirtualMachineCapabilities {
public MachineCapabilities(SmartDataCenter cloud) {
super(cloud);
}
@Override
public boolean canAlter(@Nonnull VmState fromState) throws CloudException, InternalException {
return VmState.STOPPED.equals(fromState);
}
@Override
public boolean canClone(@Nonnull VmState fromState) throws CloudException, InternalException {
return false;
}
@Override
public boolean canPause(@Nonnull VmState fromState) throws CloudException, InternalException {
return false;
}
@Override
public boolean canReboot(@Nonnull VmState fromState) throws CloudException, InternalException {
return true;
}
@Override
public boolean canResume(@Nonnull VmState fromState) throws CloudException, InternalException {
return false;
}
@Override
public boolean canStart(@Nonnull VmState fromState) throws CloudException, InternalException {
return !fromState.equals(VmState.RUNNING);
}
@Override
public boolean canStop(@Nonnull VmState fromState) throws CloudException, InternalException {
return !fromState.equals(VmState.STOPPED);
}
@Override
public boolean canSuspend(@Nonnull VmState fromState) throws CloudException, InternalException {
return false;
}
@Override
public boolean canTerminate(@Nonnull VmState fromState) throws CloudException, InternalException {
return !fromState.equals(VmState.TERMINATED);
}
@Override
public boolean canUnpause(@Nonnull VmState fromState) throws CloudException, InternalException {
return false;
}
@Override
public int getMaximumVirtualMachineCount() throws CloudException, InternalException {
return Capabilities.LIMIT_UNKNOWN;
}
@Override
public int getCostFactor(@Nonnull VmState state) throws CloudException, InternalException {
return (VmState.TERMINATED.equals(state) ? 0 : 100);
}
@Nonnull
@Override
public String getProviderTermForVirtualMachine(@Nonnull Locale locale) throws CloudException, InternalException {
return "machine";
}
@Nullable
@Override
public VMScalingCapabilities getVerticalScalingCapabilities() throws CloudException, InternalException {
return VMScalingCapabilities.getInstance(false, true, false);
}
@Nonnull
@Override
public NamingConstraints getVirtualMachineNamingConstraints() throws CloudException, InternalException {
return NamingConstraints.getAlphaNumeric(1, 255).constrainedBy('-', '.');
}
@Nullable
@Override
public VisibleScope getVirtualMachineVisibleScope() {
return null;
}
@Nullable
@Override
public VisibleScope getVirtualMachineProductVisibleScope() {
return null;
}
@Nonnull
@Override
public Requirement identifyDataCenterLaunchRequirement() throws CloudException, InternalException {
return Requirement.REQUIRED;
}
@Nonnull
@Override
public Requirement identifyImageRequirement(@Nonnull ImageClass cls) throws CloudException, InternalException {
return (cls.equals(ImageClass.MACHINE) ? Requirement.REQUIRED : Requirement.NONE);
}
@Nonnull
@Override
public Requirement identifyPasswordRequirement(Platform platform) throws CloudException, InternalException {
return Requirement.NONE;
}
@Nonnull
@Override
public Requirement identifyRootVolumeRequirement() throws CloudException, InternalException {
return Requirement.NONE;
}
@Nonnull
@Override
public Requirement identifyShellKeyRequirement(Platform platform) throws CloudException, InternalException {
return Requirement.NONE;
}
@Nonnull
@Override
public Requirement identifyStaticIPRequirement() throws CloudException, InternalException {
return Requirement.NONE;
}
@Nonnull
@Override
public Requirement identifySubnetRequirement() throws CloudException, InternalException {
return Requirement.NONE;
}
@Nonnull
@Override
public Requirement identifyVlanRequirement() throws CloudException, InternalException {
return Requirement.NONE;
}
@Override
public boolean isAPITerminationPreventable() throws CloudException, InternalException {
return false;
}
@Override
public boolean isBasicAnalyticsSupported() throws CloudException, InternalException {
// TODO: analytics is supported in Joyent, but not through Dasein yet.
return false;
}
@Override
public boolean isExtendedAnalyticsSupported() throws CloudException, InternalException {
return false;
}
@Override
public boolean isUserDataSupported() throws CloudException, InternalException {
return true;
}
@Override
public boolean isUserDefinedPrivateIPSupported(){return false;}
@Nonnull
@Override
public Iterable<Architecture> listSupportedArchitectures() throws InternalException, CloudException {
return Collections.singletonList(Architecture.I64);
}
@Override
public boolean isVMProductDCConstrained() throws CloudException, InternalException {return false;}
@Override
public boolean supportsCloudStoredShellKey() throws CloudException, InternalException {return false;}
@Override
public boolean supportsClientRequestToken() throws CloudException, InternalException {return false;}
@Override
public boolean supportsSpotVirtualMachines() throws InternalException, CloudException {
return false;
}
@Override public boolean supportsAlterVM() {
return false;
}
@Override public boolean supportsClone() {
return false;
}
@Override public boolean supportsPause() {
return false;
}
@Override public boolean supportsReboot() {
return true;
}
@Override public boolean supportsResume() {
return false;
}
@Override public boolean supportsStart() {
return true;
}
@Override public boolean supportsStop() {
return true;
}
@Override public boolean supportsSuspend() {
return false;
}
@Override public boolean supportsTerminate() {
return true;
}
@Override public boolean supportsUnPause() {
return false;
}
}