Package org.platformlayer.service.cloud.openstack.ops

Source Code of org.platformlayer.service.cloud.openstack.ops.OpenstackPublicEndpointController

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

import java.io.IOException;

import javax.inject.Inject;

import org.platformlayer.core.model.EndpointInfo;
import org.platformlayer.core.model.TagChanges;
import org.platformlayer.ops.Handler;
import org.platformlayer.ops.OpsContext;
import org.platformlayer.ops.OpsException;
import org.platformlayer.ops.OpsProvider;
import org.platformlayer.ops.machines.PlatformLayerHelpers;
import org.platformlayer.ops.tagger.Tagger;
import org.platformlayer.ops.tree.OpsTreeBase;
import org.platformlayer.service.cloud.openstack.model.OpenstackInstance;
import org.platformlayer.service.cloud.openstack.model.OpenstackPublicEndpoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.base.Strings;

public class OpenstackPublicEndpointController extends OpsTreeBase {

  private static final Logger log = LoggerFactory.getLogger(OpenstackPublicEndpointController.class);

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

  @Inject
  PlatformLayerHelpers client;

  // @Inject
  // ImageFactory imageFactory;
  //
  @Override
  protected void addChildren() throws OpsException {
    final OpenstackPublicEndpoint model = OpsContext.get().getInstance(OpenstackPublicEndpoint.class);

    OpenstackInstance instance = client.getItem(model.instance, OpenstackInstance.class);

    CloudInstanceMapper instanceMapper;
    {
      instanceMapper = injected(CloudInstanceMapper.class);
      instanceMapper.instance = instance;
      addChild(instanceMapper);
    }

    final EnsureFirewallIngress ingress;
    {
      ingress = injected(EnsureFirewallIngress.class);
      ingress.model = model;
      instanceMapper.addChild(ingress);
    }

    {
      OpsProvider<TagChanges> tagChanges = new OpsProvider<TagChanges>() {
        @Override
        public TagChanges get() {
          TagChanges tagChanges = new TagChanges();
          String address = ingress.getPublicAddress();
          if (Strings.isNullOrEmpty(address)) {
            throw new IllegalStateException();
          }

          EndpointInfo endpoint = new EndpointInfo(address, model.publicPort);
          tagChanges.addTags.add(endpoint.toTag());

          return tagChanges;
        }
      };

      Tagger tagger = injected(Tagger.class);

      tagger.platformLayerKey = model.getKey();
      tagger.tagChangesProvider = tagChanges;

      instanceMapper.addChild(tagger);

      Tagger tagInstance = injected(Tagger.class);

      tagInstance.platformLayerKey = null;
      tagInstance.platformLayerKey = model.instance;
      tagInstance.tagChangesProvider = tagChanges;

      instanceMapper.addChild(tagInstance);
    }
  }
}
TOP

Related Classes of org.platformlayer.service.cloud.openstack.ops.OpenstackPublicEndpointController

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.