package core.aws.remote.ec2; import com.amazonaws.services.ec2.model.DescribeSecurityGroupsRequest; import core.aws.client.AWS; import core.aws.remote.EnvTag; import core.aws.remote.Loader; import core.aws.resource.Resources; import core.aws.resource.ec2.SecurityGroup; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author neo */ public class SGLoader extends Loader { public SGLoader(Resources resources, List<EnvTag> tags) { super(resources, tags); } @Override public void load() { Map<String, SecurityGroup> remoteSecurityGroups = new HashMap<>(); all(SecurityGroup.class) .forEach(tag -> { SecurityGroup securityGroup = resources.find(SecurityGroup.class, tag.resourceId()) .orElseGet(() -> resources.add(new SecurityGroup(tag.resourceId()))); securityGroup.foundInRemote(); remoteSecurityGroups.put(tag.remoteResourceId, securityGroup); }); if (!remoteSecurityGroups.isEmpty()) loadSecurityGroups(remoteSecurityGroups); } private void loadSecurityGroups(Map<String, SecurityGroup> securityGroups) { DescribeSecurityGroupsRequest request = new DescribeSecurityGroupsRequest() .withGroupIds(securityGroups.keySet()); for (com.amazonaws.services.ec2.model.SecurityGroup remoteSecurityGroup : AWS.ec2.ec2.describeSecurityGroups(request).getSecurityGroups()) { SecurityGroup securityGroup = securityGroups.get(remoteSecurityGroup.getGroupId()); securityGroup.name = remoteSecurityGroup.getGroupName(); securityGroup.remoteSecurityGroup = remoteSecurityGroup; } } }