/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds 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.ibm.smartcloud.options;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Map;
import java.util.Map.Entry;
import org.jclouds.http.options.BaseHttpRequestOptions;
import com.google.common.collect.ImmutableSet;
/**
*
*
* @author Adrian Cole
*
*/
public class CreateInstanceOptions extends BaseHttpRequestOptions {
public CreateInstanceOptions() {
super();
formParameters.put("publicKey", "DEFAULT");
}
/**
*
* @param id
* The ID of a storage volume to associate with this instance
* @param mountPoint
* The mount point in which to mount the attached storage volume
*/
public CreateInstanceOptions mountVolume(String id, String mountPoint) {
checkNotNull(id, "volume id");
checkNotNull(mountPoint, "mountPoint");
formParameters.replaceValues("volumeID", ImmutableSet.of(id));
String mountParam = String.format("oss.storage.id.0.mnt", id);
formParameters.replaceValues(mountParam, ImmutableSet.of(mountPoint));
return this;
}
/**
*
* @param publicKeyName
* The public key to use for accessing the created instance
*/
public CreateInstanceOptions authorizePublicKey(String publicKeyName) {
checkNotNull(publicKeyName, "publicKeyName");
formParameters.replaceValues("publicKey", ImmutableSet.of(publicKeyName));
return this;
}
/**
*
* @param configurationData
* extra configuration to pass to the instance
*/
public CreateInstanceOptions configurationData(Map<String, String> configurationData) {
checkNotNull(configurationData, "configurationData");
for (Entry<String, String> entry : configurationData.entrySet()) {
formParameters.replaceValues(entry.getKey(), ImmutableSet.of(entry.getValue()));
}
return this;
}
/**
*
* @param ip
* The ID of a static IP address to associate with this instance
*/
public CreateInstanceOptions staticIP(String ip) {
checkNotNull(ip, "ip");
formParameters.replaceValues("ip", ImmutableSet.of(ip));
return this;
}
/**
*
* @param id
* The ID of a Vlan offering to associate with this instance.
*/
public CreateInstanceOptions vlanID(String id) {
checkNotNull(id, "id");
formParameters.replaceValues("vlanID", ImmutableSet.of(id));
return this;
}
/**
*
* @param ip
* The ID of a static IP address to associate with this instance as secondary IP.
*/
public CreateInstanceOptions secondaryIP(String ip) {
checkNotNull(ip, "ip");
formParameters.replaceValues("secondaryIP", ImmutableSet.of(ip));
return this;
}
/**
*
* @param id
* The ID of an existing anti-collocated instance.
*/
public CreateInstanceOptions antiCollocationInstance(String id) {
checkNotNull(id, "id");
formParameters.replaceValues("antiCollocationInstance", ImmutableSet.of(id));
return this;
}
/**
* Whether or not the instance should be provisioned with the root segment only. Compared to
* standard server size, this option will provide less storage but same memory and CPU, and thus
* provision the instance faster.
*
* @param isMiniEphemeral
* true if root only provision, False: normal provision
*/
public CreateInstanceOptions isMiniEphemeral(boolean isMiniEphemeral) {
formParameters.replaceValues("isMiniEphemeral", ImmutableSet.of(isMiniEphemeral + ""));
return this;
}
public static class Builder {
/**
* @see CreateInstanceOptions#configurationData
*/
public static CreateInstanceOptions configurationData(Map<String, String> configurationData) {
CreateInstanceOptions options = new CreateInstanceOptions();
return options.configurationData(configurationData);
}
/**
* @see CreateInstanceOptions#mountVolume
*/
public static CreateInstanceOptions mountVolume(String id, String mountPoint) {
CreateInstanceOptions options = new CreateInstanceOptions();
return options.mountVolume(id, mountPoint);
}
/**
* @see CreateInstanceOptions#staticIP
*/
public static CreateInstanceOptions staticIP(String ip) {
CreateInstanceOptions options = new CreateInstanceOptions();
return options.staticIP(ip);
}
/**
* @see CreateInstanceOptions#secondaryIP
*/
public static CreateInstanceOptions secondaryIP(String ip) {
CreateInstanceOptions options = new CreateInstanceOptions();
return options.secondaryIP(ip);
}
/**
* @see CreateInstanceOptions#vlanID
*/
public static CreateInstanceOptions vlanID(String id) {
CreateInstanceOptions options = new CreateInstanceOptions();
return options.vlanID(id);
}
/**
* @see CreateInstanceOptions#antiCollocationInstance
*/
public static CreateInstanceOptions antiCollocationInstance(String id) {
CreateInstanceOptions options = new CreateInstanceOptions();
return options.antiCollocationInstance(id);
}
/**
* @see CreateInstanceOptions#isMiniEphemeral
*/
public static CreateInstanceOptions isMiniEphemeral(boolean isMiniEphemeral) {
CreateInstanceOptions options = new CreateInstanceOptions();
return options.isMiniEphemeral(isMiniEphemeral);
}
/**
* @see CreateInstanceOptions#authorizePublicKey
*/
public static CreateInstanceOptions authorizePublicKey(String publicKeyName) {
CreateInstanceOptions options = new CreateInstanceOptions();
return options.authorizePublicKey(publicKeyName);
}
}
}