Пример #1
0
 def list_subnets(self) -> Iterable[Subnet_Props]:
     subnets = self.ec2_client.describe_subnets(
         Filters=[{
             "Name": "vpc-id",
             "Values": self.vpc_ids
         }])
     for subnet in subnets["Subnets"]:
         tags = AWSTag.to_dict(subnet.get(AWSTag.TAGS_KEY))
         yield Subnet_Props(subnet["SubnetId"], tags.get(AWSTag.NAME_KEY),
                            subnet["SubnetArn"],
                            subnet["AvailabilityZoneId"])
Пример #2
0
 def discover(self) -> Generator[Spile, None, None]:
     """ find all the nitro instances and return a Spile if so"""
     paginator = self.ec2_client.get_paginator("describe_instances")
     filters = [{"Name": "instance-type", "Values": self.FOREST_SPECIES}]
     if self.vpc_ids:
         filters.append({"Name": "vpc-id", "Values": self.vpc_ids})
     page_iterator = paginator.paginate(Filters=filters)
     for page in page_iterator:
         for garbo in page["Reservations"]:
             for instance in garbo["Instances"]:
                 instance_id = instance["InstanceId"]
                 tags = AWSTag.to_dict(instance.get(AWSTag.TAGS_KEY))
                 for interface in instance["NetworkInterfaces"]:
                     yield Spile(
                         ec2_client=self.ec2_client,
                         eni_tag=ENI_Tag(instance_id,
                                         interface["NetworkInterfaceId"],
                                         tags, instance["State"]["Name"]),
                     )
Пример #3
0
 def list_mirror_targets(cls, region: str) -> Iterable[Mirror_Target_Props]:
     response = cls._get_client(
         region=region).describe_traffic_mirror_targets(
         )['TrafficMirrorTargets']
     for target in response:
         tags = AWSTag.to_dict(target.get(AWSTag.TAGS_KEY))
         # get the VPC_ID
         if target['Type'] == cls.TARGET_NIC:
             try:
                 vpc_id = cls._get_client(
                     region=region).describe_network_interfaces(
                         NetworkInterfaceIds=[
                             target['NetworkInterfaceId'],
                         ])["NetworkInterfaces"][0]["VpcId"]
                 vpc_bound = True
             except Exception as e:
                 if 'does not exist' in str(e):
                     id = target['TrafficMirrorTargetId']
                     logging.warning(
                         f'Invalid Instance Session Mirroring Target `{id}`, delete manually.'
                     )
                     continue
         if target['Type'] == cls.TARGET_NLB:
             try:
                 lb = boto3.client(
                     'elbv2', region_name=region).describe_load_balancers(
                         LoadBalancerArns=[
                             target['NetworkLoadBalancerArn']
                         ], )['LoadBalancers'][0]
             except Exception as e:
                 if 'or more load balancers not found' in str(e):
                     id = target['TrafficMirrorTargetId']
                     logging.warning(
                         f'Invalid NLB Session Mirroring Target `{id}`, delete manually.'
                     )
                     continue
                 raise
             vpc_id = lb["VpcId"]
             vpc_bound = True if lb.get("Schema") == "internal" else False
         yield Mirror_Target_Props(target['TrafficMirrorTargetId'],
                                   tags.get(AWSTag.NAME_KEY),
                                   target['Type'], vpc_id, vpc_bound)
Пример #4
0
 def list_vpcs(cls, region: str) -> Iterable[VPC_Props]:
     vpcs = cls._get_client(region=region).describe_vpcs()
     for vpc in vpcs["Vpcs"]:
         tags = AWSTag.to_dict(vpc.get(AWSTag.TAGS_KEY))
         yield VPC_Props(vpc["VpcId"], tags.get(AWSTag.NAME_KEY), tags)
 def test_to_dict(self):
     key = {'Key': 'Foo', 'Value': 'Bar'}
     key_dict = AWSTag.to_dict([key])
     self.assertEqual({'Foo': 'Bar'}, key_dict)
 def test_delete_dict(self):
     tags = {'Key': 'Foo'}
     self.assertEqual({'Foo': AWSTag.Delete}, AWSTag.to_dict([tags]))
 def test_to_dict_none(self):
     key_dict = AWSTag.to_dict([])
     self.assertEqual({}, key_dict)