All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xerox.amazonws.ec2.LaunchConfiguration Maven / Gradle / Ivy

//
// typica - A client library for Amazon Web Services
// Copyright (C) 2008 Xerox Corporation
// 
// 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 com.xerox.amazonws.ec2;

import org.apache.commons.codec.binary.Base64;

import java.util.List;
import java.util.Map;

/**
 * A launch configuration encapsulates the parameters used for launching an AMI
 *
 * @author Moritz Post 
 */
public class LaunchConfiguration {
	/** A name given to this launch config */
	private String configName;

	/** The ID of the AMI to launch. */
	private String imageId;

	/** The minimum number of AMIs to launch. */
	private int minCount;

	/** The maximum (desired) number of AMIs to launch. */
	private int maxCount;

	/** The name of the key file to access the AMI via ssh. */
	private String keyName;

	/** The security group to launch the AMI in. */
	private List securityGroup;

	/** The availability AvailabilityZone to launch the AMI in. */
	private String availabilityZone;

	/** Custom User Data to init the AMI with. */
	private byte[] userData;

	/** The size of the hardware to launch the AMI in. */
	private InstanceType instanceType = InstanceType.DEFAULT;

	/** The id of the kernel to use. */
	private String kernelId;

	/** The ramdisk to use. */
	private String ramdiskId;

	/** The block device mapping to use. */
	private List blockDeviceMappings;

	private boolean monitoring;

	private boolean addressingType = true;

	private String additionalInfo;

	/** The subnet to be used with Amazon VPC */
	private String subnetId;

	/** The private IP to be used with Amazon VPC */
	private String privateIpAddress;

	/** placement group for cluster compute instances */
	private String groupName;

	/**
	 * Launches the given AMI one time. The min and max values are '1'.
	 *
	 * @param imageId the AMI to launch
	 */
	public LaunchConfiguration(final String imageId) {
		this(imageId, 1, 1);
	}

	/**
	 * The launch parameter with the minimum required number of parameter.
	 *
	 * @param imageId the id of the AMI to launch
	 * @param minCount the minimum required number of instances
	 * @param maxCount the maximum number of AMIs desired
	 */
	public LaunchConfiguration(final String imageId, final int minCount, final int maxCount) {
		this.imageId = imageId;
		this.minCount = minCount;
		this.maxCount = maxCount;
	}

	/**
	 * The launch parameter with the name being supplied.
	 *
	 * @param configName the name given to this launch config
	 * @param imageId the id of the AMI to launch
	 * @param minCount the minimum required number of instances
	 * @param maxCount the maximum number of AMIs desired
	 */
	public LaunchConfiguration(final String configName, final String imageId, final int minCount, final int maxCount) {
		this.configName = configName;
		this.imageId = imageId;
		this.minCount = minCount;
		this.maxCount = maxCount;
	}

	/**
	 * @return the configName
	 */
	public String getConfigName() {
		return this.configName;
	}

	/**
	 * @param configName the configName to set
	 */
	public void setConfigName(final String configName) {
		this.configName = configName;
	}

	/**
	 * @return the imageId
	 */
	public String getImageId() {
		return this.imageId;
	}

	/**
	 * @param imageId the imageId to set
	 */
	public void setImageId(final String imageId) {
		this.imageId = imageId;
	}

	/**
	 * @return the minCount
	 */
	public int getMinCount() {
		return this.minCount;
	}

	/**
	 * @param minCount the minCount to set
	 */
	public void setMinCount(final int minCount) {
		this.minCount = minCount;
	}

	/**
	 * @return the maxCount
	 */
	public int getMaxCount() {
		return this.maxCount;
	}

	/**
	 * @param maxCount the maxCount to set
	 */
	public void setMaxCount(final int maxCount) {
		this.maxCount = maxCount;
	}

	/**
	 * @return the keyName
	 */
	public String getKeyName() {
		return this.keyName;
	}

	/**
	 * @param keyName the keyName to set
	 */
	public void setKeyName(final String keyName) {
		this.keyName = keyName;
	}

	/**
	 * @return the securityGroup
	 */
	public List getSecurityGroup() {
		return this.securityGroup;
	}

	/**
	 * @param securityGroup the securityGroup to set
	 */
	public void setSecurityGroup(final List securityGroup) {
		this.securityGroup = securityGroup;
	}

	/**
	 * @return the AvailabilityZone
	 */
	public String getAvailabilityZone() {
		return this.availabilityZone;
	}

	/**
	 * @param availabilityZone the AvailabilityZone to set
	 */
	public void setAvailabilityZone(final String availabilityZone) {
		this.availabilityZone = availabilityZone;
	}

	/**
	 * @return the instanceType
	 */
	public InstanceType getInstanceType() {
		return this.instanceType;
	}

	/**
	 * @param instanceType the instanceType to set
	 */
	public void setInstanceType(final InstanceType instanceType) {
		this.instanceType = instanceType;
	}

	/**
	 * @return the userData
	 */
	public byte[] getUserData() {
		return this.userData;
	}

	/**
	 * @param userData the userData to set
	 */
	public void setUserData(final byte[] userData) {
		this.userData = userData;
	}

	/**
	 * @return the additionalInfo
	 */
	public String getAdditionalInfo() {
		return this.additionalInfo;
	}

	/**
	 * @param additionalInfo the additionalInfo to set
	 */
	public void setAdditionalInfo(String additionalInfo) {
		this.additionalInfo = additionalInfo;
	}

	/**
	 * @return the kernelId
	 */
	public String getKernelId() {
		return this.kernelId;
	}

