package com.intuit.tank.vm.vmManager;
/*
* #%L
* Intuit Tank Api
* %%
* Copyright (C) 2011 - 2015 Intuit Inc.
* %%
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
* #L%
*/
import java.io.Serializable;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.annotation.Nonnull;
import org.apache.commons.lang3.builder.ToStringBuilder;
import com.intuit.tank.vm.api.enumerated.VMImageType;
import com.intuit.tank.vm.api.enumerated.VMProvider;
import com.intuit.tank.vm.api.enumerated.VMRegion;
import com.intuit.tank.vm.api.enumerated.VMSize;
import com.intuit.tank.vm.common.TankConstants;
import com.intuit.tank.vm.settings.InstanceDescription;
import com.intuit.tank.vm.settings.TankConfig;
public class VMInstanceRequest extends VMRequest implements Serializable {
private static final long serialVersionUID = 1556616649246707829L;
/**
* Constructor
*/
public VMInstanceRequest() {
super();
}
/**
* Constructor
*
* @param provider
* The virtual machine environment
* @param region
* The region for the virtual machine
* @param size
* The size of the virtual machine
* @param image
* The image to instantiate
* @param reuseStoppedInstances
* set to true to start a stopped instance instead of creating a new instance
* @param elasticIps
* Comma-delimited elastic ips to associate with the newly created instances (will associate as many as
* possible)
*/
public VMInstanceRequest(VMProvider provider, VMRegion region, String instanceType, VMImageType image,
int numberOfInstances, boolean reuseStoppedInstances, String zone, InstanceDescription description) {
super(provider);
this.setRegion(region);
this.setSize(instanceType);
this.setImage(image);
this.setNumberOfInstances(numberOfInstances);
this.setReportingMode(TankConstants.RESULTS_NONE);
this.setReuseStoppedInstance(reuseStoppedInstances);
this.setInstanceDescription(description);
this.setZone(zone);
// this.setJobId("unknown");
}
/**
*
* @param useEips
*/
public void setUserEips(boolean useEips) {
this.items.put(TankConstants.KEY_USE_EIPS, useEips);
}
/**
*
* @return
*/
public boolean isUseEips() {
if (this.items.get(TankConstants.KEY_USE_EIPS) != null) {
return (Boolean) this.items.get(TankConstants.KEY_USE_EIPS);
}
return new TankConfig().getVmManagerConfig().isUseElasticIps();
}
/**
* @param ami
*/
public void setInstanceDescription(InstanceDescription description) {
this.items.put(TankConstants.KEY_DESCRIPTION, description);
}
public InstanceDescription getInstanceDescription() {
return (InstanceDescription) this.items.get(TankConstants.KEY_DESCRIPTION);
}
/**
* @param ami
*/
public void setSubnetId(String subnetId) {
this.items.put(TankConstants.KEY_SUBNET_ID, subnetId);
}
public String getSubnetId() {
return (String) this.items.get(TankConstants.KEY_SUBNET_ID);
}
/**
* @param reuseStoppedInstances
*/
public void setReuseStoppedInstance(boolean reuseStoppedInstances) {
this.items.put(TankConstants.KEY_REUSE_STOPPED_INSTANCE, reuseStoppedInstances);
}
/**
*
* @return
*/
public boolean getReuseStoppedInstance() {
Boolean result = (Boolean) this.items.get(TankConstants.KEY_REUSE_STOPPED_INSTANCE);
return result != null ? result : false;
}
/**
* @param reuseStoppedInstances
*/
public void setZone(String zone) {
this.items.put(TankConstants.KEY_ZONE, zone);
}
/**
*
* @return
*/
public String getZone() {
return (String) this.items.get(TankConstants.KEY_ZONE);
}
/**
*
* @return
*/
public Set<String> getAssociatedIps() {
@SuppressWarnings("unchecked") Set<String> ips = (Set<String>) this.items.get(TankConstants.KEY_IPS);
if (ips == null) {
ips = new HashSet<String>();
this.items.put(TankConstants.KEY_IPS, ips);
}
return ips;
}
/**
*
* @param ipAddress
*/
public void addAssociatedIp(String ipAddress) {
getAssociatedIps().add(ipAddress);
}
/**
* @param hashMap
*/
public Map<String, String> getUserData() {
@SuppressWarnings("unchecked") HashMap<String, String> userDataMap = (HashMap<String, String>) this.items
.get("userData");
if (userDataMap == null) {
userDataMap = new HashMap<String, String>();
this.items.put("userData", userDataMap);
}
return userDataMap;
}
/**
*
* @param key
* @param value
*/
public void addUserData(@Nonnull String key, @Nonnull String value) {
getUserData().put(key, value);
}
/**
* Set the job id
*
* @param data
* The job id
*/
public void setJobId(String data) {
this.items.put(TankConstants.KEY_JOB_ID, data);
}
/**
* Get the job id
*
* @return The job id
*/
public String getJobId() {
return (String) this.items.get(TankConstants.KEY_JOB_ID);
}
/**
* Set the job id
*
* @param data
* The job id
*/
public void setLoggingProfile(String data) {
this.items.put(TankConstants.KEY_LOGGING_PROFILE, data);
}
/**
* Get the job id
*
* @return The job id
*/
public String getLoggingProfile() {
return (String) this.items.get(TankConstants.KEY_LOGGING_PROFILE);
}
/**
* Set the job id
*
* @param data
* The job id
*/
public void setStopBehavior(String data) {
this.items.put(TankConstants.KEY_STOP_BEHAVIOR, data);
}
/**
* Get the job id
*
* @return The job id
*/
public String getStopBehavior() {
return (String) this.items.get(TankConstants.KEY_STOP_BEHAVIOR);
}
/**
* Set the virtual machine region
*
* @param data
* The virtual machine region
*/
public void setRegion(VMRegion data) {
this.items.put(TankConstants.KEY_REGION, data);
}
/**
* Get the virtual machine region
*
* @return The virtual machine region
*/
public VMRegion getRegion() {
return (VMRegion) this.items.get(TankConstants.KEY_REGION);
}
/**
* Set the virtual machine size
*
* @param data
* The virtual machine size
*/
public void setSize(String data) {
this.items.put(TankConstants.KEY_SIZE, data);
}
/**
* Get the virtual machine size
*
* @return The virtual machine size
*/
public String getSize() {
return (String) this.items.get(TankConstants.KEY_SIZE);
}
/**
*
* @return
*/
public int getNumUsersPerAgent() {
if (!this.items.containsKey(TankConstants.KEY_NUM_USERS_PER_AGENT)) {
return 0;
}
return (Integer) this.items.get(TankConstants.KEY_NUM_USERS_PER_AGENT);
}
/**
*
* @param data
*/
public void setNumUsersPerAgent(int data) {
this.items.put(TankConstants.KEY_NUM_USERS_PER_AGENT, data);
}
/**
* Set the image type
*
* @param data
* The image type
*/
public void setImage(VMImageType data) {
this.items.put(TankConstants.KEY_IMAGE, data);
}
/**
* Get the image type
*
* @return The image type
*/
public VMImageType getImage() {
return (VMImageType) this.items.get(TankConstants.KEY_IMAGE);
}
/**
* Set the number of instances requested
*
* @param data
* The number of instances requested
*/
public void setNumberOfInstances(int data) {
this.items.put(TankConstants.KEY_NUMBER_OF_INSTANCES, Integer.toString(data));
}
/**
* Get the number of instances requested
*
* @return The number of instances requested
*/
public int getNumberOfInstances() {
if (!this.items.containsKey(TankConstants.KEY_NUMBER_OF_INSTANCES)) {
return -1;
}
return Integer.valueOf((String) this.items.get(TankConstants.KEY_NUMBER_OF_INSTANCES));
}
/**
*
* @param reportingMode
*/
public void setReportingMode(String reportingMode) {
this.items.put(TankConstants.KEY_REPORTING_MODE, reportingMode);
}
/**
*
* @return
*/
public String getReportingMode() {
return (String) this.items.get(TankConstants.KEY_REPORTING_MODE);
}
/**
* @{inheritDoc
*/
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}