api/client/example.py (33 lines of code) (raw):

#!/usr/bin/env python3 # Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You # may not use this file except in compliance with the License. A copy # of the License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "LICENSE.txt" file accompanying this file. This file is # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF # ANY KIND, express or implied. See the License for the specific # language governing permissions and limitations under the License. import boto3 import click from pcluster_client.api import cluster_operations_api from pcluster_client import Configuration, ApiClient, ApiException @click.command() @click.option("--stack-name", help="ParallelCluster API stack name") @click.option("--region", help="AWS region") def request(stack_name: str, region: str): """Makes a simple request to the API Gateway""" invoke_url = describe_stack_output(region, stack_name, "ParallelClusterApiInvokeUrl") configuration = Configuration(host=invoke_url) with ApiClient(configuration) as api_client: client = cluster_operations_api.ClusterOperationsApi(api_client) region_filter = region try: response = client.list_clusters(region=region_filter) print("Response: ", response) except ApiException as ex: print("Exception when calling ClusterOperationsApi->list_clusters: %s\n" % ex) def describe_stack_output(region: str, stack_name: str, output_name: str): try: # Describe stack cloudformation = boto3.client("cloudformation", region_name=region) response = cloudformation.describe_stacks(StackName=stack_name) # Get the stack details stacks = response.get("Stacks", []) if not stacks: print(f"No stacks found with the name: {stack_name}") return None # Extract output outputs = stacks[0].get("Outputs", []) return list(filter(lambda o: o['OutputKey'] == 'ParallelClusterApiInvokeUrl', outputs))[0]['OutputValue'] except Exception as e: print(f"Cannot describe output '{output_name}' for stack '{stack_name}': {e}") return None if __name__ == "__main__": request()