@@ -144,23 +144,27 @@ steps:
144144 set -e
145145 [[ -n $SYSTEM_DEBUG ]] && [[ $SYSTEM_DEBUG =~ $IS_TRUE ]] && set -x || set +x
146146
147- MI_DATA=$(az identity list \
148- --resource-group "$ACNCI_BUILD_RESOURCEGROUP" | \
149- jq -rc '.')
150- MI_DATA_LENGTH=$(echo "$MI_DATA" | jq length)
151- echo >&2 "##vso[task.setvariable variable=MI_DATA]$MI_DATA"
152- echo >&2 "##vso[task.setvariable variable=MI_DATA_LENGTH]$MI_DATA_LENGTH"
153-
154- if [[ -n $MI_DATA ]] && \
155- [[ $MI_DATA != null ]] && \
156- (( $MI_DATA_LENGTH > 0 )); then
147+ R_QUERY="[? tags.\""$ACNCI_BUILDTAG_DEFINITIONID"\" && tags.\""$ACNCI_BUILDTAG_CREATEDBYAPPID"\"]"
148+ MI_LIST=$(az identity list /
149+ --resource-group "$ACNCI_BUILD_RESOURCEGROUP" /
150+ --query "$R_QUERY" -o json | /
151+ jq -rc \
152+ --arg ACNCI_BUILDTAG_CREATEDBYAPPID "$ACNCI_BUILDTAG_CREATEDBYAPPID" /
153+ --arg APPID "$servicePrincipalId" /
154+ --arg ACNCI_BUILDTAG_DEFINITIONID "$ACNCI_BUILDTAG_DEFINITIONID" /
155+ --arg DEFINITIONID "$SYSTEM_DEFINITIONID" /
156+ '[ .[] | select(.tags[$ACNCI_BUILDTAG_DEFINITIONID] == $DEFINITIONID ) | select( .tags[$ACNCI_BUILDTAG_CREATEDBYAPPID] == $APPID) ]')
157+ MI_LIST_LENGTH=$(echo "$MI_LIST" | jq length)
158+
159+ if [[ -n $MI_LIST ]] && \
160+ [[ $MI_LIST != null ]] && \
161+ (( $MI_LIST_LENGTH > 0 )); then
157162 echo >&2 "##vso[task.setvariable variable=CREATE_NEW_MI;]false"
158163 else
159164 echo >&2 "##vso[task.setvariable variable=CREATE_NEW_MI;]true"
160165 fi
161166 env :
162167 ACNCI_BUILD_RESOURCEGROUP : $(resourcegroups.ACNCI_BUILD_RESOURCEGROUP)
163- ACNCI_BUILD_RESOURCEGROUP_ID : $(resourcegroups.ACNCI_BUILD_RESOURCEGROUP_ID)
164168
165169- task : AzureCLI@2
166170 displayName : " [Provision] Build User ManagedIdentity"
@@ -183,11 +187,9 @@ steps:
183187 "$ACNCI_BUILDTAG_CREATEDBYBUILDID"="$BUILD_BUILDID" \
184188 "$ACNCI_BUILDTAG_CREATEDBYAPPID"="$servicePrincipalId"
185189 env :
186- LOCATION : $(ACNCI_RG_LOCATION)
187190 LOCAL_ACNCI_UNIQUE_ID : $(LOCAL_ACNCI_UNIQUE_ID)
188191 ACNCI_MANAGEDIDENTITY_PREFIX : $(ACNCI_MANAGEDIDENTITY_PREFIX)
189192 ACNCI_BUILD_RESOURCEGROUP : $(resourcegroups.ACNCI_BUILD_RESOURCEGROUP)
190- ACNCI_BUILD_RESOURCEGROUP_ID : $(resourcegroups.ACNCI_BUILD_RESOURCEGROUP_ID)
191193
192194- task : AzureCLI@2
193195 name : managedidentity
@@ -201,6 +203,23 @@ steps:
201203 set -e
202204 [[ -n $SYSTEM_DEBUG ]] && [[ $SYSTEM_DEBUG =~ $IS_TRUE ]] && set -x || set +x
203205
206+ R_QUERY="[? tags.\""$ACNCI_BUILDTAG_DEFINITIONID"\" && tags.\""$ACNCI_BUILDTAG_CREATEDBYAPPID"\"]"
207+ MI_LIST=$(az identity list /
208+ --resource-group "$ACNCI_BUILD_RESOURCEGROUP" /
209+ --query "$R_QUERY" -o json | /
210+ jq -rc \
211+ --arg ACNCI_BUILDTAG_CREATEDBYAPPID "$ACNCI_BUILDTAG_CREATEDBYAPPID" /
212+ --arg APPID "$servicePrincipalId" /
213+ --arg ACNCI_BUILDTAG_DEFINITIONID "$ACNCI_BUILDTAG_DEFINITIONID" /
214+ --arg DEFINITIONID "$SYSTEM_DEFINITIONID" /
215+ '[ .[] | select(.tags[$ACNCI_BUILDTAG_DEFINITIONID] == $DEFINITIONID ) | select( .tags[$ACNCI_BUILDTAG_CREATEDBYAPPID] == $APPID) ]')
216+ MI_LIST_LENGTH=$(echo "$MI_LIST" | jq length)
217+
218+ # Select MI to use
219+ RANDOM_SELECT=`tr -dc '1-9' < /dev/urandom | head -c${1:-7}`
220+ IDX=$(( "$RANDOM_SELECT" % "$MI_LIST_LENGTH" ))
221+ MI_DATA=$(echo "$MI_LIST" | jq --argjson IDX "$IDX" -rc '.[$IDX]')
222+
204223 MI_ID=$(echo "$MI_DATA" | jq -r '.id')
205224 echo >&2 "##vso[task.setvariable variable=ACNCI_MANAGEDIDENTITY_ID;isoutput=true]$MI_ID"
206225 MI_PRINCIPALID=$(echo "$MI_DATA" | jq -r '.principalId')
@@ -210,8 +229,7 @@ steps:
210229 MI_NAME=$(echo "$MI_DATA" | jq -r '.name')
211230 echo >&2 "##vso[task.setvariable variable=ACNCI_MANAGEDIDENTITY_NAME;isoutput=true]$MI_NAME"
212231 env :
213- MI_DATA : $(MI_DATA)
214- MI_DATA_LENGTH : $(MI_DATA_LENGTH)
232+ ACNCI_BUILD_RESOURCEGROUP : $(resourcegroups.ACNCI_BUILD_RESOURCEGROUP)
215233
216234
217235# # MI Role Assignments ##
0 commit comments