package com.sequenceiq.cloudbreak.cloud.byos;
import static com.sequenceiq.cloudbreak.cloud.model.Orchestrator.orchestrator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.sequenceiq.cloudbreak.cloud.PlatformParameters;
import com.sequenceiq.cloudbreak.cloud.model.TagSpecification;
import com.sequenceiq.cloudbreak.cloud.model.AvailabilityZone;
import com.sequenceiq.cloudbreak.cloud.model.AvailabilityZones;
import com.sequenceiq.cloudbreak.cloud.model.DiskType;
import com.sequenceiq.cloudbreak.cloud.model.DiskTypes;
import com.sequenceiq.cloudbreak.cloud.model.PlatformImage;
import com.sequenceiq.cloudbreak.cloud.model.PlatformOrchestrator;
import com.sequenceiq.cloudbreak.cloud.model.Region;
import com.sequenceiq.cloudbreak.cloud.model.Regions;
import com.sequenceiq.cloudbreak.cloud.model.ScriptParams;
import com.sequenceiq.cloudbreak.cloud.model.StackParamValidation;
import com.sequenceiq.cloudbreak.cloud.model.VmType;
import com.sequenceiq.cloudbreak.cloud.model.VmTypes;
import com.sequenceiq.cloudbreak.cloud.model.VolumeParameterType;
import com.sequenceiq.cloudbreak.cloud.service.CloudbreakResourceReaderService;
@Service
public class BYOSPlatformParameters implements PlatformParameters {
@Value("${cb.byos.regions:}")
private String byosRegionDefinition;
@Inject
private CloudbreakResourceReaderService cloudbreakResourceReaderService;
private Map<Region, List<AvailabilityZone>> regions = new HashMap<>();
private Region defaultRegion;
@PostConstruct
public void init() {
String zone;
if (StringUtils.isEmpty(byosRegionDefinition)) {
zone = resourceDefinition("zone");
} else {
zone = byosRegionDefinition;
}
this.regions = readRegions(zone);
this.defaultRegion = nthElement(this.regions.keySet(), 0);
}
@Override
public Regions regions() {
return new Regions(regions.keySet(), defaultRegion);
}
@Override
public AvailabilityZones availabilityZones() {
return new AvailabilityZones(regions);
}
@Override
public ScriptParams scriptParams() {
return new ScriptParams("", 0);
}
@Override
public DiskTypes diskTypes() {
return new DiskTypes(Collections.emptyList(), DiskType.diskType(""), diskMappings());
}
private Map<String, VolumeParameterType> diskMappings() {
return new HashMap<>();
}
@Override
public VmTypes vmTypes(Boolean extended) {
return new VmTypes(Collections.emptyList(), VmType.vmType(""));
}
@Override
public Map<AvailabilityZone, VmTypes> vmTypesPerAvailabilityZones(Boolean extended) {
return Collections.emptyMap();
}
@Override
public String resourceDefinition(String resource) {
return cloudbreakResourceReaderService.resourceDefinition("byos", resource);
}
@Override
public List<StackParamValidation> additionalStackParameters() {
return Collections.emptyList();
}
@Override
public PlatformOrchestrator orchestratorParams() {
return new PlatformOrchestrator(Collections.emptyList(), orchestrator(""));
}
@Override
public PlatformImage images() {
return new PlatformImage(new ArrayList<>(), imageRegex());
}
@Override
public String imageRegex() {
return "";
}
@Override
public TagSpecification tagSpecification() {
return null;
}
}