#!/bin/bash -e

eval "$(cli-shezargs $@)"

# -------------------- Create AMI ----------------------
if [[ -z $skip_ami ]]; then

  ra invoke `fn ${script_dir}/../../ ssh\.js$` sshRun --ip=${ip} --command="./zz_packages/${on_instance_build_dir}/on-instance/a01-pre-snapshot" "--message=${service}-build"

  create_ami_result="/tmp/js-cluster-create-ami-$$.json"
  time ra invoke `fn ${script_dir}/../../ 'lib/ec2/ec2\.js$'` createAmi --instance-id=${instance_id} --description="jscluster-built-for ${namespace}" --name="${namespace}-${stack}-${build_number}-${service}" --base-name="${base_name}" \
        | tee $create_ami_result \
        | underscore print --color

  image_id="$(cat $create_ami_result | underscore select '.ImageId' --outfmt=text)"
  aws ec2 create-tags --resources $image_id --tags "Key=readyFor,Value=test"
  [[ -n $base_name ]] && aws ec2 create-tags --resources $image_id --tags "Key=baseName,Value=${base_name}"

  # Let the prod acct use this image
  prod_acct_num="$(echo $JSAWS_AWS_ACCTS | egrep -o 'pub:[0-9]+' | cut -d':' -f2)"
  if [[ -n $prod_acct_num ]]; then
    echo aws ec2 modify-image-attribute --image-id "$image_id" --launch-permission "{\"Add\": [{\"UserId\":\"${prod_acct_num}\"}]}"
    aws ec2 modify-image-attribute --image-id "$image_id" --launch-permission "{\"Add\": [{\"UserId\":\"${prod_acct_num}\"}]}"

    snapshot_id="$(aws ec2 describe-images --image-ids "$image_id" | jq -r '.Images[0].BlockDeviceMappings[0].Ebs.SnapshotId')"
    if [[ -n $snapshot_id ]]; then
      echo aws ec2 modify-snapshot-attribute --snapshot-id "$snapshot_id"  --attribute createVolumePermission --operation-type add --user-ids "${prod_acct_num}"
      aws ec2 modify-snapshot-attribute --snapshot-id "$snapshot_id"  --attribute createVolumePermission --operation-type add --user-ids "${prod_acct_num}"
    fi
  fi


  sleep 5
  wait_for_start $ip

  # -------------------- Terminate Instance ----------------------
  if [[ -z $no_terminate ]]; then

    ra invoke `fn ${script_dir}/../../ 'lib/ec2/ec2\.js$'` terminateInstance --instance-id=${instance_id} | underscore print --color

    #
    # This is the *normal* exit
    #
    exit "$?"

  fi
fi

# -------------------- Startup Services ----------------------
ra invoke `fn ${script_dir}/../../ ssh\.js$` sshRun --ip=${ip} --command="./zz_packages/${on_instance_build_dir}/on-instance/b01-start-from-snapshot" "--message=${service}-build"

ra invoke `fn ${script_dir}/../../ ssh\.js$` sshRun --ip=${ip} --command="./zz_packages/${on_instance_build_dir}/on-instance/b02-start-services" "--message=${service}-build"

