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

org.jclouds.ec2.domain.RunningInstance Maven / Gradle / Ivy

The newest version!
/*
 * 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 org.jclouds.ec2.domain;

import static shaded.com.google.common.base.Preconditions.checkNotNull;

import java.util.Date;
import java.util.Map;
import java.util.Set;

import org.jclouds.javax.annotation.Nullable;

import shaded.com.google.common.base.MoreObjects;
import shaded.com.google.common.base.Objects;
import shaded.com.google.common.base.MoreObjects.ToStringHelper;
import shaded.com.google.common.base.Strings;
import shaded.com.google.common.collect.ComparisonChain;
import shaded.com.google.common.collect.ImmutableMap;
import shaded.com.google.common.collect.ImmutableSet;
import shaded.com.google.common.collect.Maps;
import shaded.com.google.common.collect.Ordering;
import shaded.com.google.common.collect.Sets;

/**
 * 
 * @see 
 */
public class RunningInstance implements Comparable {

   public static Builder builder() {
      return new ConcreteBuilder();
   }

   public Builder toBuilder() {
      return new ConcreteBuilder().fromRunningInstance(this);
   }
   
   public abstract static class Builder> {
      protected abstract T self();

      protected String region;
      protected Set groupNames = Sets.newLinkedHashSet();
      protected String amiLaunchIndex;
      protected String dnsName;
      protected String imageId;
      protected String instanceId;
      protected InstanceState instanceState;
      protected String rawState;
      protected String instanceType;
      protected String ipAddress;
      protected String kernelId;
      protected String keyName;
      protected Date launchTime;
      protected String availabilityZone;
      protected String virtualizationType = "paravirtual";
      protected String platform;
      protected String privateDnsName;
      protected String privateIpAddress;
      protected String ramdiskId;
      protected String reason;
      protected RootDeviceType rootDeviceType = RootDeviceType.INSTANCE_STORE;
      protected String rootDeviceName;
      protected Map ebsBlockDevices = Maps.newLinkedHashMap();
      protected Map tags = Maps.newLinkedHashMap();

      public T tags(Map tags) {
         this.tags = ImmutableMap.copyOf(checkNotNull(tags, "tags"));
         return self();
      }

      public T tag(String key, String value) {
         if (key != null)
            this.tags.put(key, Strings.nullToEmpty(value));
         return self();
      }
      
      public T region(String region) {
         this.region = region;
         return self();
      }

      public T groupNames(Iterable groupNames) {
         this.groupNames = ImmutableSet.copyOf(checkNotNull(groupNames, "groupNames"));
         return self();
      }

      public T groupName(String groupName) {
         if (groupName != null)
            this.groupNames.add(groupName);
         return self();
      }

      public T amiLaunchIndex(String amiLaunchIndex) {
         this.amiLaunchIndex = amiLaunchIndex;
         return self();
      }

      public T dnsName(String dnsName) {
         this.dnsName = dnsName;
         return self();
      }

      public T imageId(String imageId) {
         this.imageId = imageId;
         return self();
      }

      public T instanceId(String instanceId) {
         this.instanceId = instanceId;
         return self();
      }

      public T instanceState(InstanceState instanceState) {
         this.instanceState = instanceState;
         return self();
      }
      
      public T rawState(String rawState) {
         this.rawState = rawState;
         return self();
      }
      
      public T instanceType(String instanceType) {
         this.instanceType = instanceType;
         return self();
      }

      public T ipAddress(String ipAddress) {
         this.ipAddress = ipAddress;
         return self();
      }

      public T kernelId(String kernelId) {
         this.kernelId = kernelId;
         return self();
      }

      public T keyName(String keyName) {
         this.keyName = keyName;
         return self();
      }

      public T launchTime(Date launchTime) {
         this.launchTime = launchTime;
         return self();
      }

      public T availabilityZone(String availabilityZone) {
         this.availabilityZone = availabilityZone;
         return self();
      }

      public T virtualizationType(String virtualizationType) {
         this.virtualizationType = virtualizationType;
         return self();
      }

      public T platform(String platform) {
         this.platform = platform;
         return self();
      }

      public T privateDnsName(String privateDnsName) {
         this.privateDnsName = privateDnsName;
         return self();
      }

      public T privateIpAddress(String privateIpAddress) {
         this.privateIpAddress = privateIpAddress;
         return self();
      }

      public T ramdiskId(String ramdiskId) {
         this.ramdiskId = ramdiskId;
         return self();
      }

      public T reason(String reason) {
         this.reason = reason;
         return self();
      }

