[BUG] One or more fields contain incorrect values:","details":[{"code":"ValidationError","target":"name","message":"Tag with the same name already exists.
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 42/100
Línea de trabajo
Empieza reproduciendo el fallo con la canalización de Azure DevOps mostrada y el ejecutable del publisher contra una instancia de APIM que contenga una etiqueta existente. Lee el manejo de etiquetas de API Management del publisher y verifica que la sincronización actualice o reemplace de forma segura las etiquetas duplicadas; se considera terminado cuando la publicación de los artefactos de prueba en producción se complete correctamente sin el error de validación por nombre duplicado.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Release version
APIOps release version 6.0.2
Describe the bug
##[error]Unhandled exception. System.Net.Http.HttpRequestException: HTTP request to URI https://management.azure.com/subscriptions/***/resourceGroups/prd-int-it-rg-eaiapim/providers/Microsoft.ApiManagement/service/prd-eaiapimint-apim-01/tags/programs-673e0548c5f6294c3c3daf2f?api-version=2023-09-01-preview failed with status code 400. Content is '{"error":{"code":"ValidationError","message":"One or more fields contain incorrect values:","details":[{"code":"ValidationError","target":"name","message":"Tag with the same name already exists."}]}}'.
Expected behavior
I am trying to publish artifacts from test to prod. This APIM instance already exist and it should be fine and I should be able to overwrite the instance somehow.
Actual behavior
But it keeps failing with these errors that already exist, It should overwrite it without complaining. I am try to sync the changes from test to PROD.
Reproduction Steps
parameters:
- name: API_MANAGEMENT_SERVICE_OUTPUT_FOLDER_PATH
type: string
displayName: Folder where the artifacts reside - name: ENVIRONMENT
type: string
displayName: Environment to display - name: RESOURCE_GROUP_NAME
type: string
displayName: Resource Group Name - name: API_MANAGEMENT_SERVICE_NAME
type: string
displayName: APIM Instance Name
default: "" - name: CONFIGURATION_YAML_PATH
type: string
displayName: Optional configuration file
default: "" - name: SUBSCRIPTION_ID
type: string
displayName: Azure Subscription ID
default: "" - name: COMMIT_ID
type: string
default: publish-artifacts-in-last-commit
steps:
-
script: echo Provided configuration was ${{ parameters.CONFIGURATION_YAML_PATH }}
displayName: Print the name of the yaml configuration file if provided -
script: echo Provided app service name was ${{ parameters.API_MANAGEMENT_SERVICE_NAME }}
displayName: Print the name of the apim service name if provided -
checkout: self
fetchDepth: 0 -
task: AzureCLI@2
displayName: Set publishing variables
inputs:
azureSubscription: "$(SERVICE_CONNECTION_NAME)"
scriptType: pscore
scriptLocation: inlineScript
inlineScript: |
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
$VerbosePreference = "Continue"
$InformationPreference = "Continue"Write-Host "##vso[task.setvariable issecret=true;variable=AZURE_BEARER_TOKEN]$(az account get-access-token --query "accessToken" --output tsv)" Write-Host "##vso[task.setvariable issecret=true;variable=AZURE_CLIENT_ID]$env:servicePrincipalId" Write-Host "##vso[task.setvariable issecret=true;variable=AZURE_CLIENT_SECRET]$env:servicePrincipalKey" Write-Host "##vso[task.setvariable issecret=true;variable=AZURE_TENANT_ID]$env:tenantId" $paramSubscriptionId = "${{ parameters.SUBSCRIPTION_ID }}" if ($paramSubscriptionId) { Write-Host "Using subscription ID from parameter: $paramSubscriptionId" Write-Host "##vso[task.setvariable issecret=true;variable=AZURE_SUBSCRIPTION_ID]$paramSubscriptionId" } elseif (-not $env:AZURE_SUBSCRIPTION_ID) { $subscriptionCount = az account list --query "length([])" --output tsv if ($subscriptionCount -eq 1) { $subscriptionId = az account list --query "[0].id" --output tsv Write-Host "Setting AZURE_SUBSCRIPTION_ID environment variable to: $subscriptionId" Write-Host "##vso[task.setvariable issecret=true;variable=AZURE_SUBSCRIPTION_ID]$($subscriptionId)" } elseif ($subscriptionCount -gt 1) { Write-Host "Multiple subscriptions are accessible. Please set the AZURE_SUBSCRIPTION_ID environment variable manually." exit 1 } } else { Write-Host "AZURE_SUBSCRIPTION_ID is already set to: $env:AZURE_SUBSCRIPTION_ID" }addSpnToEnvironment: true
failOnStandardError: true
replacetokens@6 task will need to be installed to use
-
${{ if ne(parameters.CONFIGURATION_YAML_PATH, '') }}:
- task: qetza.replacetokens.replacetokens-task.replacetokens@6
displayName: "Perform namevalue secret substitution in ${{ parameters.CONFIGURATION_YAML_PATH }}"
inputs:
sources: ${{ parameters.CONFIGURATION_YAML_PATH }}
encoding: "auto"
addBOM: true
verbosity: "off"
missingVarAction: "none"
missingVarLog: "warn"
tokenPattern: "custom"
tokenPrefix: "{#"
tokenSuffix: "#}"
- task: qetza.replacetokens.replacetokens-task.replacetokens@6
-
task: PowerShell@2
displayName: Fetch publisher
inputs:
targetType: "inline"
script: |
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
$VerbosePreference = "Continue"
$InformationPreference = "Continue"Write-Information "Setting name variables..." $releaseFileName = "publisher-linux-x64.zip" $executableFileName = "publisher" if ("$(Agent.OS)" -like "*win*") { $releaseFileName = "publisher-win-x64.zip" $executableFileName = "publisher.exe" } elseif ("$(Agent.OS)" -like "*mac*" -and "$(Agent.OSArchitecture)" -like "*arm*") { $releaseFileName = "publisher-osx-arm64.zip" } elseif ("$(Agent.OS)" -like "*mac*" -and "$(Agent.OSArchitecture)" -like "*x86_64*") { $releaseFileName = "publisher-osx-x64.zip" } Write-Information "Downloading release..." $uri = "https://github.com/Azure/apiops/releases/download/$(apiops_release_version)/$releaseFileName" $downloadFilePath = Join-Path "$(Agent.TempDirectory)" $releaseFileName Invoke-WebRequest -Uri "$uri" -OutFile "$downloadFilePath" Write-Information "Extracting release..." $executableFolderPath = Join-Path "$(Agent.TempDirectory)" "publisher" Expand-Archive -Path "$downloadFilePath" -DestinationPath "$executableFolderPath" $executableFilePath = Join-Path "$executableFolderPath" $executableFileName Write-Information "Setting file permissions..." if ("$(Agent.OS)" -like "*linux*") { & chmod +x "$executableFilePath" if ($LASTEXITCODE -ne 0) { throw "Setting file permissions failed."} } Write-Host "##vso[task.setvariable variable=PUBLISHER_FILE_PATH]$executableFilePath" Write-Information "Execution complete."failOnStderr: true
pwsh: true -
task: PowerShell@2
displayName: Run publisher for ${{ parameters.ENVIRONMENT}} environment
inputs:
targetType: "inline"
script: |
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
$VerbosePreference = "Continue"
$InformationPreference = "Continue"& "$(PUBLISHER_FILE_PATH)" if ($LASTEXITCODE -ne 0) { throw "Running publisher failed."} Write-Information "Execution complete."failOnStderr: true
pwsh: true
env:
AZURE_BEARER_TOKEN: $(AZURE_BEARER_TOKEN)
AZURE_CLIENT_ID: $(AZURE_CLIENT_ID)
AZURE_CLIENT_SECRET: $(AZURE_CLIENT_SECRET)
AZURE_TENANT_ID: $(AZURE_TENANT_ID)
AZURE_SUBSCRIPTION_ID: $(AZURE_SUBSCRIPTION_ID)
AZURE_RESOURCE_GROUP_NAME: ${{ parameters.RESOURCE_GROUP_NAME }}
API_MANAGEMENT_SERVICE_OUTPUT_FOLDER_PATH: $(Build.SourcesDirectory)/${{ parameters.API_MANAGEMENT_SERVICE_OUTPUT_FOLDER_PATH }}
${{ if ne( parameters['API_MANAGEMENT_SERVICE_NAME'], '' ) }}:
API_MANAGEMENT_SERVICE_NAME: ${{ parameters.API_MANAGEMENT_SERVICE_NAME }}
${{ if eq( parameters['COMMIT_ID'], 'publish-artifacts-in-last-commit' ) }}:
COMMIT_ID: $(Build.SourceVersion)
${{ if ne( parameters['CONFIGURATION_YAML_PATH'], '' ) }}:
CONFIGURATION_YAML_PATH: ${{ parameters.CONFIGURATION_YAML_PATH }}
- Lenguaje dominante
- C#
- Estrellas
- 448
- Forks
- 248
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de Azure/apiops
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 70/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
Todos los issues de Azure/apiops
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
builtbybel/CrapFixer#112 ·
-
area-ai untriaged
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
dotnet/extensions#7790 ·
Los mantenedores suelen responder en 1 día
-
Beginner Friendly T: Bugfix
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
space-wizards/space-station-14#46220 ·
Los mantenedores suelen responder en 1 día
-
P2 testing
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
Los mantenedores suelen responder en 1 día
-
area-Infrastructure-coreclr os-ios os-maccatalyst os-tvos untriaged
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
dotnet/runtime#134766 · 3 comentarios ·
Los mantenedores suelen responder en 1 día