Package org.platformlayer.service.cloud.direct.ops

Source Code of org.platformlayer.service.cloud.direct.ops.DirectInstanceController

package org.platformlayer.service.cloud.direct.ops;

import java.io.File;
import java.io.IOException;

import javax.inject.Inject;

import org.platformlayer.core.model.HostPolicy;
import org.platformlayer.ops.Bound;
import org.platformlayer.ops.Handler;
import org.platformlayer.ops.OpsException;
import org.platformlayer.ops.instances.ImageFactory;
import org.platformlayer.ops.tree.OpsTreeBase;
import org.platformlayer.service.cloud.direct.model.DirectInstance;
import org.platformlayer.service.cloud.direct.ops.kvm.KvmInstance;
import org.platformlayer.service.cloud.direct.ops.lxc.LxcInstanceController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fathomdb.crypto.OpenSshUtils;

public class DirectInstanceController extends OpsTreeBase {
  static final Logger log = LoggerFactory.getLogger(DirectInstanceController.class);

  @Handler
  public void handler() throws OpsException, IOException {
  }

  @Inject
  ImageFactory imageFactory;

  @Bound
  DirectInstance model;

  @Override
  protected void addChildren() throws OpsException {
    HostPolicy hostPolicy = model.hostPolicy;
    if (hostPolicy == null) {
      hostPolicy = new HostPolicy();
    }

    if (hostPolicy.allowRunInContainer) {
      // TODO: The variable initialization probably doesn't belong here
      LxcInstanceController lxc = injected(LxcInstanceController.class);
      String id = model.getId();
      lxc.id = id;
      lxc.instanceDir = new File(DirectCloudUtils.LXC_BASE_DIR, id);

      lxc.minimumMemoryMB = model.minimumMemoryMb;

      addChild(lxc);

      if (model.publicPorts != null) {
        log.info("Ignoring model.publicPorts: " + model.publicPorts);

        // for (int publicPort : model.publicPorts) {
        // PublicPorts publicPortForward = injected(PublicPorts.class);
        // publicPortForward.publicPort = publicPort;
        // publicPortForward.backendPort = publicPort;
        // publicPortForward.backendItem = model;
        // lxc.addChild(publicPortForward);
        // }
      }
    } else {
      // TODO: The variable initialization probably doesn't belong here
      KvmInstance kvm = injected(KvmInstance.class);
      String id = model.getId();
      kvm.id = id;
      kvm.instanceDir = new File(DirectCloudUtils.KVM_BASE_DIR, id);
      kvm.owner = model.getKey();

      kvm.minimumMemoryMB = model.minimumMemoryMb;
      kvm.recipeId = model.recipeId;
      try {
        kvm.sshPublicKey = OpenSshUtils.readSshPublicKey(model.sshPublicKey);
      } catch (IOException e) {
        throw new OpsException("Error deserializing SSH key", e);
      }

      addChild(kvm);

      // TODO: Remove this... it's only supposed to be a hint
      if (model.publicPorts != null) {
        for (int publicPort : model.publicPorts) {
          throw new UnsupportedOperationException();
          //
          // PublicPorts publicPortForward = injected(PublicPorts.class);
          // publicPortForward.publicPort = publicPort;
          // publicPortForward.backendItem = model;
          // kvm.addChild(publicPortForward);
        }
      }
    }
  }

}
TOP

Related Classes of org.platformlayer.service.cloud.direct.ops.DirectInstanceController

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.