      public T rootDeviceType(RootDeviceType rootDeviceType) {
         this.rootDeviceType = rootDeviceType;
         return self();
      }

      public T rootDeviceName(String rootDeviceName) {
         this.rootDeviceName = rootDeviceName;
         return self();
      }

      public T devices(Map ebsBlockDevices) {
         this.ebsBlockDevices = ImmutableMap.copyOf(checkNotNull(ebsBlockDevices, "ebsBlockDevices"));
         return self();
      }

      public T device(String key, BlockDevice value) {
         if (key != null && value != null)
            this.ebsBlockDevices.put(key, value);
         return self();
      }
      
      public T fromRunningInstance(RunningInstance in) {
         return region(in.region).groupNames(in.groupNames).amiLaunchIndex(in.amiLaunchIndex).dnsName(in.dnsName)
               .imageId(in.imageId).instanceId(in.instanceId).instanceState(in.instanceState).rawState(in.rawState)
               .instanceType(in.instanceType).ipAddress(in.ipAddress).kernelId(in.kernelId).keyName(in.keyName)
               .launchTime(in.launchTime).availabilityZone(in.availabilityZone)
               .virtualizationType(in.virtualizationType).platform(in.platform).privateDnsName(in.privateDnsName)
               .privateIpAddress(in.privateIpAddress).ramdiskId(in.ramdiskId).reason(in.reason)
               .rootDeviceType(in.rootDeviceType).rootDeviceName(in.rootDeviceName).devices(in.ebsBlockDevices)
               .tags(in.tags);
      }
      
      public abstract RunningInstance build();

   }
   
   private static class ConcreteBuilder extends Builder {
      @Override
      protected ConcreteBuilder self() {
         return this;
      }

      @Override
      public RunningInstance build() {
         return new RunningInstance(region, groupNames, amiLaunchIndex, dnsName, imageId, instanceId, instanceState,
               rawState, instanceType, ipAddress, kernelId, keyName, launchTime, availabilityZone, virtualizationType,
               platform, privateDnsName, privateIpAddress, ramdiskId, reason, rootDeviceType, rootDeviceName,
               ebsBlockDevices, tags);
      }
   }

   protected final String region;
   protected final Set groupNames;
   protected final String amiLaunchIndex;
   @Nullable
   protected final String dnsName;
   protected final String imageId;
   protected final String instanceId;
   protected final InstanceState instanceState;
   protected final String rawState;
   protected final String instanceType;
   @Nullable
   protected final String ipAddress;
   @Nullable
   protected final String kernelId;
   @Nullable
   protected final String keyName;
   protected final Date launchTime;
   protected final String availabilityZone;
   protected final String virtualizationType;
   @Nullable
   protected final String platform;
   @Nullable
   protected final String privateDnsName;
   @Nullable
   protected final String privateIpAddress;
   @Nullable
   protected final String ramdiskId;
   @Nullable
   protected final String reason;
   protected final RootDeviceType rootDeviceType;
   @Nullable
   protected final String rootDeviceName;
   protected final Map ebsBlockDevices;
   protected final Map tags;

   protected RunningInstance(String region, Iterable groupNames, @Nullable String amiLaunchIndex,
            @Nullable String dnsName, String imageId, String instanceId, InstanceState instanceState, String rawState,
            String instanceType, @Nullable String ipAddress, @Nullable String kernelId, @Nullable String keyName,
            Date launchTime, String availabilityZone, String virtualizationType, @Nullable String platform,
            @Nullable String privateDnsName, @Nullable String privateIpAddress, @Nullable String ramdiskId,
            @Nullable String reason, RootDeviceType rootDeviceType, @Nullable String rootDeviceName,
            Map ebsBlockDevices, Map tags) {
      this.region = checkNotNull(region, "region");
      this.amiLaunchIndex = amiLaunchIndex; // nullable on runinstances.
      this.dnsName = dnsName; // nullable on runinstances.
      this.imageId = imageId; // nullable on runinstances.
      this.instanceId = checkNotNull(instanceId, "instanceId");
      this.instanceState = checkNotNull(instanceState, "instanceState for %s/%s", region, instanceId);
      this.rawState = checkNotNull(rawState, "rawState for %s/%s", region, instanceId);
      this.instanceType = checkNotNull(instanceType, "instanceType for %s/%s", region, instanceId);
      this.ipAddress = ipAddress;
      this.kernelId = kernelId;
      this.keyName = keyName;
      this.launchTime = launchTime;  // nullable on spot.
      this.availabilityZone = availabilityZone;  // nullable on spot.
      this.virtualizationType = virtualizationType;
      this.platform = platform;
      this.privateDnsName = privateDnsName;  // nullable on runinstances.
      this.privateIpAddress = privateIpAddress;  // nullable on runinstances.
      this.ramdiskId = ramdiskId;
      this.reason = reason;
      this.rootDeviceType = checkNotNull(rootDeviceType, "rootDeviceType for %s/%s", region, instanceId);
      this.rootDeviceName = rootDeviceName;
      this.ebsBlockDevices = ImmutableMap.copyOf(checkNotNull(ebsBlockDevices, "ebsBlockDevices for %s/%s", region, instanceId));
      this.groupNames = ImmutableSet.copyOf(checkNotNull(groupNames, "groupNames for %s/%s", region, instanceId));
      this.tags = ImmutableMap. copyOf(checkNotNull(tags, "tags"));
   }

