Package org.platformlayer.ops.machines

Source Code of org.platformlayer.ops.machines.PlatformLayerCloudMachine

package org.platformlayer.ops.machines;

import java.net.InetAddress;
import java.util.List;

import org.platformlayer.core.model.InstanceBase;
import org.platformlayer.core.model.ManagedItemState;
import org.platformlayer.core.model.PlatformLayerKey;
import org.platformlayer.core.model.Tag;
import org.platformlayer.core.model.Tags;
import org.platformlayer.ops.MachineBase;
import org.platformlayer.ops.OpsException;
import org.platformlayer.ops.networks.NetworkPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.base.Joiner;
import com.google.common.collect.Lists;

public class PlatformLayerCloudMachine extends MachineBase {
  static final Logger log = LoggerFactory.getLogger(PlatformLayerCloudMachine.class);

  final PlatformLayerHelpers platformLayerClient;
  final InstanceBase machine;

  public PlatformLayerCloudMachine(PlatformLayerHelpers platformLayerClient, InstanceBase machine) {
    this.platformLayerClient = platformLayerClient;
    this.machine = machine;
  }

  @Override
  public void terminate() throws OpsException {
    platformLayerClient.deleteItem(machine.getKey());

    // context.terminate(machine);
  }

  @Override
  public PlatformLayerKey getKey() {
    return machine.getKey();
  }

  public InstanceBase getInstance() {
    return this.machine;
  }

  @Override
  public boolean isTerminated() {
    ManagedItemState state = machine.getState();
    log.debug("isTerminated? State=" + state);
    switch (state) {
    case DELETE_REQUESTED:
      // TODO: Not sure if this is right
      log.warn("isTerminated mapping DELETE_REQUESTED => isTerminated=true");
      return true;

    case DELETED:
      return true;

    default:
      return false;
    }
  }

  NetworkPoint networkPoint;

  @Override
  public NetworkPoint getNetworkPoint() throws OpsException {
    if (networkPoint == null) {
      List<InetAddress> matching = Lists.newArrayList();

      // String privateNetworkId = src.getPrivateNetworkId();
      {
        Tags tags = machine.getTags();
        List<InetAddress> addresses = Tag.NETWORK_ADDRESS.find(tags);

        for (InetAddress address : addresses) {
          if (InetAddressUtils.isPublic(address)) {
            matching.add(address);
          } else {
            // if (!src.isPublicAddress()) {
            // // They could both be on the same public network
            // throw new IllegalStateException("Not implemented");
            // }
          }
        }
      }

      if (matching.size() != 1) {
        throw new OpsException("Found multiple addresses for: " + getKey() + ": "
            + Joiner.on(",").join(matching));
      }
      networkPoint = NetworkPoint.forAddress(matching.get(0));

      // // if (src.isPublicInternet())
      // // We assume that private networks can still reach the public internet, so these work for everyone
      // {
      // List<EndpointInfo> endpoints = EndpointInfo.findEndpoints(machine.getTags(), destinationPort);
      // if (!endpoints.isEmpty()) {
      // for (EndpointInfo endpoint : endpoints) {
      // matching.add(endpoint.getAddress());
      // }
      // }
      // }
    }
    return networkPoint;
  }
}
TOP

Related Classes of org.platformlayer.ops.machines.PlatformLayerCloudMachine

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.