package com.sequenceiq.cloudbreak.cloud.openstack.view; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import com.fasterxml.jackson.core.JsonProcessingException; import com.sequenceiq.cloudbreak.api.model.InstanceGroupType; import com.sequenceiq.cloudbreak.cloud.model.InstanceTemplate; import com.sequenceiq.cloudbreak.cloud.model.Volume; import com.sequenceiq.cloudbreak.cloud.openstack.common.OpenStackUtils; import com.sequenceiq.cloudbreak.util.JsonUtil; public class NovaInstanceView { private final String stackName; private final InstanceTemplate instance; private final InstanceGroupType type; private final Map<String, String> tags; public NovaInstanceView(String stackName, InstanceTemplate instance, InstanceGroupType type) { this.stackName = stackName; this.instance = instance; this.type = type; this.tags = Collections.emptyMap(); } public NovaInstanceView(String stackName, InstanceTemplate instance, InstanceGroupType type, Map<String, String> tags) { this.stackName = stackName; this.instance = instance; this.type = type; this.tags = tags; } public String getFlavor() { return instance.getFlavor(); } public InstanceGroupType getType() { return type; } public String getInstanceId() { return instance.getGroupName().replaceAll("[_-]", "") + "_" + instance.getPrivateId(); } public String getName() { String stackName = this.stackName.replaceAll("_", "-"); String shortenedGroupName = instance.getGroupName().replaceAll("host|group|[_-]", "").trim(); return stackName + "-" + shortenedGroupName + "-" + instance.getPrivateId(); } public long getPrivateId() { return instance.getPrivateId(); } public int getVolumesCount() { if (instance.getVolumes() == null) { return 0; } return instance.getVolumes().size(); } public List<CinderVolumeView> getVolumes() { List<CinderVolumeView> list = new ArrayList<>(); int index = 0; for (Volume volume : instance.getVolumes()) { CinderVolumeView cv = new CinderVolumeView(volume, index); list.add(cv); index++; } return list; } public Map<String, String> getMetadataMap() { return generateMetadata(); } public String getMetadata() { try { return JsonUtil.writeValueAsString(generateMetadata()); } catch (JsonProcessingException e) { return generateMetadata().toString(); } } public InstanceTemplate getInstance() { return instance; } private Map<String, String> generateMetadata() { Map<String, String> metadata = new HashMap<>(); metadata.putAll(tags); metadata.put(OpenStackUtils.CB_INSTANCE_GROUP_NAME, instance.getGroupName()); metadata.put(OpenStackUtils.CB_INSTANCE_PRIVATE_ID, Long.toString(getPrivateId())); return metadata; } }