Skip to content

Adding duplicate project specs by editing project from UI when globalProjects are defined #25830

@debMan

Description

@debMan

Checklist:

  • I've searched in the docs and FAQ for my answer: https://bit.ly/argocd-faq.
  • I've included steps to reproduce the bug.
  • I've pasted the output of argocd version.

Describe the bug

When a globalProjects is defined in argocd-cm, editing projects from the UI adds duplicate fields for specs coming from the global project for each edit.

To Reproduce

  1. Configure a globalProjects in the argocd-cm like this:

    # ...
      globalProjects: |-
        - labelSelector: {}
          projectName: global-common
    # ...
  2. Define a global project and sample project like this:

    apiVersion: argoproj.io/v1alpha1
    kind: AppProject
    metadata:
      name: global-common
      namespace: argocd
    spec:
      clusterResourceBlacklist:
      - group: '*'
        kind: '*'
      namespaceResourceBlacklist:
      - group: ""
        kind: LimitRange
    ---
    apiVersion: argoproj.io/v1alpha1
    kind: AppProject
    metadata:
      name: debman
      namespace: argocd
    spec:
      destinations:
      - namespace: debman
        server: '*'
      - namespace: test
        server: '*'
      - namespace: test2
        server: '*'
      roles:
    # ...
  3. Now, in the UI, you should see the inherited spec from the global-common in the other project.

    Image
  4. Then, edit the arbitrary spec like the destinations in the UI and save. After saving, it adds duplicate entries in the specs which defined in the global project. For example, in the following screenshots, I added test3 and test4 as destinations in two separate edits, the result in UI is like this:

    Image Image

    Also, in the yaml definition of the appproject object, we can see one entry is added per edit, which is redundant and not required:

    # ...
    spec:
      clusterResourceBlacklist:
      - group: '*'
        kind: '*'
      - group: '*'
        kind: '*'
      destinations:
      - namespace: debman
        server: '*'
      - namespace: test
        server: '*'
      - namespace: test2
        server: '*'
      - namespace: test3
        server: '*'
      - namespace: test4
        server: '*'
      namespaceResourceBlacklist:
      - group: ""
        kind: LimitRange
      - group: ""
        kind: LimitRange
    # ...

Expected behavior

The UI should distinguish entries from global projects and show the specs from them as not editable. Also, the controller should check and avoid adding duplicate entries that are already defined in a global project.

This can lead to more errors in some scenarios if we define sourcerepos. The UI then fails to edit with the "Already existing source repo" on edit.

Screenshots

Attached above

Version

Argo CD v3.2.0+66b2f30
Build Date 2025-11-04T14:51:35Z
Go Version go1.25.0
Go Compiler gc
Platform linux/amd64
jsonnet v0.21.0
kustomize v5.7.0 2025-06-28T07:00:07Z
Helm v3.18.4+gd80839c
kubectl v0.34.0

Logs

spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:08:04Z" level=info msg="received unary call /project.ProjectService/GetDetailedProject" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:08:04Z" level=info msg="received unary call /project.ProjectService/ListLinks" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:08:04Z" level=info msg="received unary call /application.ApplicationService/List" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="projects:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:08:40Z" level=info msg="received unary call /project.ProjectService/GetDetailedProject" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:08:40Z" level=info msg="received unary call /application.ApplicationService/List" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="projects:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:08:40Z" level=info msg="received unary call /project.ProjectService/ListLinks" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:09:08Z" level=info msg="received unary call /project.ProjectService/Get" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:09:08Z" level=info msg="admin updated project" project=debman reason=ResourceUpdated type=Normal
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:09:08Z" level=info msg="received unary call /project.ProjectService/GetDetailedProject" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:17:46Z" level=info msg="received unary call /project.ProjectService/GetDetailedProject" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:17:46Z" level=info msg="received unary call /application.ApplicationService/List" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="projects:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:17:46Z" level=info msg="received unary call /project.ProjectService/ListLinks" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:20:26Z" level=info msg="received unary call /project.ProjectService/Get" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:20:26Z" level=info msg="admin updated project" project=debman reason=ResourceUpdated type=Normal
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:20:26Z" level=info msg="received unary call /project.ProjectService/GetDetailedProject" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:20:46Z" level=info msg="received unary call /project.ProjectService/Get" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:20:54Z" level=info msg="received unary call /project.ProjectService/Get" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:23:34Z" level=info msg="received unary call /project.ProjectService/GetDetailedProject" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:23:34Z" level=info msg="received unary call /project.ProjectService/ListLinks" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:23:34Z" level=info msg="received unary call /application.ApplicationService/List" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="projects:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:23:42Z" level=info msg="received unary call /project.ProjectService/Get" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:23:42Z" level=info msg="admin updated project" project=debman reason=ResourceUpdated type=Normal
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:23:42Z" level=info msg="received unary call /project.ProjectService/GetDetailedProject" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:27:05Z" level=info msg="received unary call /project.ProjectService/GetDetailedProject" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:27:05Z" level=info msg="received unary call /project.ProjectService/ListLinks" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="name:\"debman\" "
spcld-argocd-user-server-856899bc8b-gx5wb time="2025-12-31T10:27:05Z" level=info msg="received unary call /application.ApplicationService/List" grpc.request.claims="{\"exp\":1767259178,\"iat\":1767172778,\"iss\":\"argocd\",\"jti\":\"aa5fa370-5e15-4397-a13b-3fac9915a8a6\",\"nbf\":1767172778,\"sub\":\"admin\"}" grpc.request.content="projects:\"debman\" "

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingcomponent:serverIssue related to the Server componentcomponent:uiUser interfaces bugs and enhancements

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions