Skip to content

Instantly share code, notes, and snippets.

@nohtyp
Last active April 12, 2020 07:21
Show Gist options
  • Save nohtyp/d219961d91e8ea95157e0c40e4eddb5e to your computer and use it in GitHub Desktop.
Save nohtyp/d219961d91e8ea95157e0c40e4eddb5e to your computer and use it in GitHub Desktop.
This gist is for copying the launch configurations of an existing launch configuration in AWS.
#!/usr/bin/env python3
import boto3
import argparse
def create_launch_configuration(lcargs):
lc_dict = {}
try:
if lcargs.get('user_data'):
#The file to use for userdata
userdata = lcargs.get('user_data')
f = open(userdata, "r")
autoscaling_client = boto3.client('autoscaling')
lc = autoscaling_client.describe_launch_configurations(LaunchConfigurationNames=[lcargs.get('copy_from')])
lc_data = lc.get('LaunchConfigurations')[0]
for key,value in lc_data.items():
if key == 'LaunchConfigurationName':
lc_dict[key] = value + '-' + lcargs.get('name')
elif key == 'ImageId':
lc_dict[key] = lcargs.get('ami_id')
else:
lc_dict[key] = value
response = autoscaling_client.create_launch_configuration(
LaunchConfigurationName=lc_dict.get('LaunchConfigurationName'),
ImageId=lc_dict.get('ImageId'),
KeyName=lc_dict.get('KeyName'),
SecurityGroups=lc_dict.get('SecurityGroups'),
UserData=f.read(),
InstanceType=lc_dict.get('InstanceType'),
BlockDeviceMappings=lc_dict.get('BlockDeviceMappings'),
InstanceMonitoring=lc_dict.get('InstanceMonitoring'),
IamInstanceProfile=lc_dict.get('IamInstanceProfile'),
EbsOptimized=lc_dict.get('EbsOptimized'),
)
f.close()
if lcargs.get('update_ag'):
ag_update = autoscaling_client.update_auto_scaling_group(
AutoScalingGroupName=lcargs.get('update_ag'),
LaunchConfigurationName=lc_dict.get('LaunchConfigurationName'),
MinSize=1,
MaxSize=1,
DesiredCapacity=1,
AvailabilityZones=[lcargs.get('azs')]
)
else:
autoscaling_client = boto3.client('autoscaling')
lc = autoscaling_client.describe_launch_configurations(LaunchConfigurationNames=[lcargs.get('copy_from')])
lc_data = lc.get('LaunchConfigurations')[0]
for key,value in lc_data.items():
if key == 'LaunchConfigurationName':
lc_dict[key] = value + '-' + lcargs.get('name')
elif key == 'ImageId':
lc_dict[key] = lcargs.get('ami_id')
else:
lc_dict[key] = value
response = autoscaling_client.create_launch_configuration(
LaunchConfigurationName=lc_dict.get('LaunchConfigurationName'),
ImageId=lc_dict.get('ImageId'),
KeyName=lc_dict.get('KeyName'),
SecurityGroups=lc_dict.get('SecurityGroups'),
InstanceType=lc_dict.get('InstanceType'),
BlockDeviceMappings=lc_dict.get('BlockDeviceMappings'),
InstanceMonitoring=lc_dict.get('InstanceMonitoring'),
IamInstanceProfile=lc_dict.get('IamInstanceProfile'),
EbsOptimized=lc_dict.get('EbsOptimized'),
)
if lcargs.get('update_ag'):
ag_update = autoscaling_client.update_auto_scaling_group(
AutoScalingGroupName=lcargs.get('update_ag'),
LaunchConfigurationName=lc_dict.get('LaunchConfigurationName'),
MinSize=1,
MaxSize=1,
DesiredCapacity=1,
AvailabilityZones=[lcargs.get('azs')]
)
except autoscaling_client.exceptions.AlreadyExistsFault:
print("Launch Configuration {} exists. Please try a new name for you launch configuration.".format(lc_dict.get('LaunchConfigurationName')))
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Copy the Launch Configuration.', prog='copy_launch_configurations')
subparsers = parser.add_subparsers()
create_parser = subparsers.add_parser('create', description="Create a launch configuration", help='create launch configuration')
create_parser.add_argument('--name', required=True, help='New launch configuration name')
create_parser.add_argument('--copy-from', required=True, help='Launch cfg to copy')
create_parser.add_argument('--user-data', required=False, help='File that holds userdata')
create_parser.add_argument('--ami-id', required=True, help='The ami-id to replace in launch configuration')
create_parser.add_argument('--update-ag', required=True, help='Update autoscaling group launch configuration')
create_parser.add_argument('--azs', required=True, help='Availability Zone for Auto-Scaling configuration')
args = vars(parser.parse_args())
if 'copy_from' in args:
create_launch_configuration(args)
else:
parser.print_help()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment