Package com.elastisys.scale.cloudadapters.openstack.scalinggroup.client

Source Code of com.elastisys.scale.cloudadapters.openstack.scalinggroup.client.StandardOpenstackClient

package com.elastisys.scale.cloudadapters.openstack.scalinggroup.client;

import static com.google.common.base.Preconditions.checkArgument;

import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;

import org.jclouds.openstack.nova.v2_0.domain.Server;
import org.jclouds.scriptbuilder.domain.OsFamily;

import com.elastisys.scale.cloudadapters.commons.adapter.BaseCloudAdapterConfig.ScaleUpConfig;
import com.elastisys.scale.cloudadapters.openstack.requests.AssignFloatingIpRequest;
import com.elastisys.scale.cloudadapters.openstack.requests.CreateServerRequest;
import com.elastisys.scale.cloudadapters.openstack.requests.DeleteServerRequest;
import com.elastisys.scale.cloudadapters.openstack.requests.GetServerRequest;
import com.elastisys.scale.cloudadapters.openstack.requests.ListServersWithTagRequest;
import com.elastisys.scale.cloudadapters.openstack.scalinggroup.OpenStackScalingGroupConfig;
import com.elastisys.scale.cloudadapters.openstack.utils.jclouds.ScriptUtils;
import com.google.common.base.Joiner;
import com.google.common.base.Optional;
import com.google.common.util.concurrent.Atomics;

/**
* Standard implementation of the {@link OpenstackClient} interface.
*
*
*
*/
public class StandardOpenstackClient implements OpenstackClient {

  /** Configuration with connection details for the OpenStack API. */
  private final AtomicReference<OpenStackScalingGroupConfig> config;

  public StandardOpenstackClient() {
    this.config = Atomics.newReference();
  }

  @Override
  public void configure(OpenStackScalingGroupConfig configuration) {
    checkArgument(configuration != null, "null configuration");

    this.config.set(configuration);
  }

  @Override
  public List<Server> getServers(String tag, String tagValue) {
    checkArgument(isConfigured(), "can't use client before it's configured");

    return new ListServersWithTagRequest(config(), tag, tagValue).call();
  }

  @Override
  public Server getServer(String serverId) {
    checkArgument(isConfigured(), "can't use client before it's configured");

    return new GetServerRequest(config(), serverId).call();
  }

  @Override
  public Server launchServer(String serverName,
      ScaleUpConfig provisioningDetails, Map<String, String> tags) {
    checkArgument(isConfigured(), "can't use client before it's configured");

    String userData = ScriptUtils.renderScript(
        Joiner.on("\n").join(provisioningDetails.getBootScript()),
        OsFamily.UNIX);
    CreateServerRequest request = new CreateServerRequest(config(),
        serverName, provisioningDetails.getSize(),
        provisioningDetails.getImage(),
        provisioningDetails.getKeyPair(),
        provisioningDetails.getSecurityGroups(), Optional.of(userData),
        tags);
    return request.call();
  }

  @Override
  public String assignFloatingIp(String serverId) {
    Server server = getServer(serverId);
    return new AssignFloatingIpRequest(config(), server).call();
  }

  @Override
  public void terminateServer(String serverId) {
    checkArgument(isConfigured(), "can't use client before it's configured");

    new DeleteServerRequest(config(), serverId).call();
  }

  private boolean isConfigured() {
    return config() != null;
  }

  private OpenStackScalingGroupConfig config() {
    return this.config.get();
  }

}
TOP

Related Classes of com.elastisys.scale.cloudadapters.openstack.scalinggroup.client.StandardOpenstackClient

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.