	/**
	 * @param kernelId the kernelId to set
	 */
	public void setKernelId(String kernelId) {
		this.kernelId = kernelId;
	}

	/**
	 * @return the ramdiskId
	 */
	public String getRamdiskId() {
		return this.ramdiskId;
	}

	/**
	 * @param ramdiskId the ramdiskId to set
	 */
	public void setRamdiskId(String ramdiskId) {
		this.ramdiskId = ramdiskId;
	}

	/**
	 * @return the blockDeviceMappings
	 */
	public List getBlockDevicemappings() {
		return this.blockDeviceMappings;
	}

	/**
	 * @param blockDeviceMappings the blockDeviceMappings to set
	 */
	public void setBlockDevicemappings(List blockDeviceMappings) {
		this.blockDeviceMappings = blockDeviceMappings;
	}

	/**
	 * @return state of instance monitoring
	 */
	public Boolean isMonitoring() {
		return monitoring;
	}

	/**
	 * @param sets the state of instance monitoring
	 */
	public void setMonitoring(boolean set) {
		monitoring = set;
	}

	/**
	 * @return if addressing is set to public
	 */
	public Boolean isPublicAddressing() {
		return addressingType;
	}

	/**
	 * @return the subnetId
	 */
	public String getSubnetId() {
		return this.subnetId;
	}

	/**
	 * @param subnetId the subnetId to set
	 */
	public void setSubnetId(String subnetId) {
		this.subnetId = subnetId;
	}

	/**
	 * @return the privateIpAddress
	 */
	public String getPrivateIpAddress() {
		return this.privateIpAddress;
	}

	/**
	 * @param privateIpAddress the privateIpAddress to set
	 */
	public void setPrivateIpAddress(String privateIpAddress) {
		this.privateIpAddress = privateIpAddress;
	}

	/**
	 * @return the groupName used with cluster compute instances
	 */
	public String getGroupName() {
		return this.groupName;
	}

	/**
	 * @param groupName the groupName to set
	 */
	public void setGroupName(String groupName) {
		this.groupName = groupName;
	}

	/**
	 * For some eucaluptus clusters, need to set this false (=private)
	 *
	 * @param sets the public addressing mode (true by default)
	 */
	public void setPublicAddressing(boolean set) {
		addressingType = set;
	}

    void prepareQueryParams(String prefix, boolean setMinAndMax, Map params) {
        params.put(prefix + "ImageId", getImageId());
        if (setMinAndMax) {
            params.put(prefix + "MinCount", "" + getMinCount());
            params.put(prefix + "MaxCount", "" + getMaxCount());
        }

        byte[] userData = getUserData();
        if (userData != null && userData.length > 0) {
            params.put(prefix + "UserData", new String(Base64.encodeBase64(userData)));
        }
        params.put(prefix + "AddressingType", isPublicAddressing()?"public":"private");
        String keyName = getKeyName();
        if (keyName != null && !keyName.trim().equals("")) {
            params.put(prefix + "KeyName", keyName);
        }

        if (getSecurityGroup() != null) {
            for(int i = 0; i < getSecurityGroup().size(); i++) {
                params.put(prefix + "SecurityGroup." + (i + 1), getSecurityGroup().get(i));
            }
        }
        if (getAdditionalInfo() != null && !getAdditionalInfo().trim().equals("")) {
            params.put(prefix + "AdditionalInfo", getAdditionalInfo());
        }
        params.put(prefix + "InstanceType", getInstanceType().getTypeId());
        if (getAvailabilityZone() != null && !getAvailabilityZone().trim().equals("")) {
            params.put(prefix + "Placement.AvailabilityZone", getAvailabilityZone());
        }
        if (getKernelId() != null && !getKernelId().trim().equals("")) {
            params.put(prefix + "KernelId", getKernelId());
        }
        if (getRamdiskId() != null && !getRamdiskId().trim().equals("")) {
            params.put(prefix + "RamdiskId", getRamdiskId());
        }
		if (blockDeviceMappings != null) {
			for(int i = 0; i < blockDeviceMappings.size(); i++) {
				BlockDeviceMapping bdm = blockDeviceMappings.get(i);
				params.put("BlockDeviceMapping." + (i + 1) + ".DeviceName",
												bdm.getDeviceName());
				if (bdm.getVirtualName() != null) {
					params.put("BlockDeviceMapping." + (i + 1) + ".VirtualName",
												bdm.getVirtualName());
				}
				else {
					if (bdm.getSnapshotId() != null) {
						params.put("BlockDeviceMapping." + (i + 1) + ".Ebs.SnapshotId",
												bdm.getSnapshotId());
					}
					if (bdm.getVolumeSize() > 0) {
						params.put("BlockDeviceMapping." + (i + 1) + ".Ebs.VolumeSize",
												""+bdm.getVolumeSize());
					}
					params.put("BlockDeviceMapping." + (i + 1) + ".Ebs.DeleteOnTermination",
										bdm.isDeleteOnTerminate()?"true":"false");
				}
			}
		}
        if (isMonitoring()) {
            params.put(prefix + "Monitoring.Enabled", "true");
        }
        String subnetId = getSubnetId();
        if (subnetId != null && !subnetId.trim().equals("")) {
            params.put(prefix + "SubnetId", subnetId);
        }
        String privateIpAddress = getPrivateIpAddress();
        if (privateIpAddress != null && !privateIpAddress.trim().equals("")) {
            params.put(prefix + "PrivateIpAddress", privateIpAddress);
        }
        String groupName = getGroupName();
        if (groupName != null && !groupName.trim().equals("")) {
            params.put(prefix + "GroupName", groupName);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy