Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,20 +79,20 @@ locally running controller.
```
SA=$(kubectl -n crossplane-system get sa -o name | grep provider-kubernetes | sed -e 's|serviceaccount\/|crossplane-system:|g')
kubectl create clusterrolebinding provider-kubernetes-admin-binding --clusterrole cluster-admin --serviceaccount="${SA}"
kubectl apply -f examples/provider/config-in-cluster.yaml
kubectl apply -f examples/namespaced/provider/config-in-cluster.yaml
```
1. If provider kubernetes running outside the cluster (e.g. running locally with `make run`)

```
KUBECONFIG=$(kind get kubeconfig --name local-dev | sed -e 's|server:\s*.*$|server: http://localhost:8081|g')
kubectl -n crossplane-system create secret generic cluster-config --from-literal=kubeconfig="${KUBECONFIG}"
kubectl apply -f examples/provider/config.yaml
kubectl apply -f examples/namespaced/provider/config.yaml
```

1. Now you can create `Object` resources with provider reference, see [sample object.yaml](examples/object/object.yaml).
1. Now you can create `Object` resources with provider reference, see [sample object.yaml](examples/namespaced/object/object.yaml).

```
kubectl create -f examples/object/object.yaml
kubectl create -f examples/namespaced/object/object.yaml
```

### Cleanup
Expand Down
6 changes: 6 additions & 0 deletions apis/cluster/object/v1alpha2/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,12 @@ type ObjectParameters struct {
// +kubebuilder:validation:EmbeddedResource
// +kubebuilder:pruning:PreserveUnknownFields
Manifest runtime.RawExtension `json:"manifest"`

// Deletion policy for created kubernetes object, defaults to Background
// +optional
// +kubebuilder:validation:Enum=Orphan;Background;Foreground
// +kubebuilder:default=Background
DeletionPropagationPolicy metav1.DeletionPropagation `json:"deletionPropagationPolicy"`
}

// ObjectObservation are the observable fields of a Object.
Expand Down
6 changes: 6 additions & 0 deletions apis/namespaced/object/v1alpha1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,12 @@ type ObjectParameters struct {
// +kubebuilder:validation:EmbeddedResource
// +kubebuilder:pruning:PreserveUnknownFields
Manifest runtime.RawExtension `json:"manifest"`

// Deletion policy for created kubernetes object, defaults to Background
// +optional
// +kubebuilder:validation:Enum=Orphan;Background;Foreground
// +kubebuilder:default=Background
DeletionPropagationPolicy metav1.DeletionPropagation `json:"deletionPropagationPolicy"`
}

// ObjectObservation are the observable fields of a Object.
Expand Down
1 change: 1 addition & 0 deletions examples/namespaced/provider/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ apiVersion: kubernetes.m.crossplane.io/v1alpha1
kind: ClusterProviderConfig
metadata:
name: kubernetes-provider
namespace: default
spec:
credentials:
source: Secret
Expand Down
11 changes: 9 additions & 2 deletions internal/controller/cluster/object/object.go
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,13 @@ func (c *external) Delete(ctx context.Context, mg resource.Managed) (managed.Ext
return managed.ExternalDelete{}, errors.New(errNotKubernetesObject)
}

c.logger.Debug("Deleting", "resource", obj)
// Apply deletion policy set in the Object spec
propagationPolicy := obj.Spec.ForProvider.DeletionPropagationPolicy
deleteOptions := &client.DeleteOptions{
PropagationPolicy: &propagationPolicy,
}

c.logger.Debug("Deleting", "resource", obj, "propagationPolicy", obj.Spec.ForProvider.DeletionPropagationPolicy)

res, err := parseManifest(obj)
if err != nil {
Expand All @@ -482,7 +488,8 @@ func (c *external) Delete(ctx context.Context, mg resource.Managed) (managed.Ext
if c.desiredStateCacheCleanupFn != nil {
c.desiredStateCacheCleanupFn()
}
return managed.ExternalDelete{}, errors.Wrap(resource.IgnoreNotFound(c.client.Delete(ctx, res)), errDeleteObject)

return managed.ExternalDelete{}, errors.Wrap(resource.IgnoreNotFound(c.client.Delete(ctx, res, deleteOptions)), errDeleteObject)
}

func (c *external) Disconnect(ctx context.Context) error {
Expand Down
11 changes: 9 additions & 2 deletions internal/controller/namespaced/object/object.go
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,13 @@ func (c *external) Delete(ctx context.Context, mg resource.Managed) (managed.Ext
return managed.ExternalDelete{}, errors.New(errNotKubernetesObject)
}

c.logger.Debug("Deleting", "resource", obj)
// Apply deletion policy set in the Object spec
propagationPolicy := obj.Spec.ForProvider.DeletionPropagationPolicy
deleteOptions := &client.DeleteOptions{
PropagationPolicy: &propagationPolicy,
}

c.logger.Debug("Deleting", "resource", obj, "propagationPolicy", obj.Spec.ForProvider.DeletionPropagationPolicy)

res, err := parseManifest(obj)
if err != nil {
Expand All @@ -483,7 +489,8 @@ func (c *external) Delete(ctx context.Context, mg resource.Managed) (managed.Ext
if c.desiredStateCacheCleanupFn != nil {
c.desiredStateCacheCleanupFn()
}
return managed.ExternalDelete{}, errors.Wrap(resource.IgnoreNotFound(c.client.Delete(ctx, res)), errDeleteObject)

return managed.ExternalDelete{}, errors.Wrap(resource.IgnoreNotFound(c.client.Delete(ctx, res, deleteOptions)), errDeleteObject)
}

func (c *external) Disconnect(ctx context.Context) error {
Expand Down
9 changes: 9 additions & 0 deletions package/crds/kubernetes.crossplane.io_objects.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -548,6 +548,15 @@ spec:
forProvider:
description: ObjectParameters are the configurable fields of a Object.
properties:
deletionPropagationPolicy:
default: Background
description: Deletion policy for created kubernetes object, defaults
to Background
enum:
- Orphan
- Background
- Foreground
type: string
manifest:
description: Raw JSON representation of the kubernetes object
to be created.
Expand Down
9 changes: 9 additions & 0 deletions package/crds/kubernetes.m.crossplane.io_objects.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,15 @@ spec:
forProvider:
description: ObjectParameters are the configurable fields of a Object.
properties:
deletionPropagationPolicy:
default: Background
description: Deletion policy for created kubernetes object, defaults
to Background
enum:
- Orphan
- Background
- Foreground
type: string
manifest:
description: Raw JSON representation of the kubernetes object
to be created.
Expand Down