package com.sequenceiq.cloudbreak.service.stack; import java.util.List; import java.util.Map; import java.util.Set; import javax.inject.Inject; import org.springframework.stereotype.Service; import com.sequenceiq.cloudbreak.api.model.InstanceGroupType; import com.sequenceiq.cloudbreak.cloud.model.CloudInstance; import com.sequenceiq.cloudbreak.cloud.model.Group; import com.sequenceiq.cloudbreak.cloud.model.InstanceStatus; import com.sequenceiq.cloudbreak.cloud.model.InstanceTemplate; import com.sequenceiq.cloudbreak.domain.InstanceGroup; import com.sequenceiq.cloudbreak.domain.InstanceMetaData; import com.sequenceiq.cloudbreak.domain.Stack; import com.sequenceiq.cloudbreak.repository.InstanceMetaDataRepository; @Service public class InstanceMetadataService { @Inject private InstanceMetaDataRepository instanceMetaDataRepository; public void updateInstanceStatus(Set<InstanceGroup> instanceGroup, Map<InstanceGroupType, com.sequenceiq.cloudbreak.api.model.InstanceStatus> newStatusByGroupType) { for (InstanceGroup group : instanceGroup) { com.sequenceiq.cloudbreak.api.model.InstanceStatus newStatus = newStatusByGroupType.get(group.getInstanceGroupType()); if (newStatus != null) { for (InstanceMetaData instanceMetaData : group.getInstanceMetaData()) { instanceMetaData.setInstanceStatus(newStatus); instanceMetaDataRepository.save(instanceMetaData); } } } } public void updateInstanceStatus(Set<InstanceGroup> instanceGroup, com.sequenceiq.cloudbreak.api.model.InstanceStatus newStatus, Set<String> candidateAddresses) { for (InstanceGroup group : instanceGroup) { for (InstanceMetaData instanceMetaData : group.getInstanceMetaData()) { if (candidateAddresses.contains(instanceMetaData.getDiscoveryFQDN())) { instanceMetaData.setInstanceStatus(newStatus); instanceMetaDataRepository.save(instanceMetaData); } } } } public void saveInstanceRequests(Stack stack, List<Group> groups) { Set<InstanceGroup> instanceGroups = stack.getInstanceGroups(); for (Group group : groups) { InstanceGroup instanceGroup = getInstanceGroup(instanceGroups, group.getName()); List<InstanceMetaData> existingInGroup = instanceMetaDataRepository.findAllByInstanceGroupAndInstanceStatus(instanceGroup, com.sequenceiq.cloudbreak.api.model.InstanceStatus.REQUESTED); for (CloudInstance cloudInstance : group.getInstances()) { InstanceTemplate instanceTemplate = cloudInstance.getTemplate(); boolean exists = existingInGroup.stream().anyMatch(i -> i.getPrivateId().equals(instanceTemplate.getPrivateId())); if (InstanceStatus.CREATE_REQUESTED == instanceTemplate.getStatus() && !exists) { InstanceMetaData instanceMetaData = new InstanceMetaData(); instanceMetaData.setPrivateId(instanceTemplate.getPrivateId()); instanceMetaData.setInstanceStatus(com.sequenceiq.cloudbreak.api.model.InstanceStatus.REQUESTED); instanceMetaData.setInstanceGroup(instanceGroup); instanceMetaDataRepository.save(instanceMetaData); } } } } public void deleteInstanceRequest(Long stackId, Long privateId) { Set<InstanceMetaData> instanceMetaData = instanceMetaDataRepository.findAllInStack(stackId); for (InstanceMetaData metaData : instanceMetaData) { if (metaData.getPrivateId().equals(privateId)) { instanceMetaDataRepository.delete(metaData); break; } } } private InstanceGroup getInstanceGroup(Set<InstanceGroup> instanceGroups, String groupName) { for (InstanceGroup instanceGroup : instanceGroups) { if (groupName.equalsIgnoreCase(instanceGroup.getGroupName())) { return instanceGroup; } } return null; } }