Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

bug: finalizer "syncagent.kcp.io/cleanup" on related resources block deletion of primary object

未关闭
#172 1 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
48/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
冷清
技术栈
go

调研方向

首先使用此 issue 中的 Network 和 VirtualMachine 清单复现 provider A/B 设置,然后跟踪主要资源和相关资源的 finalizer 清理流程。查看 issue #116 和 #117 了解上下文;当删除 VirtualMachine 不再使 Network 被一个立即重新添加的 finalizer 阻塞时,即表示完成。

由索引模型根据 Issue 内容生成。

描述

kind/bug
Describe the bug

Let's assume, there are two service providers using the api-syncagent to publish API resources and sync objects to / from kcp. To have a concrete example, let's also assume that:

  • service provider "A" provides a Network API
  • service provider "B" provides a VirtualMachine API that allows you to reference an existing Network (defined as related resource) in which the virtual machine should be created

In this case, both api-syncagents add the finalizer "syncagent.kcp.io/cleanup" to any Network object referenced by a VirtualMachine - the api-syncagent of service provider "A" since the Network is the primary object, the api-syncagent of service provider "B" since the Network object is a related resource with origin: kcp.

When a VirtualMachine is deleted, provider "B" removes the finalizer from the Network as part of cleanup — but provider "A" immediately re-adds it, blocking deletion indefinitely.

Steps To Reproduce
  1. service provider "A": install api-syncagent and created PublishedResource for Network
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: networks.network.example.com
spec:
  group: network.example.com
  names:
    kind: Network
    listKind: NetworkList
    plural: networks
    singular: network
  scope: Namespaced
  versions:
  - name: v1
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            type: object
            properties:
              cidrBlock:
                type: string
    served: true
    storage: true
---
apiVersion: syncagent.kcp.io/v1alpha1
kind: PublishedResource
metadata:
  name: networks.network.example.com
spec:
  resource:
    apiGroup: network.example.com
    versions: [v1]
    kind: Network
  naming:
    namespace: 'ws-{{ .ClusterName }}-{{ .Object.metadata.namespace | sha3short }}'
    name: '{{ .Object.metadata.name }}'
  1. service provider "B": install api-syncagent and created PublishedResource for VirtualMachine
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: virtualmachines.compute.example.com
spec:
  group: compute.example.com
  names:
    kind: VirtualMachine
    listKind: VirtualMachineList
    plural: virtualmachines
    singular: virtualmachine
  scope: Namespaced
  versions:
  - name: v1
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            type: object
            properties:
              networkRef:
                type: object
                properties:
                  name:
                    type: string
    served: true
    storage: true
---
apiVersion: syncagent.kcp.io/v1alpha1
kind: PublishedResource
metadata:
  name: virtualmachines.compute.example.com
spec:
  resource:
    apiGroup: compute.example.com
    versions: [v1]
    kind: VirtualMachine
  naming:
    namespace: 'ws-{{ .ClusterName }}-{{ .Object.metadata.namespace | sha3short }}'
    name: '{{ .Object.metadata.name }}'
  related:
    - identifier: network
      origin: kcp
      group: network.example.com
      version: v1
      resource: networks
      identityHash: ${NETWORKS_API_EXPORT_IDENTITY_HASH}
      object:
        reference:
          path: spec.networkRef.name
  1. consumer: bind both APIExports, apply manifests, and delete VirtualMachine
---
apiVersion: network.example.com/v1
kind: Network
metadata:
  name: network
spec:
  cidrBlock: "192.168.0.0/24"
---
apiVersion: compute.example.com/v1
kind: VirtualMachine
metadata:
  name: vm
spec:
  networkRef:
    name: network
Expected Behaviour

The VirtualMachine should get deleted successfully

Additional Context
主要语言
Go
星标
25
派生
31
平均合并
5 天 18 小时
30 天内合并 PR
1

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

kcp-dev/api-syncagent 的其他 Issue

查看 kcp-dev/api-syncagent 的全部 Issue

相似的 Issue

更多 Go Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。