How to exclude a specific user when deleting all user in Cognito user pool

631 Views Asked by At

I have a script I use to remove all users from a user pool on a regular basis for testing. There is however one user that constantly needs to be manually re-created as it should not get removed when clearing the user pool. I'm trying to figure out how I can exclude that specific user from the delete. Here is the script I use:

aws cognito-idp list-users --user-pool-id "user-pool-id" |
jq -r '.Users | .[] | .Username' |
while read uname1; do
  echo "Deleting $uname1";
  aws cognito-idp admin-delete-user --user-pool-id "user-pool-id" --username $uname1;
done

Any advice would be appreciated.

1

There are 1 best solutions below

0
On

You can use the select function of jq directly:

aws cognito-idp list-users --user-pool-id "user-pool-id" |
jq -r '.Users[].Username | select(. != "excluded username")' |
while read uname1; do
  echo "Deleting $uname1";
  aws cognito-idp admin-delete-user --user-pool-id "user-pool-id" --username $uname1;
done

Alternatively, comparing strings in shell is simple too:

aws cognito-idp list-users --user-pool-id "user-pool-id" |
jq -r '.Users | .[] | .Username' |
while read uname1; do
  test "$uname1" = "excluded username" || aws cognito-idp admin-delete-user --user-pool-id "user-pool-id" --username $uname1;
done

or

aws cognito-idp list-users --user-pool-id "user-pool-id" |
jq -r '.Users | .[] | .Username' |
while read uname1; do
  if [ "$uname1" != "excluded username" ]; then
    aws cognito-idp admin-delete-user --user-pool-id "user-pool-id" --username $uname1;
  fi
done

or

aws cognito-idp list-users --user-pool-id "user-pool-id" |
jq -r '.Users | .[] | .Username' |
while read uname1; do
  case "$uname1" in
    "excluded username") ;;
    *) aws cognito-idp admin-delete-user --user-pool-id "user-pool-id" --username $uname1 ;;
  esac
done