package com.clouck.converter; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import com.amazonaws.services.autoscaling.model.AutoScalingGroup; import com.amazonaws.services.autoscaling.model.LaunchConfiguration; import com.amazonaws.services.ec2.model.Address; import com.amazonaws.services.ec2.model.CreateVolumePermission; import com.amazonaws.services.ec2.model.DhcpOptions; import com.amazonaws.services.ec2.model.Image; import com.amazonaws.services.ec2.model.Instance; import com.amazonaws.services.ec2.model.InternetGateway; import com.amazonaws.services.ec2.model.KeyPairInfo; import com.amazonaws.services.ec2.model.LaunchPermission; import com.amazonaws.services.ec2.model.NetworkAcl; import com.amazonaws.services.ec2.model.NetworkInterface; import com.amazonaws.services.ec2.model.PlacementGroup; import com.amazonaws.services.ec2.model.ProductCode; import com.amazonaws.services.ec2.model.Reservation; import com.amazonaws.services.ec2.model.RouteTable; import com.amazonaws.services.ec2.model.SecurityGroup; import com.amazonaws.services.ec2.model.Snapshot; import com.amazonaws.services.ec2.model.SpotInstanceRequest; import com.amazonaws.services.ec2.model.Subnet; import com.amazonaws.services.ec2.model.Volume; import com.amazonaws.services.ec2.model.Vpc; import com.amazonaws.services.elasticloadbalancing.model.LoadBalancerDescription; import com.clouck.model.Region; import com.clouck.model.aws.AbstractResource; import com.clouck.model.aws.ec2.Ec2Ami; import com.clouck.model.aws.ec2.Ec2AutoScalingGroup; import com.clouck.model.aws.ec2.Ec2ElasticIP; import com.clouck.model.aws.ec2.Ec2Instance; import com.clouck.model.aws.ec2.Ec2InstanceAttribute; import com.clouck.model.aws.ec2.Ec2KeyPair; import com.clouck.model.aws.ec2.Ec2LaunchConfiguration; import com.clouck.model.aws.ec2.Ec2LoadBalancer; import com.clouck.model.aws.ec2.Ec2NetworkInterface; import com.clouck.model.aws.ec2.Ec2PlacementGroup; import com.clouck.model.aws.ec2.Ec2Reservation; import com.clouck.model.aws.ec2.Ec2SecurityGroup; import com.clouck.model.aws.ec2.Ec2Snapshot; import com.clouck.model.aws.ec2.Ec2SpotInstanceRequest; import com.clouck.model.aws.ec2.Ec2Volume; import com.clouck.model.aws.ec2.VpcDhcpOptions; import com.clouck.model.aws.ec2.VpcInternetGateway; import com.clouck.model.aws.ec2.VpcNetworkAcl; import com.clouck.model.aws.ec2.VpcRouteTable; import com.clouck.model.aws.ec2.VpcSubnet; import com.clouck.model.aws.ec2.VpcVpc; @Component public class Ec2Converter { private static final Logger log = LoggerFactory.getLogger(Ec2Converter.class); private void conf(AbstractResource<?> resource, String accountId, Region region, DateTime dateTime) { resource.setAccountId(accountId); resource.setRegion(region); resource.setTimeDetected(dateTime.toDate()); } public List<AbstractResource<?>> toEc2SpotInstanceRequest(List<SpotInstanceRequest> sirs, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (SpotInstanceRequest sir : sirs) { Ec2SpotInstanceRequest ec2SpotInstanceRequest = new Ec2SpotInstanceRequest(); conf(ec2SpotInstanceRequest, accountId, region, dt); ec2SpotInstanceRequest.setResource(sir); resources.add(ec2SpotInstanceRequest); } log.debug("{} spot instance requests found via api and converted to Ec2SpotInstanceRequest", resources.size()); return resources; } public List<AbstractResource<?>> toEc2SecurityGroups(List<SecurityGroup> sgs, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (SecurityGroup sg : sgs) { Ec2SecurityGroup ec2SecurityGroup = new Ec2SecurityGroup(); conf(ec2SecurityGroup, accountId, region, dt); ec2SecurityGroup.setResource(sg); resources.add(ec2SecurityGroup); } log.debug("{} security groups found via api and converted to Ec2SecurityGroup", resources.size()); return resources; } public List<AbstractResource<?>> toEc2Reservations(List<Reservation> reservations, List<Map<String, Ec2InstanceAttribute>> attributes, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (int i = 0; i < reservations.size(); i++) { Ec2Reservation ec2Reservation = new Ec2Reservation(); conf(ec2Reservation, accountId, region, dt); ec2Reservation.setResource(reservations.get(i)); ec2Reservation.setInstanceId2Attributes(attributes.get(i)); resources.add(ec2Reservation); } log.debug("{} reservations found via api and converted to Ec2Reservation", resources.size()); return resources; } public List<AbstractResource<?>> toEc2AMIs(List<Image> images, List<List<LaunchPermission>> launchPermissions, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (int i = 0; i < images.size(); i++) { Ec2Ami ec2Ami = new Ec2Ami(); conf(ec2Ami, accountId, region, dt); ec2Ami.setResource(images.get(i)); ec2Ami.setLaunchPermissions(launchPermissions.get(i)); resources.add(ec2Ami); } log.debug("{} amis found via api and converted to Ec2Ami", resources.size()); return resources; } public List<AbstractResource<?>> toEc2Volumes(List<Volume> volumes, List<Boolean> autoEnableIOs, List<List<ProductCode>> productCodes, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (int i = 0; i < volumes.size(); i++) { Ec2Volume ec2Volume = new Ec2Volume(); ec2Volume.setAutoEnableIO(autoEnableIOs.get(i)); ec2Volume.setProductCodes(productCodes.get(i)); conf(ec2Volume, accountId, region, dt); ec2Volume.setResource(volumes.get(i)); resources.add(ec2Volume); } log.debug("{} volumes found via api and converted to Ec2Volume", resources.size()); return resources; } public List<AbstractResource<?>> toEc2InstancesFromEc2Reservations(List<AbstractResource<?>> ec2Rs, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (AbstractResource<?> abstractResource : ec2Rs) { Ec2Reservation ec2Reservation = (Ec2Reservation) abstractResource; Reservation reservation = ec2Reservation.getResource(); List<Instance> instances = reservation.getInstances(); resources.addAll(toEc2Instances(instances, accountId, region, dt, ec2Reservation.getInstanceId2Attributes(), reservation.getReservationId())); } log.debug("{} instances found in Ec2Reservations and converted to Ec2Instance", resources.size()); return resources; } public List<AbstractResource<?>> toEc2Instances(List<Instance> instances, String accountId, Region region, DateTime dt, Map<String, Ec2InstanceAttribute> instanceId2Attributes, String reservationId) { List<AbstractResource<?>> resources = new ArrayList<>(); for (Instance instance : instances) { Ec2Instance ec2Instance = new Ec2Instance(); ec2Instance.setTerminationProtection(instanceId2Attributes.get(instance.getInstanceId()).getTerminationProtection()); ec2Instance.setShutdownBehavior(instanceId2Attributes.get(instance.getInstanceId()).getShutdownBehavior()); ec2Instance.setUserData(instanceId2Attributes.get(instance.getInstanceId()).getUserData()); ec2Instance.setReservationId(reservationId); conf(ec2Instance, accountId, region, dt); ec2Instance.setResource(instance); resources.add(ec2Instance); } log.debug("{} instances converted to Ec2Instance", resources.size()); return resources; } public List<AbstractResource<?>> toEc2Snapshots(List<Snapshot> snapshots, List<List<CreateVolumePermission>> createVolumePermissions, List<List<ProductCode>> productCodes, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (int i = 0; i < snapshots.size(); i++) { Ec2Snapshot ec2Snapshot = new Ec2Snapshot(); conf(ec2Snapshot, accountId, region, dt); ec2Snapshot.setResource(snapshots.get(i)); ec2Snapshot.setCreateVolumePermissions(createVolumePermissions.get(i)); ec2Snapshot.setProductCodes(productCodes.get(i)); resources.add(ec2Snapshot); } log.debug("{} snapshots found via api and converted to Ec2Snapshot", resources.size()); return resources; } public List<AbstractResource<?>> toEc2KeyPairs(List<KeyPairInfo> keyPairs, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (KeyPairInfo keyPairInfo : keyPairs) { Ec2KeyPair ec2KeyPair = new Ec2KeyPair(); conf(ec2KeyPair, accountId, region, dt); ec2KeyPair.setResource(keyPairInfo); resources.add(ec2KeyPair); } log.debug("{} key pairs found via api and converted to Ec2KeyPair", resources.size()); return resources; } public List<AbstractResource<?>> toEc2ElasticIPs(List<Address> addresses, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (Address address : addresses) { Ec2ElasticIP ec2ElasticIP = new Ec2ElasticIP(); conf(ec2ElasticIP, accountId, region, dt); ec2ElasticIP.setResource(address); resources.add(ec2ElasticIP); } log.debug("{} elastic ips found via api and converted to Ec2ElasticIP", resources.size()); return resources; } public List<AbstractResource<?>> toEc2PlacementGroups(List<PlacementGroup> placementGroups, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (PlacementGroup placementGroup : placementGroups) { Ec2PlacementGroup ec2PlacementGroup = new Ec2PlacementGroup(); conf(ec2PlacementGroup, accountId, region, dt); ec2PlacementGroup.setResource(placementGroup); resources.add(ec2PlacementGroup); } log.debug("{} placement groups found via api and converted to Ec2PlacementGroup", resources.size()); return resources; } public List<AbstractResource<?>> toEc2NetworkInterfaces(List<NetworkInterface> networkInterfaces, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (NetworkInterface networkInterface : networkInterfaces) { Ec2NetworkInterface ec2NetworkInterface = new Ec2NetworkInterface(); conf(ec2NetworkInterface, accountId, region, dt); ec2NetworkInterface.setResource(networkInterface); resources.add(ec2NetworkInterface); } log.debug("{} network interfaces found via api and converted to Ec2NetworkInterface", resources.size()); return resources; } public List<AbstractResource<?>> toVpcVpcs(List<Vpc> vpcs, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (Vpc vpc : vpcs) { VpcVpc vpcVpc = new VpcVpc(); conf(vpcVpc, accountId, region, dt); vpcVpc.setResource(vpc); resources.add(vpcVpc); } log.debug("{} vpcs found via api and converted to VpcVpc", resources.size()); return resources; } public List<AbstractResource<?>> toVpcSubnets(List<Subnet> subnets, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (Subnet subnet : subnets) { VpcSubnet vpcSubnet = new VpcSubnet(); conf(vpcSubnet, accountId, region, dt); vpcSubnet.setResource(subnet); resources.add(vpcSubnet); } log.debug("{} subnets found via api and converted to VpcSubnet", resources.size()); return resources; } public List<AbstractResource<?>> toVpcRouteTables(List<RouteTable> routeTables, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (RouteTable routeTable : routeTables) { VpcRouteTable vpcRouteTable = new VpcRouteTable(); conf(vpcRouteTable, accountId, region, dt); vpcRouteTable.setResource(routeTable); resources.add(vpcRouteTable); } log.debug("{} route tables found via api and converted to VpcRouteTable", resources.size()); return resources; } public List<AbstractResource<?>> toVpcInternetGateways(List<InternetGateway> internetGateways, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (InternetGateway internetGateway : internetGateways) { VpcInternetGateway vpcInternetGateway = new VpcInternetGateway(); conf(vpcInternetGateway, accountId, region, dt); vpcInternetGateway.setResource(internetGateway); resources.add(vpcInternetGateway); } log.debug("{} internet gateways found via api and converted to VpcInternetGateway", resources.size()); return resources; } public List<AbstractResource<?>> toVpcDhcpOptions(List<DhcpOptions> dhcpOptionses, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (DhcpOptions dhcpOptions : dhcpOptionses) { VpcDhcpOptions vpcDpcDhcpOptions = new VpcDhcpOptions(); conf(vpcDpcDhcpOptions, accountId, region, dt); vpcDpcDhcpOptions.setResource(dhcpOptions); resources.add(vpcDpcDhcpOptions); } log.debug("{} internet gateways found via api and converted to VpcInternetGateway", resources.size()); return resources; } public List<AbstractResource<?>> toVpcNetworkAcls(List<NetworkAcl> networkAcls, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (NetworkAcl networkAcl : networkAcls) { VpcNetworkAcl vpcNetworkAcl = new VpcNetworkAcl(); conf(vpcNetworkAcl, accountId, region, dt); vpcNetworkAcl.setResource(networkAcl); resources.add(vpcNetworkAcl); } log.debug("{} network acls found via api and converted to VpcNetworkAcl", resources.size()); return resources; } public List<AbstractResource<?>> toAsLaunchConfigurations(List<LaunchConfiguration> launchConfigurations, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (LaunchConfiguration launchConfiguration : launchConfigurations) { Ec2LaunchConfiguration ec2LaunchConfiguration = new Ec2LaunchConfiguration(); conf(ec2LaunchConfiguration, accountId, region, dt); ec2LaunchConfiguration.setResource(launchConfiguration); resources.add(ec2LaunchConfiguration); } log.debug("{} launch configurations found via api and converted to AsLaunchConfiguration", resources.size()); return resources; } public List<AbstractResource<?>> toAsGroups(List<AutoScalingGroup> autoScalingGroups, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (AutoScalingGroup autoScalingGroup : autoScalingGroups) { Ec2AutoScalingGroup ec2AutoScalingGroup = new Ec2AutoScalingGroup(); conf(ec2AutoScalingGroup, accountId, region, dt); ec2AutoScalingGroup.setResource(autoScalingGroup); resources.add(ec2AutoScalingGroup); } log.debug("{} auto scaling groups found via api and converted to Ec2AutoScalingGroup", resources.size()); return resources; } public List<AbstractResource<?>> toLoadBalancers(List<LoadBalancerDescription> loadBalancerDescriptions, String accountId, Region region, DateTime dt) { List<AbstractResource<?>> resources = new ArrayList<>(); for (LoadBalancerDescription loadBalancerDescription : loadBalancerDescriptions) { Ec2LoadBalancer ec2LoadBalancer = new Ec2LoadBalancer(); conf(ec2LoadBalancer, accountId, region, dt); ec2LoadBalancer.setResource(loadBalancerDescription); resources.add(ec2LoadBalancer); } log.debug("{} load balancers found via api and converted to Ec2LoadBalancer", resources.size()); return resources; } }