mirror of
https://github.com/jpetazzo/container.training.git
synced 2026-05-05 16:36:45 +00:00
111 lines
3.4 KiB
Bash
Executable File
111 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
source scripts/cli.sh
|
|
|
|
aws_display_tags(){
|
|
# Print all "Name" tags in our region with their instance count
|
|
echo "[#] [Status] [Token] [Tag]" \
|
|
| awk '{ printf " %7s %-12s %-25s %-25s\n", $1, $2, $3, $4}'
|
|
aws ec2 describe-instances \
|
|
--query "Reservations[*].Instances[*].[State.Name,ClientToken,Tags[0].Value]" \
|
|
| tr -d "\r" \
|
|
| awk '{ printf " %-12s %-25s %-25s\n", $1, $2, $3}' \
|
|
| uniq -c \
|
|
| sort -k 3
|
|
}
|
|
|
|
aws_get_tokens() {
|
|
aws ec2 describe-instances --output text \
|
|
--query 'Reservations[*].Instances[*].[ClientToken]' \
|
|
| sort -u
|
|
}
|
|
|
|
aws_display_instance_statuses_by_tag() {
|
|
TAG=$1
|
|
need_tag $TAG
|
|
|
|
IDS=$(aws ec2 describe-instances \
|
|
--filters "Name=tag:Name,Values=$TAG" \
|
|
--query "Reservations[*].Instances[*].InstanceId" | tr '\t' ' ' )
|
|
|
|
aws ec2 describe-instance-status \
|
|
--instance-ids $IDS \
|
|
--query "InstanceStatuses[*].{ID:InstanceId,InstanceState:InstanceState.Name,InstanceStatus:InstanceStatus.Status,SystemStatus:SystemStatus.Status,Reachability:InstanceStatus.Status}" \
|
|
--output table
|
|
}
|
|
|
|
aws_display_instances_by_tag() {
|
|
TAG=$1
|
|
need_tag $TAG
|
|
result=$(aws ec2 describe-instances --output table \
|
|
--filter "Name=tag:Name,Values=$TAG" \
|
|
--query "Reservations[*].Instances[*].[ \
|
|
InstanceId, \
|
|
State.Name, \
|
|
Tags[0].Value, \
|
|
PublicIpAddress, \
|
|
InstanceType \
|
|
]"
|
|
)
|
|
if [[ -z $result ]]; then
|
|
echo "No instances found with tag $TAG in region $AWS_DEFAULT_REGION."
|
|
else
|
|
echo "ID State Tags IP Type" \
|
|
| awk '{ printf "%9s %12s %15s %20s %14s \n", $1, $2, $3, $4, $5}' # column -t -c 70}
|
|
echo "$result"
|
|
fi
|
|
}
|
|
|
|
aws_get_instance_ids_by_filter() {
|
|
FILTER=$1
|
|
aws ec2 describe-instances --filters $FILTER \
|
|
--query Reservations[*].Instances[*].InstanceId \
|
|
--output text | tr "\t" "\n" | tr -d "\r"
|
|
}
|
|
|
|
|
|
aws_get_instance_ids_by_client_token() {
|
|
TOKEN=$1
|
|
need_tag $TOKEN
|
|
aws_get_instance_ids_by_filter Name=client-token,Values=$TOKEN
|
|
}
|
|
|
|
aws_get_instance_ids_by_tag() {
|
|
TAG=$1
|
|
need_tag $TAG
|
|
aws_get_instance_ids_by_filter Name=tag:Name,Values=$TAG
|
|
}
|
|
|
|
aws_get_instance_ips_by_tag() {
|
|
TAG=$1
|
|
need_tag $TAG
|
|
aws ec2 describe-instances --filter "Name=tag:Name,Values=$TAG" \
|
|
--output text \
|
|
--query "Reservations[*].Instances[*].PublicIpAddress" \
|
|
| tr "\t" "\n" \
|
|
| sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4 # sort IPs
|
|
}
|
|
|
|
aws_kill_instances_by_tag() {
|
|
TAG=$1
|
|
need_tag $TAG
|
|
IDS=$(aws_get_instance_ids_by_tag $TAG)
|
|
if [ -z "$IDS" ]; then
|
|
die "Invalid tag."
|
|
fi
|
|
|
|
echo "Deleting instances with tag $TAG"
|
|
|
|
aws ec2 terminate-instances --instance-ids $IDS \
|
|
| grep ^TERMINATINGINSTANCES
|
|
}
|
|
|
|
aws_tag_instances() {
|
|
OLD_TAG_OR_TOKEN=$1
|
|
NEW_TAG=$2
|
|
IDS=$(aws_get_instance_ids_by_client_token $OLD_TAG_OR_TOKEN)
|
|
[[ -n "$IDS" ]] && aws ec2 create-tags --tag Key=Name,Value=$NEW_TAG --resources $IDS >/dev/null
|
|
IDS=$(aws_get_instance_ids_by_tag $OLD_TAG_OR_TOKEN)
|
|
[[ -n "$IDS" ]] && aws ec2 create-tags --tag Key=Name,Value=$NEW_TAG --resources $IDS >/dev/null
|
|
}
|