diff --git a/fogros2/utils/check_running_instances.py b/fogros2/utils/check_running_instances.py new file mode 100644 index 0000000..c3742bf --- /dev/null +++ b/fogros2/utils/check_running_instances.py @@ -0,0 +1,28 @@ +import jmespath +import boto3 +import configparser +import os + + +def get_all_instances(): + config = configparser.ConfigParser() + config.read(os.path.join(os.path.expanduser('~'), '.aws/credentials')) + ec2_client = boto3.client('ec2') + regions = [region['RegionName'] + for region in ec2_client.describe_regions()['Regions']] + + result = [] + for profile in config.sections(): + for region in regions: + current_session = boto3.Session(profile_name = profile, region_name = region) + client = current_session.client('ec2') + response = client.describe_instances() + output = jmespath.search("Reservations[].Instances[].[NetworkInterfaces[0].OwnerId, InstanceId, InstanceType, \ + State.Name, Placement.AvailabilityZone, PrivateIpAddress, PublicIpAddress, KeyName, [Tags[?Key=='Name'].Value] [0][0]]", response) + if output and any("FogROS" in instance[7] for instance in output): + result.append(output) + + return result + +def get_running_instances(): + return [[instance for instance in region if "running" in instance] for region in get_all_instances()] diff --git a/fogros2_examples/launch/talker.auto_aws.launch.py b/fogros2_examples/launch/talker.auto_aws.launch.py index aab47a5..498afc7 100644 --- a/fogros2_examples/launch/talker.auto_aws.launch.py +++ b/fogros2_examples/launch/talker.auto_aws.launch.py @@ -33,7 +33,7 @@ from launch_ros.actions import Node import fogros2 -from utils import region_ami_selection, ec2_instance_type_selection +from utils import region_ami_selection, ec2_instance_type_selection, check_running_instances def generic_ubuntu_ami(): @@ -57,6 +57,12 @@ def generate_launch_description(): ec2_instance_type = ec2_instance_type_selection.find_cheapest_ec2_instance_type(region) print(region, ami, ec2_instance_type) + + all_instances = check_running_instances.get_all_instances() + running_instances = check_running_instances.get_running_instances() + print("All instances: ", all_instances) + print("Running instances: ", running_instances) + machine1 = fogros2.AWSCloudInstance( region=region, ec2_instance_type=ec2_instance_type, ami_image=ami )