package com.sequenceiq.cloudbreak.service.network; import static com.sequenceiq.cloudbreak.common.type.CloudConstants.AWS; import static com.sequenceiq.cloudbreak.common.type.CloudConstants.GCP; import static com.sequenceiq.cloudbreak.common.type.ResourceStatus.DEFAULT_DELETED; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import javax.inject.Inject; import org.springframework.stereotype.Service; import com.sequenceiq.cloudbreak.api.model.NetworkConfig; import com.sequenceiq.cloudbreak.common.type.CloudConstants; import com.sequenceiq.cloudbreak.common.type.ResourceStatus; import com.sequenceiq.cloudbreak.domain.CbUser; import com.sequenceiq.cloudbreak.domain.Network; import com.sequenceiq.cloudbreak.repository.NetworkRepository; import com.sequenceiq.cloudbreak.util.NameUtil; @Service public class DefaultNetworkCreator { private static final String DEFAULT_AWS_NETWORK_NAME = "default-aws-network"; private static final String DEFAULT_GCP_NETWORK_NAME = "default-gcp-network"; private static final String DEFAULT_AZURE_NETWORK_NAME = "default-azure-network"; @Inject private NetworkRepository networkRepository; public void createDefaultNetworks(CbUser user) { Set<Network> defaultNetworks = networkRepository.findAllDefaultInAccount(user.getAccount()); List<String> defaultNetworkNames = defaultNetworks.stream() .map(n -> n.getStatus() == DEFAULT_DELETED ? NameUtil.cutTimestampPostfix(n.getName()) : n.getName()) .collect(Collectors.toList()); createDefaultNetworkInstances(user, defaultNetworkNames); } private void createDefaultNetworkInstances(CbUser user, List<String> defaultNetworkNames) { if (!defaultNetworkNames.contains(DEFAULT_AWS_NETWORK_NAME)) { Network awsNetwork = new Network(); setNetworkCommonFields(awsNetwork, DEFAULT_AWS_NETWORK_NAME, "Default network settings for AWS clusters.", NetworkConfig.SUBNET_16, user, AWS); networkRepository.save(awsNetwork); } if (!defaultNetworkNames.contains(DEFAULT_AZURE_NETWORK_NAME)) { Network azureNetwork = new Network(); setNetworkCommonFields(azureNetwork, DEFAULT_AZURE_NETWORK_NAME, "Default network settings for Azure clusters.", NetworkConfig.SUBNET_16, user, CloudConstants.AZURE); networkRepository.save(azureNetwork); } if (!defaultNetworkNames.contains(DEFAULT_GCP_NETWORK_NAME)) { Network gcpNetwork = new Network(); setNetworkCommonFields(gcpNetwork, DEFAULT_GCP_NETWORK_NAME, "Default network settings for Gcp clusters.", NetworkConfig.SUBNET_16, user, GCP); networkRepository.save(gcpNetwork); } } private void setNetworkCommonFields(Network network, String name, String description, String subnet, CbUser user, String platform) { network.setName(name); network.setDescription(description); network.setSubnetCIDR(subnet); network.setOwner(user.getUserId()); network.setAccount(user.getAccount()); network.setStatus(ResourceStatus.DEFAULT); network.setPublicInAccount(true); network.setCloudPlatform(platform); } }