Skip to content

Instantly share code, notes, and snippets.

@ppshein
Last active November 10, 2022 08:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ppshein/cc5ef10c8e93451895faaafcbbebce83 to your computer and use it in GitHub Desktop.
Save ppshein/cc5ef10c8e93451895faaafcbbebce83 to your computer and use it in GitHub Desktop.
#!/bin/bash
ARGS=${@:1}
input="./tags.txt"
tagCluster() {
local clusterName=$1
local region=$2
nodeGroups=$(aws eks list-nodegroups --cluster-name $clusterName --region $region --query 'nodegroups' --output text)
# Time complexity = O(n^3)
for nodeGroup in $nodeGroups; do
autoScalings=$(aws eks describe-nodegroup --cluster-name $clusterName --nodegroup-name $nodeGroup --region $region --query 'nodegroup.resources.autoScalingGroups[0]' --output text)
for KEY in "${!autoScalings[@]}"; do
echo "Start tagging ${autoScalings[$KEY]}"
# it's to read from text file
while read -r line;
do
# for new instance spawning
asg=$(aws autoscaling create-or-update-tags --region $region --tags ResourceId=${autoScalings[$KEY]},ResourceType=auto-scaling-group,${line},PropagateAtLaunch=true ResourceId=${autoScalings[$KEY]},ResourceType=auto-scaling-group,PropagateAtLaunch=true)
# existing instances
instances=$(aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name ${autoScalings[$KEY]} --query 'AutoScalingGroups[*].Instances[*].InstanceId' --output text --region $region)
for instance in $instances; do
command=$(aws ec2 create-tags --resources $instance --tags ${line} --region $region)
done
done < "$input"
echo "Done tagging ${autoScalings[$KEY]}"
done
done
}
tagCluster $ARGS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment