package com.sequenceiq.cloudbreak.cloud.handler;
import static com.sequenceiq.cloudbreak.cloud.model.AvailabilityZone.availabilityZone;
import static com.sequenceiq.cloudbreak.cloud.model.Location.location;
import static com.sequenceiq.cloudbreak.cloud.model.Region.region;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.sequenceiq.cloudbreak.api.model.AdjustmentType;
import com.sequenceiq.cloudbreak.api.model.InstanceGroupType;
import com.sequenceiq.cloudbreak.cloud.context.AuthenticatedContext;
import com.sequenceiq.cloudbreak.cloud.context.CloudContext;
import com.sequenceiq.cloudbreak.cloud.event.resource.LaunchStackRequest;
import com.sequenceiq.cloudbreak.cloud.model.CloudCredential;
import com.sequenceiq.cloudbreak.cloud.model.CloudInstance;
import com.sequenceiq.cloudbreak.cloud.model.CloudResource;
import com.sequenceiq.cloudbreak.cloud.model.CloudStack;
import com.sequenceiq.cloudbreak.cloud.model.Group;
import com.sequenceiq.cloudbreak.cloud.model.Image;
import com.sequenceiq.cloudbreak.cloud.model.InstanceStatus;
import com.sequenceiq.cloudbreak.cloud.model.InstanceTemplate;
import com.sequenceiq.cloudbreak.cloud.model.Location;
import com.sequenceiq.cloudbreak.cloud.model.Network;
import com.sequenceiq.cloudbreak.cloud.model.PortDefinition;
import com.sequenceiq.cloudbreak.cloud.model.Security;
import com.sequenceiq.cloudbreak.cloud.model.SecurityRule;
import com.sequenceiq.cloudbreak.cloud.model.Subnet;
import com.sequenceiq.cloudbreak.cloud.model.Volume;
import com.sequenceiq.cloudbreak.common.type.ResourceType;
@Component
public class ParameterGenerator {
private static final long STACK_ID = 5L;
public CloudContext createCloudContext() {
Location location = location(region("region"), availabilityZone("availabilityZone"));
return new CloudContext(STACK_ID, "teststack", "TESTCONNECTOR", "owner", "TESTVARIANT", location);
}
public CloudCredential createCloudCredential() {
CloudCredential c = new CloudCredential(1L, "opencred", "public_key", "cloudbreak");
c.putParameter("userName", "userName");
c.putParameter("password", "password");
c.putParameter("tenantName", "tenantName");
c.putParameter("endpoint", "http://endpoint:8080/v2.0");
return c;
}
public CloudStack createCloudStack() {
List<Group> groups = new ArrayList<>();
String name = "master";
List<Volume> volumes = Arrays.asList(new Volume("/hadoop/fs1", "HDD", 1), new Volume("/hadoop/fs2", "HDD", 1));
InstanceTemplate instanceTemplate = new InstanceTemplate("m1.medium", name, 0L, volumes, InstanceStatus.CREATE_REQUESTED,
new HashMap<>());
CloudInstance instance = new CloudInstance("SOME_ID", instanceTemplate);
List<SecurityRule> rules = Collections.singletonList(new SecurityRule("0.0.0.0/0",
new PortDefinition[]{new PortDefinition("22", "22"), new PortDefinition("443", "443")}, "tcp"));
Security security = new Security(rules, null);
groups.add(new Group(name, InstanceGroupType.CORE, Collections.singletonList(instance), security, null));
Map<InstanceGroupType, String> userData = ImmutableMap.of(
InstanceGroupType.CORE, "CORE",
InstanceGroupType.GATEWAY, "GATEWAY"
);
Image image = new Image("cb-centos66-amb200-2015-05-25", userData);
Subnet subnet = new Subnet("10.0.0.0/24");
Network network = new Network(subnet);
network.putParameter("publicNetId", "028ffc0c-63c5-4ca0-802a-3ac753eaf76c");
return new CloudStack(groups, network, image, new HashMap<>(), new HashMap<>(), null);
}
public String getSshFingerprint() {
return "43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8";
}
public List<CloudResource> createCloudResourceList() {
CloudResource cr = new CloudResource.Builder().type(ResourceType.HEAT_STACK).name("testref").build();
return Lists.newArrayList(cr);
}
public List<CloudInstance> createCloudInstances() {
return Lists.newArrayList();
}
public LaunchStackRequest createLaunchStackRequest() {
return new LaunchStackRequest(createCloudContext(), createCloudCredential(), createCloudStack(), AdjustmentType.BEST_EFFORT, 0L);
}
public AuthenticatedContext createAuthenticatedContext() {
return new AuthenticatedContext(createCloudContext(), createCloudCredential());
}
}