package core.aws.remote.vpc;
import com.amazonaws.services.ec2.model.DescribeSubnetsRequest;
import com.amazonaws.services.ec2.model.DescribeSubnetsResult;
import core.aws.client.AWS;
import core.aws.remote.EnvTag;
import core.aws.remote.Loader;
import core.aws.resource.Resources;
import core.aws.resource.vpc.Subnet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author neo
*/
public class SubnetLoader extends Loader {
public SubnetLoader(Resources resources, List<EnvTag> tags) {
super(resources, tags);
}
@Override
public void load() {
Map<String, Subnet> remoteSubnets = new HashMap<>();
all(Subnet.class).forEach(tag -> {
Subnet subnet = resources.find(Subnet.class, tag.resourceId())
.orElseGet(() -> resources.add(new Subnet(tag.resourceId())));
subnet.foundInRemote();
remoteSubnets.put(tag.remoteResourceId, subnet);
});
if (!remoteSubnets.isEmpty())
loadRemoteSubnets(remoteSubnets);
}
private void loadRemoteSubnets(Map<String, Subnet> remoteSubnets) {
DescribeSubnetsResult result = AWS.vpc.ec2.describeSubnets(new DescribeSubnetsRequest().withSubnetIds(remoteSubnets.keySet()));
for (com.amazonaws.services.ec2.model.Subnet remoteSubnet : result.getSubnets()) {
remoteSubnets.get(remoteSubnet.getSubnetId()).remoteSubnets.add(remoteSubnet);
}
}
}