Skip to content

Commit ed8ffbb

Browse files
authored
refactor: fleetconfig-controller as an addon (#69)
* refactor: fleetconfig-controller as an addon Signed-off-by: Artur Shad Nik <[email protected]> * chore: tidt todos, improve cleanup Signed-off-by: Artur Shad Nik <[email protected]> * feat: add new pivot condition; update tests Signed-off-by: Artur Shad Nik <[email protected]> * test: expand e2e coverage to valdiate full spoke cleanup Signed-off-by: Artur Shad Nik <[email protected]> * chore: rabbit Signed-off-by: Artur Shad Nik <[email protected]> * chore: rabbit nits and DRY Signed-off-by: Artur Shad Nik <[email protected]> * feat: improve addon validation, add tests Signed-off-by: Artur Shad Nik <[email protected]> * chore: make reviewable Signed-off-by: Artur Shad Nik <[email protected]> * chore: logs Signed-off-by: Artur Shad Nik <[email protected]> * fix: add fallback cleanup if addon agent has not come up Signed-off-by: Artur Shad Nik <[email protected]> * fix: relax fallback condition Signed-off-by: Artur Shad Nik <[email protected]> * fix: ensure appliedManifestWork cleaned up Signed-off-by: Artur Shad Nik <[email protected]> * docs: add diagram, walkthru Signed-off-by: Artur Shad Nik <[email protected]> * chore: words Signed-off-by: Artur Shad Nik <[email protected]> * docs: words Signed-off-by: Artur Shad Nik <[email protected]> * docs: update diagrams Signed-off-by: Artur Shad Nik <[email protected]> * docs: clarify wording, actions Signed-off-by: Artur Shad Nik <[email protected]> * feat: add upgrade conditions Signed-off-by: Artur Shad Nik <[email protected]> * docs: break out work/reg controllers into separate actors Signed-off-by: Artur Shad Nik <[email protected]> * fix: clustermanager nil check before upgrade Signed-off-by: Artur Shad Nik <[email protected]> * test: add new conditions to tests Signed-off-by: Artur Shad Nik <[email protected]> * test: add upgrades to test; remove kconf secret during test Signed-off-by: Artur Shad Nik <[email protected]> * feat: add a 3rd instance type to enable fallback non-addon mode for EKS Signed-off-by: Artur Shad Nik <[email protected]> * fix: update all spoke manager references to be agent Signed-off-by: Artur Shad Nik <[email protected]> * fix: make reviewable Signed-off-by: Artur Shad Nik <[email protected]> * fix: only set finalizers once; validate addons Signed-off-by: Artur Shad Nik <[email protected]> * chore: always use base image for agent Signed-off-by: Artur Shad Nik <[email protected]> * docs: update dev guide Signed-off-by: Artur Shad Nik <[email protected]> * chore: guard against unset env vars Signed-off-by: Artur Shad Nik <[email protected]> * docs: typo Signed-off-by: Artur Shad Nik <[email protected]> * chore: bump image version Signed-off-by: Artur Shad Nik <[email protected]> * docs: typo Signed-off-by: Artur Shad Nik <[email protected]> * feat: manager controls namespace lifecycle Signed-off-by: Artur Shad Nik <[email protected]> * test: update test values Signed-off-by: Artur Shad Nik <[email protected]> * feat: conditional secret purge; update chart Signed-off-by: Artur Shad Nik <[email protected]> * test: update test values Signed-off-by: Artur Shad Nik <[email protected]> * chore: logs Signed-off-by: Artur Shad Nik <[email protected]> * chore: logs Signed-off-by: Artur Shad Nik <[email protected]> * chore: default values Signed-off-by: Artur Shad Nik <[email protected]> * fix: conditional klusterlet purge Signed-off-by: Artur Shad Nik <[email protected]> * fix: nil check cleanupConfig Signed-off-by: Artur Shad Nik <[email protected]> * chore: rabbit Signed-off-by: Artur Shad Nik <[email protected]> * chore: make reviewable Signed-off-by: Artur Shad Nik <[email protected]> * fix: explicit fcc agent exclusion when in unified mode Signed-off-by: Artur Shad Nik <[email protected]> * chore: some review comments Signed-off-by: Artur Shad Nik <[email protected]> * chore: narrow scope of ns perms Signed-off-by: Artur Shad Nik <[email protected]> * chore: make addon mw checks more robust Signed-off-by: Artur Shad Nik <[email protected]> * fix: use update Signed-off-by: Artur Shad Nik <[email protected]> * fix: add nil checks before clustermanager access Signed-off-by: Artur Shad Nik <[email protected]> * chore: make reviewable Signed-off-by: Artur Shad Nik <[email protected]> * chore: review changes Signed-off-by: Artur Shad Nik <[email protected]> * chore: docstring Signed-off-by: Artur Shad Nik <[email protected]> * feat: use standalone watcher for agent cleanup Signed-off-by: Artur Shad Nik <[email protected]> * feat: validate watch config and set timeouts on api calls Signed-off-by: Artur Shad Nik <[email protected]> * chore: recover from watch panics Signed-off-by: Artur Shad Nik <[email protected]> * chore: make reviewable Signed-off-by: Artur Shad Nik <[email protected]> * feat: redact sensitive data in logs Signed-off-by: Artur Shad Nik <[email protected]> * feat: sanitize output Signed-off-by: Artur Shad Nik <[email protected]> * chore: revert to naive output redaction Signed-off-by: Artur Shad Nik <[email protected]> * chore: fail fast on unexpected MW Signed-off-by: Artur Shad Nik <[email protected]> * fix: handle hub-side cleanup properly Signed-off-by: Artur Shad Nik <[email protected]> * chore: make reviewable Signed-off-by: Artur Shad Nik <[email protected]> --------- Signed-off-by: Artur Shad Nik <[email protected]>
1 parent 304a44e commit ed8ffbb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+5508
-1074
lines changed

fleetconfig-controller/README.md

Lines changed: 75 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,16 @@
22

33
## 🌱 Project Overview
44

5-
The `fleetconfig-controller` introduces a new `FleetConfig` custom resource to the OCM ecosystem. It reconciles `FleetConfig` resources to declaratively manage the lifecycle of Open Cluster Management (OCM) multi-clusters. The `fleetconfig-controller` will initialize an OCM hub and one or more spoke clusters; add, remove, and upgrade clustermanagers and klusterlets when their bundle versions change, manage their feature gates, and uninstall all OCM components properly whenever a `FleetConfig` is deleted.
5+
The `fleetconfig-controller` introduces 2 new custom resources to the OCM ecosystem: `Hub` and `Spoke` . It reconciles `Hub` and `Spoke` resources to declaratively manage the lifecycle of Open Cluster Management (OCM) multi-clusters. The `fleetconfig-controller` will initialize an OCM hub and one or more spoke clusters; add, remove, and upgrade clustermanagers and klusterlets when their bundle versions change, manage their feature gates, and uninstall all OCM components properly whenever a `Hub` or `Spoke`s are deleted.
66

77
The controller is a lightweight wrapper around [clusteradm](https://github.com/open-cluster-management-io/clusteradm). Anything you can accomplish imperatively via a series of `clusteradm` commands can now be accomplished declaratively using the `fleetconfig-controller`.
88

9+
`fleetconfig-controller` supports 2 modes of operation:
10+
- `addonMode: true` (recommended): After the initial join, a `fleetconfig-controller-agent` will be installed on the spoke cluster as an OCM addon. Once installed, the agent will manage all day 2 operations for the spoke cluster asynchronously. For more information about addon mode, see [2-phase-spoke-reconcile.md](./docs/2-phase-spoke-reconcile.md).
11+
- `addonMode: false`: All management of all spokes is done from the hub cluster. No agent is installed on the spoke cluster. Currently, this is the only mode supported for EKS.
12+
13+
For the deprecated `v1alpha1` `FleetConfig` API, addon mode is not supported.
14+
915
## 🔧 Installation
1016

1117
The controller is installed via Helm.
@@ -16,18 +22,18 @@ helm repo update ocm
1622
helm install fleetconfig-controller ocm/fleetconfig-controller -n fleetconfig-system --create-namespace
1723
```
1824

19-
By default the Helm chart will also produce a `FleetConfig` to orchestrate, however that behaviour can be disabled. Refer to the chart [README](./charts/fleetconfig-controller/README.md) for full documentation.
25+
By default the Helm chart will also produce a `Hub` and 1 `Spoke` (`hub-as-spoke`) to orchestrate, however that behaviour can be disabled. Refer to the chart [README](./charts/fleetconfig-controller/README.md) for full documentation.
2026

2127
## 🏗️ Support Matrix
2228

2329
Support for orchestration of OCM multi-clusters varies based on the Kubernetes distribution and/or cloud provider.
2430

25-
| Kubernetes Distribution | Support Level |
26-
|-------------------------|--------------------|
27-
| Vanilla Kubernetes | ✅ Fully Supported |
28-
| Amazon EKS | ✅ Fully Supported |
29-
| Google GKE | ✅ Fully Supported |
30-
| Azure AKS | 🚧 On Roadmap |
31+
| Kubernetes Distribution | Support Level |
32+
|-------------------------|---------------------------------------|
33+
| Vanilla Kubernetes | ✅ Fully Supported |
34+
| Amazon EKS | ✅ Fully Supported (addonMode: false) |
35+
| Google GKE | ✅ Fully Supported |
36+
| Azure AKS | 🚧 On Roadmap |
3137

3238
## 🏃🏼‍♂️ Quick Start
3339

@@ -40,10 +46,10 @@ Support for orchestration of OCM multi-clusters varies based on the Kubernetes d
4046

4147
### Onboarding
4248

43-
To familiarize yourself with the `FleetConfig` API and the `fleetconfig-controller`, we recommend doing one or more of the following onboarding steps.
49+
To familiarize yourself with the `Hub` and `Spoke` APIs and the `fleetconfig-controller`, we recommend doing one or more of the following onboarding steps.
4450

4551
1. Step through a [smoke test](./docs/smoketests.md)
46-
1. Invoke the [end-to-end tests](./test/e2e/fleetconfig.go) and inspect the content of the kind clusters that the E2E suite automatically creates
52+
1. Invoke the [end-to-end tests](./test/e2e/v1beta1_hub_spoke.go) and inspect the content of the kind clusters that the E2E suite automatically creates
4753

4854
```bash
4955
SKIP_CLEANUP=true make test-e2e
@@ -53,6 +59,7 @@ To familiarize yourself with the `FleetConfig` API and the `fleetconfig-controll
5359

5460
The `fleetconfig-controller` repository is pre-wired for development using [DevSpace](https://www.devspace.sh/docs/getting-started/introduction).
5561

62+
### Single cluster (Hub and `hub-as-spoke` Spoke development)
5663
```bash
5764
# Create a dev kind cluster
5865
kind create cluster \
@@ -64,18 +71,58 @@ export KUBECONFIG=~/Downloads/fleetconfig-dev.kubeconfig
6471
# Initialize a devspace development container
6572
devspace run-pipeline dev -n fleetconfig-system
6673
```
74+
See [Debugging](#debugging) for instructions on how to start the fleetconfig controller manager in debug mode.
75+
76+
### Two clusters (Hub and Spoke development)
77+
```bash
78+
# Create two dev kind clusters
79+
kind create cluster \
80+
--name fleetconfig-dev-hub \
81+
--kubeconfig ~/Downloads/fleetconfig-dev-hub.kubeconfig
82+
export KUBECONFIG=~/Downloads/fleetconfig-dev-hub.kubeconfig
83+
84+
kind create cluster \
85+
--name fleetconfig-dev-spoke \
86+
--kubeconfig ~/Downloads/fleetconfig-dev-spoke.kubeconfig
87+
88+
# Get the spoke kind cluster's internal kubeconfig
89+
kind get kubeconfig --name fleetconfig-dev-spoke --internal > ~/Downloads/fleetconfig-dev-spoke-internal.kubeconfig
90+
91+
# Initialize a devspace development container. This will bootstrap in hub-as-spoke mode.
92+
devspace run-pipeline dev --namespace fleetconfig-system --force-build
93+
```
94+
See [Debugging](#debugging) for instructions on how to start the fleetconfig controller manager in debug mode.
95+
96+
In a new terminal session, execute the following commands to create a Spoke resource and start the fleetconfig controller agent on the spoke cluster.
97+
98+
```bash
99+
# Create a secret containing the spoke cluster kubeconfig
100+
export KUBECONFIG=~/Downloads/fleetconfig-dev-hub.kubeconfig
101+
kubectl --namespace fleetconfig-system create secret generic spoke-kubeconfig \
102+
--from-file=value=<absolute/path/to/fleetconfig-dev-spoke-internal.kubeconfig>
103+
104+
# Create a minimal Spoke resource
105+
kubectl apply -f hack/dev/spoke.yaml
106+
107+
# Once fleetconfig-controller-agent is created on the spoke cluster, start the debug session
108+
export KUBECONFIG=~/Downloads/fleetconfig-dev-spoke.kubeconfig
109+
devspace run-pipeline debug-spoke --namespace fleetconfig-system --force-build --profile v1alpha1
110+
```
111+
The `--profile v1alpha1` flag disables installing the default Hub and Spoke resources.
112+
113+
See [Debugging](#debugging) for instructions on how to start the fleetconfig controller agent in debug mode.
67114

68115
### Debugging
69116

70117
- Hit up arrow, then enter from within the dev container to start a headless delve session
71-
- Use the following launch config to connect VSCode with the delve session running in the dev container:
118+
- Use one of the following launch configs to connect VSCode with the delve session running in the dev container:
72119

73120
```json
74121
{
75122
"version": "0.2.0",
76123
"configurations": [
77124
{
78-
"name": "DevSpace",
125+
"name": "DevSpace - Hub",
79126
"type": "go",
80127
"request": "attach",
81128
"mode": "remote",
@@ -89,6 +136,22 @@ devspace run-pipeline dev -n fleetconfig-system
89136
],
90137
"showLog": true,
91138
// "trace": "verbose", // useful for debugging delve (breakpoints not working, etc.)
139+
},
140+
{
141+
"name": "DevSpace - Spoke",
142+
"type": "go",
143+
"request": "attach",
144+
"mode": "remote",
145+
"port": 2345,
146+
"host": "127.0.0.1",
147+
"substitutePath": [
148+
{
149+
"from": "${workspaceFolder}/fleetconfig-controller",
150+
"to": "/workspace",
151+
}
152+
],
153+
"showLog": true,
154+
// "trace": "verbose", // useful for debugging delve (breakpoints not working, etc.)
92155
}
93156
]
94157
}

fleetconfig-controller/api/v1beta1/constants.go

Lines changed: 105 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@ package v1beta1
33
import "k8s.io/apimachinery/pkg/labels"
44

55
const (
6-
// HubCleanupFinalizer is the finalizer for Hub cleanup.
6+
// HubCleanupPreflightFinalizer is the finalizer for cleanup preflight checks hub cluster's controller instance. Used to signal to the spoke's controller that unjoin can proceed.
7+
HubCleanupPreflightFinalizer = "fleetconfig.open-cluster-management.io/hub-cleanup-preflight"
8+
9+
// HubCleanupFinalizer is the finalizer for cleanup by the hub cluster's controller instance.
710
HubCleanupFinalizer = "fleetconfig.open-cluster-management.io/hub-cleanup"
811

9-
// SpokeCleanupFinalizer is the finalizer for Spoke cleanup.
12+
// SpokeCleanupFinalizer is the finalizer for cleanup by the spoke cluster's controller instance.
1013
SpokeCleanupFinalizer = "fleetconfig.open-cluster-management.io/spoke-cleanup"
1114
)
1215

@@ -21,8 +24,17 @@ const (
2124
// CleanupFailed means that a failure occurred during cleanup.
2225
CleanupFailed = "CleanupFailed"
2326

24-
// SpokeJoined means that the spoke has successfully joined the Hub.
27+
// SpokeJoined means that the Spoke has successfully joined the Hub.
2528
SpokeJoined = "SpokeJoined"
29+
30+
// PivotComplete means that the spoke cluster has successfully started managing itself.
31+
PivotComplete = "PivotComplete"
32+
33+
// KlusterletSynced means that Klusterlet's OCM bundle version and values are up to date.
34+
KlusterletSynced = "KlusterletSynced"
35+
36+
// HubUpgradeFailed means that the ClusterManager version upgrade failed.
37+
HubUpgradeFailed = "HubUpgradeFailed"
2638
)
2739

2840
// Hub and Spoke condition reasons
@@ -65,6 +77,74 @@ const (
6577
ManagedClusterTypeHubAsSpoke = "hub-as-spoke"
6678
)
6779

80+
// Addon mode
81+
const (
82+
// InstanceTypeManager indicates that the controller is running in a Hub cluster and only handles day 1 Spoke operations.
83+
InstanceTypeManager = "manager"
84+
85+
// InstanceTypeAgent indicates that the controller is running in a Spoke cluster and only handles day 2 Spoke operations.
86+
InstanceTypeAgent = "agent"
87+
88+
// InstanceTypeUnified indicates that the controller is running in a Hub cluster and handles the entire lifecycle of Spoke resources.
89+
InstanceTypeUnified = "unified"
90+
91+
// HubKubeconfigEnvVar is the environment variable containing the path to the mounted Hub kubeconfig.
92+
HubKubeconfigEnvVar = "HUB_KUBECONFIG"
93+
94+
// DefaultHubKubeconfigPath is the path of the mounted kubeconfig when the controller is running in a Spoke cluster. Used if the environment variable is not set.
95+
DefaultHubKubeconfigPath = "/managed/hub-kubeconfig/kubeconfig"
96+
97+
// SpokeNameEnvVar is the environment variable containing the name of the Spoke resource.
98+
SpokeNameEnvVar = "CLUSTER_NAME"
99+
100+
// SpokeNamespaceEnvVar is the environment variable containing the namespace of the Spoke resource.
101+
SpokeNamespaceEnvVar = "CLUSTER_NAMESPACE"
102+
103+
// HubNamespaceEnvVar is the environment variable containing the namespace of the Hub resource.
104+
HubNamespaceEnvVar = "HUB_NAMESPACE"
105+
106+
// ControllerNamespaceEnvVar is the environment variable containing the namespace that the controller is deployed to.
107+
ControllerNamespaceEnvVar = "CONTROLLER_NAMESPACE"
108+
109+
// ClusterRoleNameEnvVar is the environment variable containing the name of the ClusterRole for fleetconfig-controller-manager.
110+
ClusterRoleNameEnvVar = "CLUSTER_ROLE_NAME"
111+
112+
// PurgeAgentNamespaceEnvVar is the environment variable used to signal to the agent whether or not it should garbage collect it install namespace.
113+
PurgeAgentNamespaceEnvVar = "PURGE_AGENT_NAMESPACE"
114+
115+
// FCCAddOnName is the name of the fleetconfig-controller addon.
116+
FCCAddOnName = "fleetconfig-controller-agent"
117+
118+
// DefaultFCCManagerRole is the default name of the fleetconfig-controller-manager ClusterRole.
119+
DefaultFCCManagerRole = "fleetconfig-controller-manager-role"
120+
121+
// NamespaceOCM is the open-cluster-management namespace.
122+
NamespaceOCM = "open-cluster-management"
123+
124+
// NamespaceOCMAgent is the namespace for the open-cluster-management agent.
125+
NamespaceOCMAgent = "open-cluster-management-agent"
126+
127+
// NamespaceOCMAgentAddOn is the namespace for open-cluster-management agent addons.
128+
NamespaceOCMAgentAddOn = "open-cluster-management-agent-addon"
129+
130+
// AgentCleanupWatcherName is the name of the watcher for cleaning up the spoke agent.
131+
AgentCleanupWatcherName = "agent-cleanup-watcher"
132+
)
133+
134+
// SupportedInstanceTypes are the valid cluster types that the controller can be installed in.
135+
var SupportedInstanceTypes = []string{
136+
InstanceTypeManager,
137+
InstanceTypeAgent,
138+
InstanceTypeUnified,
139+
}
140+
141+
// OCMSpokeNamespaces are the namespaces created on an OCM managed cluster.
142+
var OCMSpokeNamespaces = []string{
143+
NamespaceOCM,
144+
NamespaceOCMAgent,
145+
NamespaceOCMAgentAddOn,
146+
}
147+
68148
// FleetConfig labels
69149
const (
70150
// LabelManagedClusterType is the label key for the managed cluster type.
@@ -112,3 +192,25 @@ var (
112192
// ManagedBySelector is a label selector for filtering add-on resources managed fleetconfig-controller.
113193
ManagedBySelector = labels.SelectorFromSet(labels.Set(ManagedByLabels))
114194
)
195+
196+
const (
197+
// AddonArgoCD is the name of the built-in ArgoCD hub addon.
198+
AddonArgoCD = "argocd"
199+
200+
// AddonGPF is the name of the built-in Governance Policy Framework hub addon.
201+
AddonGPF = "governance-policy-framework"
202+
)
203+
204+
// SupportedHubAddons are the built-in hub addons which clusteradm and fleetconfig-controller support.
205+
var SupportedHubAddons = []string{
206+
AddonArgoCD,
207+
AddonGPF,
208+
}
209+
210+
const (
211+
// BundleVersionLatest is the latest OCM source version
212+
BundleVersionLatest = "latest"
213+
214+
// BundleVersionDefault is the default OCM source version
215+
BundleVersionDefault = "default"
216+
)

fleetconfig-controller/api/v1beta1/spoke_types.go

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,30 @@ type SpokeSpec struct {
8080
// +kubebuilder:default:=0
8181
// +optional
8282
LogVerbosity int `json:"logVerbosity,omitempty"`
83+
84+
// CleanupConfig is used to configure which resources should be automatically garbage collected during cleanup.
85+
// +kubebuilder:default:={}
86+
// +required
87+
CleanupConfig CleanupConfig `json:"cleanupConfig"`
88+
}
89+
90+
// CleanupConfig is the configuration for cleaning up resources during Spoke cleanup.
91+
type CleanupConfig struct {
92+
// If true, the agent will attempt to garbage collect its own namespace after the spoke cluster is unjoined.
93+
// +kubebuilder:default:=false
94+
// +optional
95+
PurgeAgentNamespace bool `json:"purgeAgentNamespace,omitempty"`
96+
97+
// If set, the klusterlet operator will be purged and all open-cluster-management namespaces deleted
98+
// when the klusterlet is unjoined from its Hub cluster.
99+
// +kubebuilder:default:=true
100+
// +optional
101+
PurgeKlusterletOperator bool `json:"purgeKlusterletOperator,omitempty"`
102+
103+
// If set, the kubeconfig secret will be automatically deleted after the agent has taken over managing the Spoke.
104+
// +kubebuilder:default:=false
105+
// +optional
106+
PurgeKubeconfigSecret bool `json:"purgeKubeconfigSecret,omitempty"`
83107
}
84108

85109
// HubRef is the information required to get a Hub resource.
@@ -98,6 +122,21 @@ func (s *Spoke) IsManagedBy(om metav1.ObjectMeta) bool {
98122
return s.Spec.HubRef.Name == om.Name && s.Spec.HubRef.Namespace == om.Namespace
99123
}
100124

125+
// IsHubAsSpoke returns true if the cluster is a hub-as-spoke. Determined either by name `hub-as-spoke` or an InCluster kubeconfig
126+
func (s *Spoke) IsHubAsSpoke() bool {
127+
return s.Name == ManagedClusterTypeHubAsSpoke || s.Spec.Kubeconfig.InCluster
128+
}
129+
130+
// PivotComplete return true if the spoke's agent has successfully started managing day 2 operations.
131+
func (s *Spoke) PivotComplete() bool {
132+
jc := s.GetCondition(SpokeJoined)
133+
if jc == nil || jc.Status != metav1.ConditionTrue {
134+
return false
135+
}
136+
pc := s.GetCondition(PivotComplete)
137+
return pc != nil && pc.Status == metav1.ConditionTrue
138+
}
139+
101140
// Klusterlet is the configuration for a klusterlet.
102141
type Klusterlet struct {
103142
// Annotations to apply to the spoke cluster. If not present, the 'agent.open-cluster-management.io/' prefix is added to each key.
@@ -124,12 +163,6 @@ type Klusterlet struct {
124163
// +optional
125164
Mode string `json:"mode,omitempty"`
126165

127-
// If set, the klusterlet operator will be purged and all open-cluster-management namespaces deleted
128-
// when the klusterlet is unjoined from its Hub cluster.
129-
// +kubebuilder:default:=true
130-
// +optional
131-
PurgeOperator bool `json:"purgeOperator,omitempty"`
132-
133166
// If true, the installed klusterlet agent will start the cluster registration process by looking for the
134167
// internal endpoint from the public cluster-info in the Hub cluster instead of using hubApiServer.
135168
// +optional

fleetconfig-controller/api/v1beta1/zz_generated.deepcopy.go

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

fleetconfig-controller/build/Dockerfile.base

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ COPY go.sum go.sum
2222
RUN go mod download
2323

2424
# Copy the go source
25-
COPY cmd/main.go cmd/main.go
25+
COPY cmd/ cmd/
2626
COPY api/ api/
2727
COPY internal/ internal/
2828
COPY pkg/ pkg/

fleetconfig-controller/build/Dockerfile.devspace

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ COPY go.sum go.sum
5252
RUN go mod download
5353

5454
# Copy the go source
55-
COPY cmd/main.go cmd/main.go
55+
COPY cmd/ cmd/
5656
COPY api/ api/
5757
COPY internal/ internal/
5858
COPY pkg/ pkg/

0 commit comments

Comments
 (0)