   /**
    * To be removed in jclouds 1.6 

Warning

* * Especially on EC2 clones that may not support regions, this value is fragile. Consider * alternate means to determine context. */ @Deprecated public String getRegion() { return region; } /** * The AMI launch index, which can be used to find this instance within the launch group. For * more information, go to the Metadata section of the Amazon Elastic Compute Cloud Developer * Guide. * * @see
*/ public String getAmiLaunchIndex() { return amiLaunchIndex; } /** * The public DNS name assigned to the instance. This DNS name is contactable from outside the * Amazon EC2 network. This element remains empty until the instance enters a running state. */ public String getDnsName() { return dnsName; } /** * Image ID of the AMI used to launch the instance. */ public String getImageId() { return imageId; } /** * Unique ID of the instance launched. */ public String getId() { return instanceId; } /** * The current state of the instance. */ public InstanceState getInstanceState() { return instanceState; } /** * The current state of the instance, as returned literally from the input XML */ public String getRawState() { return rawState; } /** * The instance type. */ public String getInstanceType() { return instanceType; } /** * Specifies the IP address of the instance. */ public String getIpAddress() { return ipAddress; } /** * Optional. Kernel associated with this instance. */ public String getKernelId() { return kernelId; } /** * If this instance was launched with an associated key pair, this displays the key pair name. */ public String getKeyName() { return keyName; } /** * The time the instance launched. */ public Date getLaunchTime() { return launchTime; } /** * The location where the instance launched. */ public String getAvailabilityZone() { return availabilityZone; } /** * Specifies the instance's virtualization type. Valid values are paravirtual or hvm. */ public String getVirtualizationType() { return virtualizationType; } /** * Platform of the instance (e.g., Windows). */ public String getPlatform() { return platform; } /** * The private DNS name assigned to the instance. This DNS name can only be used inside the * Amazon EC2 network. This element remains empty until the instance enters a running state. */ public String getPrivateDnsName() { return privateDnsName; } /** * Specifies the private IP address that is assigned to the instance (Amazon VPC). */ public String getPrivateIpAddress() { return privateIpAddress; } /** * Optional. RAM disk associated with this instance. */ public String getRamdiskId() { return ramdiskId; } /** * Reason for the most recent state transition. This might be an empty string. */ public String getReason() { return reason; } public RootDeviceType getRootDeviceType() { return rootDeviceType; } public String getRootDeviceName() { return rootDeviceName; } /** * EBS volumes associated with the instance. */ public Map getEbsBlockDevices() { return ebsBlockDevices; } /** * Names of the security groups. */ public Set getGroupNames() { return groupNames; } /** * tags that are present in the instance */ public Map getTags() { return tags; } @Override public int compareTo(RunningInstance other) { return ComparisonChain.start().compare(region, other.region).compare(instanceId, other.instanceId, Ordering.natural().nullsLast()).result(); } @Override public int hashCode() { return Objects.hashCode(region, instanceId); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; RunningInstance that = RunningInstance.class.cast(obj); return Objects.equal(this.region, that.region) && Objects.equal(this.instanceId, that.instanceId); } protected ToStringHelper string() { return MoreObjects.toStringHelper(this).omitNullValues().add("region", region) .add("availabilityZone", availabilityZone).add("id", instanceId).add("state", rawState) .add("type", instanceType).add("virtualizationType", virtualizationType).add("imageId", imageId) .add("ipAddress", ipAddress).add("dnsName", dnsName).add("privateIpAddress", privateIpAddress) .add("privateDnsName", privateDnsName).add("keyName", keyName).add("groupNames", groupNames) .add("platform", platform).add("launchTime", launchTime).add("rootDeviceName", rootDeviceName) .add("rootDeviceType", rootDeviceType).add("ebsBlockDevices", ebsBlockDevices).add("tags", tags); } @Override public String toString() { return string().toString(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy