From 3a61274d4e9fb666e4bbf81b7778a89d6dc0a87c Mon Sep 17 00:00:00 2001 From: Leon Radeck Date: Fri, 16 Feb 2018 16:28:44 +0100 Subject: [PATCH 01/10] Replica scenario, etc. --- configuration/aws-automation/aws-setup.sh | 11 +++ .../aws-automation/lib/functions_app.sh | 10 +++ .../aws-automation/lib/functions_ec2.sh | 13 +++- .../aws-automation/lib/functions_io.sh | 52 ++++++++----- .../aws-automation/lib/require_variables.sh | 77 ++++++++++++------- .../aws-automation/lib/resources-eu-west-2.sh | 15 +--- .../lib/scenario_associate_alb.sh | 5 +- .../aws-automation/lib/scenario_instance.sh | 8 +- .../lib/scenario_master_instance.sh | 13 ++-- .../lib/scenario_replica_instance.sh | 38 +++++++++ .../lib/scenario_shared_instance.sh | 8 +- configuration/aws-automation/lib/utils.sh | 7 ++ .../aws-automation/lib/validation.sh | 12 ++- 13 files changed, 188 insertions(+), 81 deletions(-) create mode 100644 configuration/aws-automation/lib/scenario_replica_instance.sh diff --git a/configuration/aws-automation/aws-setup.sh b/configuration/aws-automation/aws-setup.sh index aebd8831965..db86e315593 100755 --- a/configuration/aws-automation/aws-setup.sh +++ b/configuration/aws-automation/aws-setup.sh @@ -96,6 +96,11 @@ if $master_instance_scenario; then safeExit fi +if $replica_instance_scenario; then + replica_instance_start + safeExit +fi + if $associate_alb_scenario; then associate_alb_start safeExit @@ -123,6 +128,8 @@ usage() { -p, --public-dns-name Dns name of instance (e.g. \"ec2-35-176...amazonaws.com\") -z, --super-instance Dns name of superior instance (e.g. base instance for sub instances) -m, --event-name Name of event + -x, --mongodb-host Ip adress or dns of mongodb host + -y --mongodb-port Port of mongodb -b, --build Build version to use (leave empty for latest) -w, --description Description of sub instance -c, --contact-person Contact person @@ -208,6 +215,7 @@ associate_alb_scenario=false instance_scenario=false shared_instance_scenario=false master_instance_scenario=false +replica_instance_scenario=false # Read the options and set variables while [[ $1 = -?* ]]; do @@ -227,6 +235,8 @@ while [[ $1 = -?* ]]; do -p|--public-dns-name) shift; public_dns_name_param=${1} ;; -b|--super-instance) shift; super_instance_param=${1} ;; -m|--event-name) shift; event_name_param=${1} ;; + -x|--mongodb-host) shift; mongodb_host_param=${1} ;; + -y|--mongodb-port) shift; mongodb_name_param=${1} ;; -z|--build) shift; build_version_param=${1} ;; -w|--description) shift; description_param=${1} ;; -c|--contact-person) shift; contact_person_param=${1} ;; @@ -236,6 +246,7 @@ while [[ $1 = -?* ]]; do --instance) instance_scenario=true ;; --shared-instance) shared_instance_scenario=true ;; --master-instance) master_instance_scenario=true ;; + --replica-instance) replica_instance_scenario=true ;; --associate-alb) associate_alb_scenario=true ;; --endopts) shift; break ;; *) die "invalid option: '$1'." ;; diff --git a/configuration/aws-automation/lib/functions_app.sh b/configuration/aws-automation/lib/functions_app.sh index b790b003c72..3d1d45fce94 100644 --- a/configuration/aws-automation/lib/functions_app.sh +++ b/configuration/aws-automation/lib/functions_app.sh @@ -129,6 +129,16 @@ function append_macro_to_001_events_conf(){ ssh_wrapper $3@$4 echo "$patched_content >> $events_conf" } +function append_environment_to_env_sh(){ + local env_file=${4:-'/home/sailing/servers/server'} + local_echo "Appending environment '$environment' to env.sh..." + env_content=$(wget -qO- http://releases.sapsailing.com/environments/$1) + + exit_on_fail ssh_wrapper $2@$3 "echo -e \"# START Environment: $environment \" >> $env_file" + exit_on_fail ssh_wrapper $2@$3 "echo -e \"$env_content\" >> $env_file" + exit_on_fail ssh_wrapper $2@$3 "echo -e \"# END Environment: $environment \" >> $env_file" +} + function reload_httpd(){ local_echo "Reloading httpd..." ssh_wrapper $1@$2 "apachectl configtest >/dev/null 2>&1" diff --git a/configuration/aws-automation/lib/functions_ec2.sh b/configuration/aws-automation/lib/functions_ec2.sh index 6ebcea62940..bcb00699c71 100644 --- a/configuration/aws-automation/lib/functions_ec2.sh +++ b/configuration/aws-automation/lib/functions_ec2.sh @@ -47,6 +47,9 @@ function get_instance_id(){ exit_on_fail validate_instance_id $instance_id } +function get_launch_templates(){ + aws ec2 describe-launch-templates | jq -c ".LaunchTemplates[]" -r | sanitize +} # ----------------------------------------------------------- # Returns the instance id part of e.g. arn:aws:ec2:eu-west-2:017363970217:instance/i-096a32ca8c28bedbb # param $1 resource arn @@ -114,6 +117,12 @@ function run_instance(){ exit_on_fail validate_instance_id $instance_id } +function run_instance_from_launch_template(){ + local instance_id=$(aws_wrapper ec2 run-instances --launch-template LaunchTemplateId="$1" | get_attribute '.Instances[0].InstanceId') + exit_on_fail validate_instance_id $instance_id + wait_instance_exists $instance_id +} + # ----------------------------------------------------------- # Get user data of instance with specific instance id # @param $1 instance id @@ -131,12 +140,12 @@ function create_instance(){ local_echo -e "Creating instance with following specifications:\n\nRegion: $region\nName: $instance_name\nShort name: $instance_short_name\nType: $instance_type\nBuild: $build_version\n\nUser data:\n${1}\n" instance_id=$(run_instance "$1") wait_instance_exists $instance_id - print_instance_description $instance_id + $(print_instance_description $instance_id) echo $instance_id } function print_instance_description(){ aws_wrapper ec2 describe-instances --instance-ids $1 \ --query "Reservations[*].Instances[0].{InstanceId:InstanceId, ImageId:ImageId, Type:InstanceType, PublicDNS:PublicDnsName, KeyName:KeyName, PrivateDnsName:PrivateDnsName, PrivateIpAddress:PrivateIpAddress}"\ - --output table 1>&2 + --output table } diff --git a/configuration/aws-automation/lib/functions_io.sh b/configuration/aws-automation/lib/functions_io.sh index 8cf20fbc65a..a5d6ef799e1 100644 --- a/configuration/aws-automation/lib/functions_io.sh +++ b/configuration/aws-automation/lib/functions_io.sh @@ -1,11 +1,5 @@ #!/usr/bin/env bash -CHOOSE_FROM_INSTANCES=":instance" -CHOOSE_FROM_SECURITY_GROUPS=":security-group" -CHOOSE_FROM_IMAGES=":image" -CHOOSE_FROM_CERTIFICATES=":certificate" -CHOOSE_FROM_LOAD_BALANCERS=":loadbalancer" - # ----------------------------------------------------------- # Prompt user for input and save value to variable # @param $1 prompt message @@ -21,28 +15,35 @@ function require_input(){ declare -a option_values=() number_of_tagged_resources=0 default_tagged_resource="" - o=0 + o=0 for key in "${!RESOURCE_MAP[@]}"; do - if [[ $key = *"$5"* ]]; then + if [[ $key =~ $5 ]]; then # if resource is tagged - option_keys[o]=$key + option_keys[$o]=$key local tagged=$(echo ${RESOURCE_MAP[$key]} | cut -d, -f2) local name=$(echo ${RESOURCE_MAP[$key]} | cut -d, -f1) if [ $tagged == "true" ]; then - option_values[o]="$(tput setaf 3)$name ($key)$(tput sgr0)" + option_values[$o]="$(tput setaf 3)$name ($key)$(tput sgr0)" default_tagged_resource=$key ((number_of_tagged_resources++)) else - option_values[o]="$name ($key)" + option_values[$o]="$name ($key)" fi + ((o++)) fi - ((o++)) done - if [ $number_of_tagged_resources -eq 1 ] && [ "$force" == "true" ] || [ ${#option_keys[@]} -eq 1 ]; then - read -r $3 <<< $default_tagged_resource - return 0 - elif [ $number_of_tagged_resources -gt 0 ]; then + if [[ ( $number_of_tagged_resources -eq 1 || ${#option_keys[@]} -eq 1 ) && "$force" == "true" ]]; then + local_echo "$1" + if [ ! -z "$default_tagged_resource" ]; then + read -r $3 <<< $default_tagged_resource + else + echo ${option_keys[0]} + read -r $3 <<< ${option_keys[0]} + fi + return 0 + elif [ ${#option_keys[@]} -gt 0 ]; then + local_echo "$1" selectedValue="" select option in ${option_values[@]}; do selectedValue=$option @@ -136,9 +137,13 @@ function update_resources(){ > $resources_file OLD_RESOURCE_JSON=$RESOURCE_JSON - typeset -p OLD_RESOURCE_JSON >> $resources_file + typeset -p OLD_RESOURCE_JSON >> $resources_file + + OLD_LAUNCH_TEMPLATE_JSON=$LAUNCH_TEMPLATE_JSON + typeset -p OLD_LAUNCH_TEMPLATE_JSON >> $resources_file RESOURCES_ARRAY=($(get_resources)) + LAUNCH_TEMPLATES_ARRAY=($(get_launch_templates)) declare -A RESOURCE_MAP @@ -156,15 +161,22 @@ function update_resources(){ RESOURCE_MAP[$arn]="${name:-"Unnamed"},$tagged" done + for lt in ${LAUNCH_TEMPLATES_ARRAY[@]}; do + local id=$(echo $lt | jq -c ".LaunchTemplateId" -r | sanitize) + local name=$(echo $lt | jq -c ".LaunchTemplateName" -r | sanitize) + RESOURCE_MAP[$id]="${name:-"Unnamed"},false" + done + typeset -p RESOURCE_MAP >> $resources_file } function init_resources(){ - local_echo "Checking if aws resources with tag key 'AutoDiscover' and value 'true' were added or removed in region $region..." + local_echo "Checking if aws resources were added or removed in region $region since the last time..." RESOURCE_JSON=$(get_resources) + LAUNCH_TEMPLATE_JSON=$(get_launch_templates) - if [ "$RESOURCE_JSON" != "$OLD_RESOURCE_JSON" ]; then - local_echo "Updating tagged aws resources..." + if [ "$RESOURCE_JSON" != "$OLD_RESOURCE_JSON" ] || [ "$LAUNCH_TEMPLATE_JSON" != "$OLD_LAUNCH_TEMPLATE_JSON" ] ; then + local_echo "Updating aws resources..." update_resources else local_echo "Stored aws resources are up to date." diff --git a/configuration/aws-automation/lib/require_variables.sh b/configuration/aws-automation/lib/require_variables.sh index 5e93cc784c9..28008cfe133 100644 --- a/configuration/aws-automation/lib/require_variables.sh +++ b/configuration/aws-automation/lib/require_variables.sh @@ -1,8 +1,9 @@ #!/usr/bin/env bash +image_ask_message="Please select an image to use: " instance_ask_message="Please enter an instance to use: " event_name_ask_message="Please enter an event name (leave blank to skip event creation):" -instance_security_group_id_ask_message="Please select the security group for the instance: " +instance_security_group_ask_message="Please select the security group for the instance: " load_balancer_ask_message="Please select/enter the load balancer dns name: " region_ask_message="Please enter the region you want to use (e.g. eu-west-2): " instance_type_ask_message="Please enter the instance type (e.g. t2.medium): " @@ -11,8 +12,8 @@ instance_name_ask_message="Please enter a name for the instance: (e.g \"WC Santa instance_short_name_ask_message="Please enter a short name for the instance (e.g. \"wcs17\"): " key_file_ask_message="Please enter the file path of the keypair or leave empty to use ~/.ssh key: " new_admin_password_ask_message="Please enter a new password for the admin user (leave blank to skip password change): " -mongo_db_host_ask_message="Please enter the ip adress of the mongo db server: " -mongo_db_port_ask_message="Please enter the port of the mongo db server: " +mongodb_host_ask_message="Please enter the ip adress/dns of the mongo db: " +mongodb_port_ask_message="Please enter the port of the mongo db: " user_username_ask_message="Please enter the username of your new user (leave blank to skip user creation): " user_password_ask_message="Please enter the password of your new user (leave blank to skip user creation): " ssh_user_ask_message="Please enter the ssh user to connect to the instance: " @@ -21,88 +22,108 @@ description_message="Please enter a description for the server (leave blank to s contact_person_message="Please enter the name of a contact person (leave blank to skip): " contact_email_message="Please enter the email of the contact person (leave blank to skip): " build_version_message="Please enter a build version to use (releases.sapsailing.com): " +launch_tempate_ask_message="Please select the launch template for the replica: " +IS_OPTIONAL="true" +IS_NOT_OPTIONAL="false" +SHOW_INPUT="false" +HIDE_INPUT="true" +NO_DEFAULT_VALUE="" +NOT_A_PARAMETER="" -function require_image_id(){ - require_variable "" image_id "" "$image_id_ask_message" "false" "false" $CHOOSE_FROM_IMAGES +function require_launch_template(){ + require_variable "$launch_template_param" launch_template "$NO_DEFAULT_VALUE" "$launch_tempate_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidLaunchTemplateIdRegex +} + +function require_image(){ + require_variable "$image_param" image "$NO_DEFAULT_VALUE" "$image_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidImageARNRegex } function require_event_name(){ - require_variable "$event_name_param" event_name "" "$event_name_ask_message" "true" "false" + require_variable "$event_name_param" event_name "$NO_DEFAULT_VALUE" "$event_name_ask_message" "$IS_OPTIONAL" "$SHOW_INPUT" } -function require_instance_security_group_id(){ - require_variable "" instance_security_group_id "" "$instance_security_group_id_ask_message" "false" "false" $CHOOSE_FROM_SECURITY_GROUPS +function require_instance_security_group(){ + require_variable "$security_group_param" instance_security_group "$NO_DEFAULT_VALUE" "$instance_security_group_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidSecurityGroupARNRegex } function require_load_balancer(){ - require_variable "" load_balancer "" "$load_balancer_ask_message" "false" "false" $CHOOSE_FROM_LOAD_BALANCERS + require_variable "$load_balancer_param" load_balancer $NO_DEFAULT_VALUE "$load_balancer_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidLoadBalancerARNRegex } function require_instance(){ - require_variable "" instance "" "$instance_ask_message" "false" "false" $CHOOSE_FROM_INSTANCES + require_variable "$instance_param" instance $NO_DEFAULT_VALUE "$instance_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidInstanceARNRegex } function require_region(){ - require_variable "$region_param" region "$default_region" "$region_ask_message" "false" "false" + require_variable "$region_param" region "$default_region" "$region_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" } function require_instance_type(){ - require_variable "$instance_type_param" instance_type "$default_instance_type" "$instance_type_ask_message" "false" "false" + require_variable "$instance_type_param" instance_type "$default_instance_type" "$instance_type_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" } function require_instance_name(){ - require_variable "$instance_name_param" instance_name "$script_start_time" "$instance_name_ask_message" "false" "false" + require_variable "$instance_name_param" instance_name "$script_start_time" "$instance_name_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" } function require_instance_short_name(){ - require_variable "$instance_short_name_param" instance_short_name "$timestamp" "$instance_short_name_ask_message" "false" "false" + require_variable "$instance_short_name_param" instance_short_name "$timestamp" "$instance_short_name_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" } function require_key_name(){ - require_variable "$key_name_param" key_name "$default_key_name" "$key_name_ask_message" "false" "false" + require_variable "$key_name_param" key_name "$default_key_name" "$key_name_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" } function require_key_file(){ - require_variable "$key_file_param" key_file "$default_key_file" "$key_file_ask_message" "true" "false" + require_variable "$key_file_param" key_file "$default_key_file" "$key_file_ask_message" "$IS_OPTIONAL" "$SHOW_INPUT" } function require_new_admin_password(){ - require_variable "$new_admin_password_param" new_admin_password "$default_new_admin_password" "$new_admin_password_ask_message" "true" "true" + require_variable "$new_admin_password_param" new_admin_password "$default_new_admin_password" "$new_admin_password_ask_message" "$IS_OPTIONAL" "$HIDE_INPUT" } function require_user_username(){ - if [ ! -z ${user_password+x} ] || [ ! -z "$user_password" ]; then - require_variable "$user_username_param" user_username "$default_user_username" "$user_username_ask_message" "true" "false" + require_variable "$user_username_param" user_username "$default_user_username" "$user_username_ask_message" "$IS_OPTIONAL" "$SHOW_INPUT" + +} + +function require_mongodb_port(){ + if [ "$region" != "eu-west-1 "]; then + require_variable "$mongodb_port_param" mongodb_port "$default_mongodb_port" "$mongodb_port_ask_message" "$IS_OPTIONAL" "$HIDE_INPUT" + fi +} + +function require_mongodb_host(){ + if [ "$region" != "eu-west-1 "]; then + require_variable "$mongodb_host_param" mongodb_host "$default_mongodb_hostd" "$mongodb_host_ask_message" "$IS_OPTIONAL" "$HIDE_INPUT" fi } function require_user_password(){ - if [ ! -z ${user_name+x} ] || [ ! -z "$user_name" ]; then - require_variable "$user_password_param" user_password "$default_user_password" "$user_password_ask_message" "true" "true" - fi + require_variable "$user_password_param" user_password "$default_user_password" "$user_password_ask_message" "$IS_OPTIONAL" "$HIDE_INPUT" } function require_ssh_user(){ - require_variable "$ssh_user_param" ssh_user "$default_ssh_user" "$ssh_user_ask_message" "false" "false" + require_variable "$ssh_user_param" ssh_user "$default_ssh_user" "$ssh_user_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" } function require_super_instance(){ - require_variable "$super_instance_param" super_instance "$default_super_instance" "$super_instance_message" "false" "false" $CHOOSE_FROM_INSTANCES + require_variable "$super_instance_param" super_instance "$default_super_instance" "$super_instance_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidInstanceARNRegex } function require_description(){ - require_variable "$description_param" description "" "$description_message" "true" "false" + require_variable "$description_param" description "" "$description_message" "$IS_OPTIONAL" "$SHOW_INPUT" } function require_contact_person(){ - require_variable "$contact_person_param" contact_person "$default_contact_person" "$contact_person_message" "true" "false" + require_variable "$contact_person_param" contact_person "$default_contact_person" "$contact_person_message" "$IS_OPTIONAL" "$SHOW_INPUT" } function require_contact_email(){ - require_variable "$contact_email_param" contact_email "$default_contact_email" "$contact_email_message" "true" "false" + require_variable "$contact_email_param" contact_email "$default_contact_email" "$contact_email_message" "$IS_OPTIONAL" "$SHOW_INPUT" } function require_build_version(){ - require_variable "$build_version_param" build_version "$latest_release" "$build_version_message" "false" "false" + require_variable "$build_version_param" build_version "$latest_release" "$build_version_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" } diff --git a/configuration/aws-automation/lib/resources-eu-west-2.sh b/configuration/aws-automation/lib/resources-eu-west-2.sh index bb4afed6857..8ef9d4034d9 100644 --- a/configuration/aws-automation/lib/resources-eu-west-2.sh +++ b/configuration/aws-automation/lib/resources-eu-west-2.sh @@ -1,20 +1,11 @@ declare -- OLD_RESOURCE_JSON="{\"ResourceARN\":\"arn:aws:acm:eu-west-2:017363970217:certificate/d2ae17b0-75ed-4b56-ac12-a80f9e5c493d\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"}]} {\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:image/ami-39f3e25d\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:instance/i-02abdf10071ce9ce6\",\"Tags\":[{\"Value\":\"2018-02-14 06:57:30\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:instance/i-04eeb1346463540c5\",\"Tags\":[{\"Value\":\"123\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:instance/i-05f2fda5ce72c2b36\",\"Tags\":[{\"Value\":\"2018-02-14 07:22:33\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:instance/i-068b644ad5fbe6e5f\",\"Tags\":[{\"Value\":\"12\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:instance/i-08803ecb16560b18a\",\"Tags\":[{\"Value\":\"2018-02-14 07:15:26\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:instance/i-08e4a99e69f6d8dce\",\"Tags\":[{\"Value\":\"2018-02-14 07:07:20\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:instance/i-09330d7744ebef9b3\",\"Tags\":[{\"Value\":\"123\",\"Key\":\"Name\"}]} {\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:instance/i-096a32ca8c28bedbb\",\"Tags\":[{\"Value\":\"MongoDB\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:instance/i-0a65849491dfc8562\",\"Tags\":[{\"Value\":\"yxc\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:instance/i-0c57f03afc68de24c\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"},{\"Value\":\"Multi Instance\",\"Key\":\"Name\"},{\"Value\":\"root\",\"Key\":\"ssh_user\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:instance/i-0f2e26f9a7860e680\",\"Tags\":[{\"Value\":\"123\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:instance/i-0f5308bf09c42d7f9\",\"Tags\":[{\"Value\":\"123\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:instance/i-0d8d0c04dbd6f759f\",\"Tags\":[{\"Value\":\"2018-02-16 14:04:23\",\"Key\":\"Name\"}]} {\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:security-group/sg-74c92d1c\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"}]} {\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:security-group/sg-7f0c2916\",\"Tags\":[{\"Value\":\"Database and Messaging\",\"Key\":\"Name\"}]} {\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:security-group/sg-871732ee\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"},{\"Value\":\"appSecurityGroup\",\"Key\":\"Name\"}]} {\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:security-group/sg-9732d6ff\",\"Tags\":[{\"Value\":\"test\",\"Key\":\"Name\"}]} {\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-2:017363970217:loadbalancer/app/DummyALB/da70f61a914fc50a\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"}]}" -declare -A RESOURCE_MAP=([arn:aws:ec2:eu-west-2:017363970217:instance/i-096a32ca8c28bedbb]="MongoDB,false" [arn:aws:ec2:eu-west-2:017363970217:instance/i-08803ecb16560b18a]="2018-02-14 07:15:26,false" [arn:aws:ec2:eu-west-2:017363970217:instance/i-04eeb1346463540c5]="123,false" [arn:aws:ec2:eu-west-2:017363970217:instance/i-09330d7744ebef9b3]="123,false" [arn:aws:ec2:eu-west-2:017363970217:instance/i-02abdf10071ce9ce6]="2018-02-14 06:57:30,false" [arn:aws:ec2:eu-west-2:017363970217:instance/i-0f2e26f9a7860e680]="123,false" [arn:aws:acm:eu-west-2:017363970217:certificate/d2ae17b0-75ed-4b56-ac12-a80f9e5c493d]="Unnamed,true" [arn:aws:elasticloadbalancing:eu-west-2:017363970217:loadbalancer/app/DummyALB/da70f61a914fc50a]="Unnamed,true" [arn:aws:ec2:eu-west-2:017363970217:image/ami-39f3e25d]="Unnamed,true" [arn:aws:ec2:eu-west-2:017363970217:instance/i-05f2fda5ce72c2b36]="2018-02-14 07:22:33,false" [arn:aws:ec2:eu-west-2:017363970217:security-group/sg-74c92d1c]="Unnamed,true" [arn:aws:ec2:eu-west-2:017363970217:security-group/sg-871732ee]="appSecurityGroup,true" [arn:aws:ec2:eu-west-2:017363970217:instance/i-0a65849491dfc8562]="yxc,false" [arn:aws:ec2:eu-west-2:017363970217:security-group/sg-9732d6ff]="test,false" [arn:aws:ec2:eu-west-2:017363970217:instance/i-068b644ad5fbe6e5f]="12,false" [arn:aws:ec2:eu-west-2:017363970217:instance/i-0f5308bf09c42d7f9]="123,false" [arn:aws:ec2:eu-west-2:017363970217:instance/i-0c57f03afc68de24c]="Multi Instance,true" [arn:aws:ec2:eu-west-2:017363970217:instance/i-08e4a99e69f6d8dce]="2018-02-14 07:07:20,false" [arn:aws:ec2:eu-west-2:017363970217:security-group/sg-7f0c2916]="Database and Messaging,false" ) +declare -- OLD_LAUNCH_TEMPLATE_JSON="{\"LatestVersionNumber\":1,\"LaunchTemplateId\":\"lt-03aabd2afb301d6ac\",\"LaunchTemplateName\":\"Replica_20180214_225452\",\"DefaultVersionNumber\":1,\"CreatedBy\":\"arn:aws:iam::017363970217:user/leonradeck\",\"CreateTime\":\"2018-02-14T21:57:52.000Z\"}" +declare -A RESOURCE_MAP=([arn:aws:ec2:eu-west-2:017363970217:instance/i-096a32ca8c28bedbb]="MongoDB,false" [arn:aws:ec2:eu-west-2:017363970217:instance/i-0d8d0c04dbd6f759f]="2018-02-16 14:04:23,false" [arn:aws:acm:eu-west-2:017363970217:certificate/d2ae17b0-75ed-4b56-ac12-a80f9e5c493d]="Unnamed,true" [arn:aws:elasticloadbalancing:eu-west-2:017363970217:loadbalancer/app/DummyALB/da70f61a914fc50a]="Unnamed,true" [arn:aws:ec2:eu-west-2:017363970217:image/ami-39f3e25d]="Unnamed,true" [arn:aws:ec2:eu-west-2:017363970217:security-group/sg-74c92d1c]="Unnamed,true" [arn:aws:ec2:eu-west-2:017363970217:security-group/sg-871732ee]="appSecurityGroup,true" [arn:aws:ec2:eu-west-2:017363970217:security-group/sg-9732d6ff]="test,false" [lt-03aabd2afb301d6ac]="Replica_20180214_225452,false" [arn:aws:ec2:eu-west-2:017363970217:security-group/sg-7f0c2916]="Database and Messaging,false" ) diff --git a/configuration/aws-automation/lib/scenario_associate_alb.sh b/configuration/aws-automation/lib/scenario_associate_alb.sh index 2b32dc9e51a..59d0117672d 100644 --- a/configuration/aws-automation/lib/scenario_associate_alb.sh +++ b/configuration/aws-automation/lib/scenario_associate_alb.sh @@ -20,14 +20,15 @@ function associate_alb_require(){ require_load_balancer require_key_file require_ssh_user +} + +function associate_alb_execute() { disable_aws_success_output instance_id=$(get_resource_id $instance) public_dns_name=$(get_public_dns_name $instance_id) enable_aws_success_output -} -function associate_alb_execute() { # create target group for instance local target_group_arn=$(exit_on_fail create_target_group "S-dedicated-$instance_short_name") exit_on_fail set_target_group_health_check "$target_group_arn" "HTTP" "/index.html" "80" "5" "4" "2" "2" diff --git a/configuration/aws-automation/lib/scenario_instance.sh b/configuration/aws-automation/lib/scenario_instance.sh index 7cd5d1255e1..7add2c808be 100644 --- a/configuration/aws-automation/lib/scenario_instance.sh +++ b/configuration/aws-automation/lib/scenario_instance.sh @@ -17,8 +17,8 @@ function instance_start(){ function instance_require(){ require_region require_instance_type - require_instance_security_group_id - require_image_id + require_instance_security_group + require_image require_instance_name require_instance_short_name require_ssh_user @@ -33,6 +33,8 @@ function instance_require(){ function instance_preview(){ header "Preview" + image_id=$(get_resource_id $image) + instance_security_group_id=$(get_resource_id $instance_security_group) user_data=$(build_user_data) local_echo "An instance will be created with the following specifications: " local_echo "To be implemented..." @@ -60,7 +62,7 @@ function instance_execute() { local port="8888" configure_application $public_dns_name $port $event_name $new_admin_password $user_username $user_pass - + append_environment_to_env_sh "live-server" $ssh_user $public_dns_name header "Conclusion" success "Instance should be reachable through $public_dns_name." diff --git a/configuration/aws-automation/lib/scenario_master_instance.sh b/configuration/aws-automation/lib/scenario_master_instance.sh index a075900f6d1..130cc3ffe9b 100644 --- a/configuration/aws-automation/lib/scenario_master_instance.sh +++ b/configuration/aws-automation/lib/scenario_master_instance.sh @@ -18,8 +18,10 @@ function master_instance_start(){ function master_instance_require(){ require_region require_instance_type + require_image require_instance_name require_instance_short_name + require_instance_security_group require_ssh_user require_build_version require_key_name @@ -35,9 +37,10 @@ function master_instance_require(){ # ----------------------------------------------------------- function master_instance_execute() { header "Master Instance Initialization" - - ssh_user=$image_ssh_user - + event_name=$instance_name + image_id=$(get_resource_id $image) + instance_security_group_id=$(get_resource_id $instance_security_group) + local user_data_master=$(build_configuration "MONGODB_HOST=$mongodb_host" "MONGODB_PORT=$mongodb_port" "MONGODB_NAME=$(alphanumeric $instance_name)" \ "REPLICATION_CHANNEL=$(alphanumeric $instance_name)" "SERVER_NAME=$(alphanumeric $instance_name)" "USE_ENVIRONMENT=live-master-server" \ "INSTALL_FROM_RELEASE=$build_version" "SERVER_STARTUP_NOTIFY=$default_server_startup_notify") @@ -50,9 +53,7 @@ function master_instance_execute() { header "Event and user creation" port="8888" - configure_application $public_dns_name $port $event_name $new_admin_password $user_username $user_password - - public_ip=$(get_public_ip $public_dns_name) + event_id=$(configure_application $public_dns_name $port $event_name $new_admin_password $user_username $user_password) local user_data_replica=$(build_configuration "MONGODB_HOST=$mongodb_host" "MONGODB_PORT=$mongodb_port" "MONGODB_NAME=$(alphanumeric $instance_name)-replica" \ "REPLICATION_CHANNEL=$(alphanumeric $instance_name)" "SERVER_NAME=$(alphanumeric $instance_name)" "USE_ENVIRONMENT=live-replica-server" \ diff --git a/configuration/aws-automation/lib/scenario_replica_instance.sh b/configuration/aws-automation/lib/scenario_replica_instance.sh new file mode 100644 index 00000000000..bad38f8b26c --- /dev/null +++ b/configuration/aws-automation/lib/scenario_replica_instance.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +#!/usr/bin/env bash + +# Scenario for creating an instance +# ------------------------------------------------------ + +function replica_instance_start(){ + replica_instance_require + replica_instance_execute +} + +# ----------------------------------------------------------- +# All these variables are needed for this scenario +# If one variable is not assigned or passed by parameter +# the user will be prompted to enter a value +# ----------------------------------------------------------- +function replica_instance_require(){ + require_region + require_launch_template + require_ssh_user + require_key_file +} + +# ----------------------------------------------------------- +# Execute instance scenario +# @param $1 user data +# ----------------------------------------------------------- +function replica_instance_execute() { + + header "Replica Instance Initialization" + + instance_id=$(run_instance_from_launch_template $launch_template) + public_dns_name=$(get_public_dns_name $instance_id) + user_data=$(get_user_data_from_instance $instance_id | base64 --decode) + echo "$user_data" + wait_for_ssh_connection $ssh_user $public_dns_name +} diff --git a/configuration/aws-automation/lib/scenario_shared_instance.sh b/configuration/aws-automation/lib/scenario_shared_instance.sh index 78bd09482ec..1bbba4eb4a0 100644 --- a/configuration/aws-automation/lib/scenario_shared_instance.sh +++ b/configuration/aws-automation/lib/scenario_shared_instance.sh @@ -98,13 +98,7 @@ function shared_instance_execute() { local_echo "Commenting out $comment_out_line_in_env_with_pattern inside $server_env_file..." execute_remote "sed -i '/$comment_out_line_in_env_with_pattern/s/^/#/g' $server_env_file" - local_echo "Configuring $server_env_file..." - environment="live-server" - env_content=$(wget -qO- http://releases.sapsailing.com/environments/$environment) - - exit_on_fail execute_remote "echo -e \"# START Environment: $environment \" >> $server_env_file" - exit_on_fail execute_remote "echo -e \"$env_content\" >> $server_env_file" - exit_on_fail execute_remote "echo -e \"# END Environment: $environment \" >> $server_env_file" + append_environment_to_env_sh "live-server" $ssh_user $super_instance $server_env_file $env_file local env_patch=$(build_configuration "# START Script $script_start_time" "SERVER_NAME=$(alphanumeric $instance_name)" "TELNET_PORT=$telnet_port" \ "SERVER_PORT=$server_port" "EXPEDITION_PORT=$expedition_port" "MONGODB_NAME=$(alphanumeric $instance_name)" "MONGODB_HOST=$default_mongodb_host" \ diff --git a/configuration/aws-automation/lib/utils.sh b/configuration/aws-automation/lib/utils.sh index d0e53877efe..491f03f8a23 100644 --- a/configuration/aws-automation/lib/utils.sh +++ b/configuration/aws-automation/lib/utils.sh @@ -75,6 +75,13 @@ while [ -h "${SOURCE}" ]; do # resolve ${SOURCE} until the file is no longer a s done SOURCEPATH="$( cd -P "$( dirname "${SOURCE}" )" && pwd )" +wget -q --spider releases.sapsailing.com --timeout=5 + +if [ ! $? -eq 0 ]; then + error "No internet connection. Exiting." + safeExit +fi + if [ ! -d "${SOURCEPATH}" ] then die "Failed to find library files expected in: ${SOURCEPATH}" diff --git a/configuration/aws-automation/lib/validation.sh b/configuration/aws-automation/lib/validation.sh index 0ee358773e2..3a70ac12b5d 100644 --- a/configuration/aws-automation/lib/validation.sh +++ b/configuration/aws-automation/lib/validation.sh @@ -3,7 +3,13 @@ ValidHostnameRegex='^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$' ValidIpAddressRegex='^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$' ValidInstanceIdRegex='i-[a-zA-Z0-9]{17}' -ValidResourceARNRegex="arn:.+" +ValidLaunchTemplateIdRegex='lt-[a-zA-Z0-9]{17}' +ValidResourceARNRegex="arn:.+:.+:.+:.+:.+\/.+" +ValidInstanceARNRegex="arn:.+:.+:.+:.+:instance\/.+" +ValidSecurityGroupARNRegex="arn:.+:.+:.+:.+:security-group\/.+" +ValidImageARNRegex="arn:.+:.+:.+:.+:image\/.+" +ValidCertificateARNRegex="arn:.+:.+:.+:.+:certificate\/.+" +ValidLoadBalancerARNRegex="arn:.+:.+:.+:.+:loadbalancer\/.+" function validate_resource_arn(){ [[ "$1" =~ $ValidResourceARNRegex ]] && echo "$1" || error_message "ResourceARN \"$1\" not valid." @@ -13,6 +19,10 @@ function validate_instance_id(){ [[ "$1" =~ $ValidInstanceIdRegex ]] && echo "$1" || error_message "Instance id \"$1\" not valid." } +function validate_launch_template_id(){ + [[ "$1" =~ $ValidLaunchTemplateIdRegex ]] && echo "$1" || error_message "Launch template id \"$1\" not valid." +} + function validate_hostname(){ [[ "$1" =~ $ValidHostnameRegex ]] && echo "$1" || error_message "Hostname \"$1\" not valid." } From 138a1fe3b7d9f3ebbe6aa69e63f94db8ad11444c Mon Sep 17 00:00:00 2001 From: Leon Radeck Date: Mon, 19 Feb 2018 12:41:02 +0100 Subject: [PATCH 02/10] Save --- .../aws-automation/lib/build-config.sh | 6 +- .../aws-automation/lib/functions_app.sh | 32 ++- .../aws-automation/lib/functions_ec2.sh | 45 +++- .../aws-automation/lib/functions_elb.sh | 4 + .../aws-automation/lib/functions_io.sh | 4 + .../aws-automation/lib/functions_wrapper.sh | 6 +- .../aws-automation/lib/require_variables.sh | 27 +- .../aws-automation/lib/resources-eu-west-1.sh | 244 +++++++++++++++++- .../lib/scenario_associate_alb.sh | 14 +- .../aws-automation/lib/scenario_instance.sh | 7 +- .../lib/scenario_replica_instance.sh | 1 + .../lib/scenario_shared_instance.sh | 2 +- 12 files changed, 347 insertions(+), 45 deletions(-) diff --git a/configuration/aws-automation/lib/build-config.sh b/configuration/aws-automation/lib/build-config.sh index e20dcf37bf2..03bb2c3b2d2 100644 --- a/configuration/aws-automation/lib/build-config.sh +++ b/configuration/aws-automation/lib/build-config.sh @@ -1,5 +1,9 @@ #!/bin/bash -# + +# ----------------------------------------------------------- +# Scrpt for reading and writing variables to a file. +# ----------------------------------------------------------- + # https://github.com/brbsix/bash-config # Read and write config files from Bash diff --git a/configuration/aws-automation/lib/functions_app.sh b/configuration/aws-automation/lib/functions_app.sh index 3d1d45fce94..52eb519c01a 100644 --- a/configuration/aws-automation/lib/functions_app.sh +++ b/configuration/aws-automation/lib/functions_app.sh @@ -1,5 +1,11 @@ #!/usr/bin/env bash + +# ----------------------------------------------------------- +# Functions that are relevant for the configuration of the sap instance. +# ----------------------------------------------------------- + + # ----------------------------------------------------------- # Get latest release build from releases.sapsailing.com # @return latest build @@ -38,11 +44,11 @@ function get_access_token(){ # ----------------------------------------------------------- # Creates a new event with event name = instance name, no regatta and venuename="Default" -# @param $1 access token of privileged user +# @param $1 access token # @param $2 dns name of instance # @param $3 port # @param $4 event name -# @return event_id of created event +# @return event id of event # ----------------------------------------------------------- function create_event(){ local_echo -n "Creating event with name $4..." @@ -52,7 +58,7 @@ function create_event(){ # ----------------------------------------------------------- # Changes password of user -# @param $1 access token of privileged user +# @param $1 access token # @param $2 dns name of instance # @param $3 port # @param $4 admin username @@ -65,7 +71,7 @@ function change_admin_password(){ # ----------------------------------------------------------- # Creates new user -# @param $1 access token of privileged user +# @param $1 access token # @param $2 dns name of instance # @param $3 port # @param $4 user username @@ -77,7 +83,7 @@ function create_new_user(){ } # ----------------------------------------------------------- -# Creates event, changes admin password, creates user +# Creates event, changes admin password, creates user if parameters are not empty. # @param $1 public dns name # @param $2 port of application instance # @param $3 event name @@ -105,11 +111,11 @@ function configure_application(){ user=$(create_new_user $access_token $1 $2 $5 $6) fi - echo ${$event_id:-""} + echo ${event_id:-""} } # ----------------------------------------------------------- -# Patch 001-events.conf with ssl macros +# Patch 001-events.conf with Even-SSL macro if event id is not empty. Else use Home-SSL macro. # @param $1 domain # @param $2 event id # @param $3 ssh user @@ -129,6 +135,13 @@ function append_macro_to_001_events_conf(){ ssh_wrapper $3@$4 echo "$patched_content >> $events_conf" } +# ----------------------------------------------------------- +# Append specified environment to env.sh. +# @param $1 environment +# @param $2 ssh user +# @param $3 dns name of instance +# @param $4 path to env.sh file +# ----------------------------------------------------------- function append_environment_to_env_sh(){ local env_file=${4:-'/home/sailing/servers/server'} local_echo "Appending environment '$environment' to env.sh..." @@ -139,6 +152,11 @@ function append_environment_to_env_sh(){ exit_on_fail ssh_wrapper $2@$3 "echo -e \"# END Environment: $environment \" >> $env_file" } +# ----------------------------------------------------------- +# Reloads httpd service after executing apachectl configtest. +# @param $1 ssh user +# @param $2 dns name of instance +# ----------------------------------------------------------- function reload_httpd(){ local_echo "Reloading httpd..." ssh_wrapper $1@$2 "apachectl configtest >/dev/null 2>&1" diff --git a/configuration/aws-automation/lib/functions_ec2.sh b/configuration/aws-automation/lib/functions_ec2.sh index bcb00699c71..fe993b35565 100644 --- a/configuration/aws-automation/lib/functions_ec2.sh +++ b/configuration/aws-automation/lib/functions_ec2.sh @@ -1,7 +1,11 @@ #!/usr/bin/env bash # ----------------------------------------------------------- -# Query for public dns name of instance +# Functions that are relevant for the configuration of the ec2 instance. +# ----------------------------------------------------------- + +# ----------------------------------------------------------- +# Get public dns name of instance # @param $1 instance id # @return public dns name # ----------------------------------------------------------- @@ -12,14 +16,15 @@ function get_public_dns_name(){ # ----------------------------------------------------------- -# Get resources that should be automatically discovered -# @return array of resource ids +# Get resources all resources from aws +# @return json array of resourceARNs # ----------------------------------------------------------- function get_resources(){ - aws resourcegroupstaggingapi get-resources | jq -c ".ResourceTagMappingList[] | select(.ResourceARN)" -r | sanitize + aws_wrapper resourcegroupstaggingapi get-resources --resource-type-filters elasticloadbalancing:loadbalancer ec2:instance ec2:image ec2:security-group acm:certificate | jq -c ".ResourceTagMappingList[] | select(.ResourceARN)" -r | sanitize } # ----------------------------------------------------------- +# Get tag value of specified key of instance # @param1 instance id # @param2 tag key # @return tag value @@ -29,7 +34,7 @@ function get_tag_value_for_key(){ } # ----------------------------------------------------------- -# Query for default vpc id +# Get default vpc id # @return default vpc id # ----------------------------------------------------------- function get_default_vpc_id(){ @@ -47,8 +52,13 @@ function get_instance_id(){ exit_on_fail validate_instance_id $instance_id } +# ----------------------------------------------------------- +# Get launch templates as json +# param $1 public dns name +# @return json array of launch templates +# ----------------------------------------------------------- function get_launch_templates(){ - aws ec2 describe-launch-templates | jq -c ".LaunchTemplates[]" -r | sanitize + aws_wrapper ec2 describe-launch-templates | jq -c ".LaunchTemplates[]" -r | sanitize } # ----------------------------------------------------------- # Returns the instance id part of e.g. arn:aws:ec2:eu-west-2:017363970217:instance/i-096a32ca8c28bedbb @@ -56,13 +66,7 @@ function get_launch_templates(){ # @return id part of arn # ----------------------------------------------------------- function get_resource_id(){ - cut -d/ -f2 <<< $1 -} - -function get_public_ip(){ - local_echo "Querying for the public ip of $1..." - local ip_address=$(aws_wrapper ec2 describe-instances --query "Reservations[*].Instances[?PublicIpAddress=='$1'].InstanceId" --output text) - exit_on_fail validate_ipaddress $ip_address + echo "${1##*/}" } # ----------------------------------------------------------- @@ -110,6 +114,11 @@ function wait_for_ssh_connection(){ do_until_true ssh_prewrapper -q $1@$2 true 1>&2 } +# ----------------------------------------------------------- +# Runs instance with specified user data. All other variables user inside function have to be initialized already. +# @param $1 user data +# @return instance id +# ----------------------------------------------------------- function run_instance(){ local instance_id=$(aws_wrapper ec2 run-instances --image-id $(get_resource_id $image_id) --count 1 --instance-type $instance_type --key-name $key_name \ --security-group-ids $(get_resource_id $instance_security_group_id) --user-data "$1" \ @@ -117,10 +126,14 @@ function run_instance(){ exit_on_fail validate_instance_id $instance_id } +# ----------------------------------------------------------- +# Runs instance from specified launch template. +# @param $1 launch template id +# @return instance id +# ----------------------------------------------------------- function run_instance_from_launch_template(){ local instance_id=$(aws_wrapper ec2 run-instances --launch-template LaunchTemplateId="$1" | get_attribute '.Instances[0].InstanceId') exit_on_fail validate_instance_id $instance_id - wait_instance_exists $instance_id } # ----------------------------------------------------------- @@ -144,6 +157,10 @@ function create_instance(){ echo $instance_id } +# ----------------------------------------------------------- +# Prints instance description to screen. +# @param $1 instance id +# ----------------------------------------------------------- function print_instance_description(){ aws_wrapper ec2 describe-instances --instance-ids $1 \ --query "Reservations[*].Instances[0].{InstanceId:InstanceId, ImageId:ImageId, Type:InstanceType, PublicDNS:PublicDnsName, KeyName:KeyName, PrivateDnsName:PrivateDnsName, PrivateIpAddress:PrivateIpAddress}"\ diff --git a/configuration/aws-automation/lib/functions_elb.sh b/configuration/aws-automation/lib/functions_elb.sh index 710681e88ee..29423753622 100644 --- a/configuration/aws-automation/lib/functions_elb.sh +++ b/configuration/aws-automation/lib/functions_elb.sh @@ -1,5 +1,9 @@ #!/usr/bin/env bash +# ----------------------------------------------------------- +# Functions that are relevant for the configuration of load balancers. +# ----------------------------------------------------------- + # ----------------------------------------------------------- # Create target group for load balancer # @param $1 target group name diff --git a/configuration/aws-automation/lib/functions_io.sh b/configuration/aws-automation/lib/functions_io.sh index a5d6ef799e1..d88149d7252 100644 --- a/configuration/aws-automation/lib/functions_io.sh +++ b/configuration/aws-automation/lib/functions_io.sh @@ -1,5 +1,9 @@ #!/usr/bin/env bash +# ----------------------------------------------------------- +# Functions that are relevant for the treatment of user input and user configuration. +# ----------------------------------------------------------- + # ----------------------------------------------------------- # Prompt user for input and save value to variable # @param $1 prompt message diff --git a/configuration/aws-automation/lib/functions_wrapper.sh b/configuration/aws-automation/lib/functions_wrapper.sh index 37d267f22c5..c672863e533 100644 --- a/configuration/aws-automation/lib/functions_wrapper.sh +++ b/configuration/aws-automation/lib/functions_wrapper.sh @@ -1,6 +1,10 @@ #!/usr/bin/env bash -declare -g DISPLAY_SUCCESS_FOR_THIS_COMMAND="true" +# ----------------------------------------------------------- +# Functions that encapsulate error checking or looping logic whilst calling other functions. +# ----------------------------------------------------------- + +DISPLAY_SUCCESS_FOR_THIS_COMMAND="true" HTTP_RETRY_INTERVAL=5 TIMEOUT=300 diff --git a/configuration/aws-automation/lib/require_variables.sh b/configuration/aws-automation/lib/require_variables.sh index 28008cfe133..3e06a0be5aa 100644 --- a/configuration/aws-automation/lib/require_variables.sh +++ b/configuration/aws-automation/lib/require_variables.sh @@ -1,10 +1,19 @@ #!/usr/bin/env bash +# ----------------------------------------------------------- +# Define variable properties and user messages here. +# ----------------------------------------------------------- + + +# ----------------------------------------------------------- +# Messages for user input. +# ----------------------------------------------------------- + image_ask_message="Please select an image to use: " instance_ask_message="Please enter an instance to use: " event_name_ask_message="Please enter an event name (leave blank to skip event creation):" instance_security_group_ask_message="Please select the security group for the instance: " -load_balancer_ask_message="Please select/enter the load balancer dns name: " +load_balancer_ask_message="Please select or enter the load balancer dns name: " region_ask_message="Please enter the region you want to use (e.g. eu-west-2): " instance_type_ask_message="Please enter the instance type (e.g. t2.medium): " key_name_ask_message="Please enter the name of your keypair to user for the instance (e.g. leon-keypair). " @@ -23,6 +32,7 @@ contact_person_message="Please enter the name of a contact person (leave blank t contact_email_message="Please enter the email of the contact person (leave blank to skip): " build_version_message="Please enter a build version to use (releases.sapsailing.com): " launch_tempate_ask_message="Please select the launch template for the replica: " + IS_OPTIONAL="true" IS_NOT_OPTIONAL="false" SHOW_INPUT="false" @@ -31,6 +41,13 @@ NO_DEFAULT_VALUE="" NOT_A_PARAMETER="" +# ----------------------------------------------------------- +# Functions that are responsible for: Connection of variable to respective use rmessage. Setting if variable is required or can be left empty. +# Set the variables default value. Choose if user input will be shown or hidden (e.g. passwords). Choose whether the variable is a aws resources +# and can be selected. If yes then append a regex as last parameter (e.g. ValidImageARNRegex). Then the selection will be limited to resources +# of the associative array RESOURCE_MAP (functions_io.sh) that have a key matching the regex. +# ----------------------------------------------------------- + function require_launch_template(){ require_variable "$launch_template_param" launch_template "$NO_DEFAULT_VALUE" "$launch_tempate_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidLaunchTemplateIdRegex } @@ -48,11 +65,11 @@ function require_instance_security_group(){ } function require_load_balancer(){ - require_variable "$load_balancer_param" load_balancer $NO_DEFAULT_VALUE "$load_balancer_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidLoadBalancerARNRegex + require_variable "$load_balancer_param" load_balancer "$NO_DEFAULT_VALUE" "$load_balancer_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidLoadBalancerARNRegex } function require_instance(){ - require_variable "$instance_param" instance $NO_DEFAULT_VALUE "$instance_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidInstanceARNRegex + require_variable "$instance_param" instance "$NO_DEFAULT_VALUE" "$instance_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidInstanceARNRegex } function require_region(){ @@ -105,11 +122,11 @@ function require_user_password(){ } function require_ssh_user(){ - require_variable "$ssh_user_param" ssh_user "$default_ssh_user" "$ssh_user_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" + require_variable "$ssh_user_param" ssh_user "root" "$ssh_user_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" } function require_super_instance(){ - require_variable "$super_instance_param" super_instance "$default_super_instance" "$super_instance_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidInstanceARNRegex + require_variable "$super_instance_param" super_instance "$NO_DEFAULT_VALUE" "$super_instance_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidInstanceARNRegex } function require_description(){ diff --git a/configuration/aws-automation/lib/resources-eu-west-1.sh b/configuration/aws-automation/lib/resources-eu-west-1.sh index 0d489cd3af1..36c13228543 100644 --- a/configuration/aws-automation/lib/resources-eu-west-1.sh +++ b/configuration/aws-automation/lib/resources-eu-west-1.sh @@ -1,11 +1,233 @@ -declare -- OLD_RESOURCES="{ \"ResourceTagMappingList\": [ { \"ResourceARN\": \"arn:aws:acm:eu-west-1:017363970217:certificate/67a1515a-81be-472d-9459-85746d030564\", \"Tags\": [ { \"Value\": \"true\", \"Key\": \"AutoDiscover\" }, { \"Value\": \"sapsailing.com-2017\", \"Key\": \"Name\" } ] }, { \"ResourceARN\": \"arn:aws:ec2:eu-west-1:017363970217:instance/i-07344e3c868f46f85\", \"Tags\": [ { \"Value\": \"true\", \"Key\": \"AutoDiscover\" }, { \"Value\": \"SL Multi-Instance Sailling Server\", \"Key\": \"Name\" }, { \"Value\": \"Sailing\", \"Key\": \"function\" }, { \"Value\": \"sailing\", \"Key\": \"ssh_user\" } ] }, { \"ResourceARN\": \"arn:aws:ec2:eu-west-1:017363970217:image/ami-8ce485f5\", \"Tags\": [ { \"Value\": \"true\", \"Key\": \"AutoDiscover\" } ] }, { \"ResourceARN\": \"arn:aws:ec2:eu-west-1:017363970217:security-group/sg-eaf31e85\", \"Tags\": [ { \"Value\": \"true\", \"Key\": \"AutoDiscover\" } ] }, { \"ResourceARN\": \"arn:aws:elasticloadbalancing:eu-west-1:017363970217:loadbalancer/app/Sailing-eu-west-1/32b89dbfe7f75097\", \"Tags\": [ { \"Value\": \"true\", \"Key\": \"AutoDiscover\" } ] } ] }" -declare -a TAGGED_SECURITY_GROUP_NAMES=([0]="[Unnamed]") -declare -a TAGGED_SECURITY_GROUP_ARNS=([0]="arn:aws:ec2:eu-west-1:017363970217:security-group/sg-eaf31e85") -declare -a TAGGED_IMAGE_NAMES=([0]="[Unnamed]") -declare -a TAGGED_IMAGE_ARNS=([0]="arn:aws:ec2:eu-west-1:017363970217:image/ami-8ce485f5") -declare -a TAGGED_INSTANCE_NAMES=([0]="SL" [1]="Multi-Instance" [2]="Sailling" [3]="Server") -declare -a TAGGED_INSTANCE_ARNS=([0]="arn:aws:ec2:eu-west-1:017363970217:instance/i-07344e3c868f46f85") -declare -a TAGGED_CERTIFICATE_NAMES=([0]="sapsailing.com-2017") -declare -a TAGGED_CERTIFICATE_ARNS=([0]="arn:aws:acm:eu-west-1:017363970217:certificate/67a1515a-81be-472d-9459-85746d030564") -declare -a TAGGED_LOADBALANCER_NAMES=([0]="[Unnamed]") -declare -a TAGGED_LOADBALANCER_ARNS=([0]="arn:aws:elasticloadbalancing:eu-west-1:017363970217:loadbalancer/app/Sailing-eu-west-1/32b89dbfe7f75097") +declare -- OLD_RESOURCE_JSON="{\"ResourceARN\":\"arn:aws:acm:eu-west-1:017363970217:certificate/67a1515a-81be-472d-9459-85746d030564\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"},{\"Value\":\"sapsailing.com-2017\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-00a2821fdb081a970\",\"Tags\":[{\"Value\":\"SL ESS Live 2017 Replica\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0110111df4f4fbcc0\",\"Tags\":[{\"Value\":\"Windows 2016 Server BI Data Services\",\"Key\":\"Name\"},{\"Value\":\"Windows 2016 Server BI\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-01752541870c151a2\",\"Tags\":[{\"Value\":\"Tennis Analytics Apps\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-01a539e83e4d59116\",\"Tags\":[{\"Value\":\"SL Training Server 2018\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-01d6bb11c5daadfe9\",\"Tags\":[{\"Value\":\"SL North Stream Race 2017\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-01d6f839a29520c72\",\"Tags\":[{\"Value\":\"SL Swedish Sailing League 2017 - Master\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-026f7d4c33ae3b19a\",\"Tags\":[{\"Value\":\"SL Dutch Federation\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-036c326bcbcaab529\",\"Tags\":[{\"Value\":\"Tennis Analytics Dev\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-03a8b3590a56e82cd\",\"Tags\":[{\"Value\":\"SL Team Phoenix\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0503f807bf6b47fbc\",\"Tags\":[{\"Value\":\"SL Norwegian Sailing Server NOR\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-05ff69c296996a4b5\",\"Tags\":[{\"Value\":\"SL Archive\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-068d60d70c663d2e7\",\"Tags\":[{\"Value\":\"SL ESS Live 2017\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0706b5f9a43f130cf\",\"Tags\":[{\"Value\":\"Webserver\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-07344e3c868f46f85\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"},{\"Value\":\"SL Multi-Instance Sailling Server\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"},{\"Value\":\"sailing\",\"Key\":\"ssh_user\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0892121f96c25b489\",\"Tags\":[{\"Value\":\"SL Miami Fix\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-08abc0ee7fe8f2d58\",\"Tags\":[{\"Value\":\"SL WCS-2018 API-Test\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-09627864f6645d0b4\",\"Tags\":[{\"Value\":\"Tennis Analytics TPC\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0c3db13c399a58408\",\"Tags\":[{\"Value\":\"Webserver (old)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0e5a34de124bb7e9b\",\"Tags\":[{\"Value\":\"SL Archive (Failover)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0e723e53a8bf28b48\",\"Tags\":[{\"Value\":\"SL Training Server 2018 Jan\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0f1d2b7ac8425c4ff\",\"Tags\":[{\"Value\":\"Tennis Media Analytics\",\"Key\":\"Name\"},{\"Value\":\"Tennis\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0f251a0a373958f92\",\"Tags\":[{\"Value\":\"SL permission-vertical test\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0f612e0e60bb33081\",\"Tags\":[{\"Value\":\"Tennis OpenCV\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0f828a4e\",\"Tags\":[{\"Value\":\"Tennis Playerzone Old\",\"Key\":\"Name\"},{\"Value\":\"Tennis\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-34d3f399\",\"Tags\":[{\"Value\":\"SL Large Load Test\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-490bd50a\",\"Tags\":[{\"Value\":\"KW/TW Livecenter\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-4a0b44ae\",\"Tags\":[{\"Value\":\"Jens Rommel\",\"Key\":\"Instance created by\"},{\"Value\":\"LoadRunner Master (Windows Server 2012 R2)\",\"Key\":\"Name\"},{\"Value\":\"LoadRunner Master (Windows Server 2012 R2)\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-4bd1100b\",\"Tags\":[{\"Value\":\"Bundesliga-Livecenter (Deutsch, D�nisch)\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-654f8825\",\"Tags\":[{\"Value\":\"Webserver Test\",\"Key\":\"Name\"},{\"Value\":\"Webserver Test\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-703b9c32\",\"Tags\":[{\"Value\":\"SL Manyplayers\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-884e016c\",\"Tags\":[{\"Value\":\"Jens Rommel\",\"Key\":\"Instance created by\"},{\"Value\":\"LoadRunner Slave 1 (Windows Server 2012 R2)\",\"Key\":\"Name\"},{\"Value\":\"LoadRunner Slave 1\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-9cf2c416\",\"Tags\":[{\"Value\":\"Tennis WTA BOBJ Server II\",\"Key\":\"Name\"},{\"Value\":\"Tennis\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-9ded76dd\",\"Tags\":[{\"Value\":\"SL Load Test Server\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-b7be5cf7\",\"Tags\":[{\"Value\":\"US_Sailing_Ng\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-b8e69430\",\"Tags\":[{\"Value\":\"VPN Gateway zone 1c\",\"Key\":\"Name\"},{\"Value\":\"VPN Gateway zone 1c\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-ba191af7\",\"Tags\":[{\"Value\":\"DB & Messaging\",\"Key\":\"Name\"},{\"Value\":\"DB & Messaging\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-c3de3e83\",\"Tags\":[{\"Value\":\"Worldcup App (GMR)\",\"Key\":\"Name\"},{\"Value\":\"Worldcup App (GMR)\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-cb5d9b8b\",\"Tags\":[{\"Value\":\"Backup\",\"Key\":\"Name\"},{\"Value\":\"Backup\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-ec1c77ac\",\"Tags\":[{\"Value\":\"US Sailing SP2\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-f0d22d7d\",\"Tags\":[{\"Value\":\"MatLab Pairinglist\",\"Key\":\"Name\"},{\"Value\":\"MatLab Pairinglist\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-fbd6181f\",\"Tags\":[{\"Value\":\"Build/Test/Dev\",\"Key\":\"Name\"},{\"Value\":\"test\",\"Key\":\"Property\"},{\"Value\":\"test\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:internet-gateway/igw-c26f75a0\",\"Tags\":[{\"Value\":\"368321020290\",\"Key\":\"AWSServiceAccount\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:network-interface/eni-51e2443a\",\"Tags\":[{\"Value\":\"Archive\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:network-interface/eni-9ee73cf5\",\"Tags\":[{\"Value\":\"Webserver\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:network-interface/eni-b409aedf\",\"Tags\":[{\"Value\":\"Database\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:route-table/rtb-d52fd9b0\",\"Tags\":[{\"Value\":\"368321020290\",\"Key\":\"AWSServiceAccount\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:route-table/rtb-e3b34788\",\"Tags\":[{\"Value\":\"Default + VPN\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:security-group/sg-61f33a04\",\"Tags\":[{\"Value\":\"368321020290\",\"Key\":\"AWSServiceAccount\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:security-group/sg-eaf31e85\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-009699c5a7684b82c\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.4 /var/log\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-028f73e318dfb8c54\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.4 root\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-02a7afe8af15fbfe1\",\"Tags\":[{\"Value\":\"Tennis Analytics 1.2\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-02b2726c7a9c4458f\",\"Tags\":[{\"Value\":\"DB&Messaging Backup MongoDB\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-03c3d06744811cf22\",\"Tags\":[{\"Value\":\"SL Multi-Instance Snapshot System\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-052f5c308d7193187\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.4 Swap\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-054d091337dea1196\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.3 /home\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-057fcde719cbd2de4\",\"Tags\":[{\"Value\":\"Tennis Analytics 2.2 System\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0646aa0045525e45b\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.3 /var/log\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-06bda4ed\",\"Tags\":[{\"Value\":\"DB&Messaging Backup Root\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-083452e5\",\"Tags\":[{\"Value\":\"BOBJ Server\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-085ad729a2d2c3292\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.3 /var/www/static\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0873c7c704d96500e\",\"Tags\":[{\"Value\":\"AMI Analytics HVM 1.62 Swap\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-08ac2044875b8e7e5\",\"Tags\":[{\"Value\":\"Tennis Analytics 1.2\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-08cf7f9f5b240dbe6\",\"Tags\":[{\"Value\":\"Tennis Analytics 1.2\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0a93d637f90e0e23e\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.3 Root\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0aa8ad8f291a03c7b\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.4 /var/www/static\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0b4ce6ef\",\"Tags\":[{\"Value\":\"Webserver Logs2 2014-03-21\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0c43c5ddcadc79ea2\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.3 /var/log/old\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0c6fc4ecccd8d65a0\",\"Tags\":[{\"Value\":\"Tennis Analytics 2.2 Swap\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0c9b81fc83c60cfc8\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.3 Swap\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0cdcd361f491319bb\",\"Tags\":[{\"Value\":\"Tennis Analytics 2.2 Home\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0d431501fe9505370\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.4 /var/log/old\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0d49e3e9\",\"Tags\":[{\"Value\":\"Webserver Home2 2014-03-21\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0e099e4eefdf7331a\",\"Tags\":[{\"Value\":\"AMI Analytics HVM 1.62 Sailing\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0f8679a1c8e881d49\",\"Tags\":[{\"Value\":\"SL Multi-Instance Snapshot Swap\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0fdcc3a08136fe2a0\",\"Tags\":[{\"Value\":\"AMI Analytics HVM 1.62 System\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0ff3cdbb3b7113b40\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.4 /home\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0ff87145116eb4182\",\"Tags\":[{\"Value\":\"SL Multi-Instance Snapshot Sailing\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-14269b38\",\"Tags\":[{\"Value\":\"LoadRunner Slave v1.0 Files\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-14b2ab72\",\"Tags\":[{\"Value\":\"Graylog Document\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-158d0834\",\"Tags\":[{\"Value\":\"AMI Browser Test 1.1\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-469a5057\",\"Tags\":[{\"Value\":\"Backup MySQL\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-46dbdbac\",\"Tags\":[{\"Value\":\"DB&Messaging Backup MongoDB\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-5443e9b0\",\"Tags\":[{\"Value\":\"Webserver Old Logs2 2014-03-21\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-5693b37d\",\"Tags\":[{\"Value\":\"LoadRunner Slave v1.0 System\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-6a45d942\",\"Tags\":[{\"Value\":\"DB&Messaging Backup RabbitMQ\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-70b2a35f\",\"Tags\":[{\"Value\":\"LoadRunner Master v1.0 System\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8123f670\",\"Tags\":[{\"Value\":\"AMI Build/Test 1.2 root\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8223f673\",\"Tags\":[{\"Value\":\"AMI Build/Test 1.2 /tmp\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8723f676\",\"Tags\":[{\"Value\":\"AMI Build/Test 1.2 /home/sailing\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8bec336d\",\"Tags\":[{\"Value\":\"AMI Centos 6 Basic 1.1 System\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8cc461a3\",\"Tags\":[{\"Value\":\"DB&Messaging Backup MySQL\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-94564171\",\"Tags\":[{\"Value\":\"Backup Webserver Home\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-981d82aa\",\"Tags\":[{\"Value\":\"Graylog Monitoring\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-9b23f66a\",\"Tags\":[{\"Value\":\"AMI Build/Test 1.2 swap\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-9b5d0f7d\",\"Tags\":[{\"Value\":\"Backup Bundesliga Live Center system\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-9c23f66d\",\"Tags\":[{\"Value\":\"AMI Build/Test 1.2 /home/hudson\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-a9b77943\",\"Tags\":[{\"Value\":\"DB&Messaging Backup MongoArchive\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-b03cab57\",\"Tags\":[{\"Value\":\"Backup: Tennis Playerzone\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-bd30fbac\",\"Tags\":[{\"Value\":\"Backup MongoDB\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-bdc5c658\",\"Tags\":[{\"Value\":\"Backup Hudson\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-d9d048f5\",\"Tags\":[{\"Value\":\"Load Test Server 1.2 Home\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-dcdba1f5\",\"Tags\":[{\"Value\":\"LoadRunner Master v1.0 Files\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-de371d3c\",\"Tags\":[{\"Value\":\"Backup Web Home\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-ef667e05\",\"Tags\":[{\"Value\":\"DB&Messaging Backup Swap\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f40f4007\",\"Tags\":[{\"Value\":\"Load Test Server 1.2 Swap\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f47b8adc\",\"Tags\":[{\"Value\":\"DB&Messaging Backup MongoBackup\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f84ee41c\",\"Tags\":[{\"Value\":\"Webserver System2 2014-03-21\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f869471f\",\"Tags\":[{\"Value\":\"AMI Microsite\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f90f400a\",\"Tags\":[{\"Value\":\"Load Test Server 1.2 System\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f9e41fe8\",\"Tags\":[{\"Value\":\"10GB Swap Partition\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:subnet/subnet-6b929d2d\",\"Tags\":[{\"Value\":\"368321020290\",\"Key\":\"AWSServiceAccount\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:subnet/subnet-9d9e53f8\",\"Tags\":[{\"Value\":\"368321020290\",\"Key\":\"AWSServiceAccount\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-001d5f147eda96c46\",\"Tags\":[{\"Value\":\"Tennis Analytics Dev\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-004a9d3d5104fe760\",\"Tags\":[{\"Value\":\"Tennis Analytics Dev\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-008bcc8ee32283e32\",\"Tags\":[{\"Value\":\"SL Team Phoenix\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-00ab269e71af7715a\",\"Tags\":[{\"Value\":\"SL Swedish Sailing League 2017 - Master (New)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-00c664f9e47c4776b\",\"Tags\":[{\"Value\":\"SL Swedish Sailing League 2017 - Master (New)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-00dfa77246c7a5890\",\"Tags\":[{\"Value\":\"SL Miami Fix\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-00f1e25419921e6ac\",\"Tags\":[{\"Value\":\"SL Training Server 2018 Jan\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-01c6ebcd9fd2846e9\",\"Tags\":[{\"Value\":\"SL WCS-2018 API-Test\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-01d09ca32815f6c21\",\"Tags\":[{\"Value\":\"Multi-Instance /home/sailing (big)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0202f1418ce51deb9\",\"Tags\":[{\"Value\":\"SL ESS Live 2017 (New)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-02200f1513af2c41a\",\"Tags\":[{\"Value\":\"Tennis Analytics Dev\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0225316f484b16050\",\"Tags\":[{\"Value\":\"SL Archive New\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-022f53a62bf86ef46\",\"Tags\":[{\"Value\":\"Tennis Analytics Apps\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-02d1c07486636f4c6\",\"Tags\":[{\"Value\":\"Tennis Analytics TPC\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-030ad5b69c417e45f\",\"Tags\":[{\"Value\":\"SL Dutch Federation (New)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0354b2e673510c9d2\",\"Tags\":[{\"Value\":\"Webserver (static)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0377ec159288797a7\",\"Tags\":[{\"Value\":\"SL ESS Live 2017 (New)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-03c383dcc5facebb9\",\"Tags\":[{\"Value\":\"SL North Stream Race 2017\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-042c3dee3611a1ad8\",\"Tags\":[{\"Value\":\"Webserver New Created From Scratch (/home)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-04a59c2f7a5e91388\",\"Tags\":[{\"Value\":\"Webserver (home)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-04ad93b4d6d65cd6e\",\"Tags\":[{\"Value\":\"SL Training Server 2018\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-04bc8c8cad9ac3979\",\"Tags\":[{\"Value\":\"SL North Stream Race 2017\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-051e9f2245f4a0a6f\",\"Tags\":[{\"Value\":\"SL Norwegian Sailing Server NOR (New)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-05298cc3198ffd6ca\",\"Tags\":[{\"Value\":\"SL Norwegian Sailing Server NOR (New)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-053f2fb838422bc28\",\"Tags\":[{\"Value\":\"More Swap Multi-Instance\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-055864df0a18ba3b0\",\"Tags\":[{\"Value\":\"SL Archive (New)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-05ba9410108f44d86\",\"Tags\":[{\"Value\":\"Tennis Media Analytics\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0649642fe59e3a067\",\"Tags\":[{\"Value\":\"Webserver (root)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-066d8544fabd272ea\",\"Tags\":[{\"Value\":\"SL Training Server 2018\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-072408877cbb38e91\",\"Tags\":[{\"Value\":\"Webserver (/var/log)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-077e55fc0065bb6ce\",\"Tags\":[{\"Value\":\"Tennis Analytics TPC\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-084c0518d5be3e9ea\",\"Tags\":[{\"Value\":\"SL Training Server 2018 Jan\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-08d50a04fe3e8a5ea\",\"Tags\":[{\"Value\":\"SL Archive New\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-092801e92ba799ec0\",\"Tags\":[{\"Value\":\"SL ESS Live 2017\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-092d75a29315b7821\",\"Tags\":[{\"Value\":\"SL Training Server 2018 Jan\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-09326b2006cff73e4\",\"Tags\":[{\"Value\":\"Webserver New From-Scratch (root)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0974513f701e9ed7a\",\"Tags\":[{\"Value\":\"Tennis Media Analytics\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0a278f9636effd2d6\",\"Tags\":[{\"Value\":\"SL ESS Live 2017\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0acd6646f84dfe3f2\",\"Tags\":[{\"Value\":\"SL Dutch Federation (New)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0aceafdcabcedc856\",\"Tags\":[{\"Value\":\"Multi-Instance Root /\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0b0510782dc796f7d\",\"Tags\":[{\"Value\":\"SL Team Phoenix\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0b14982de0e7cec23\",\"Tags\":[{\"Value\":\"Tennis Media Analytics\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0b6063f804124d46c\",\"Tags\":[{\"Value\":\"SL Miami Fix\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0b644808acff1e08c\",\"Tags\":[{\"Value\":\"SL Team Phoenix\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0bfdd8a92bc2162d2\",\"Tags\":[{\"Value\":\"Webserver (swap)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c4a8aa74e3cc78ca\",\"Tags\":[{\"Value\":\"SL Swedish Sailing League 2017 - Master (New)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c6f29a8328fc984a\",\"Tags\":[{\"Value\":\"Tennis Analytics Apps\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c721fefa362d0019\",\"Tags\":[{\"Value\":\"SL permission-vertical test\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c7a3279437e12ad2\",\"Tags\":[{\"Value\":\"SL Miami Fix\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c846889bfecbddf5\",\"Tags\":[{\"Value\":\"SL Archive New\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cae90298869a7f9f\",\"Tags\":[{\"Value\":\"SL Training Server 2018\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cdc4013a4620ceba\",\"Tags\":[{\"Value\":\"SL permission-vertical test\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cdc6359896fb3bf2\",\"Tags\":[{\"Value\":\"SL permission-vertical test\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cebdc9912dabf32f\",\"Tags\":[{\"Value\":\"Tennis Analytics Apps\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cee9346ff22d9c05\",\"Tags\":[{\"Value\":\"SL Norwegian Sailing Server NOR (New)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0d009e4aab7758ab4\",\"Tags\":[{\"Value\":\"SL ESS Live 2017\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0d23fcefda7c718a1\",\"Tags\":[{\"Value\":\"Webserver New From Scratch (/var/log)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0d4b424b970833eac\",\"Tags\":[{\"Value\":\"Tennis OpenCV\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0d6f1de8b060ed741\",\"Tags\":[{\"Value\":\"Swap Multi-Instance\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0e1b0958f53ed1e61\",\"Tags\":[{\"Value\":\"Tennis Analytics TPC\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0e22b130069f81047\",\"Tags\":[{\"Value\":\"SL ESS Live 2017 (New)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0e4735a57162c17e1\",\"Tags\":[{\"Value\":\"SL Archive (New)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0e971c0f2f0d4a88e\",\"Tags\":[{\"Value\":\"SL WCS-2018 API-Test\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0ea498e61e9c5b3f6\",\"Tags\":[{\"Value\":\"SL Archive (New)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0ea8c3f4cf2a7e27f\",\"Tags\":[{\"Value\":\"SL North Stream Race 2017\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0f5559a690de8e0c0\",\"Tags\":[{\"Value\":\"Webserver New From Scratch (Swap)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0f5e306d4bf88d26a\",\"Tags\":[{\"Value\":\"SL WCS-2018 API-Test\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0f83caaada010458f\",\"Tags\":[{\"Value\":\"SL Dutch Federation (New)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0fbdac9db3818741e\",\"Tags\":[{\"Value\":\"Webserver (/var/log/old)\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-1d910c31\",\"Tags\":[{\"Value\":\"DB Mongo\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-2eb15d38\",\"Tags\":[{\"Value\":\"DB Mongo Fast\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-6c0ab56b\",\"Tags\":[{\"Value\":\"Backup\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-715cec66\",\"Tags\":[{\"Value\":\"Load Test /home/sailing\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-7ed3622b\",\"Tags\":[{\"Value\":\"DB Swap\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-9d970ab1\",\"Tags\":[{\"Value\":\"DB MySQL\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-a4673256\",\"Tags\":[{\"Value\":\"Delete after 20160624\",\"Key\":\"GlobalIT\"},{\"Value\":\"Security incident 20160610-1\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-e6a72dca\",\"Tags\":[{\"Value\":\"DB Messaging\",\"Key\":\"Name\"}]} +{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:vpc/vpc-72709817\",\"Tags\":[{\"Value\":\"368321020290\",\"Key\":\"AWSServiceAccount\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:loadbalancer/IPv6Test\",\"Tags\":[{\"Value\":\"test\",\"Key\":\"function\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:loadbalancer/app/Sailing-eu-west-1/32b89dbfe7f75097\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-dutch-federation/f4c04592e16a8bda\",\"Tags\":[{\"Value\":\"Dutch Federation first event probably North See Regatta\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-ess2017/b83b30fe9f0bc1e0\",\"Tags\":[{\"Value\":\"ESS 2017\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-nor/e6e65bf997a5f813\",\"Tags\":[{\"Value\":\"Norwegian Sailing Server NOR\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-nordstreamrace2017/3f1996ad6af61cb3\",\"Tags\":[{\"Value\":\"North Stream Race 2017\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-nsr2017/7bdb7ddebd739826\",\"Tags\":[{\"Value\":\"Dutch Federation first event probably North See Regatta\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-phoenix/1f7ca69ef33fc1d7\",\"Tags\":[{\"Value\":\"Team Phoenix TP52\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-49er/d7ae037012205975\",\"Tags\":[{\"Value\":\"49er Analytics Instance\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-abeam-training/5f2e5e320ed3fff6\",\"Tags\":[{\"Value\":\"Abeam Japanese Partner training system\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-asvia/2066645306f15a03\",\"Tags\":[{\"Value\":\"Akademischer Seglerverein Aachen Axel Schmidt axel.sebastian.schmidt@rwth-aachen.de\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-byc/a8b3957d13458a8e\",\"Tags\":[{\"Value\":\"Bayerischer Yacht-Club BYC\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-cyc/6be1e3a5e40e67da\",\"Tags\":[{\"Value\":\"Carmel Sailing Society\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-extreme-team/3c453cc0f5443c0e\",\"Tags\":[{\"Value\":\"SAP Extreme Sailing Team Training Server\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-hnv/207591b5416599b0\",\"Tags\":[{\"Value\":\"Heinz Nixdorf Verein zur Foerderung des Segelsports eV HNV\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-irishdbscdw3/594f45e66c8fc271\",\"Tags\":[{\"Value\":\"IRISHDBSCDW3\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-isr/aea6f90b7ae78bc1\",\"Tags\":[{\"Value\":\"Israeli Sailing Association\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-jojopolgar/5878d43f0fda676b\",\"Tags\":[{\"Value\":\"Jojos Nacra Campaign jpolgar@aol.com\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-kbsc/407673bd212b94a4\",\"Tags\":[{\"Value\":\"Keppel Bay Sailing Club KBSC\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-kjscs/cb882702766009eb\",\"Tags\":[{\"Value\":\"Keith Johnson Softalk Computer Services Keith Johnson keith@softalk.co.uk\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ksss/919ade259198a538\",\"Tags\":[{\"Value\":\"KSSS Royal Swedish Sailing Club Stefan Rahm stefan@ksss.se\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-lyc/61f7aaa7652bbba6\",\"Tags\":[{\"Value\":\"Luebecker Yacht-Club LYC\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-nor/f62428bb34ce7302\",\"Tags\":[{\"Value\":\"Norwegian Sailing Federation\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-rdsailing/1b816b46905054f3\",\"Tags\":[{\"Value\":\"Robert Davis Sailing Canadian Sailing Team Robert Davis robertdavissailing@outlook.com\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-sailcanada/5c1153c3623686fa\",\"Tags\":[{\"Value\":\"SailCanada Canadian Sailing Federation Ken Dool ken@sailing.ca\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-sailingacademy/9f6609598449e10d\",\"Tags\":[{\"Value\":\"Sailing Academy South Africa instructor@sailingacademy.co.za Neil Ashton\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-sailtracks/bbd005556242b2eb\",\"Tags\":[{\"Value\":\"Sailtracks Test Server\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-segelzentrum/cb8ba067fa0ce04e\",\"Tags\":[{\"Value\":\"Segelzentrum der Universitaet Kiel Hamann Jan jan.hamann@email.uni-kiel.de\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-singaporesailing/7ee93a3f844d3cc2\",\"Tags\":[{\"Value\":\"SingaporeSailing Lim Han Ee han@singaporesailing.org.sg\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-sitges/693ee4099b09caec\",\"Tags\":[{\"Value\":\"Club Nautic de Sitges pa.ubach@gmail.com on behalf of Pere-Andreu Ubach pa_ubach@alum.mit.edu\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-srn/4e3dba3f8e818a0e\",\"Tags\":[{\"Value\":\"Segelvereinigung Rhein-Neckar\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-srv/24e229b240131e94\",\"Tags\":[{\"Value\":\"Seebrucker Regattaverein am Chiemsee SRV\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ssv/d5f7ae73e3417691\",\"Tags\":[{\"Value\":\"Schwartauer Segler-Verein www.ssv-net.de Alexander Probst webmaster@alexprobst.de\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-starlab/26676d215f481a3d\",\"Tags\":[{\"Value\":\"StarLab Fabiano Avancini fabiano.avancini@gmail.com https://www.facebook.com/events/845403545622630/\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-tractractest/f404d9f7d2e32b86\",\"Tags\":[{\"Value\":\"TracTrac Test\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ubilabstest/08f49492434d1829\",\"Tags\":[{\"Value\":\"Ubilabs-Testserver\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ussailing/60bbf4cf62e10ce0\",\"Tags\":[{\"Value\":\"USSailing\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-vsaw/60a137ecab9b8672\",\"Tags\":[{\"Value\":\"VSaW\",\"Key\":\"Description\"}]} +{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ycl/b14c3adf4822f599\",\"Tags\":[{\"Value\":\"Yacht-Club Luzern Arnet Ivo ivo.arnet@itready.net\",\"Key\":\"Description\"}]}" +declare -- OLD_LAUNCH_TEMPLATE_JSON="" +declare -A RESOURCE_MAP=([arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ssv/d5f7ae73e3417691]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-08d50a04fe3e8a5ea]="SL Archive New,false" [arn:aws:ec2:eu-west-1:017363970217:vpc/vpc-72709817]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-1d910c31]="DB Mongo,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8223f673]="AMI Build/Test 1.2 /tmp,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0cdcd361f491319bb]="Tennis Analytics 2.2 Home,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-04a59c2f7a5e91388]="Webserver (home),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-starlab/26676d215f481a3d]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-5443e9b0]="Webserver Old Logs2 2014-03-21,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-07344e3c868f46f85]="SL Multi-Instance Sailling Server,true" [arn:aws:ec2:eu-west-1:017363970217:instance/i-01a539e83e4d59116]="SL Training Server 2018,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-nordstreamrace2017/3f1996ad6af61cb3]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0acd6646f84dfe3f2]="SL Dutch Federation (New),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-092801e92ba799ec0]="SL ESS Live 2017,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-08cf7f9f5b240dbe6]="Tennis Analytics 1.2,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0873c7c704d96500e]="AMI Analytics HVM 1.62 Swap,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-9b23f66a]="AMI Build/Test 1.2 swap,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0d49e3e9]="Webserver Home2 2014-03-21,false" [arn:aws:ec2:eu-west-1:017363970217:security-group/sg-eaf31e85]="Unnamed,true" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0ea8c3f4cf2a7e27f]="SL North Stream Race 2017,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0f251a0a373958f92]="SL permission-vertical test,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0649642fe59e3a067]="Webserver (root),false" [arn:aws:ec2:eu-west-1:017363970217:internet-gateway/igw-c26f75a0]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-46dbdbac]="DB&Messaging Backup MongoDB,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-05ff69c296996a4b5]="SL Archive,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-dutch-federation/f4c04592e16a8bda]="Unnamed,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-sitges/693ee4099b09caec]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-70b2a35f]="LoadRunner Master v1.0 System,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0c9b81fc83c60cfc8]="Sailing Webserver 1.3 Swap,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-06bda4ed]="DB&Messaging Backup Root,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0110111df4f4fbcc0]="Windows 2016 Server BI Data Services,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-08ac2044875b8e7e5]="Tennis Analytics 1.2,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-092d75a29315b7821]="SL Training Server 2018 Jan,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-072408877cbb38e91]="Webserver (/var/log),false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-028f73e318dfb8c54]="Sailing Webserver 1.4 root,false" [arn:aws:ec2:eu-west-1:017363970217:network-interface/eni-b409aedf]="Database,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c6f29a8328fc984a]="Tennis Analytics Apps,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-066d8544fabd272ea]="SL Training Server 2018,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-01c6ebcd9fd2846e9]="SL WCS-2018 API-Test,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ycl/b14c3adf4822f599]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:subnet/subnet-9d9e53f8]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-bd30fbac]="Backup MongoDB,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-057fcde719cbd2de4]="Tennis Analytics 2.2 System,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0f83caaada010458f]="SL Dutch Federation (New),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0ea498e61e9c5b3f6]="SL Archive (New),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cebdc9912dabf32f]="Tennis Analytics Apps,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-c3de3e83]="Worldcup App (GMR),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-09326b2006cff73e4]="Webserver New From-Scratch (root),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ussailing/60bbf4cf62e10ce0]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0ff87145116eb4182]="SL Multi-Instance Snapshot Sailing,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0d431501fe9505370]="Sailing Webserver 1.4 /var/log/old,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-vsaw/60a137ecab9b8672]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0b6063f804124d46c]="SL Miami Fix,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-042c3dee3611a1ad8]="Webserver New Created From Scratch (/home),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-6c0ab56b]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0f5559a690de8e0c0]="Webserver New From Scratch (Swap),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ubilabstest/08f49492434d1829]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-2eb15d38]="DB Mongo Fast,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-ess2017/b83b30fe9f0bc1e0]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0b14982de0e7cec23]="Tennis Media Analytics,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-03c383dcc5facebb9]="SL North Stream Race 2017,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-02d1c07486636f4c6]="Tennis Analytics TPC,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-b7be5cf7]="US_Sailing_Ng,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:loadbalancer/IPv6Test]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-05298cc3198ffd6ca]="SL Norwegian Sailing Server NOR (New),false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-083452e5]="BOBJ Server,false" [arn:aws:acm:eu-west-1:017363970217:certificate/67a1515a-81be-472d-9459-85746d030564]="sapsailing.com-2017,true" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-kbsc/407673bd212b94a4]="Unnamed,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-hnv/207591b5416599b0]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-04bc8c8cad9ac3979]="SL North Stream Race 2017,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-01d09ca32815f6c21]="Multi-Instance /home/sailing (big),false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-dcdba1f5]="LoadRunner Master v1.0 Files,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0a93d637f90e0e23e]="Sailing Webserver 1.3 Root,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-sailtracks/bbd005556242b2eb]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-14b2ab72]="Graylog Document,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-9ded76dd]="SL Load Test Server,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0e723e53a8bf28b48]="SL Training Server 2018 Jan,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-srv/24e229b240131e94]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0354b2e673510c9d2]="Webserver (static),false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0f612e0e60bb33081]="Tennis OpenCV,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f47b8adc]="DB&Messaging Backup MongoBackup,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-884e016c]="LoadRunner Slave 1 (Windows Server 2012 R2),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-jojopolgar/5878d43f0fda676b]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0d6f1de8b060ed741]="Swap Multi-Instance,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cdc6359896fb3bf2]="SL permission-vertical test,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0e1b0958f53ed1e61]="Tennis Analytics TPC,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0503f807bf6b47fbc]="SL Norwegian Sailing Server NOR,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-asvia/2066645306f15a03]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-7ed3622b]="DB Swap,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cae90298869a7f9f]="SL Training Server 2018,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0377ec159288797a7]="SL ESS Live 2017 (New),false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f9e41fe8]="10GB Swap Partition,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-rdsailing/1b816b46905054f3]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0d23fcefda7c718a1]="Webserver New From Scratch (/var/log),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cee9346ff22d9c05]="SL Norwegian Sailing Server NOR (New),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-04ad93b4d6d65cd6e]="SL Training Server 2018,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-05ba9410108f44d86]="Tennis Media Analytics,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-b03cab57]="Backup: Tennis Playerzone,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0ff3cdbb3b7113b40]="Sailing Webserver 1.4 /home,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0b4ce6ef]="Webserver Logs2 2014-03-21,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-01752541870c151a2]="Tennis Analytics Apps,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-d9d048f5]="Load Test Server 1.2 Home,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0f5e306d4bf88d26a]="SL WCS-2018 API-Test,false" [arn:aws:ec2:eu-west-1:017363970217:route-table/rtb-e3b34788]="Default + VPN,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-00dfa77246c7a5890]="SL Miami Fix,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-cb5d9b8b]="Backup,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-09627864f6645d0b4]="Tennis Analytics TPC,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-sailingacademy/9f6609598449e10d]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0225316f484b16050]="SL Archive New,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8bec336d]="AMI Centos 6 Basic 1.1 System,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-9cf2c416]="Tennis WTA BOBJ Server II,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-14269b38]="LoadRunner Slave v1.0 Files,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-isr/aea6f90b7ae78bc1]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-001d5f147eda96c46]="Tennis Analytics Dev,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-5693b37d]="LoadRunner Slave v1.0 System,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0fdcc3a08136fe2a0]="AMI Analytics HVM 1.62 System,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-469a5057]="Backup MySQL,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-34d3f399]="SL Large Load Test,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-a9b77943]="DB&Messaging Backup MongoArchive,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-715cec66]="Load Test /home/sailing,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0e5a34de124bb7e9b]="SL Archive (Failover),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-phoenix/1f7ca69ef33fc1d7]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0f828a4e]="Tennis Playerzone Old,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0e22b130069f81047]="SL ESS Live 2017 (New),false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f84ee41c]="Webserver System2 2014-03-21,false" [arn:aws:ec2:eu-west-1:017363970217:route-table/rtb-d52fd9b0]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cdc4013a4620ceba]="SL permission-vertical test,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-036c326bcbcaab529]="Tennis Analytics Dev,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-e6a72dca]="DB Messaging,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0706b5f9a43f130cf]="Webserver,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0bfdd8a92bc2162d2]="Webserver (swap),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:loadbalancer/app/Sailing-eu-west-1/32b89dbfe7f75097]="Unnamed,true" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0e971c0f2f0d4a88e]="SL WCS-2018 API-Test,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0c6fc4ecccd8d65a0]="Tennis Analytics 2.2 Swap,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-4bd1100b]="Bundesliga-Livecenter (Deutsch, D�nisch),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-irishdbscdw3/594f45e66c8fc271]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-022f53a62bf86ef46]="Tennis Analytics Apps,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-49er/d7ae037012205975]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0e4735a57162c17e1]="SL Archive (New),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c7a3279437e12ad2]="SL Miami Fix,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-052f5c308d7193187]="Sailing Webserver 1.4 Swap,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f40f4007]="Load Test Server 1.2 Swap,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-703b9c32]="SL Manyplayers,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-a4673256]="Security incident 20160610-1,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0aceafdcabcedc856]="Multi-Instance Root /,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-bdc5c658]="Backup Hudson,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-abeam-training/5f2e5e320ed3fff6]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8123f670]="AMI Build/Test 1.2 root,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-02a7afe8af15fbfe1]="Tennis Analytics 1.2,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-extreme-team/3c453cc0f5443c0e]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0a278f9636effd2d6]="SL ESS Live 2017,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-053f2fb838422bc28]="More Swap Multi-Instance,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-b8e69430]="VPN Gateway zone 1c,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-08abc0ee7fe8f2d58]="SL WCS-2018 API-Test,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-068d60d70c663d2e7]="SL ESS Live 2017,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-077e55fc0065bb6ce]="Tennis Analytics TPC,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-singaporesailing/7ee93a3f844d3cc2]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-084c0518d5be3e9ea]="SL Training Server 2018 Jan,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-02200f1513af2c41a]="Tennis Analytics Dev,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-00f1e25419921e6ac]="SL Training Server 2018 Jan,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0f1d2b7ac8425c4ff]="Tennis Media Analytics,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-9b5d0f7d]="Backup Bundesliga Live Center system,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8cc461a3]="DB&Messaging Backup MySQL,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0d4b424b970833eac]="Tennis OpenCV,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c846889bfecbddf5]="SL Archive New,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-srn/4e3dba3f8e818a0e]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-054d091337dea1196]="Sailing Webserver 1.3 /home,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-051e9f2245f4a0a6f]="SL Norwegian Sailing Server NOR (New),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0d009e4aab7758ab4]="SL ESS Live 2017,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c4a8aa74e3cc78ca]="SL Swedish Sailing League 2017 - Master (New),false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8723f676]="AMI Build/Test 1.2 /home/sailing,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-6a45d942]="DB&Messaging Backup RabbitMQ,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0b644808acff1e08c]="SL Team Phoenix,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0f8679a1c8e881d49]="SL Multi-Instance Snapshot Swap,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-kjscs/cb882702766009eb]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-02b2726c7a9c4458f]="DB&Messaging Backup MongoDB,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-4a0b44ae]="LoadRunner Master (Windows Server 2012 R2),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-9d970ab1]="DB MySQL,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-ec1c77ac]="US Sailing SP2,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-f0d22d7d]="MatLab Pairinglist,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-055864df0a18ba3b0]="SL Archive (New),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-segelzentrum/cb8ba067fa0ce04e]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-00ab269e71af7715a]="SL Swedish Sailing League 2017 - Master (New),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-sailcanada/5c1153c3623686fa]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0c43c5ddcadc79ea2]="Sailing Webserver 1.3 /var/log/old,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0646aa0045525e45b]="Sailing Webserver 1.3 /var/log,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-03a8b3590a56e82cd]="SL Team Phoenix,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-01d6f839a29520c72]="SL Swedish Sailing League 2017 - Master,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-008bcc8ee32283e32]="SL Team Phoenix,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ksss/919ade259198a538]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-009699c5a7684b82c]="Sailing Webserver 1.4 /var/log,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-654f8825]="Webserver Test,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0e099e4eefdf7331a]="AMI Analytics HVM 1.62 Sailing,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-01d6bb11c5daadfe9]="SL North Stream Race 2017,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-026f7d4c33ae3b19a]="SL Dutch Federation,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-490bd50a]="KW/TW Livecenter,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-de371d3c]="Backup Web Home,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0974513f701e9ed7a]="Tennis Media Analytics,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-981d82aa]="Graylog Monitoring,false" [arn:aws:ec2:eu-west-1:017363970217:security-group/sg-61f33a04]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0c3db13c399a58408]="Webserver (old),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0fbdac9db3818741e]="Webserver (/var/log/old),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0202f1418ce51deb9]="SL ESS Live 2017 (New),false" [arn:aws:ec2:eu-west-1:017363970217:subnet/subnet-6b929d2d]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-fbd6181f]="Build/Test/Dev,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-9c23f66d]="AMI Build/Test 1.2 /home/hudson,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-158d0834]="AMI Browser Test 1.1,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-nor/f62428bb34ce7302]="Unnamed,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-lyc/61f7aaa7652bbba6]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f90f400a]="Load Test Server 1.2 System,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-00a2821fdb081a970]="SL ESS Live 2017 Replica,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-cyc/6be1e3a5e40e67da]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-03c3d06744811cf22]="SL Multi-Instance Snapshot System,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0892121f96c25b489]="SL Miami Fix,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-tractractest/f404d9f7d2e32b86]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-085ad729a2d2c3292]="Sailing Webserver 1.3 /var/www/static,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-94564171]="Backup Webserver Home,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-ef667e05]="DB&Messaging Backup Swap,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-ba191af7]="DB & Messaging,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-nor/e6e65bf997a5f813]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c721fefa362d0019]="SL permission-vertical test,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-nsr2017/7bdb7ddebd739826]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:network-interface/eni-9ee73cf5]="Webserver,false" [arn:aws:ec2:eu-west-1:017363970217:network-interface/eni-51e2443a]="Archive,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-byc/a8b3957d13458a8e]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-00c664f9e47c4776b]="SL Swedish Sailing League 2017 - Master (New),false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f869471f]="AMI Microsite,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0aa8ad8f291a03c7b]="Sailing Webserver 1.4 /var/www/static,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0b0510782dc796f7d]="SL Team Phoenix,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-030ad5b69c417e45f]="SL Dutch Federation (New),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-004a9d3d5104fe760]="Tennis Analytics Dev,false" ) diff --git a/configuration/aws-automation/lib/scenario_associate_alb.sh b/configuration/aws-automation/lib/scenario_associate_alb.sh index 59d0117672d..7a33dc4875f 100644 --- a/configuration/aws-automation/lib/scenario_associate_alb.sh +++ b/configuration/aws-automation/lib/scenario_associate_alb.sh @@ -1,7 +1,16 @@ #!/usr/bin/env bash -# Add instance to application load balancer -# ------------------------------------------------------ +# ----------------------------------------------------------- +# Associates a chosen instance with a chosen application load balancer. +# +# Steps: +# Creates target group for instance. +# Configures health check of target group. +# Creates rule inside https listener of application load balancer. +# Registers target within target group. +# Configures apache of ec2 instance to revere proxy. +# ----------------------------------------------------------- + function associate_alb_start(){ associate_alb_require @@ -14,7 +23,6 @@ function associate_alb_start(){ # the user will be prompted to enter a value # ----------------------------------------------------------- function associate_alb_require(){ - # will only be executed after instance creation require_instance require_instance_short_name require_load_balancer diff --git a/configuration/aws-automation/lib/scenario_instance.sh b/configuration/aws-automation/lib/scenario_instance.sh index 7add2c808be..1806098c882 100644 --- a/configuration/aws-automation/lib/scenario_instance.sh +++ b/configuration/aws-automation/lib/scenario_instance.sh @@ -1,6 +1,9 @@ #!/usr/bin/env bash -# Scenario for creating an instance +# Scenario for creating an ec2 instance +# +# Steps: +# Creates ec2 instance # ------------------------------------------------------ function instance_start(){ @@ -62,7 +65,7 @@ function instance_execute() { local port="8888" configure_application $public_dns_name $port $event_name $new_admin_password $user_username $user_pass - append_environment_to_env_sh "live-server" $ssh_user $public_dns_name + append_environment_to_env_sh "live-server" $ssh_user $public_dns_name header "Conclusion" success "Instance should be reachable through $public_dns_name." diff --git a/configuration/aws-automation/lib/scenario_replica_instance.sh b/configuration/aws-automation/lib/scenario_replica_instance.sh index bad38f8b26c..978d8cafdc7 100644 --- a/configuration/aws-automation/lib/scenario_replica_instance.sh +++ b/configuration/aws-automation/lib/scenario_replica_instance.sh @@ -31,6 +31,7 @@ function replica_instance_execute() { header "Replica Instance Initialization" instance_id=$(run_instance_from_launch_template $launch_template) + wait_instance_exists $instance_id public_dns_name=$(get_public_dns_name $instance_id) user_data=$(get_user_data_from_instance $instance_id | base64 --decode) echo "$user_data" diff --git a/configuration/aws-automation/lib/scenario_shared_instance.sh b/configuration/aws-automation/lib/scenario_shared_instance.sh index 1bbba4eb4a0..c74bf2c2ac0 100644 --- a/configuration/aws-automation/lib/scenario_shared_instance.sh +++ b/configuration/aws-automation/lib/scenario_shared_instance.sh @@ -138,7 +138,7 @@ function shared_instance_execute() { execute_remote_root "echo -e \"\n# $instance_short_name (${description:-"Unknown"}, ${contact_person:-"Unknown"}, ${contact_email:-"Unknown"})\" >> $events_conf" append_macro_to_001_events_conf "$domain" "$event_id" "root" "$super_instance" "$server_port" - + reload_httpd "root" $super_instance header "Conclusion" success "Sub instance should be reachable through https://$domain." From 6141c1b3772f4b08263292d53b847ee78a000aee Mon Sep 17 00:00:00 2001 From: Leon Radeck Date: Mon, 19 Feb 2018 12:56:39 +0100 Subject: [PATCH 03/10] temp save default jan kiel --- configuration/aws-automation/aws-setup.sh | 2 +- .../aws-automation/lib/functions_elb.sh | 4 +- .../aws-automation/lib/functions_io.sh | 96 +++++++++---------- .../aws-automation/lib/require_variables.sh | 14 +-- 4 files changed, 58 insertions(+), 58 deletions(-) diff --git a/configuration/aws-automation/aws-setup.sh b/configuration/aws-automation/aws-setup.sh index db86e315593..bb1cc6f0cd6 100755 --- a/configuration/aws-automation/aws-setup.sh +++ b/configuration/aws-automation/aws-setup.sh @@ -79,7 +79,7 @@ if is_exists ${region_config_file}; then source "${region_config_file}" fi -init_resources +# init_resources if $instance_scenario; then instance_start diff --git a/configuration/aws-automation/lib/functions_elb.sh b/configuration/aws-automation/lib/functions_elb.sh index 29423753622..6d801fed4fa 100644 --- a/configuration/aws-automation/lib/functions_elb.sh +++ b/configuration/aws-automation/lib/functions_elb.sh @@ -75,8 +75,8 @@ function create_rule(){ local priority=$(($(get_rule_with_highest_priority $1) + 1)) # For testing purpose - if [ $region == "eu-west-2" ]; then - local domain="$subdomain.dummy2.sapsailing.com" + if [ $region == "eu-west-1" ]; then + local domain="$subdomain.training.sapsailing.com" else local domain="$subdomain.sapsailing.com" fi diff --git a/configuration/aws-automation/lib/functions_io.sh b/configuration/aws-automation/lib/functions_io.sh index d88149d7252..9e7005ff6ed 100644 --- a/configuration/aws-automation/lib/functions_io.sh +++ b/configuration/aws-automation/lib/functions_io.sh @@ -14,56 +14,56 @@ # ----------------------------------------------------------- function require_input(){ - if [ ! -z "$5" ]; then - declare -a option_keys=() - declare -a option_values=() - number_of_tagged_resources=0 - default_tagged_resource="" - o=0 - for key in "${!RESOURCE_MAP[@]}"; do - if [[ $key =~ $5 ]]; then - # if resource is tagged - option_keys[$o]=$key - local tagged=$(echo ${RESOURCE_MAP[$key]} | cut -d, -f2) - local name=$(echo ${RESOURCE_MAP[$key]} | cut -d, -f1) - if [ $tagged == "true" ]; then - option_values[$o]="$(tput setaf 3)$name ($key)$(tput sgr0)" - default_tagged_resource=$key - ((number_of_tagged_resources++)) - else - option_values[$o]="$name ($key)" - fi - ((o++)) - fi - done + # if [ ! -z "$5" ]; then + # declare -a option_keys=() + # declare -a option_values=() + # number_of_tagged_resources=0 + # default_tagged_resource="" + # o=0 + # for key in "${!RESOURCE_MAP[@]}"; do + # if [[ $key =~ $5 ]]; then + # # if resource is tagged + # option_keys[$o]=$key + # local tagged=$(echo ${RESOURCE_MAP[$key]} | cut -d, -f2) + # local name=$(echo ${RESOURCE_MAP[$key]} | cut -d, -f1) + # if [ $tagged == "true" ]; then + # option_values[$o]="$(tput setaf 3)$name ($key)$(tput sgr0)" + # default_tagged_resource=$key + # ((number_of_tagged_resources++)) + # else + # option_values[$o]="$name ($key)" + # fi + # ((o++)) + # fi + # done + # + # if [[ ( $number_of_tagged_resources -eq 1 || ${#option_keys[@]} -eq 1 ) && "$force" == "true" ]]; then + # local_echo "$1" + # if [ ! -z "$default_tagged_resource" ]; then + # read -r $3 <<< $default_tagged_resource + # else + # echo ${option_keys[0]} + # read -r $3 <<< ${option_keys[0]} + # fi + # return 0 + # elif [ ${#option_keys[@]} -gt 0 ]; then + # local_echo "$1" + # selectedValue="" + # select option in ${option_values[@]}; do + # selectedValue=$option + # break + # done + # # workaround cant access option_keys from within select + # read -r $3 <<< $(echo $selectedValue | sed 's/.*(\(.*\)).*/\1/') + # return 0 + # else + # read_input_normal "$1" "$2" $3 $4 + # return 0 + # fi - if [[ ( $number_of_tagged_resources -eq 1 || ${#option_keys[@]} -eq 1 ) && "$force" == "true" ]]; then - local_echo "$1" - if [ ! -z "$default_tagged_resource" ]; then - read -r $3 <<< $default_tagged_resource - else - echo ${option_keys[0]} - read -r $3 <<< ${option_keys[0]} - fi - return 0 - elif [ ${#option_keys[@]} -gt 0 ]; then - local_echo "$1" - selectedValue="" - select option in ${option_values[@]}; do - selectedValue=$option - break - done - # workaround cant access option_keys from within select - read -r $3 <<< $(echo $selectedValue | sed 's/.*(\(.*\)).*/\1/') - return 0 - else - read_input_normal "$1" "$2" $3 $4 - return 0 - fi - - else + # else read_input_normal "$1" "$2" $3 $4 - fi + # fi } function read_input_normal(){ diff --git a/configuration/aws-automation/lib/require_variables.sh b/configuration/aws-automation/lib/require_variables.sh index 3e06a0be5aa..f2bf013460b 100644 --- a/configuration/aws-automation/lib/require_variables.sh +++ b/configuration/aws-automation/lib/require_variables.sh @@ -53,7 +53,7 @@ function require_launch_template(){ } function require_image(){ - require_variable "$image_param" image "$NO_DEFAULT_VALUE" "$image_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidImageARNRegex + require_variable "$image_param" image 'ami-d47711ad' "$image_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidImageARNRegex } function require_event_name(){ @@ -61,19 +61,19 @@ function require_event_name(){ } function require_instance_security_group(){ - require_variable "$security_group_param" instance_security_group "$NO_DEFAULT_VALUE" "$instance_security_group_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidSecurityGroupARNRegex + require_variable "$security_group_param" instance_security_group 'sg-eaf31e85' "$instance_security_group_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidSecurityGroupARNRegex } function require_load_balancer(){ - require_variable "$load_balancer_param" load_balancer "$NO_DEFAULT_VALUE" "$load_balancer_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidLoadBalancerARNRegex + require_variable "$load_balancer_param" load_balancer 'arn:aws:elasticloadbalancing:eu-west-1:017363970217:loadbalancer/app/Sailing-eu-west-1/32b89dbfe7f75097' "$load_balancer_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidLoadBalancerARNRegex } function require_instance(){ - require_variable "$instance_param" instance "$NO_DEFAULT_VALUE" "$instance_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidInstanceARNRegex + require_variable "$instance_param" instance 'arn:aws:ec2:eu-west-1:017363970217:instance/i-07c1a5d90e5b16524' "$instance_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidInstanceARNRegex } function require_region(){ - require_variable "$region_param" region "$default_region" "$region_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" + require_variable "$region_param" region "eu-west-1" "$region_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" } function require_instance_type(){ @@ -93,7 +93,7 @@ function require_key_name(){ } function require_key_file(){ - require_variable "$key_file_param" key_file "$default_key_file" "$key_file_ask_message" "$IS_OPTIONAL" "$SHOW_INPUT" + require_variable "$key_file_param" key_file '/cygdrive/c/Users/d069485/.ssh/Leon.pem' "$key_file_ask_message" "$IS_OPTIONAL" "$SHOW_INPUT" } function require_new_admin_password(){ @@ -126,7 +126,7 @@ function require_ssh_user(){ } function require_super_instance(){ - require_variable "$super_instance_param" super_instance "$NO_DEFAULT_VALUE" "$super_instance_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidInstanceARNRegex + require_variable "$super_instance_param" super_instance 'arn:aws:ec2:eu-west-1:017363970217:instance/i-07c1a5d90e5b16524' "$super_instance_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidInstanceARNRegex } function require_description(){ From fb10a2d925f2ddd874ad190c705c9e6fb0dc7499 Mon Sep 17 00:00:00 2001 From: Leon Radeck Date: Mon, 19 Feb 2018 12:57:11 +0100 Subject: [PATCH 04/10] Revert "temp save default jan kiel" This reverts commit 6141c1b3772f4b08263292d53b847ee78a000aee. --- configuration/aws-automation/aws-setup.sh | 2 +- .../aws-automation/lib/functions_elb.sh | 4 +- .../aws-automation/lib/functions_io.sh | 96 +++++++++---------- .../aws-automation/lib/require_variables.sh | 14 +-- 4 files changed, 58 insertions(+), 58 deletions(-) diff --git a/configuration/aws-automation/aws-setup.sh b/configuration/aws-automation/aws-setup.sh index bb1cc6f0cd6..db86e315593 100755 --- a/configuration/aws-automation/aws-setup.sh +++ b/configuration/aws-automation/aws-setup.sh @@ -79,7 +79,7 @@ if is_exists ${region_config_file}; then source "${region_config_file}" fi -# init_resources +init_resources if $instance_scenario; then instance_start diff --git a/configuration/aws-automation/lib/functions_elb.sh b/configuration/aws-automation/lib/functions_elb.sh index 6d801fed4fa..29423753622 100644 --- a/configuration/aws-automation/lib/functions_elb.sh +++ b/configuration/aws-automation/lib/functions_elb.sh @@ -75,8 +75,8 @@ function create_rule(){ local priority=$(($(get_rule_with_highest_priority $1) + 1)) # For testing purpose - if [ $region == "eu-west-1" ]; then - local domain="$subdomain.training.sapsailing.com" + if [ $region == "eu-west-2" ]; then + local domain="$subdomain.dummy2.sapsailing.com" else local domain="$subdomain.sapsailing.com" fi diff --git a/configuration/aws-automation/lib/functions_io.sh b/configuration/aws-automation/lib/functions_io.sh index 9e7005ff6ed..d88149d7252 100644 --- a/configuration/aws-automation/lib/functions_io.sh +++ b/configuration/aws-automation/lib/functions_io.sh @@ -14,56 +14,56 @@ # ----------------------------------------------------------- function require_input(){ - # if [ ! -z "$5" ]; then - # declare -a option_keys=() - # declare -a option_values=() - # number_of_tagged_resources=0 - # default_tagged_resource="" - # o=0 - # for key in "${!RESOURCE_MAP[@]}"; do - # if [[ $key =~ $5 ]]; then - # # if resource is tagged - # option_keys[$o]=$key - # local tagged=$(echo ${RESOURCE_MAP[$key]} | cut -d, -f2) - # local name=$(echo ${RESOURCE_MAP[$key]} | cut -d, -f1) - # if [ $tagged == "true" ]; then - # option_values[$o]="$(tput setaf 3)$name ($key)$(tput sgr0)" - # default_tagged_resource=$key - # ((number_of_tagged_resources++)) - # else - # option_values[$o]="$name ($key)" - # fi - # ((o++)) - # fi - # done - # - # if [[ ( $number_of_tagged_resources -eq 1 || ${#option_keys[@]} -eq 1 ) && "$force" == "true" ]]; then - # local_echo "$1" - # if [ ! -z "$default_tagged_resource" ]; then - # read -r $3 <<< $default_tagged_resource - # else - # echo ${option_keys[0]} - # read -r $3 <<< ${option_keys[0]} - # fi - # return 0 - # elif [ ${#option_keys[@]} -gt 0 ]; then - # local_echo "$1" - # selectedValue="" - # select option in ${option_values[@]}; do - # selectedValue=$option - # break - # done - # # workaround cant access option_keys from within select - # read -r $3 <<< $(echo $selectedValue | sed 's/.*(\(.*\)).*/\1/') - # return 0 - # else - # read_input_normal "$1" "$2" $3 $4 - # return 0 - # fi + if [ ! -z "$5" ]; then + declare -a option_keys=() + declare -a option_values=() + number_of_tagged_resources=0 + default_tagged_resource="" + o=0 + for key in "${!RESOURCE_MAP[@]}"; do + if [[ $key =~ $5 ]]; then + # if resource is tagged + option_keys[$o]=$key + local tagged=$(echo ${RESOURCE_MAP[$key]} | cut -d, -f2) + local name=$(echo ${RESOURCE_MAP[$key]} | cut -d, -f1) + if [ $tagged == "true" ]; then + option_values[$o]="$(tput setaf 3)$name ($key)$(tput sgr0)" + default_tagged_resource=$key + ((number_of_tagged_resources++)) + else + option_values[$o]="$name ($key)" + fi + ((o++)) + fi + done - # else + if [[ ( $number_of_tagged_resources -eq 1 || ${#option_keys[@]} -eq 1 ) && "$force" == "true" ]]; then + local_echo "$1" + if [ ! -z "$default_tagged_resource" ]; then + read -r $3 <<< $default_tagged_resource + else + echo ${option_keys[0]} + read -r $3 <<< ${option_keys[0]} + fi + return 0 + elif [ ${#option_keys[@]} -gt 0 ]; then + local_echo "$1" + selectedValue="" + select option in ${option_values[@]}; do + selectedValue=$option + break + done + # workaround cant access option_keys from within select + read -r $3 <<< $(echo $selectedValue | sed 's/.*(\(.*\)).*/\1/') + return 0 + else + read_input_normal "$1" "$2" $3 $4 + return 0 + fi + + else read_input_normal "$1" "$2" $3 $4 - # fi + fi } function read_input_normal(){ diff --git a/configuration/aws-automation/lib/require_variables.sh b/configuration/aws-automation/lib/require_variables.sh index f2bf013460b..3e06a0be5aa 100644 --- a/configuration/aws-automation/lib/require_variables.sh +++ b/configuration/aws-automation/lib/require_variables.sh @@ -53,7 +53,7 @@ function require_launch_template(){ } function require_image(){ - require_variable "$image_param" image 'ami-d47711ad' "$image_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidImageARNRegex + require_variable "$image_param" image "$NO_DEFAULT_VALUE" "$image_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidImageARNRegex } function require_event_name(){ @@ -61,19 +61,19 @@ function require_event_name(){ } function require_instance_security_group(){ - require_variable "$security_group_param" instance_security_group 'sg-eaf31e85' "$instance_security_group_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidSecurityGroupARNRegex + require_variable "$security_group_param" instance_security_group "$NO_DEFAULT_VALUE" "$instance_security_group_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidSecurityGroupARNRegex } function require_load_balancer(){ - require_variable "$load_balancer_param" load_balancer 'arn:aws:elasticloadbalancing:eu-west-1:017363970217:loadbalancer/app/Sailing-eu-west-1/32b89dbfe7f75097' "$load_balancer_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidLoadBalancerARNRegex + require_variable "$load_balancer_param" load_balancer "$NO_DEFAULT_VALUE" "$load_balancer_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidLoadBalancerARNRegex } function require_instance(){ - require_variable "$instance_param" instance 'arn:aws:ec2:eu-west-1:017363970217:instance/i-07c1a5d90e5b16524' "$instance_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidInstanceARNRegex + require_variable "$instance_param" instance "$NO_DEFAULT_VALUE" "$instance_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidInstanceARNRegex } function require_region(){ - require_variable "$region_param" region "eu-west-1" "$region_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" + require_variable "$region_param" region "$default_region" "$region_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" } function require_instance_type(){ @@ -93,7 +93,7 @@ function require_key_name(){ } function require_key_file(){ - require_variable "$key_file_param" key_file '/cygdrive/c/Users/d069485/.ssh/Leon.pem' "$key_file_ask_message" "$IS_OPTIONAL" "$SHOW_INPUT" + require_variable "$key_file_param" key_file "$default_key_file" "$key_file_ask_message" "$IS_OPTIONAL" "$SHOW_INPUT" } function require_new_admin_password(){ @@ -126,7 +126,7 @@ function require_ssh_user(){ } function require_super_instance(){ - require_variable "$super_instance_param" super_instance 'arn:aws:ec2:eu-west-1:017363970217:instance/i-07c1a5d90e5b16524' "$super_instance_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidInstanceARNRegex + require_variable "$super_instance_param" super_instance "$NO_DEFAULT_VALUE" "$super_instance_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidInstanceARNRegex } function require_description(){ From 5a6d21322c0ae6af27ec45b35dab0aa718a15618 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Thu, 8 Mar 2018 16:23:12 +0100 Subject: [PATCH 05/10] formatting changes only Change-Id: I84ecc341cb5521858317a47904acce1f0f3e2cd8 --- .../shared/charts/AbstractCompetitorRaceChart.java | 7 +------ .../client/shared/charts/MultiCompetitorRaceChart.java | 9 ++++----- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java index 4cfb01c7faf..22c72bbc8f3 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java @@ -245,13 +245,12 @@ public abstract class AbstractCompetitorRaceChart competitorsToLoad, final DetailType selectedDataTypeToRetrieve,final TimingHolder tholder) { + ArrayList competitorsToLoad, final DetailType selectedDataTypeToRetrieve, final TimingHolder tholder) { long stepSize = Math.max(getStepSizeInMillis(), from==null||to==null ? 0 : Math.abs(to.getTime()-from.getTime())/SailingServiceConstants.MAX_NUMBER_OF_FIXES_TO_QUERY); GetCompetitorsRaceDataAction getCompetitorsRaceDataAction = new GetCompetitorsRaceDataAction(sailingService, selectedRaceIdentifier, competitorsToLoad, from, to, stepSize, selectedDataTypeToRetrieve, leaderboardGroupName, leaderboardName); - AsyncCallback dataLoadedCallback = new AsyncCallback() { @Override public void onSuccess(final CompetitorsRaceDataDTO result) { @@ -276,7 +275,6 @@ public abstract class AbstractCompetitorRaceChart Date: Thu, 8 Mar 2018 16:28:29 +0100 Subject: [PATCH 06/10] a few more formatting changes Change-Id: Ib1b27a3388934419842e60ec291eed526e7dfb32 --- .../shared/charts/AbstractCompetitorRaceChart.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java index 22c72bbc8f3..ddf95de7bd6 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java @@ -349,9 +349,7 @@ public abstract class AbstractCompetitorRaceChart> raceData = competitorData.getRaceData(); - Point[] raceDataPointsToAdd = new Point[raceData.size()]; int currentPointIndex = 0; for (com.sap.sse.common.Util.Pair raceDataPoint : raceData) { Double dataPointValue = raceDataPoint.getB(); - if(dataPointValue != null) { + if (dataPointValue != null) { long dataPointTimeAsMillis = raceDataPoint.getA().getTime(); - if(append == false || (tholder.timeOfEarliestRequestInMillis == null || dataPointTimeAsMillis < tholder.timeOfEarliestRequestInMillis) || + if (append == false || (tholder.timeOfEarliestRequestInMillis == null || dataPointTimeAsMillis < tholder.timeOfEarliestRequestInMillis) || tholder.timeOfLatestRequestInMillis == null || dataPointTimeAsMillis > tholder.timeOfLatestRequestInMillis) { raceDataPointsToAdd[currentPointIndex++] = new Point(dataPointTimeAsMillis, dataPointValue); } } } - Point[] newRaceDataPoints; if (append) { newRaceDataPoints = new Point[oldRaceDataPoints.length + currentPointIndex]; @@ -394,7 +389,6 @@ public abstract class AbstractCompetitorRaceChart chartSeries = Arrays.asList(chart.getSeries()); From 9856ef451b44033b3c2d3f67c19bcfde433e44bd Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Thu, 8 Mar 2018 18:40:15 +0100 Subject: [PATCH 07/10] introduced parameter to setSeriesPoints, used to avoid zoom management when replacing fixes Change-Id: I2c157ed697c475cd1a8c22794500f7e28426c2ab --- .../AbstractCompetitorLeaderboardChart.java | 2 +- .../charts/AbstractCompetitorRaceChart.java | 57 ++++++++++++++++--- .../shared/charts/AbstractRaceChart.java | 21 ++++--- .../shared/charts/EditMarkPositionPanel.java | 10 ++-- .../ui/client/shared/charts/WindChart.java | 4 +- 5 files changed, 70 insertions(+), 24 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorLeaderboardChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorLeaderboardChart.java index 8d2cedfce97..d1da8af2e5a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorLeaderboardChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorLeaderboardChart.java @@ -75,7 +75,7 @@ public abstract class AbstractCompetitorLeaderboardChart raceColumnNamesWithData; protected final String leaderboardName; protected final StringMessages stringMessages; - + public AbstractCompetitorLeaderboardChart(Component parent, ComponentContext context, SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, String leaderboardName, diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java index ddf95de7bd6..30109ea6297 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java @@ -102,6 +102,17 @@ public abstract class AbstractCompetitorRaceChart + * + * However, when zooming this will be re-evaluated, and a more fine-grained request to the server, limited to + * the zoom range, may then be issued. + */ + private long effectiveStepSize = -1; + AbstractCompetitorRaceChart(Component parent, ComponentContext context, SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, CompetitorSelectionProvider competitorSelectionProvider, RegattaAndRaceIdentifier selectedRaceIdentifier, @@ -237,24 +248,38 @@ public abstract class AbstractCompetitorRaceChart competitorsToLoad, final DetailType selectedDataTypeToRetrieve, final TimingHolder tholder) { - long stepSize = Math.max(getStepSizeInMillis(), - from==null||to==null ? 0 : Math.abs(to.getTime()-from.getTime())/SailingServiceConstants.MAX_NUMBER_OF_FIXES_TO_QUERY); + long effectiveStepSize = getEffectiveStepSize(from, to); GetCompetitorsRaceDataAction getCompetitorsRaceDataAction = new GetCompetitorsRaceDataAction(sailingService, - selectedRaceIdentifier, competitorsToLoad, from, to, stepSize, selectedDataTypeToRetrieve, + selectedRaceIdentifier, competitorsToLoad, from, to, effectiveStepSize, selectedDataTypeToRetrieve, leaderboardGroupName, leaderboardName); AsyncCallback dataLoadedCallback = new AsyncCallback() { @Override public void onSuccess(final CompetitorsRaceDataDTO result) { hideLoading(); + AbstractCompetitorRaceChart.this.effectiveStepSize = effectiveStepSize; if (result != null) { if (result.isEmpty() && chartContainsNoData()) { setWidget(noDataFoundLabel); @@ -285,6 +310,21 @@ public abstract class AbstractCompetitorRaceChart */ private synchronized void updateChartSeries(CompetitorsRaceDataDTO chartData, DetailType retrievedDataType, - boolean append,TimingHolder tholder) { + boolean append, TimingHolder tholder) { // Make sure the busy indicator is removed at this point, or plotting the data results in an exception setWidget(chart); for (CompetitorDTO competitor : chartData.getCompetitors()) { @@ -389,15 +429,14 @@ public abstract class AbstractCompetitorRaceChart chartSeries = Arrays.asList(chart.getSeries()); if (!chartSeries.contains(competitorDataSeries)) { chart.addSeries(competitorDataSeries); chart.addSeries(markPassingSeries); - //this is to prevent a bug, that will prohibit the initial rendering + // this is to prevent a bug, that will prohibit the initial rendering chart.setSizeToMatchContainer(); - } } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractRaceChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractRaceChart.java index 5b8a2d09f6a..12e1f1a1445 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractRaceChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractRaceChart.java @@ -184,13 +184,13 @@ public abstract class AbstractRaceChart extends A if (!isZoomed) { isZoomed = true; } - //Set a minute as max time zoom just as for chart + // Set a minute as max time zoom just as for chart if (xAxisMax - xAxisMin > MINUTE_IN_MILLIS) { Date rangeStart = new Date(xAxisMin); Date rangeEnd = new Date(xAxisMax); timeRangeWithZoomProvider.setTimeZoom(rangeStart, rangeEnd, this); + updateChartIfEffectiveStepSizeChanged(rangeStart, rangeEnd); fireEvent(new ChartZoomChangedEvent(rangeStart, rangeEnd)); - } else { fireEvent(new ChartZoomResetEvent()); return false; @@ -199,7 +199,7 @@ public abstract class AbstractRaceChart extends A Scheduler.get().scheduleDeferred(new ScheduledCommand() { @Override public void execute() { - // in case the user clicks the "reset zoom" button chartSelectionEvent.getXAxisMinAsLong() throws in exception + // in case the user clicks the "reset zoom" button chartSelectionEvent.getXAxisMinAsLong() throws an exception isZoomed = false; timeRangeWithZoomProvider.resetTimeZoom(); // redraw is triggered by the call to onTimeZoomReset() and therefore not necessary again here @@ -223,6 +223,13 @@ public abstract class AbstractRaceChart extends A } return true; } + + /** + * Does nothing here; subclasses have the possibility to override if they need to re-load data + * based on changes in the visible area that may lead to step size / resolution adjustments + */ + protected void updateChartIfEffectiveStepSizeChanged(Date minTimepoint, Date maxTimepoint) { + } protected void changeMinMaxAndExtremesInterval(Date minTimepoint, Date maxTimepoint, boolean redraw) { if (chart != null) { @@ -246,14 +253,14 @@ public abstract class AbstractRaceChart extends A } } - protected void setSeriesPoints(Series series, Point[] points) { - if (timeRangeWithZoomProvider.isZoomed()) { + protected void setSeriesPoints(Series series, Point[] points, boolean manageZoom) { + if (manageZoom && timeRangeWithZoomProvider.isZoomed()) { com.sap.sse.common.Util.Pair timeZoom = timeRangeWithZoomProvider.getTimeZoom(); resetMinMaxAndExtremesInterval(/* redraw */ false); - series.setPoints(points, false); + series.setPoints(points, /* redraw */ false); changeMinMaxAndExtremesInterval(timeZoom.getA(), timeZoom.getB(), /* redraw */ false); } else { - series.setPoints(points, false); + series.setPoints(points, /* redraw */ false); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/EditMarkPositionPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/EditMarkPositionPanel.java index e7174d67332..805860d1b20 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/EditMarkPositionPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/EditMarkPositionPanel.java @@ -514,7 +514,7 @@ public class EditMarkPositionPanel extends AbstractRaceChart i Point[] points = markSeries.getPoints(); if (points.length > index) { setRedPoint(points, index); - setSeriesPoints(markSeries, points); + setSeriesPoints(markSeries, points, /* manageZoom */ true); } } @@ -523,7 +523,7 @@ public class EditMarkPositionPanel extends AbstractRaceChart i Point[] points = getSeriesPoints(marks.get(selectedMark).keySet()); if (points.length > index) { setRedPoint(points, index); - setSeriesPoints(markSeries, points); + setSeriesPoints(markSeries, points, /* manageZoom */ true); chart.redraw(); } } @@ -533,7 +533,7 @@ public class EditMarkPositionPanel extends AbstractRaceChart i Point[] points = markSeries.getPoints(); if (points.length > index) { points[index].setMarker(new Marker().setFillColor(selectedMark.color==null?null:selectedMark.color.getAsHtml())); - setSeriesPoints(markSeries, points); + setSeriesPoints(markSeries, points, /* manageZoom */ true); } } @@ -700,11 +700,11 @@ public class EditMarkPositionPanel extends AbstractRaceChart i } private void setSeriesPoints(MarkDTO mark) { - setSeriesPoints(markSeries, getSeriesPoints(marks.get(mark).keySet())); + setSeriesPoints(markSeries, getSeriesPoints(marks.get(mark).keySet()), /* manageZoom */ true); } public void setSeriesPoints(Point[] points) { - setSeriesPoints(markSeries, points); + setSeriesPoints(markSeries, points, /* manageZoom */ true); } public void setVisible(boolean visible) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/WindChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/WindChart.java index 69671f1af6b..62753c34303 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/WindChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/WindChart.java @@ -447,10 +447,10 @@ public class WindChart extends AbstractRaceChart implements R newDirectionPoints = directionPoints; newSpeedPoints = speedPoints; } - setSeriesPoints(directionSeries, newDirectionPoints); + setSeriesPoints(directionSeries, newDirectionPoints, /* manageZoom */ true); windSourceDirectionPoints.put(windSource, newDirectionPoints); if (windSource.getType().useSpeed()) { - setSeriesPoints(speedSeries, newSpeedPoints); + setSeriesPoints(speedSeries, newSpeedPoints, /* manageZoom */ true); windSourceSpeedPoints.put(windSource, newSpeedPoints); } From 301fc0f7b80eef23ca56646883b72fa0d1128fee Mon Sep 17 00:00:00 2001 From: Leon Radeck Date: Fri, 9 Mar 2018 16:20:58 +1100 Subject: [PATCH 08/10] Inconsistent. --- .../aws-automation/lib/functions_app.sh | 20 +- .../aws-automation/lib/functions_ec2.sh | 30 ++- .../aws-automation/lib/functions_io.sh | 159 ++++++------ .../aws-automation/lib/require_variables.sh | 26 +- .../aws-automation/lib/resources-eu-west-1.sh | 233 ------------------ .../aws-automation/lib/resources-eu-west-2.sh | 11 - .../aws-automation/lib/scenario_instance.sh | 8 +- .../lib/scenario_master_instance.sh | 4 +- 8 files changed, 129 insertions(+), 362 deletions(-) delete mode 100644 configuration/aws-automation/lib/resources-eu-west-1.sh delete mode 100644 configuration/aws-automation/lib/resources-eu-west-2.sh diff --git a/configuration/aws-automation/lib/functions_app.sh b/configuration/aws-automation/lib/functions_app.sh index 52eb519c01a..5ea7c7823ec 100644 --- a/configuration/aws-automation/lib/functions_app.sh +++ b/configuration/aws-automation/lib/functions_app.sh @@ -143,13 +143,25 @@ function append_macro_to_001_events_conf(){ # @param $4 path to env.sh file # ----------------------------------------------------------- function append_environment_to_env_sh(){ - local env_file=${4:-'/home/sailing/servers/server'} - local_echo "Appending environment '$environment' to env.sh..." + local env_file=${4:-'/home/sailing/servers/server/env.sh'} + local_echo "Appending environment '$1' to env.sh..." env_content=$(wget -qO- http://releases.sapsailing.com/environments/$1) - exit_on_fail ssh_wrapper $2@$3 "echo -e \"# START Environment: $environment \" >> $env_file" + exit_on_fail ssh_wrapper $2@$3 "echo -e \"# START Environment: $1 \" >> $env_file" exit_on_fail ssh_wrapper $2@$3 "echo -e \"$env_content\" >> $env_file" - exit_on_fail ssh_wrapper $2@$3 "echo -e \"# END Environment: $environment \" >> $env_file" + exit_on_fail ssh_wrapper $2@$3 "echo -e \"# END Environment: $1 \" >> $env_file" +} + +# ----------------------------------------------------------- +# Append string to env.sh +# @param $1 ssh user +# @param $2 dns name of instance +# @param $3 string value +# @param $4 path to env.sh file +# ----------------------------------------------------------- +function append_to_env_sh(){ + local env_file=${4:-'/home/sailing/servers/server/env.sh'} + exit_on_fail ssh_wrapper $1@$2 "echo -e \"$3\" >> $env_file" } # ----------------------------------------------------------- diff --git a/configuration/aws-automation/lib/functions_ec2.sh b/configuration/aws-automation/lib/functions_ec2.sh index fe993b35565..1f23049c264 100644 --- a/configuration/aws-automation/lib/functions_ec2.sh +++ b/configuration/aws-automation/lib/functions_ec2.sh @@ -19,10 +19,25 @@ function get_public_dns_name(){ # Get resources all resources from aws # @return json array of resourceARNs # ----------------------------------------------------------- -function get_resources(){ - aws_wrapper resourcegroupstaggingapi get-resources --resource-type-filters elasticloadbalancing:loadbalancer ec2:instance ec2:image ec2:security-group acm:certificate | jq -c ".ResourceTagMappingList[] | select(.ResourceARN)" -r | sanitize +function get_array_with_resource_of_type(){ + disable_aws_success_output + # RESOURCE_ARRAY=($(aws_wrapper resourcegroupstaggingapi get-resources --resource-type-filters elasticloadbalancing:loadbalancer ec2:instance ec2:image ec2:security-group acm:certificate | jq -c ".ResourceTagMappingList[] | select(.ResourceARN)" -r | sanitize)) + aws_wrapper resourcegroupstaggingapi get-resources --resource-type-filters $1 | jq -c ".ResourceTagMappingList[] | select(.ResourceARN)" -r | sanitize + enable_aws_success_output } +# ----------------------------------------------------------- +# Get launch templates as json +# param $1 public dns name +# @return json array of launch templates +# ----------------------------------------------------------- +function get_array_with_launch_templates(){ + disable_aws_success_output + aws_wrapper ec2 describe-launch-templates | jq -c ".LaunchTemplates[]" -r | sanitize + enable_aws_success_output +} + + # ----------------------------------------------------------- # Get tag value of specified key of instance # @param1 instance id @@ -52,14 +67,7 @@ function get_instance_id(){ exit_on_fail validate_instance_id $instance_id } -# ----------------------------------------------------------- -# Get launch templates as json -# param $1 public dns name -# @return json array of launch templates -# ----------------------------------------------------------- -function get_launch_templates(){ - aws_wrapper ec2 describe-launch-templates | jq -c ".LaunchTemplates[]" -r | sanitize -} + # ----------------------------------------------------------- # Returns the instance id part of e.g. arn:aws:ec2:eu-west-2:017363970217:instance/i-096a32ca8c28bedbb # param $1 resource arn @@ -153,7 +161,7 @@ function create_instance(){ local_echo -e "Creating instance with following specifications:\n\nRegion: $region\nName: $instance_name\nShort name: $instance_short_name\nType: $instance_type\nBuild: $build_version\n\nUser data:\n${1}\n" instance_id=$(run_instance "$1") wait_instance_exists $instance_id - $(print_instance_description $instance_id) + null=$(print_instance_description $instance_id) echo $instance_id } diff --git a/configuration/aws-automation/lib/functions_io.sh b/configuration/aws-automation/lib/functions_io.sh index d88149d7252..0deadb2c8d7 100644 --- a/configuration/aws-automation/lib/functions_io.sh +++ b/configuration/aws-automation/lib/functions_io.sh @@ -10,60 +10,37 @@ # @param $2 default value # @param $3 variable that is receiving the value # @param $4 hide text -# @param $5 filter # ----------------------------------------------------------- function require_input(){ - - if [ ! -z "$5" ]; then - declare -a option_keys=() - declare -a option_values=() - number_of_tagged_resources=0 - default_tagged_resource="" - o=0 - for key in "${!RESOURCE_MAP[@]}"; do - if [[ $key =~ $5 ]]; then - # if resource is tagged - option_keys[$o]=$key - local tagged=$(echo ${RESOURCE_MAP[$key]} | cut -d, -f2) - local name=$(echo ${RESOURCE_MAP[$key]} | cut -d, -f1) - if [ $tagged == "true" ]; then - option_values[$o]="$(tput setaf 3)$name ($key)$(tput sgr0)" - default_tagged_resource=$key - ((number_of_tagged_resources++)) - else - option_values[$o]="$name ($key)" - fi - ((o++)) - fi - done - - if [[ ( $number_of_tagged_resources -eq 1 || ${#option_keys[@]} -eq 1 ) && "$force" == "true" ]]; then + if [ ${#RESOURCE_MAP[@]} -eq 0 ]; then + if [[ ( $NUMBER_OF_TAGGED_RESOURCES -eq 1 || ${#OPTION_KEYS[@]} -eq 1 ) && "$force" == "true" ]]; then local_echo "$1" - if [ ! -z "$default_tagged_resource" ]; then - read -r $3 <<< $default_tagged_resource + if [ ! -z "$DEFAULT_TAGGED_RESOURCE" ]; then + read -r $3 <<< $DEFAULT_TAGGED_RESOURCE else - echo ${option_keys[0]} - read -r $3 <<< ${option_keys[0]} + read -r $3 <<< ${OPTION_KEYS[0]} fi - return 0 - elif [ ${#option_keys[@]} -gt 0 ]; then + elif [ ${#OPTION_KEYS[@]} -gt 0 ]; then local_echo "$1" selectedValue="" - select option in ${option_values[@]}; do + select option in ${OPTION_VALUES[@]}; do selectedValue=$option - break + break done # workaround cant access option_keys from within select read -r $3 <<< $(echo $selectedValue | sed 's/.*(\(.*\)).*/\1/') - return 0 + else read_input_normal "$1" "$2" $3 $4 - return 0 fi else read_input_normal "$1" "$2" $3 $4 fi + + unset OPTION_KEYS + unset OPTION_VALUES + unset RESOURCE_MAP } function read_input_normal(){ @@ -97,7 +74,7 @@ function require_variable(){ # if required variable value is empty if [ -z "${!2}" ]; then # if force is enabled - if [ "$force" = true ] && [ -z "$7" ]; then + if [ "$force" = true ] && [ ${#RESOURCE_MAP[@]} -eq 0 ]; then # if variable is optional if [ "$5" == "true" ]; then # variable should be empty @@ -112,12 +89,12 @@ function require_variable(){ # if force not enabled or filter is set # if variable value is optional, then value of "" is possible if [ "$5" == "true" ]; then - require_input "$4" "$3" $2 $6 $7 + require_input "$4" "$3" $2 $6 else # if variable value is not optional, repeat until value is set for variable while [[ -z "${!2}" ]] do - require_input "$4" "$3" $2 $6 $7 + require_input "$4" "$3" $2 $6 done fi fi @@ -128,6 +105,61 @@ function require_variable(){ fi } + +function fill_resource_map_with_resources_of_type(){ + declare -a RESOURCE_ARRAY + + if [ "$1" == "ec2:launch-template" ]; then + RESOURCE_ARRAY=($(get_launch_templates)) + else + RESOURCE_ARRAY=($(get_array_with_resource_of_type $1)) + fi + + NUMBER_OF_TAGGED_RESOURCES=0 + DEFAULT_TAGGED_RESOURCE="" + local o=0 + declare -A RESOURCE_MAP + + for resource in "${RESOURCE_ARRAY[@]}"; do + local id="" + + if [ "$1" == "ec2:launch-template" ]; then + id=$(echo "$lt" | jq -c ".LaunchTemplateId" -r | sanitize) + tmp_name=$(echo "$lt" | jq -c ".LaunchTemplateName" -r | sanitize) + else + id=$(echo $resource | jq -c ".ResourceARN" -r | sanitize) + tmp_name=$(echo $resource | jq -c ".Tags[] | select(.Key==\"Name\") | .Value" -r | sanitize) + fi + + local name=${tmp_name:-"Unnamed"} + local tagged=$(echo $resource | jq -c ".Tags[] | select(.Key==\"AutoDiscover\") | .Value" -r | sanitize) + local display_name="$name ($id)" + + + OPTION_KEYS[$o]=$id + + if [ ! -z "$tagged" ] && [ "$tagged" == "true" ] || [ "$tagged" == "True" ]; then + DEFAULT_TAGGED_RESOURCE=$id + option_value=$(highlight $display_name) + ((NUMBER_OF_TAGGED_RESOURCES++)) + else + tagged="false" + option_value=$display_name + fi + + OPTION_VALUES[$o]=$option_value + ((o++)) + + RESOURCE_MAP[$id]="$name,$tagged" + done +} + +function highlight(){ + local highlight_start=$(tput setaf 3) + local reset=$(tput sgr0) + echo $highlight_start$1$reset +} + # ----------------------------------------------------------- # Workaround: use stderr stream for console output # @param $1 message @@ -136,56 +168,7 @@ function local_echo(){ echo "$@" >&2 } -function update_resources(){ - local resources_file=./lib/resources-$region.sh - > $resources_file - - OLD_RESOURCE_JSON=$RESOURCE_JSON - typeset -p OLD_RESOURCE_JSON >> $resources_file - - OLD_LAUNCH_TEMPLATE_JSON=$LAUNCH_TEMPLATE_JSON - typeset -p OLD_LAUNCH_TEMPLATE_JSON >> $resources_file - - RESOURCES_ARRAY=($(get_resources)) - LAUNCH_TEMPLATES_ARRAY=($(get_launch_templates)) - - declare -A RESOURCE_MAP - - for resource in ${RESOURCES_ARRAY[@]}; do - local arn=$(echo $resource | jq -c ".ResourceARN" -r | sanitize) - local name=$(echo $resource | jq -c ".Tags[] | select(.Key==\"Name\") | .Value" -r | sanitize) - local tagged=$(echo $resource | jq -c ".Tags[] | select(.Key==\"AutoDiscover\") | .Value" -r | sanitize) - - if [ ! -z "$tagged" ] && [ "$tagged" == "true" ] || [ "$tagged" == "True" ]; then - tagged="true" - else - tagged="false" - fi - - RESOURCE_MAP[$arn]="${name:-"Unnamed"},$tagged" - done - - for lt in ${LAUNCH_TEMPLATES_ARRAY[@]}; do - local id=$(echo $lt | jq -c ".LaunchTemplateId" -r | sanitize) - local name=$(echo $lt | jq -c ".LaunchTemplateName" -r | sanitize) - RESOURCE_MAP[$id]="${name:-"Unnamed"},false" - done - - typeset -p RESOURCE_MAP >> $resources_file -} - function init_resources(){ - local_echo "Checking if aws resources were added or removed in region $region since the last time..." - RESOURCE_JSON=$(get_resources) - LAUNCH_TEMPLATE_JSON=$(get_launch_templates) - - if [ "$RESOURCE_JSON" != "$OLD_RESOURCE_JSON" ] || [ "$LAUNCH_TEMPLATE_JSON" != "$OLD_LAUNCH_TEMPLATE_JSON" ] ; then - local_echo "Updating aws resources..." - update_resources - else - local_echo "Stored aws resources are up to date." - fi - if ! is_exists ~/.aws-automation/config-$region; then local_echo "Creating ~/.aws-automation/config-$region..." create_region_configuration diff --git a/configuration/aws-automation/lib/require_variables.sh b/configuration/aws-automation/lib/require_variables.sh index 3e06a0be5aa..36d157d5713 100644 --- a/configuration/aws-automation/lib/require_variables.sh +++ b/configuration/aws-automation/lib/require_variables.sh @@ -11,7 +11,7 @@ image_ask_message="Please select an image to use: " instance_ask_message="Please enter an instance to use: " -event_name_ask_message="Please enter an event name (leave blank to skip event creation):" +event_name_ask_message="Please enter an event name (leave blank to skip event creation): " instance_security_group_ask_message="Please select the security group for the instance: " load_balancer_ask_message="Please select or enter the load balancer dns name: " region_ask_message="Please enter the region you want to use (e.g. eu-west-2): " @@ -49,11 +49,13 @@ NOT_A_PARAMETER="" # ----------------------------------------------------------- function require_launch_template(){ - require_variable "$launch_template_param" launch_template "$NO_DEFAULT_VALUE" "$launch_tempate_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidLaunchTemplateIdRegex + fill_resource_map_with_resources_of_type "ec2:launch-template" + require_variable "$launch_template_param" launch_template "$NO_DEFAULT_VALUE" "$launch_tempate_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" } function require_image(){ - require_variable "$image_param" image "$NO_DEFAULT_VALUE" "$image_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidImageARNRegex + fill_resource_map_with_resources_of_type "ec2:image" + require_variable "$image_param" image "$NO_DEFAULT_VALUE" "$image_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" } function require_event_name(){ @@ -61,15 +63,18 @@ function require_event_name(){ } function require_instance_security_group(){ - require_variable "$security_group_param" instance_security_group "$NO_DEFAULT_VALUE" "$instance_security_group_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidSecurityGroupARNRegex + fill_resource_map_with_resources_of_type "ec2:security-group" + require_variable "$security_group_param" instance_security_group "$NO_DEFAULT_VALUE" "$instance_security_group_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" } function require_load_balancer(){ + fill_resource_map_with_resources_of_type "elasticloadbalancing:loadbalancer" require_variable "$load_balancer_param" load_balancer "$NO_DEFAULT_VALUE" "$load_balancer_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidLoadBalancerARNRegex } function require_instance(){ - require_variable "$instance_param" instance "$NO_DEFAULT_VALUE" "$instance_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidInstanceARNRegex + fill_resource_map_with_resources_of_type "ec2:instance" + require_variable "$instance_param" instance "$NO_DEFAULT_VALUE" "$instance_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" } function require_region(){ @@ -106,14 +111,14 @@ function require_user_username(){ } function require_mongodb_port(){ - if [ "$region" != "eu-west-1 "]; then - require_variable "$mongodb_port_param" mongodb_port "$default_mongodb_port" "$mongodb_port_ask_message" "$IS_OPTIONAL" "$HIDE_INPUT" + if [ "$region" != "eu-west-1" ]; then + require_variable "$mongodb_port_param" mongodb_port "$default_mongodb_port" "$mongodb_port_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" fi } function require_mongodb_host(){ - if [ "$region" != "eu-west-1 "]; then - require_variable "$mongodb_host_param" mongodb_host "$default_mongodb_hostd" "$mongodb_host_ask_message" "$IS_OPTIONAL" "$HIDE_INPUT" + if [ "$region" != "eu-west-1" ]; then + require_variable "$mongodb_host_param" mongodb_host "$default_mongodb_host" "$mongodb_host_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" fi } @@ -126,7 +131,8 @@ function require_ssh_user(){ } function require_super_instance(){ - require_variable "$super_instance_param" super_instance "$NO_DEFAULT_VALUE" "$super_instance_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" $ValidInstanceARNRegex + fill_resource_map_with_resources_of_type "ec2:instance" + require_variable "$super_instance_param" super_instance "$NO_DEFAULT_VALUE" "$super_instance_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" } function require_description(){ diff --git a/configuration/aws-automation/lib/resources-eu-west-1.sh b/configuration/aws-automation/lib/resources-eu-west-1.sh deleted file mode 100644 index 36c13228543..00000000000 --- a/configuration/aws-automation/lib/resources-eu-west-1.sh +++ /dev/null @@ -1,233 +0,0 @@ -declare -- OLD_RESOURCE_JSON="{\"ResourceARN\":\"arn:aws:acm:eu-west-1:017363970217:certificate/67a1515a-81be-472d-9459-85746d030564\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"},{\"Value\":\"sapsailing.com-2017\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-00a2821fdb081a970\",\"Tags\":[{\"Value\":\"SL ESS Live 2017 Replica\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0110111df4f4fbcc0\",\"Tags\":[{\"Value\":\"Windows 2016 Server BI Data Services\",\"Key\":\"Name\"},{\"Value\":\"Windows 2016 Server BI\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-01752541870c151a2\",\"Tags\":[{\"Value\":\"Tennis Analytics Apps\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-01a539e83e4d59116\",\"Tags\":[{\"Value\":\"SL Training Server 2018\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-01d6bb11c5daadfe9\",\"Tags\":[{\"Value\":\"SL North Stream Race 2017\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-01d6f839a29520c72\",\"Tags\":[{\"Value\":\"SL Swedish Sailing League 2017 - Master\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-026f7d4c33ae3b19a\",\"Tags\":[{\"Value\":\"SL Dutch Federation\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-036c326bcbcaab529\",\"Tags\":[{\"Value\":\"Tennis Analytics Dev\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-03a8b3590a56e82cd\",\"Tags\":[{\"Value\":\"SL Team Phoenix\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0503f807bf6b47fbc\",\"Tags\":[{\"Value\":\"SL Norwegian Sailing Server NOR\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-05ff69c296996a4b5\",\"Tags\":[{\"Value\":\"SL Archive\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-068d60d70c663d2e7\",\"Tags\":[{\"Value\":\"SL ESS Live 2017\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0706b5f9a43f130cf\",\"Tags\":[{\"Value\":\"Webserver\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-07344e3c868f46f85\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"},{\"Value\":\"SL Multi-Instance Sailling Server\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"},{\"Value\":\"sailing\",\"Key\":\"ssh_user\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0892121f96c25b489\",\"Tags\":[{\"Value\":\"SL Miami Fix\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-08abc0ee7fe8f2d58\",\"Tags\":[{\"Value\":\"SL WCS-2018 API-Test\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-09627864f6645d0b4\",\"Tags\":[{\"Value\":\"Tennis Analytics TPC\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0c3db13c399a58408\",\"Tags\":[{\"Value\":\"Webserver (old)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0e5a34de124bb7e9b\",\"Tags\":[{\"Value\":\"SL Archive (Failover)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0e723e53a8bf28b48\",\"Tags\":[{\"Value\":\"SL Training Server 2018 Jan\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0f1d2b7ac8425c4ff\",\"Tags\":[{\"Value\":\"Tennis Media Analytics\",\"Key\":\"Name\"},{\"Value\":\"Tennis\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0f251a0a373958f92\",\"Tags\":[{\"Value\":\"SL permission-vertical test\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0f612e0e60bb33081\",\"Tags\":[{\"Value\":\"Tennis OpenCV\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-0f828a4e\",\"Tags\":[{\"Value\":\"Tennis Playerzone Old\",\"Key\":\"Name\"},{\"Value\":\"Tennis\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-34d3f399\",\"Tags\":[{\"Value\":\"SL Large Load Test\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-490bd50a\",\"Tags\":[{\"Value\":\"KW/TW Livecenter\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-4a0b44ae\",\"Tags\":[{\"Value\":\"Jens Rommel\",\"Key\":\"Instance created by\"},{\"Value\":\"LoadRunner Master (Windows Server 2012 R2)\",\"Key\":\"Name\"},{\"Value\":\"LoadRunner Master (Windows Server 2012 R2)\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-4bd1100b\",\"Tags\":[{\"Value\":\"Bundesliga-Livecenter (Deutsch, D�nisch)\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-654f8825\",\"Tags\":[{\"Value\":\"Webserver Test\",\"Key\":\"Name\"},{\"Value\":\"Webserver Test\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-703b9c32\",\"Tags\":[{\"Value\":\"SL Manyplayers\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-884e016c\",\"Tags\":[{\"Value\":\"Jens Rommel\",\"Key\":\"Instance created by\"},{\"Value\":\"LoadRunner Slave 1 (Windows Server 2012 R2)\",\"Key\":\"Name\"},{\"Value\":\"LoadRunner Slave 1\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-9cf2c416\",\"Tags\":[{\"Value\":\"Tennis WTA BOBJ Server II\",\"Key\":\"Name\"},{\"Value\":\"Tennis\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-9ded76dd\",\"Tags\":[{\"Value\":\"SL Load Test Server\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-b7be5cf7\",\"Tags\":[{\"Value\":\"US_Sailing_Ng\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-b8e69430\",\"Tags\":[{\"Value\":\"VPN Gateway zone 1c\",\"Key\":\"Name\"},{\"Value\":\"VPN Gateway zone 1c\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-ba191af7\",\"Tags\":[{\"Value\":\"DB & Messaging\",\"Key\":\"Name\"},{\"Value\":\"DB & Messaging\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-c3de3e83\",\"Tags\":[{\"Value\":\"Worldcup App (GMR)\",\"Key\":\"Name\"},{\"Value\":\"Worldcup App (GMR)\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-cb5d9b8b\",\"Tags\":[{\"Value\":\"Backup\",\"Key\":\"Name\"},{\"Value\":\"Backup\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-ec1c77ac\",\"Tags\":[{\"Value\":\"US Sailing SP2\",\"Key\":\"Name\"},{\"Value\":\"Sailing\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-f0d22d7d\",\"Tags\":[{\"Value\":\"MatLab Pairinglist\",\"Key\":\"Name\"},{\"Value\":\"MatLab Pairinglist\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:instance/i-fbd6181f\",\"Tags\":[{\"Value\":\"Build/Test/Dev\",\"Key\":\"Name\"},{\"Value\":\"test\",\"Key\":\"Property\"},{\"Value\":\"test\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:internet-gateway/igw-c26f75a0\",\"Tags\":[{\"Value\":\"368321020290\",\"Key\":\"AWSServiceAccount\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:network-interface/eni-51e2443a\",\"Tags\":[{\"Value\":\"Archive\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:network-interface/eni-9ee73cf5\",\"Tags\":[{\"Value\":\"Webserver\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:network-interface/eni-b409aedf\",\"Tags\":[{\"Value\":\"Database\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:route-table/rtb-d52fd9b0\",\"Tags\":[{\"Value\":\"368321020290\",\"Key\":\"AWSServiceAccount\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:route-table/rtb-e3b34788\",\"Tags\":[{\"Value\":\"Default + VPN\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:security-group/sg-61f33a04\",\"Tags\":[{\"Value\":\"368321020290\",\"Key\":\"AWSServiceAccount\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:security-group/sg-eaf31e85\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-009699c5a7684b82c\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.4 /var/log\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-028f73e318dfb8c54\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.4 root\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-02a7afe8af15fbfe1\",\"Tags\":[{\"Value\":\"Tennis Analytics 1.2\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-02b2726c7a9c4458f\",\"Tags\":[{\"Value\":\"DB&Messaging Backup MongoDB\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-03c3d06744811cf22\",\"Tags\":[{\"Value\":\"SL Multi-Instance Snapshot System\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-052f5c308d7193187\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.4 Swap\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-054d091337dea1196\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.3 /home\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-057fcde719cbd2de4\",\"Tags\":[{\"Value\":\"Tennis Analytics 2.2 System\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0646aa0045525e45b\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.3 /var/log\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-06bda4ed\",\"Tags\":[{\"Value\":\"DB&Messaging Backup Root\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-083452e5\",\"Tags\":[{\"Value\":\"BOBJ Server\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-085ad729a2d2c3292\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.3 /var/www/static\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0873c7c704d96500e\",\"Tags\":[{\"Value\":\"AMI Analytics HVM 1.62 Swap\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-08ac2044875b8e7e5\",\"Tags\":[{\"Value\":\"Tennis Analytics 1.2\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-08cf7f9f5b240dbe6\",\"Tags\":[{\"Value\":\"Tennis Analytics 1.2\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0a93d637f90e0e23e\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.3 Root\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0aa8ad8f291a03c7b\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.4 /var/www/static\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0b4ce6ef\",\"Tags\":[{\"Value\":\"Webserver Logs2 2014-03-21\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0c43c5ddcadc79ea2\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.3 /var/log/old\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0c6fc4ecccd8d65a0\",\"Tags\":[{\"Value\":\"Tennis Analytics 2.2 Swap\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0c9b81fc83c60cfc8\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.3 Swap\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0cdcd361f491319bb\",\"Tags\":[{\"Value\":\"Tennis Analytics 2.2 Home\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0d431501fe9505370\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.4 /var/log/old\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0d49e3e9\",\"Tags\":[{\"Value\":\"Webserver Home2 2014-03-21\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0e099e4eefdf7331a\",\"Tags\":[{\"Value\":\"AMI Analytics HVM 1.62 Sailing\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0f8679a1c8e881d49\",\"Tags\":[{\"Value\":\"SL Multi-Instance Snapshot Swap\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0fdcc3a08136fe2a0\",\"Tags\":[{\"Value\":\"AMI Analytics HVM 1.62 System\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0ff3cdbb3b7113b40\",\"Tags\":[{\"Value\":\"Sailing Webserver 1.4 /home\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0ff87145116eb4182\",\"Tags\":[{\"Value\":\"SL Multi-Instance Snapshot Sailing\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-14269b38\",\"Tags\":[{\"Value\":\"LoadRunner Slave v1.0 Files\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-14b2ab72\",\"Tags\":[{\"Value\":\"Graylog Document\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-158d0834\",\"Tags\":[{\"Value\":\"AMI Browser Test 1.1\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-469a5057\",\"Tags\":[{\"Value\":\"Backup MySQL\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-46dbdbac\",\"Tags\":[{\"Value\":\"DB&Messaging Backup MongoDB\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-5443e9b0\",\"Tags\":[{\"Value\":\"Webserver Old Logs2 2014-03-21\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-5693b37d\",\"Tags\":[{\"Value\":\"LoadRunner Slave v1.0 System\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-6a45d942\",\"Tags\":[{\"Value\":\"DB&Messaging Backup RabbitMQ\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-70b2a35f\",\"Tags\":[{\"Value\":\"LoadRunner Master v1.0 System\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8123f670\",\"Tags\":[{\"Value\":\"AMI Build/Test 1.2 root\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8223f673\",\"Tags\":[{\"Value\":\"AMI Build/Test 1.2 /tmp\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8723f676\",\"Tags\":[{\"Value\":\"AMI Build/Test 1.2 /home/sailing\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8bec336d\",\"Tags\":[{\"Value\":\"AMI Centos 6 Basic 1.1 System\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8cc461a3\",\"Tags\":[{\"Value\":\"DB&Messaging Backup MySQL\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-94564171\",\"Tags\":[{\"Value\":\"Backup Webserver Home\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-981d82aa\",\"Tags\":[{\"Value\":\"Graylog Monitoring\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-9b23f66a\",\"Tags\":[{\"Value\":\"AMI Build/Test 1.2 swap\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-9b5d0f7d\",\"Tags\":[{\"Value\":\"Backup Bundesliga Live Center system\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-9c23f66d\",\"Tags\":[{\"Value\":\"AMI Build/Test 1.2 /home/hudson\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-a9b77943\",\"Tags\":[{\"Value\":\"DB&Messaging Backup MongoArchive\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-b03cab57\",\"Tags\":[{\"Value\":\"Backup: Tennis Playerzone\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-bd30fbac\",\"Tags\":[{\"Value\":\"Backup MongoDB\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-bdc5c658\",\"Tags\":[{\"Value\":\"Backup Hudson\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-d9d048f5\",\"Tags\":[{\"Value\":\"Load Test Server 1.2 Home\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-dcdba1f5\",\"Tags\":[{\"Value\":\"LoadRunner Master v1.0 Files\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-de371d3c\",\"Tags\":[{\"Value\":\"Backup Web Home\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-ef667e05\",\"Tags\":[{\"Value\":\"DB&Messaging Backup Swap\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f40f4007\",\"Tags\":[{\"Value\":\"Load Test Server 1.2 Swap\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f47b8adc\",\"Tags\":[{\"Value\":\"DB&Messaging Backup MongoBackup\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f84ee41c\",\"Tags\":[{\"Value\":\"Webserver System2 2014-03-21\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f869471f\",\"Tags\":[{\"Value\":\"AMI Microsite\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f90f400a\",\"Tags\":[{\"Value\":\"Load Test Server 1.2 System\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f9e41fe8\",\"Tags\":[{\"Value\":\"10GB Swap Partition\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:subnet/subnet-6b929d2d\",\"Tags\":[{\"Value\":\"368321020290\",\"Key\":\"AWSServiceAccount\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:subnet/subnet-9d9e53f8\",\"Tags\":[{\"Value\":\"368321020290\",\"Key\":\"AWSServiceAccount\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-001d5f147eda96c46\",\"Tags\":[{\"Value\":\"Tennis Analytics Dev\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-004a9d3d5104fe760\",\"Tags\":[{\"Value\":\"Tennis Analytics Dev\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-008bcc8ee32283e32\",\"Tags\":[{\"Value\":\"SL Team Phoenix\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-00ab269e71af7715a\",\"Tags\":[{\"Value\":\"SL Swedish Sailing League 2017 - Master (New)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-00c664f9e47c4776b\",\"Tags\":[{\"Value\":\"SL Swedish Sailing League 2017 - Master (New)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-00dfa77246c7a5890\",\"Tags\":[{\"Value\":\"SL Miami Fix\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-00f1e25419921e6ac\",\"Tags\":[{\"Value\":\"SL Training Server 2018 Jan\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-01c6ebcd9fd2846e9\",\"Tags\":[{\"Value\":\"SL WCS-2018 API-Test\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-01d09ca32815f6c21\",\"Tags\":[{\"Value\":\"Multi-Instance /home/sailing (big)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0202f1418ce51deb9\",\"Tags\":[{\"Value\":\"SL ESS Live 2017 (New)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-02200f1513af2c41a\",\"Tags\":[{\"Value\":\"Tennis Analytics Dev\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0225316f484b16050\",\"Tags\":[{\"Value\":\"SL Archive New\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-022f53a62bf86ef46\",\"Tags\":[{\"Value\":\"Tennis Analytics Apps\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-02d1c07486636f4c6\",\"Tags\":[{\"Value\":\"Tennis Analytics TPC\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-030ad5b69c417e45f\",\"Tags\":[{\"Value\":\"SL Dutch Federation (New)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0354b2e673510c9d2\",\"Tags\":[{\"Value\":\"Webserver (static)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0377ec159288797a7\",\"Tags\":[{\"Value\":\"SL ESS Live 2017 (New)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-03c383dcc5facebb9\",\"Tags\":[{\"Value\":\"SL North Stream Race 2017\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-042c3dee3611a1ad8\",\"Tags\":[{\"Value\":\"Webserver New Created From Scratch (/home)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-04a59c2f7a5e91388\",\"Tags\":[{\"Value\":\"Webserver (home)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-04ad93b4d6d65cd6e\",\"Tags\":[{\"Value\":\"SL Training Server 2018\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-04bc8c8cad9ac3979\",\"Tags\":[{\"Value\":\"SL North Stream Race 2017\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-051e9f2245f4a0a6f\",\"Tags\":[{\"Value\":\"SL Norwegian Sailing Server NOR (New)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-05298cc3198ffd6ca\",\"Tags\":[{\"Value\":\"SL Norwegian Sailing Server NOR (New)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-053f2fb838422bc28\",\"Tags\":[{\"Value\":\"More Swap Multi-Instance\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-055864df0a18ba3b0\",\"Tags\":[{\"Value\":\"SL Archive (New)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-05ba9410108f44d86\",\"Tags\":[{\"Value\":\"Tennis Media Analytics\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0649642fe59e3a067\",\"Tags\":[{\"Value\":\"Webserver (root)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-066d8544fabd272ea\",\"Tags\":[{\"Value\":\"SL Training Server 2018\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-072408877cbb38e91\",\"Tags\":[{\"Value\":\"Webserver (/var/log)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-077e55fc0065bb6ce\",\"Tags\":[{\"Value\":\"Tennis Analytics TPC\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-084c0518d5be3e9ea\",\"Tags\":[{\"Value\":\"SL Training Server 2018 Jan\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-08d50a04fe3e8a5ea\",\"Tags\":[{\"Value\":\"SL Archive New\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-092801e92ba799ec0\",\"Tags\":[{\"Value\":\"SL ESS Live 2017\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-092d75a29315b7821\",\"Tags\":[{\"Value\":\"SL Training Server 2018 Jan\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-09326b2006cff73e4\",\"Tags\":[{\"Value\":\"Webserver New From-Scratch (root)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0974513f701e9ed7a\",\"Tags\":[{\"Value\":\"Tennis Media Analytics\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0a278f9636effd2d6\",\"Tags\":[{\"Value\":\"SL ESS Live 2017\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0acd6646f84dfe3f2\",\"Tags\":[{\"Value\":\"SL Dutch Federation (New)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0aceafdcabcedc856\",\"Tags\":[{\"Value\":\"Multi-Instance Root /\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0b0510782dc796f7d\",\"Tags\":[{\"Value\":\"SL Team Phoenix\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0b14982de0e7cec23\",\"Tags\":[{\"Value\":\"Tennis Media Analytics\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0b6063f804124d46c\",\"Tags\":[{\"Value\":\"SL Miami Fix\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0b644808acff1e08c\",\"Tags\":[{\"Value\":\"SL Team Phoenix\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0bfdd8a92bc2162d2\",\"Tags\":[{\"Value\":\"Webserver (swap)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c4a8aa74e3cc78ca\",\"Tags\":[{\"Value\":\"SL Swedish Sailing League 2017 - Master (New)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c6f29a8328fc984a\",\"Tags\":[{\"Value\":\"Tennis Analytics Apps\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c721fefa362d0019\",\"Tags\":[{\"Value\":\"SL permission-vertical test\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c7a3279437e12ad2\",\"Tags\":[{\"Value\":\"SL Miami Fix\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c846889bfecbddf5\",\"Tags\":[{\"Value\":\"SL Archive New\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cae90298869a7f9f\",\"Tags\":[{\"Value\":\"SL Training Server 2018\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cdc4013a4620ceba\",\"Tags\":[{\"Value\":\"SL permission-vertical test\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cdc6359896fb3bf2\",\"Tags\":[{\"Value\":\"SL permission-vertical test\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cebdc9912dabf32f\",\"Tags\":[{\"Value\":\"Tennis Analytics Apps\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cee9346ff22d9c05\",\"Tags\":[{\"Value\":\"SL Norwegian Sailing Server NOR (New)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0d009e4aab7758ab4\",\"Tags\":[{\"Value\":\"SL ESS Live 2017\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0d23fcefda7c718a1\",\"Tags\":[{\"Value\":\"Webserver New From Scratch (/var/log)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0d4b424b970833eac\",\"Tags\":[{\"Value\":\"Tennis OpenCV\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0d6f1de8b060ed741\",\"Tags\":[{\"Value\":\"Swap Multi-Instance\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0e1b0958f53ed1e61\",\"Tags\":[{\"Value\":\"Tennis Analytics TPC\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0e22b130069f81047\",\"Tags\":[{\"Value\":\"SL ESS Live 2017 (New)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0e4735a57162c17e1\",\"Tags\":[{\"Value\":\"SL Archive (New)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0e971c0f2f0d4a88e\",\"Tags\":[{\"Value\":\"SL WCS-2018 API-Test\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0ea498e61e9c5b3f6\",\"Tags\":[{\"Value\":\"SL Archive (New)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0ea8c3f4cf2a7e27f\",\"Tags\":[{\"Value\":\"SL North Stream Race 2017\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0f5559a690de8e0c0\",\"Tags\":[{\"Value\":\"Webserver New From Scratch (Swap)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0f5e306d4bf88d26a\",\"Tags\":[{\"Value\":\"SL WCS-2018 API-Test\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0f83caaada010458f\",\"Tags\":[{\"Value\":\"SL Dutch Federation (New)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-0fbdac9db3818741e\",\"Tags\":[{\"Value\":\"Webserver (/var/log/old)\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-1d910c31\",\"Tags\":[{\"Value\":\"DB Mongo\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-2eb15d38\",\"Tags\":[{\"Value\":\"DB Mongo Fast\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-6c0ab56b\",\"Tags\":[{\"Value\":\"Backup\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-715cec66\",\"Tags\":[{\"Value\":\"Load Test /home/sailing\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-7ed3622b\",\"Tags\":[{\"Value\":\"DB Swap\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-9d970ab1\",\"Tags\":[{\"Value\":\"DB MySQL\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-a4673256\",\"Tags\":[{\"Value\":\"Delete after 20160624\",\"Key\":\"GlobalIT\"},{\"Value\":\"Security incident 20160610-1\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:volume/vol-e6a72dca\",\"Tags\":[{\"Value\":\"DB Messaging\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-1:017363970217:vpc/vpc-72709817\",\"Tags\":[{\"Value\":\"368321020290\",\"Key\":\"AWSServiceAccount\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:loadbalancer/IPv6Test\",\"Tags\":[{\"Value\":\"test\",\"Key\":\"function\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:loadbalancer/app/Sailing-eu-west-1/32b89dbfe7f75097\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-dutch-federation/f4c04592e16a8bda\",\"Tags\":[{\"Value\":\"Dutch Federation first event probably North See Regatta\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-ess2017/b83b30fe9f0bc1e0\",\"Tags\":[{\"Value\":\"ESS 2017\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-nor/e6e65bf997a5f813\",\"Tags\":[{\"Value\":\"Norwegian Sailing Server NOR\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-nordstreamrace2017/3f1996ad6af61cb3\",\"Tags\":[{\"Value\":\"North Stream Race 2017\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-nsr2017/7bdb7ddebd739826\",\"Tags\":[{\"Value\":\"Dutch Federation first event probably North See Regatta\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-phoenix/1f7ca69ef33fc1d7\",\"Tags\":[{\"Value\":\"Team Phoenix TP52\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-49er/d7ae037012205975\",\"Tags\":[{\"Value\":\"49er Analytics Instance\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-abeam-training/5f2e5e320ed3fff6\",\"Tags\":[{\"Value\":\"Abeam Japanese Partner training system\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-asvia/2066645306f15a03\",\"Tags\":[{\"Value\":\"Akademischer Seglerverein Aachen Axel Schmidt axel.sebastian.schmidt@rwth-aachen.de\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-byc/a8b3957d13458a8e\",\"Tags\":[{\"Value\":\"Bayerischer Yacht-Club BYC\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-cyc/6be1e3a5e40e67da\",\"Tags\":[{\"Value\":\"Carmel Sailing Society\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-extreme-team/3c453cc0f5443c0e\",\"Tags\":[{\"Value\":\"SAP Extreme Sailing Team Training Server\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-hnv/207591b5416599b0\",\"Tags\":[{\"Value\":\"Heinz Nixdorf Verein zur Foerderung des Segelsports eV HNV\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-irishdbscdw3/594f45e66c8fc271\",\"Tags\":[{\"Value\":\"IRISHDBSCDW3\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-isr/aea6f90b7ae78bc1\",\"Tags\":[{\"Value\":\"Israeli Sailing Association\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-jojopolgar/5878d43f0fda676b\",\"Tags\":[{\"Value\":\"Jojos Nacra Campaign jpolgar@aol.com\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-kbsc/407673bd212b94a4\",\"Tags\":[{\"Value\":\"Keppel Bay Sailing Club KBSC\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-kjscs/cb882702766009eb\",\"Tags\":[{\"Value\":\"Keith Johnson Softalk Computer Services Keith Johnson keith@softalk.co.uk\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ksss/919ade259198a538\",\"Tags\":[{\"Value\":\"KSSS Royal Swedish Sailing Club Stefan Rahm stefan@ksss.se\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-lyc/61f7aaa7652bbba6\",\"Tags\":[{\"Value\":\"Luebecker Yacht-Club LYC\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-nor/f62428bb34ce7302\",\"Tags\":[{\"Value\":\"Norwegian Sailing Federation\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-rdsailing/1b816b46905054f3\",\"Tags\":[{\"Value\":\"Robert Davis Sailing Canadian Sailing Team Robert Davis robertdavissailing@outlook.com\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-sailcanada/5c1153c3623686fa\",\"Tags\":[{\"Value\":\"SailCanada Canadian Sailing Federation Ken Dool ken@sailing.ca\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-sailingacademy/9f6609598449e10d\",\"Tags\":[{\"Value\":\"Sailing Academy South Africa instructor@sailingacademy.co.za Neil Ashton\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-sailtracks/bbd005556242b2eb\",\"Tags\":[{\"Value\":\"Sailtracks Test Server\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-segelzentrum/cb8ba067fa0ce04e\",\"Tags\":[{\"Value\":\"Segelzentrum der Universitaet Kiel Hamann Jan jan.hamann@email.uni-kiel.de\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-singaporesailing/7ee93a3f844d3cc2\",\"Tags\":[{\"Value\":\"SingaporeSailing Lim Han Ee han@singaporesailing.org.sg\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-sitges/693ee4099b09caec\",\"Tags\":[{\"Value\":\"Club Nautic de Sitges pa.ubach@gmail.com on behalf of Pere-Andreu Ubach pa_ubach@alum.mit.edu\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-srn/4e3dba3f8e818a0e\",\"Tags\":[{\"Value\":\"Segelvereinigung Rhein-Neckar\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-srv/24e229b240131e94\",\"Tags\":[{\"Value\":\"Seebrucker Regattaverein am Chiemsee SRV\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ssv/d5f7ae73e3417691\",\"Tags\":[{\"Value\":\"Schwartauer Segler-Verein www.ssv-net.de Alexander Probst webmaster@alexprobst.de\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-starlab/26676d215f481a3d\",\"Tags\":[{\"Value\":\"StarLab Fabiano Avancini fabiano.avancini@gmail.com https://www.facebook.com/events/845403545622630/\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-tractractest/f404d9f7d2e32b86\",\"Tags\":[{\"Value\":\"TracTrac Test\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ubilabstest/08f49492434d1829\",\"Tags\":[{\"Value\":\"Ubilabs-Testserver\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ussailing/60bbf4cf62e10ce0\",\"Tags\":[{\"Value\":\"USSailing\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-vsaw/60a137ecab9b8672\",\"Tags\":[{\"Value\":\"VSaW\",\"Key\":\"Description\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ycl/b14c3adf4822f599\",\"Tags\":[{\"Value\":\"Yacht-Club Luzern Arnet Ivo ivo.arnet@itready.net\",\"Key\":\"Description\"}]}" -declare -- OLD_LAUNCH_TEMPLATE_JSON="" -declare -A RESOURCE_MAP=([arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ssv/d5f7ae73e3417691]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-08d50a04fe3e8a5ea]="SL Archive New,false" [arn:aws:ec2:eu-west-1:017363970217:vpc/vpc-72709817]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-1d910c31]="DB Mongo,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8223f673]="AMI Build/Test 1.2 /tmp,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0cdcd361f491319bb]="Tennis Analytics 2.2 Home,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-04a59c2f7a5e91388]="Webserver (home),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-starlab/26676d215f481a3d]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-5443e9b0]="Webserver Old Logs2 2014-03-21,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-07344e3c868f46f85]="SL Multi-Instance Sailling Server,true" [arn:aws:ec2:eu-west-1:017363970217:instance/i-01a539e83e4d59116]="SL Training Server 2018,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-nordstreamrace2017/3f1996ad6af61cb3]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0acd6646f84dfe3f2]="SL Dutch Federation (New),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-092801e92ba799ec0]="SL ESS Live 2017,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-08cf7f9f5b240dbe6]="Tennis Analytics 1.2,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0873c7c704d96500e]="AMI Analytics HVM 1.62 Swap,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-9b23f66a]="AMI Build/Test 1.2 swap,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0d49e3e9]="Webserver Home2 2014-03-21,false" [arn:aws:ec2:eu-west-1:017363970217:security-group/sg-eaf31e85]="Unnamed,true" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0ea8c3f4cf2a7e27f]="SL North Stream Race 2017,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0f251a0a373958f92]="SL permission-vertical test,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0649642fe59e3a067]="Webserver (root),false" [arn:aws:ec2:eu-west-1:017363970217:internet-gateway/igw-c26f75a0]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-46dbdbac]="DB&Messaging Backup MongoDB,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-05ff69c296996a4b5]="SL Archive,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-dutch-federation/f4c04592e16a8bda]="Unnamed,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-sitges/693ee4099b09caec]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-70b2a35f]="LoadRunner Master v1.0 System,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0c9b81fc83c60cfc8]="Sailing Webserver 1.3 Swap,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-06bda4ed]="DB&Messaging Backup Root,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0110111df4f4fbcc0]="Windows 2016 Server BI Data Services,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-08ac2044875b8e7e5]="Tennis Analytics 1.2,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-092d75a29315b7821]="SL Training Server 2018 Jan,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-072408877cbb38e91]="Webserver (/var/log),false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-028f73e318dfb8c54]="Sailing Webserver 1.4 root,false" [arn:aws:ec2:eu-west-1:017363970217:network-interface/eni-b409aedf]="Database,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c6f29a8328fc984a]="Tennis Analytics Apps,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-066d8544fabd272ea]="SL Training Server 2018,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-01c6ebcd9fd2846e9]="SL WCS-2018 API-Test,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ycl/b14c3adf4822f599]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:subnet/subnet-9d9e53f8]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-bd30fbac]="Backup MongoDB,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-057fcde719cbd2de4]="Tennis Analytics 2.2 System,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0f83caaada010458f]="SL Dutch Federation (New),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0ea498e61e9c5b3f6]="SL Archive (New),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cebdc9912dabf32f]="Tennis Analytics Apps,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-c3de3e83]="Worldcup App (GMR),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-09326b2006cff73e4]="Webserver New From-Scratch (root),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ussailing/60bbf4cf62e10ce0]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0ff87145116eb4182]="SL Multi-Instance Snapshot Sailing,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0d431501fe9505370]="Sailing Webserver 1.4 /var/log/old,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-vsaw/60a137ecab9b8672]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0b6063f804124d46c]="SL Miami Fix,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-042c3dee3611a1ad8]="Webserver New Created From Scratch (/home),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-6c0ab56b]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0f5559a690de8e0c0]="Webserver New From Scratch (Swap),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ubilabstest/08f49492434d1829]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-2eb15d38]="DB Mongo Fast,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-ess2017/b83b30fe9f0bc1e0]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0b14982de0e7cec23]="Tennis Media Analytics,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-03c383dcc5facebb9]="SL North Stream Race 2017,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-02d1c07486636f4c6]="Tennis Analytics TPC,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-b7be5cf7]="US_Sailing_Ng,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:loadbalancer/IPv6Test]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-05298cc3198ffd6ca]="SL Norwegian Sailing Server NOR (New),false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-083452e5]="BOBJ Server,false" [arn:aws:acm:eu-west-1:017363970217:certificate/67a1515a-81be-472d-9459-85746d030564]="sapsailing.com-2017,true" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-kbsc/407673bd212b94a4]="Unnamed,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-hnv/207591b5416599b0]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-04bc8c8cad9ac3979]="SL North Stream Race 2017,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-01d09ca32815f6c21]="Multi-Instance /home/sailing (big),false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-dcdba1f5]="LoadRunner Master v1.0 Files,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0a93d637f90e0e23e]="Sailing Webserver 1.3 Root,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-sailtracks/bbd005556242b2eb]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-14b2ab72]="Graylog Document,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-9ded76dd]="SL Load Test Server,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0e723e53a8bf28b48]="SL Training Server 2018 Jan,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-srv/24e229b240131e94]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0354b2e673510c9d2]="Webserver (static),false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0f612e0e60bb33081]="Tennis OpenCV,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f47b8adc]="DB&Messaging Backup MongoBackup,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-884e016c]="LoadRunner Slave 1 (Windows Server 2012 R2),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-jojopolgar/5878d43f0fda676b]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0d6f1de8b060ed741]="Swap Multi-Instance,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cdc6359896fb3bf2]="SL permission-vertical test,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0e1b0958f53ed1e61]="Tennis Analytics TPC,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0503f807bf6b47fbc]="SL Norwegian Sailing Server NOR,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-asvia/2066645306f15a03]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-7ed3622b]="DB Swap,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cae90298869a7f9f]="SL Training Server 2018,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0377ec159288797a7]="SL ESS Live 2017 (New),false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f9e41fe8]="10GB Swap Partition,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-rdsailing/1b816b46905054f3]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0d23fcefda7c718a1]="Webserver New From Scratch (/var/log),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cee9346ff22d9c05]="SL Norwegian Sailing Server NOR (New),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-04ad93b4d6d65cd6e]="SL Training Server 2018,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-05ba9410108f44d86]="Tennis Media Analytics,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-b03cab57]="Backup: Tennis Playerzone,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0ff3cdbb3b7113b40]="Sailing Webserver 1.4 /home,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0b4ce6ef]="Webserver Logs2 2014-03-21,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-01752541870c151a2]="Tennis Analytics Apps,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-d9d048f5]="Load Test Server 1.2 Home,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0f5e306d4bf88d26a]="SL WCS-2018 API-Test,false" [arn:aws:ec2:eu-west-1:017363970217:route-table/rtb-e3b34788]="Default + VPN,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-00dfa77246c7a5890]="SL Miami Fix,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-cb5d9b8b]="Backup,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-09627864f6645d0b4]="Tennis Analytics TPC,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-sailingacademy/9f6609598449e10d]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0225316f484b16050]="SL Archive New,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8bec336d]="AMI Centos 6 Basic 1.1 System,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-9cf2c416]="Tennis WTA BOBJ Server II,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-14269b38]="LoadRunner Slave v1.0 Files,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-isr/aea6f90b7ae78bc1]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-001d5f147eda96c46]="Tennis Analytics Dev,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-5693b37d]="LoadRunner Slave v1.0 System,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0fdcc3a08136fe2a0]="AMI Analytics HVM 1.62 System,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-469a5057]="Backup MySQL,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-34d3f399]="SL Large Load Test,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-a9b77943]="DB&Messaging Backup MongoArchive,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-715cec66]="Load Test /home/sailing,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0e5a34de124bb7e9b]="SL Archive (Failover),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-phoenix/1f7ca69ef33fc1d7]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0f828a4e]="Tennis Playerzone Old,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0e22b130069f81047]="SL ESS Live 2017 (New),false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f84ee41c]="Webserver System2 2014-03-21,false" [arn:aws:ec2:eu-west-1:017363970217:route-table/rtb-d52fd9b0]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0cdc4013a4620ceba]="SL permission-vertical test,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-036c326bcbcaab529]="Tennis Analytics Dev,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-e6a72dca]="DB Messaging,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0706b5f9a43f130cf]="Webserver,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0bfdd8a92bc2162d2]="Webserver (swap),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:loadbalancer/app/Sailing-eu-west-1/32b89dbfe7f75097]="Unnamed,true" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0e971c0f2f0d4a88e]="SL WCS-2018 API-Test,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0c6fc4ecccd8d65a0]="Tennis Analytics 2.2 Swap,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-4bd1100b]="Bundesliga-Livecenter (Deutsch, D�nisch),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-irishdbscdw3/594f45e66c8fc271]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-022f53a62bf86ef46]="Tennis Analytics Apps,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-49er/d7ae037012205975]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0e4735a57162c17e1]="SL Archive (New),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c7a3279437e12ad2]="SL Miami Fix,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-052f5c308d7193187]="Sailing Webserver 1.4 Swap,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f40f4007]="Load Test Server 1.2 Swap,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-703b9c32]="SL Manyplayers,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-a4673256]="Security incident 20160610-1,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0aceafdcabcedc856]="Multi-Instance Root /,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-bdc5c658]="Backup Hudson,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-abeam-training/5f2e5e320ed3fff6]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8123f670]="AMI Build/Test 1.2 root,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-02a7afe8af15fbfe1]="Tennis Analytics 1.2,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-extreme-team/3c453cc0f5443c0e]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0a278f9636effd2d6]="SL ESS Live 2017,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-053f2fb838422bc28]="More Swap Multi-Instance,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-b8e69430]="VPN Gateway zone 1c,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-08abc0ee7fe8f2d58]="SL WCS-2018 API-Test,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-068d60d70c663d2e7]="SL ESS Live 2017,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-077e55fc0065bb6ce]="Tennis Analytics TPC,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-singaporesailing/7ee93a3f844d3cc2]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-084c0518d5be3e9ea]="SL Training Server 2018 Jan,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-02200f1513af2c41a]="Tennis Analytics Dev,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-00f1e25419921e6ac]="SL Training Server 2018 Jan,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0f1d2b7ac8425c4ff]="Tennis Media Analytics,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-9b5d0f7d]="Backup Bundesliga Live Center system,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8cc461a3]="DB&Messaging Backup MySQL,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0d4b424b970833eac]="Tennis OpenCV,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c846889bfecbddf5]="SL Archive New,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-srn/4e3dba3f8e818a0e]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-054d091337dea1196]="Sailing Webserver 1.3 /home,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-051e9f2245f4a0a6f]="SL Norwegian Sailing Server NOR (New),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0d009e4aab7758ab4]="SL ESS Live 2017,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c4a8aa74e3cc78ca]="SL Swedish Sailing League 2017 - Master (New),false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-8723f676]="AMI Build/Test 1.2 /home/sailing,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-6a45d942]="DB&Messaging Backup RabbitMQ,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0b644808acff1e08c]="SL Team Phoenix,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0f8679a1c8e881d49]="SL Multi-Instance Snapshot Swap,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-kjscs/cb882702766009eb]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-02b2726c7a9c4458f]="DB&Messaging Backup MongoDB,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-4a0b44ae]="LoadRunner Master (Windows Server 2012 R2),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-9d970ab1]="DB MySQL,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-ec1c77ac]="US Sailing SP2,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-f0d22d7d]="MatLab Pairinglist,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-055864df0a18ba3b0]="SL Archive (New),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-segelzentrum/cb8ba067fa0ce04e]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-00ab269e71af7715a]="SL Swedish Sailing League 2017 - Master (New),false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-sailcanada/5c1153c3623686fa]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0c43c5ddcadc79ea2]="Sailing Webserver 1.3 /var/log/old,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0646aa0045525e45b]="Sailing Webserver 1.3 /var/log,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-03a8b3590a56e82cd]="SL Team Phoenix,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-01d6f839a29520c72]="SL Swedish Sailing League 2017 - Master,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-008bcc8ee32283e32]="SL Team Phoenix,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-ksss/919ade259198a538]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-009699c5a7684b82c]="Sailing Webserver 1.4 /var/log,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-654f8825]="Webserver Test,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0e099e4eefdf7331a]="AMI Analytics HVM 1.62 Sailing,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-01d6bb11c5daadfe9]="SL North Stream Race 2017,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-026f7d4c33ae3b19a]="SL Dutch Federation,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-490bd50a]="KW/TW Livecenter,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-de371d3c]="Backup Web Home,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0974513f701e9ed7a]="Tennis Media Analytics,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-981d82aa]="Graylog Monitoring,false" [arn:aws:ec2:eu-west-1:017363970217:security-group/sg-61f33a04]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0c3db13c399a58408]="Webserver (old),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0fbdac9db3818741e]="Webserver (/var/log/old),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0202f1418ce51deb9]="SL ESS Live 2017 (New),false" [arn:aws:ec2:eu-west-1:017363970217:subnet/subnet-6b929d2d]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-fbd6181f]="Build/Test/Dev,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-9c23f66d]="AMI Build/Test 1.2 /home/hudson,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-158d0834]="AMI Browser Test 1.1,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-nor/f62428bb34ce7302]="Unnamed,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-lyc/61f7aaa7652bbba6]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f90f400a]="Load Test Server 1.2 System,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-00a2821fdb081a970]="SL ESS Live 2017 Replica,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-cyc/6be1e3a5e40e67da]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-03c3d06744811cf22]="SL Multi-Instance Snapshot System,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-0892121f96c25b489]="SL Miami Fix,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-tractractest/f404d9f7d2e32b86]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-085ad729a2d2c3292]="Sailing Webserver 1.3 /var/www/static,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-94564171]="Backup Webserver Home,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-ef667e05]="DB&Messaging Backup Swap,false" [arn:aws:ec2:eu-west-1:017363970217:instance/i-ba191af7]="DB & Messaging,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-nor/e6e65bf997a5f813]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0c721fefa362d0019]="SL permission-vertical test,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-dedicated-nsr2017/7bdb7ddebd739826]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:network-interface/eni-9ee73cf5]="Webserver,false" [arn:aws:ec2:eu-west-1:017363970217:network-interface/eni-51e2443a]="Archive,false" [arn:aws:elasticloadbalancing:eu-west-1:017363970217:targetgroup/S-shared-byc/a8b3957d13458a8e]="Unnamed,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-00c664f9e47c4776b]="SL Swedish Sailing League 2017 - Master (New),false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-f869471f]="AMI Microsite,false" [arn:aws:ec2:eu-west-1:017363970217:snapshot/snap-0aa8ad8f291a03c7b]="Sailing Webserver 1.4 /var/www/static,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-0b0510782dc796f7d]="SL Team Phoenix,false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-030ad5b69c417e45f]="SL Dutch Federation (New),false" [arn:aws:ec2:eu-west-1:017363970217:volume/vol-004a9d3d5104fe760]="Tennis Analytics Dev,false" ) diff --git a/configuration/aws-automation/lib/resources-eu-west-2.sh b/configuration/aws-automation/lib/resources-eu-west-2.sh deleted file mode 100644 index 8ef9d4034d9..00000000000 --- a/configuration/aws-automation/lib/resources-eu-west-2.sh +++ /dev/null @@ -1,11 +0,0 @@ -declare -- OLD_RESOURCE_JSON="{\"ResourceARN\":\"arn:aws:acm:eu-west-2:017363970217:certificate/d2ae17b0-75ed-4b56-ac12-a80f9e5c493d\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:image/ami-39f3e25d\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:instance/i-096a32ca8c28bedbb\",\"Tags\":[{\"Value\":\"MongoDB\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:instance/i-0d8d0c04dbd6f759f\",\"Tags\":[{\"Value\":\"2018-02-16 14:04:23\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:security-group/sg-74c92d1c\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:security-group/sg-7f0c2916\",\"Tags\":[{\"Value\":\"Database and Messaging\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:security-group/sg-871732ee\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"},{\"Value\":\"appSecurityGroup\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:ec2:eu-west-2:017363970217:security-group/sg-9732d6ff\",\"Tags\":[{\"Value\":\"test\",\"Key\":\"Name\"}]} -{\"ResourceARN\":\"arn:aws:elasticloadbalancing:eu-west-2:017363970217:loadbalancer/app/DummyALB/da70f61a914fc50a\",\"Tags\":[{\"Value\":\"true\",\"Key\":\"AutoDiscover\"}]}" -declare -- OLD_LAUNCH_TEMPLATE_JSON="{\"LatestVersionNumber\":1,\"LaunchTemplateId\":\"lt-03aabd2afb301d6ac\",\"LaunchTemplateName\":\"Replica_20180214_225452\",\"DefaultVersionNumber\":1,\"CreatedBy\":\"arn:aws:iam::017363970217:user/leonradeck\",\"CreateTime\":\"2018-02-14T21:57:52.000Z\"}" -declare -A RESOURCE_MAP=([arn:aws:ec2:eu-west-2:017363970217:instance/i-096a32ca8c28bedbb]="MongoDB,false" [arn:aws:ec2:eu-west-2:017363970217:instance/i-0d8d0c04dbd6f759f]="2018-02-16 14:04:23,false" [arn:aws:acm:eu-west-2:017363970217:certificate/d2ae17b0-75ed-4b56-ac12-a80f9e5c493d]="Unnamed,true" [arn:aws:elasticloadbalancing:eu-west-2:017363970217:loadbalancer/app/DummyALB/da70f61a914fc50a]="Unnamed,true" [arn:aws:ec2:eu-west-2:017363970217:image/ami-39f3e25d]="Unnamed,true" [arn:aws:ec2:eu-west-2:017363970217:security-group/sg-74c92d1c]="Unnamed,true" [arn:aws:ec2:eu-west-2:017363970217:security-group/sg-871732ee]="appSecurityGroup,true" [arn:aws:ec2:eu-west-2:017363970217:security-group/sg-9732d6ff]="test,false" [lt-03aabd2afb301d6ac]="Replica_20180214_225452,false" [arn:aws:ec2:eu-west-2:017363970217:security-group/sg-7f0c2916]="Database and Messaging,false" ) diff --git a/configuration/aws-automation/lib/scenario_instance.sh b/configuration/aws-automation/lib/scenario_instance.sh index 1806098c882..d136e7fd1b2 100644 --- a/configuration/aws-automation/lib/scenario_instance.sh +++ b/configuration/aws-automation/lib/scenario_instance.sh @@ -43,9 +43,9 @@ function instance_preview(){ local_echo "To be implemented..." seek_confirmation "Do you want to continue?" if is_confirmed; then - break + : else - break + safeExit fi } @@ -65,10 +65,10 @@ function instance_execute() { local port="8888" configure_application $public_dns_name $port $event_name $new_admin_password $user_username $user_pass - append_environment_to_env_sh "live-server" $ssh_user $public_dns_name + append_to_env_sh "MONGODB_HOST=${4:-'/home/sailing/servers/server/env.sh'}" header "Conclusion" - success "Instance should be reachable through $public_dns_name." + success "Instance should be reachable through $public_dns_name:8888." } function build_user_data(){ diff --git a/configuration/aws-automation/lib/scenario_master_instance.sh b/configuration/aws-automation/lib/scenario_master_instance.sh index 130cc3ffe9b..32d7292de98 100644 --- a/configuration/aws-automation/lib/scenario_master_instance.sh +++ b/configuration/aws-automation/lib/scenario_master_instance.sh @@ -21,6 +21,8 @@ function master_instance_require(){ require_image require_instance_name require_instance_short_name + require_mongodb_host + require_mongodb_port require_instance_security_group require_ssh_user require_build_version @@ -40,7 +42,7 @@ function master_instance_execute() { event_name=$instance_name image_id=$(get_resource_id $image) instance_security_group_id=$(get_resource_id $instance_security_group) - + local user_data_master=$(build_configuration "MONGODB_HOST=$mongodb_host" "MONGODB_PORT=$mongodb_port" "MONGODB_NAME=$(alphanumeric $instance_name)" \ "REPLICATION_CHANNEL=$(alphanumeric $instance_name)" "SERVER_NAME=$(alphanumeric $instance_name)" "USE_ENVIRONMENT=live-master-server" \ "INSTALL_FROM_RELEASE=$build_version" "SERVER_STARTUP_NOTIFY=$default_server_startup_notify") From 0bc596c91e98e5595e507362cb9360d1b2e8a510 Mon Sep 17 00:00:00 2001 From: Leon Radeck Date: Mon, 12 Mar 2018 17:34:01 +1100 Subject: [PATCH 09/10] Current version. Problem: Currently 'aws --region eu-west-1 resourcegroupstaggingapi get-resources' does not list every existing resource. For example there are no images listed and just a few security groups. This should be an amazon problem. Until solved the script will not work. --- configuration/aws-automation/aws-setup.sh | 30 +++++++++---------- .../aws-automation/lib/functions_app.sh | 2 +- .../aws-automation/lib/functions_io.sh | 6 ++-- .../aws-automation/lib/require_variables.sh | 4 --- .../aws-automation/lib/scenario_instance.sh | 6 ++-- .../lib/scenario_replica_instance.sh | 5 +++- .../lib/scenario_shared_instance.sh | 8 +++-- 7 files changed, 33 insertions(+), 28 deletions(-) diff --git a/configuration/aws-automation/aws-setup.sh b/configuration/aws-automation/aws-setup.sh index db86e315593..d9f069f7312 100755 --- a/configuration/aws-automation/aws-setup.sh +++ b/configuration/aws-automation/aws-setup.sh @@ -81,6 +81,11 @@ fi init_resources +if $force; then + error "--force option is currently not working." + safeExit +fi + if $instance_scenario; then instance_start safeExit @@ -134,39 +139,34 @@ usage() { -w, --description Description of sub instance -c, --contact-person Contact person -e, --contact-email Email of contact person - -f, --force Skip user input and use default variables -d, --debug Debug mode ${bold}Scenarios:${reset} --instance Create instance --shared-instance Create sub instance --master-instance Create master instance - --associate-alb Associate instance with existing application load balancer whos - listener is defined in variables_aws.sh. Automatically - create necessary target group and host name rule. + --replica-instance Create replica instance + --associate-alb Associate instance with existing application load balancer. ${bold}Other:${reset} - --version Output version information and exit + --version Output version information and exit ${bold}Examples:${reset} Create instance: > ./aws-setup.sh --instance - Associate application load balancer: - > ./aws-setup.sh --instance --associate-alb + Create shared instance: + > ./aws-setup.sh --shared-instance Associate instance with application load balancer: - > ./aws-setup.sh --instance --associate-alb - - Create instance and use default values: - > ./aws-setup.sh --instance --force - - Create instance and use default values except instance name - and instance short name. Also activate debug mode. - > ./aws-setup.sh --instance --instance-name Test --instance-short-name t --force -d + > ./aws-setup.sh --associate-alb + Create master instance: + > ./aws-setup.sh --master-instance + Create replica instance: + > ./aws-setup.sh --replica-instance " } diff --git a/configuration/aws-automation/lib/functions_app.sh b/configuration/aws-automation/lib/functions_app.sh index 5ea7c7823ec..6c8c15d42bb 100644 --- a/configuration/aws-automation/lib/functions_app.sh +++ b/configuration/aws-automation/lib/functions_app.sh @@ -148,7 +148,7 @@ function append_environment_to_env_sh(){ env_content=$(wget -qO- http://releases.sapsailing.com/environments/$1) exit_on_fail ssh_wrapper $2@$3 "echo -e \"# START Environment: $1 \" >> $env_file" - exit_on_fail ssh_wrapper $2@$3 "echo -e \"$env_content\" >> $env_file" + exit_on_fail ssh_wrapper $2@$3 "export ADDITIONAL_JAVA_ARGS='\$ADDITIONAL_JAVA_ARGS'; export MEMORY='$MEMORY'; echo \"$env_content\" >> $env_file" exit_on_fail ssh_wrapper $2@$3 "echo -e \"# END Environment: $1 \" >> $env_file" } diff --git a/configuration/aws-automation/lib/functions_io.sh b/configuration/aws-automation/lib/functions_io.sh index 0deadb2c8d7..4db9be308e2 100644 --- a/configuration/aws-automation/lib/functions_io.sh +++ b/configuration/aws-automation/lib/functions_io.sh @@ -110,7 +110,7 @@ function fill_resource_map_with_resources_of_type(){ declare -a RESOURCE_ARRAY if [ "$1" == "ec2:launch-template" ]; then - RESOURCE_ARRAY=($(get_launch_templates)) + RESOURCE_ARRAY=($(get_array_with_launch_templates)) else RESOURCE_ARRAY=($(get_array_with_resource_of_type $1)) fi @@ -124,8 +124,8 @@ function fill_resource_map_with_resources_of_type(){ local id="" if [ "$1" == "ec2:launch-template" ]; then - id=$(echo "$lt" | jq -c ".LaunchTemplateId" -r | sanitize) - tmp_name=$(echo "$lt" | jq -c ".LaunchTemplateName" -r | sanitize) + id=$(echo "$resource" | jq -c ".LaunchTemplateId" -r | sanitize) + tmp_name=$(echo "$resource" | jq -c ".LaunchTemplateName" -r | sanitize) else id=$(echo $resource | jq -c ".ResourceARN" -r | sanitize) tmp_name=$(echo $resource | jq -c ".Tags[] | select(.Key==\"Name\") | .Value" -r | sanitize) diff --git a/configuration/aws-automation/lib/require_variables.sh b/configuration/aws-automation/lib/require_variables.sh index 36d157d5713..2788bbc2962 100644 --- a/configuration/aws-automation/lib/require_variables.sh +++ b/configuration/aws-automation/lib/require_variables.sh @@ -111,15 +111,11 @@ function require_user_username(){ } function require_mongodb_port(){ - if [ "$region" != "eu-west-1" ]; then require_variable "$mongodb_port_param" mongodb_port "$default_mongodb_port" "$mongodb_port_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" - fi } function require_mongodb_host(){ - if [ "$region" != "eu-west-1" ]; then require_variable "$mongodb_host_param" mongodb_host "$default_mongodb_host" "$mongodb_host_ask_message" "$IS_NOT_OPTIONAL" "$SHOW_INPUT" - fi } function require_user_password(){ diff --git a/configuration/aws-automation/lib/scenario_instance.sh b/configuration/aws-automation/lib/scenario_instance.sh index d136e7fd1b2..0153ef379eb 100644 --- a/configuration/aws-automation/lib/scenario_instance.sh +++ b/configuration/aws-automation/lib/scenario_instance.sh @@ -24,6 +24,8 @@ function instance_require(){ require_image require_instance_name require_instance_short_name + require_mongodb_host + require_mongodb_port require_ssh_user require_build_version require_key_name @@ -65,14 +67,14 @@ function instance_execute() { local port="8888" configure_application $public_dns_name $port $event_name $new_admin_password $user_username $user_pass - append_to_env_sh "MONGODB_HOST=${4:-'/home/sailing/servers/server/env.sh'}" + header "Conclusion" success "Instance should be reachable through $public_dns_name:8888." } function build_user_data(){ - build_configuration "MONGODB_HOST=$default_mongodb_host" "MONGODB_PORT=$default_mongodb_port" "MONGODB_NAME=$(alphanumeric $instance_name)" \ + build_configuration "MONGODB_HOST=$mongodb_host" "MONGODB_PORT=$mongodb_port" "MONGODB_NAME=$(alphanumeric $instance_name)" \ "REPLICATION_CHANNEL=$(alphanumeric $instance_name)" "SERVER_NAME=$(alphanumeric $instance_name)" "USE_ENVIRONMENT=live-server" \ "INSTALL_FROM_RELEASE=$build_version" "SERVER_STARTUP_NOTIFY=$default_server_startup_notify" } diff --git a/configuration/aws-automation/lib/scenario_replica_instance.sh b/configuration/aws-automation/lib/scenario_replica_instance.sh index 978d8cafdc7..9e5468dd2a9 100644 --- a/configuration/aws-automation/lib/scenario_replica_instance.sh +++ b/configuration/aws-automation/lib/scenario_replica_instance.sh @@ -35,5 +35,8 @@ function replica_instance_execute() { public_dns_name=$(get_public_dns_name $instance_id) user_data=$(get_user_data_from_instance $instance_id | base64 --decode) echo "$user_data" - wait_for_ssh_connection $ssh_user $public_dns_name + + header "Conclusion" + + success "Instance should be reachable through $public_dns_name:8888." } diff --git a/configuration/aws-automation/lib/scenario_shared_instance.sh b/configuration/aws-automation/lib/scenario_shared_instance.sh index c74bf2c2ac0..1e5338df0a0 100644 --- a/configuration/aws-automation/lib/scenario_shared_instance.sh +++ b/configuration/aws-automation/lib/scenario_shared_instance.sh @@ -20,6 +20,8 @@ function shared_instance_require(){ require_instance_name require_instance_short_name + require_mongodb_host + require_mongodb_port require_build_version require_key_file require_event_name @@ -98,6 +100,9 @@ function shared_instance_execute() { local_echo "Commenting out $comment_out_line_in_env_with_pattern inside $server_env_file..." execute_remote "sed -i '/$comment_out_line_in_env_with_pattern/s/^/#/g' $server_env_file" + local MEMORY="10000m" + exit_on_fail execute_remote "echo -e \"MEMORY=$MEMORY\" >> $server_env_file" + append_environment_to_env_sh "live-server" $ssh_user $super_instance $server_env_file $env_file local env_patch=$(build_configuration "# START Script $script_start_time" "SERVER_NAME=$(alphanumeric $instance_name)" "TELNET_PORT=$telnet_port" \ @@ -107,8 +112,7 @@ function shared_instance_execute() { exit_on_fail execute_remote "echo -e \"$env_patch\" >> $server_env_file" - local memory="10000m" - exit_on_fail execute_remote "echo -e \"MEMORY=$memory\" >> $server_env_file" + local_echo "Creating README file if it does not exist already..." execute_remote touch $readme_file From eecd91eb2b21eeea9479a0122ef4ce8a2af3f181 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 19 Mar 2018 13:50:22 +0100 Subject: [PATCH 10/10] wrote a piece on bug4478 in the release notes Change-Id: I9d3e4e4af26d938b200287c113d102c4ee9948ff --- .../places/whatsnew/resources/SailingAnalyticsNotes.html | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html index ffa018b3d15..1876c249ea6 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html @@ -4,6 +4,15 @@

What's New - SAP Sailing Analytics

+
March 2018
+
    +
  • Zooming in on a competitor chart in the race viewer will now adjust the + time resolution to that selected in the settings if before zooming the + resolution had to be reduced to remain under the limit of data points that + can be requested from the server in one round trip. +
  • +
+
January 2018
  • Coordinate display (lat/lng), e.g., in pop-ups for marks and wind sensors