| 
									
										
										
										
											2020-09-13 16:08:23 +01:00
										 |  |  | import boto3 | 
					
						
							|  |  |  | import json | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from moto import mock_ssm, mock_cloudformation | 
					
						
							| 
									
										
										
										
											2021-01-29 03:31:56 -08:00
										 |  |  | from tests import EXAMPLE_AMI_ID | 
					
						
							| 
									
										
										
										
											2020-09-13 16:08:23 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_ssm | 
					
						
							|  |  |  | @mock_cloudformation | 
					
						
							|  |  |  | def test_get_command_invocations_from_stack(): | 
					
						
							|  |  |  |     stack_template = { | 
					
						
							|  |  |  |         "AWSTemplateFormatVersion": "2010-09-09", | 
					
						
							|  |  |  |         "Description": "Test Stack", | 
					
						
							|  |  |  |         "Resources": { | 
					
						
							|  |  |  |             "EC2Instance1": { | 
					
						
							|  |  |  |                 "Type": "AWS::EC2::Instance", | 
					
						
							|  |  |  |                 "Properties": { | 
					
						
							| 
									
										
										
										
											2021-01-29 03:31:56 -08:00
										 |  |  |                     "ImageId": EXAMPLE_AMI_ID, | 
					
						
							| 
									
										
										
										
											2020-09-13 16:08:23 +01:00
										 |  |  |                     "KeyName": "test", | 
					
						
							|  |  |  |                     "InstanceType": "t2.micro", | 
					
						
							|  |  |  |                     "Tags": [ | 
					
						
							|  |  |  |                         {"Key": "Test Description", "Value": "Test tag"}, | 
					
						
							|  |  |  |                         {"Key": "Test Name", "Value": "Name tag for tests"}, | 
					
						
							|  |  |  |                     ], | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         "Outputs": { | 
					
						
							|  |  |  |             "test": { | 
					
						
							|  |  |  |                 "Description": "Test Output", | 
					
						
							|  |  |  |                 "Value": "Test output value", | 
					
						
							|  |  |  |                 "Export": {"Name": "Test value to export"}, | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             "PublicIP": {"Value": "Test public ip"}, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     cloudformation_client = boto3.client("cloudformation", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     stack_template_str = json.dumps(stack_template) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     response = cloudformation_client.create_stack( | 
					
						
							|  |  |  |         StackName="test_stack", | 
					
						
							|  |  |  |         TemplateBody=stack_template_str, | 
					
						
							|  |  |  |         Capabilities=("CAPABILITY_IAM",), | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     client = boto3.client("ssm", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ssm_document = "AWS-RunShellScript" | 
					
						
							|  |  |  |     params = {"commands": ["#!/bin/bash\necho 'hello world'"]} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     response = client.send_command( | 
					
						
							|  |  |  |         Targets=[ | 
					
						
							|  |  |  |             {"Key": "tag:aws:cloudformation:stack-name", "Values": ("test_stack",)} | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         DocumentName=ssm_document, | 
					
						
							|  |  |  |         Parameters=params, | 
					
						
							|  |  |  |         OutputS3Region="us-east-2", | 
					
						
							|  |  |  |         OutputS3BucketName="the-bucket", | 
					
						
							|  |  |  |         OutputS3KeyPrefix="pref", | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     cmd = response["Command"] | 
					
						
							|  |  |  |     cmd_id = cmd["CommandId"] | 
					
						
							|  |  |  |     instance_ids = cmd["InstanceIds"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     invocation_response = client.get_command_invocation( | 
					
						
							|  |  |  |         CommandId=cmd_id, InstanceId=instance_ids[0], PluginName="aws:runShellScript" | 
					
						
							|  |  |  |     ) |