Repository: kumahq/kuma
Pull request #2289 (2021-07-05 10:23:19)

chore(*) generate DeepCopy interfaces (backport #2222)
This is an automatic backport of pull request #2222 done by [Mergify](https://mergify.io).
Cherry-pick of fb4d537c04f178ff75bdb27e8c1c57026f49b427 has failed:
```
On branch mergify/bp/release-1.2/pr-2222
Your branch is up to date with 'origin/release-1.2'.

You are currently cherry-picking commit fb4d537c.
  (fix conflicts and run "git cherry-pick --continue")
  (use "git cherry-pick --skip" to skip this patch)
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

Changes to be committed:
	modified:   pkg/plugins/resources/k8s/native/Makefile
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/circuitbreaker_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/circuitbreaker_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_insight_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_insight_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/externalservice_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/externalservice_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/faultinjection_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/faultinjection_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/healthcheck_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/healthcheck_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_insight_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_insight_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/proxytemplate_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/proxytemplate_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/ratelimit_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/ratelimit_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/retry_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/retry_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/service_insight_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/service_insight_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/suite_test.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/timeout_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/timeout_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/trafficlogging_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/trafficlogging_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/trafficpermission_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/trafficpermission_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/trafficroute_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/trafficroute_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/traffictrace_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/traffictrace_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/zone_ingress_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/zone_ingress_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/zone_insight_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/zone_insight_types_deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/api/v1alpha1/zone_types.go
	deleted:    pkg/plugins/resources/k8s/native/api/v1alpha1/zone_types_deepcopy.go
	new file:   pkg/plugins/resources/k8s/native/api/v1alpha1/zz_generated.deepcopy.go
	modified:   pkg/plugins/resources/k8s/native/hack/boilerplate.go.txt
	modified:   pkg/plugins/resources/k8s/native/pkg/model/resources.go

Unmerged paths:
  (use "git add <file>..." to mark resolution)
	both modified:   mk/generate.mk

```


To fix up this pull request, you can check it out locally. See documentation: https://help.github.com/articles/checking-out-pull-requests-locally/

---


<details>
<summary>Mergify commands and options</summary>

<br />

More conditions and actions can be found in the [documentation](https://docs.mergify.io/).

You can also trigger Mergify actions by commenting on this pull request:

- `@Mergifyio refresh` will re-evaluate the rules
- `@Mergifyio rebase` will rebase this PR on its base branch
- `@Mergifyio update` will merge the base branch into this PR
- `@Mergifyio backport <destination>` will backport this PR on `<destination>` branch

Additionally, on Mergify [dashboard](https://dashboard.mergify.io/) you can:

- look at your merge queues
- generate the Mergify configuration with the config editor.

Finally, you can contact us on https://mergify.io/
</details>


jpeach: @Mergifyio rebase
mergify[bot]: **Command `rebase`: success**
> **Branch has been successfully rebased**
> 

jpeach: @Mergifyio rebase
mergify[bot]: **Command `rebase`: failure**
> **Base branch update has failed**
> Git reported the following error:
> ```
> Rebasing (1/1)error: could not apply 6a225c86... chore(*) generate DeepCopy interfaces (#2222)
> Resolve all conflicts manually, mark them as resolved with
> "git add/rm <conflicted_files>", then run "git rebase --continue".
> You can instead skip this commit: run "git rebase --skip".
> To abort and get back to the state before "git rebase", run "git rebase --abort".
> Could not apply 6a225c86... chore(*) generate DeepCopy interfaces (#2222)
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/zone_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/zone_insight_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/zone_ingress_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/traffictrace_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/trafficroute_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/trafficpermission_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/trafficlogging_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/timeout_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/service_insight_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/retry_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/ratelimit_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/proxytemplate_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_insight_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/healthcheck_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/faultinjection_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/externalservice_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_insight_types_deepcopy.go
> Removing pkg/plugins/resources/k8s/native/api/v1alpha1/circuitbreaker_types_deepcopy.go
> Auto-merging mk/generate.mk
> CONFLICT (content): Merge conflict in mk/generate.mk
> 
> ```
> 
> err-code: 7B962


Patch:
diff --git a/mk/generate.mk b/mk/generate.mk
index 6aa7cd0f0..52429f664 100644
--- a/mk/generate.mk
+++ b/mk/generate.mk
@@ -23,7 +23,7 @@ clean/proto: ## Dev: Remove auto-generated Protobuf files
 
 .PHONY: generate
 generate:  ## Dev: Run code generators
-generate: clean/proto protoc/pkg/config/app/kumactl/v1alpha1 protoc/pkg/test/apis/sample/v1alpha1 protoc/plugins resources/mesh
+generate: clean/proto protoc/pkg/config/app/kumactl/v1alpha1 protoc/pkg/test/apis/sample/v1alpha1 protoc/plugins resources/mesh generate/deepcopy
 
 .PHONY: resources/mesh
 resources/mesh:
@@ -63,3 +63,7 @@ generate/envoy-imports:
 	echo 'import (' >> ${ENVOY_IMPORTS}
 	go list github.com/envoyproxy/go-control-plane/... | grep "github.com/envoyproxy/go-control-plane/envoy/" | awk '{printf "\t_ \"%s\"\n", $$1}' >> ${ENVOY_IMPORTS}
 	echo ')' >> ${ENVOY_IMPORTS}
+
+.PHONY: generate/deepcopy
+generate/deepcopy:
+	$(MAKE) -C pkg/plugins/resources/k8s/native generate
diff --git a/pkg/plugins/resources/k8s/native/Makefile b/pkg/plugins/resources/k8s/native/Makefile
index 1fd431f2d..3b4c20fa5 100644
--- a/pkg/plugins/resources/k8s/native/Makefile
+++ b/pkg/plugins/resources/k8s/native/Makefile
@@ -72,7 +72,7 @@ vet:
 
 # Generate code
 generate: controller-gen
-	$(CONTROLLER_GEN) object:headerFile=./hack/boilerplate.go.txt paths=./api/...
+	$(CONTROLLER_GEN) object:headerFile=./hack/boilerplate.go.txt,year=$$(date +%Y) paths=./api/...
 
 # Build the docker image
 docker-build: test
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/circuitbreaker_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/circuitbreaker_types.go
index 70e40460f..98921201f 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/circuitbreaker_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/circuitbreaker_types.go
@@ -18,24 +18,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-// EDIT THIS FILE!  THIS IS SCAFFOLDING FOR YOU TO OWN!
-// NOTE: json tags are required.  Any new fields you add must have json tags for the fields to be serialized.
 
-// CircuitBreaker defines the desired state of CircuitBreaker
-type CircuitBreakerSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// CircuitBreaker is the Schema for the circuitbreaker API
+// CircuitBreaker is the Schema for the circuitbreaker API.
+//
+// +kubebuilder:object:root=true
 type CircuitBreaker struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	Mesh              string `json:"mesh,omitempty"`
 
-	Spec CircuitBreakerSpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// CircuitBreakerList contains a list of CircuitBreaker
+// CircuitBreakerList contains a list of CircuitBreaker.
+//
+// +kubebuilder:object:root=true
 type CircuitBreakerList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/circuitbreaker_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/circuitbreaker_types_deepcopy.go
deleted file mode 100644
index fde6fd485..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/circuitbreaker_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (cb *CircuitBreaker) DeepCopyInto(out *CircuitBreaker) {
-	*out = *cb
-	out.TypeMeta = cb.TypeMeta
-	cb.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(cb.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficPermission.
-func (cb *CircuitBreaker) DeepCopy() *CircuitBreaker {
-	if cb == nil {
-		return nil
-	}
-	out := new(CircuitBreaker)
-	cb.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (cb *CircuitBreaker) DeepCopyObject() runtime.Object {
-	if c := cb.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (l *CircuitBreakerList) DeepCopyInto(out *CircuitBreakerList) {
-	*out = *l
-	out.TypeMeta = l.TypeMeta
-	out.ListMeta = l.ListMeta
-	if l.Items != nil {
-		in, out := &l.Items, &out.Items
-		*out = make([]CircuitBreaker, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficPermissionList.
-func (l *CircuitBreakerList) DeepCopy() *CircuitBreakerList {
-	if l == nil {
-		return nil
-	}
-	out := new(CircuitBreakerList)
-	l.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (l *CircuitBreakerList) DeepCopyObject() runtime.Object {
-	if c := l.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_insight_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_insight_types.go
index 361d380ff..9a569369c 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_insight_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_insight_types.go
@@ -18,21 +18,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
 
-// DataplaneInsightStatus defines the observed state of Dataplane
-type DataplaneInsightStatus = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// DataplaneInsight is the Schema for the Dataplane Insights API
+// DataplaneInsight is the Schema for the Dataplane Insights API.
+//
+// +kubebuilder:object:root=true
 type DataplaneInsight struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 
-	Mesh   string                 `json:"mesh,omitempty"`
-	Status DataplaneInsightStatus `json:"status,omitempty"`
+	Mesh   string           `json:"mesh,omitempty"`
+	Status model.RawMessage `json:"status,omitempty"`
 }
 
-// DataplaneInsightList contains a list of Dataplane
+// DataplaneInsightList contains a list of Dataplane.
+//
+// +kubebuilder:object:root=true
 type DataplaneInsightList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_insight_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_insight_types_deepcopy.go
deleted file mode 100644
index 5d5e102b3..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_insight_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *DataplaneInsight) DeepCopyInto(out *DataplaneInsight) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Status = runtime.DeepCopyJSON(in.Status)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Dataplane.
-func (in *DataplaneInsight) DeepCopy() *DataplaneInsight {
-	if in == nil {
-		return nil
-	}
-	out := new(DataplaneInsight)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *DataplaneInsight) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *DataplaneInsightList) DeepCopyInto(out *DataplaneInsightList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	out.ListMeta = in.ListMeta
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]DataplaneInsight, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DataplaneList.
-func (in *DataplaneInsightList) DeepCopy() *DataplaneInsightList {
-	if in == nil {
-		return nil
-	}
-	out := new(DataplaneInsightList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *DataplaneInsightList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_types.go
index f07daaff7..a5341544f 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_types.go
@@ -18,21 +18,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
 
-// DataplaneSpec defines the desired state of Dataplane
-type DataplaneSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// Dataplane is the Schema for the Dataplane API
+// Dataplane is the Schema for the Dataplane API.
+//
+// +kubebuilder:object:root=true
 type Dataplane struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 
-	Mesh string        `json:"mesh,omitempty"`
-	Spec DataplaneSpec `json:"spec,omitempty"`
+	Mesh string           `json:"mesh,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// DataplaneList contains a list of Dataplane
+// DataplaneList contains a list of Dataplane.
+//
+// +kubebuilder:object:root=true
 type DataplaneList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_types_deepcopy.go
deleted file mode 100644
index a84985d55..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/dataplane_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *Dataplane) DeepCopyInto(out *Dataplane) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(in.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Dataplane.
-func (in *Dataplane) DeepCopy() *Dataplane {
-	if in == nil {
-		return nil
-	}
-	out := new(Dataplane)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *Dataplane) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *DataplaneList) DeepCopyInto(out *DataplaneList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	out.ListMeta = in.ListMeta
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]Dataplane, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DataplaneList.
-func (in *DataplaneList) DeepCopy() *DataplaneList {
-	if in == nil {
-		return nil
-	}
-	out := new(DataplaneList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *DataplaneList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/externalservice_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/externalservice_types.go
index 41275c543..854be5847 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/externalservice_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/externalservice_types.go
@@ -18,21 +18,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
 
-// ExternalServiceSpec defines the desired state of ExternalService
-type ExternalServiceSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// ExternalService is the Schema for the Dataplane API
+// ExternalService is the Schema for the ExternalService API.
+//
+// +kubebuilder:object:root=true
 type ExternalService struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 
-	Mesh string              `json:"mesh,omitempty"`
-	Spec ExternalServiceSpec `json:"spec,omitempty"`
+	Mesh string           `json:"mesh,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// ExternalServiceList contains a list of Dataplane
+// ExternalServiceList contains a list of ExternalServices.
+//
+// +kubebuilder:object:root=true
 type ExternalServiceList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/externalservice_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/externalservice_types_deepcopy.go
deleted file mode 100644
index 2aa967413..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/externalservice_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ExternalService) DeepCopyInto(out *ExternalService) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(in.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Dataplane.
-func (in *ExternalService) DeepCopy() *ExternalService {
-	if in == nil {
-		return nil
-	}
-	out := new(ExternalService)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *ExternalService) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ExternalServiceList) DeepCopyInto(out *ExternalServiceList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	out.ListMeta = in.ListMeta
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]ExternalService, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DataplaneList.
-func (in *ExternalServiceList) DeepCopy() *ExternalServiceList {
-	if in == nil {
-		return nil
-	}
-	out := new(ExternalServiceList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *ExternalServiceList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/faultinjection_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/faultinjection_types.go
index bbc1d602e..4e50547e4 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/faultinjection_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/faultinjection_types.go
@@ -18,24 +18,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-// EDIT THIS FILE!  THIS IS SCAFFOLDING FOR YOU TO OWN!
-// NOTE: json tags are required.  Any new fields you add must have json tags for the fields to be serialized.
 
-// FaultInjectionSpec defines the desired state of FaultInjection
-type FaultInjectionSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// FaultInjection is the Schema for the faultinjection API
+// FaultInjection is the Schema for the FaultInjection API.
+//
+// +kubebuilder:object:root=true
 type FaultInjection struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	Mesh              string `json:"mesh,omitempty"`
 
-	Spec FaultInjectionSpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// FaultInjectionList contains a list of FaultInjection
+// FaultInjectionList contains a list of FaultInjections.
+//
+// +kubebuilder:object:root=true
 type FaultInjectionList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/faultinjection_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/faultinjection_types_deepcopy.go
deleted file mode 100644
index f9b98e31c..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/faultinjection_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *FaultInjection) DeepCopyInto(out *FaultInjection) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(in.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficPermission.
-func (in *FaultInjection) DeepCopy() *FaultInjection {
-	if in == nil {
-		return nil
-	}
-	out := new(FaultInjection)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *FaultInjection) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *FaultInjectionList) DeepCopyInto(out *FaultInjectionList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	out.ListMeta = in.ListMeta
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]FaultInjection, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficPermissionList.
-func (in *FaultInjectionList) DeepCopy() *FaultInjectionList {
-	if in == nil {
-		return nil
-	}
-	out := new(FaultInjectionList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *FaultInjectionList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/healthcheck_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/healthcheck_types.go
index 8f6822b30..53551af59 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/healthcheck_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/healthcheck_types.go
@@ -18,23 +18,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-// Important: Run "make" to regenerate code after modifying this file
 
-// HealthCheckSpec defines the desired state of HealthCheck
-type HealthCheckSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// HealthCheck is the Schema for the traffic routes API
+// HealthCheck is the Schema for the HealthCheck API.
+//
+// +kubebuilder:object:root=true
 type HealthCheck struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	Mesh              string `json:"mesh,omitempty"`
 
-	Spec HealthCheckSpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// HealthCheckList contains a list of HealthCheck
+// HealthCheckList contains a list of HealthChecks.
+//
+// +kubebuilder:object:root=true
 type HealthCheckList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/healthcheck_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/healthcheck_types_deepcopy.go
deleted file mode 100644
index fd029bcaa..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/healthcheck_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *HealthCheck) DeepCopyInto(out *HealthCheck) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(in.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HealthCheck.
-func (in *HealthCheck) DeepCopy() *HealthCheck {
-	if in == nil {
-		return nil
-	}
-	out := new(HealthCheck)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *HealthCheck) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *HealthCheckList) DeepCopyInto(out *HealthCheckList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	out.ListMeta = in.ListMeta
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]HealthCheck, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HealthCheckList.
-func (in *HealthCheckList) DeepCopy() *HealthCheckList {
-	if in == nil {
-		return nil
-	}
-	out := new(HealthCheckList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *HealthCheckList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_insight_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_insight_types.go
index ebb88b267..bc74da7a5 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_insight_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_insight_types.go
@@ -2,21 +2,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
 
-// MeshInsightSpec defines the observed state of Mesh
-type MeshInsightSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// MeshInsight is the Schema for the Mesg Insights API
+// MeshInsight is the Schema for the MeshInsights API.
+//
+// +kubebuilder:object:root=true
 type MeshInsight struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	Mesh              string `json:"mesh,omitempty"`
 
-	Spec MeshInsightSpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// MeshInsightList contains a list of MeshInsights
+// MeshInsightList contains a list of MeshInsights.
+//
+// +kubebuilder:object:root=true
 type MeshInsightList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_insight_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_insight_types_deepcopy.go
deleted file mode 100644
index bd745c43e..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_insight_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *MeshInsight) DeepCopyInto(out *MeshInsight) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(in.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Mesh.
-func (in *MeshInsight) DeepCopy() *MeshInsight {
-	if in == nil {
-		return nil
-	}
-	out := new(MeshInsight)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *MeshInsight) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *MeshInsightList) DeepCopyInto(out *MeshInsightList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	out.ListMeta = in.ListMeta
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]MeshInsight, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MeshList.
-func (in *MeshInsightList) DeepCopy() *MeshInsightList {
-	if in == nil {
-		return nil
-	}
-	out := new(MeshInsightList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *MeshInsightList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_types.go
index 4b9024db3..e3891849c 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_types.go
@@ -18,20 +18,23 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
 
-// MeshSpec defines the desired state of Mesh
-type MeshSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// Mesh is the Schema for the meshes API
+// Mesh is the Schema for the Mesh API.
+//
+// +kubebuilder:object:root=true
 type Mesh struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 
-	Spec MeshSpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// MeshList contains a list of Mesh
+// MeshList contains a list of Mesh.
+//
+// +kubebuilder:object:root=true
 type MeshList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_types_deepcopy.go
deleted file mode 100644
index 03bf25025..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/mesh_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *Mesh) DeepCopyInto(out *Mesh) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(in.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Mesh.
-func (in *Mesh) DeepCopy() *Mesh {
-	if in == nil {
-		return nil
-	}
-	out := new(Mesh)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *Mesh) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *MeshList) DeepCopyInto(out *MeshList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	out.ListMeta = in.ListMeta
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]Mesh, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MeshList.
-func (in *MeshList) DeepCopy() *MeshList {
-	if in == nil {
-		return nil
-	}
-	out := new(MeshList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *MeshList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/proxytemplate_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/proxytemplate_types.go
index ecf195496..4c74cff6a 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/proxytemplate_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/proxytemplate_types.go
@@ -18,23 +18,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-// Important: Run "make" to regenerate code after modifying this file
 
-// ProxyTemplateSpec defines the desired state of ProxyTemplate
-type ProxyTemplateSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// ProxyTemplate is the Schema for the proxytemplates API
+// ProxyTemplate is the Schema for the ProxyTemplate API.
+//
+// +kubebuilder:object:root=true
 type ProxyTemplate struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	Mesh              string `json:"mesh,omitempty"`
 
-	Spec ProxyTemplateSpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// ProxyTemplateList contains a list of ProxyTemplate
+// ProxyTemplateList contains a list of ProxyTemplates.
+//
+// +kubebuilder:object:root=true
 type ProxyTemplateList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/proxytemplate_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/proxytemplate_types_deepcopy.go
deleted file mode 100644
index 541cf5a55..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/proxytemplate_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ProxyTemplate) DeepCopyInto(out *ProxyTemplate) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(in.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProxyTemplate.
-func (in *ProxyTemplate) DeepCopy() *ProxyTemplate {
-	if in == nil {
-		return nil
-	}
-	out := new(ProxyTemplate)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *ProxyTemplate) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ProxyTemplateList) DeepCopyInto(out *ProxyTemplateList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	out.ListMeta = in.ListMeta
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]ProxyTemplate, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProxyTemplateList.
-func (in *ProxyTemplateList) DeepCopy() *ProxyTemplateList {
-	if in == nil {
-		return nil
-	}
-	out := new(ProxyTemplateList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *ProxyTemplateList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/ratelimit_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/ratelimit_types.go
index fcabe19c3..f6ffbffed 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/ratelimit_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/ratelimit_types.go
@@ -18,23 +18,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-// Important: Run "make" to regenerate code after modifying this file
 
-// RateLimitSpec defines the desired state of RateLimit
-type RateLimitSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// RateLimit is the Schema for the proxypermissions API
+// RateLimit is the Schema for the RateLimit API.
+//
+// +kubebuilder:object:root=true
 type RateLimit struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	Mesh              string `json:"mesh,omitempty"`
 
-	Spec RateLimitSpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// RateLimitList contains a list of RateLimit
+// RateLimitList contains a list of RateLimits.
+//
+// +kubebuilder:object:root=true
 type RateLimitList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/ratelimit_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/ratelimit_types_deepcopy.go
deleted file mode 100644
index 4faa71bc7..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/ratelimit_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *RateLimit) DeepCopyInto(out *RateLimit) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(in.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RateLimit.
-func (in *RateLimit) DeepCopy() *RateLimit {
-	if in == nil {
-		return nil
-	}
-	out := new(RateLimit)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *RateLimit) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *RateLimitList) DeepCopyInto(out *RateLimitList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	out.ListMeta = in.ListMeta
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]RateLimit, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RateLimitList.
-func (in *RateLimitList) DeepCopy() *RateLimitList {
-	if in == nil {
-		return nil
-	}
-	out := new(RateLimitList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *RateLimitList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/retry_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/retry_types.go
index bb7c4bd5a..94db3263b 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/retry_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/retry_types.go
@@ -16,21 +16,26 @@ limitations under the License.
 
 package v1alpha1
 
-import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+import (
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 
-// RetrySpec defined the desired state of Retry
-type RetrySpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// Retry is the Schema for the retry API
+// Retry is the Schema for the Retry API.
+//
+// +kubebuilder:object:root=true
 type Retry struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	Mesh              string `json:"mesh,omitempty"`
 
-	Spec RetrySpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// RetryList contains a list of Retry
+// RetryList contains a list of Retries.
+//
+// +kubebuilder:object:root=true
 type RetryList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/retry_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/retry_types_deepcopy.go
deleted file mode 100644
index 0008e7690..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/retry_types_deepcopy.go
+++ /dev/null
@@ -1,69 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver,
-// writing into out. in must be non-nil.
-func (in *Retry) DeepCopyInto(out *Retry) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(in.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver,
-// creating a new Retry.
-func (in *Retry) DeepCopy() *Retry {
-	if in == nil {
-		return nil
-	}
-	out := new(Retry)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver,
-// creating a new runtime.Object.
-func (in *Retry) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver,
-// writing into out. in must be non-nil.
-func (in *RetryList) DeepCopyInto(out *RetryList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	out.ListMeta = in.ListMeta
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]Retry, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver,
-// creating a new RetryList.
-func (in *RetryList) DeepCopy() *RetryList {
-	if in == nil {
-		return nil
-	}
-	out := new(RetryList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver,
-// creating a new runtime.Object.
-func (in *RetryList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/service_insight_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/service_insight_types.go
index d50a13fa9..db990c218 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/service_insight_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/service_insight_types.go
@@ -2,21 +2,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
 
-// ServiceInsightSpec defines the observed state of services in the Mesh
-type ServiceInsightSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// ServiceInsight is the Schema for the Service Insights API
+// ServiceInsight is the Schema for the ServiceInsight API.
+//
+// +kubebuilder:object:root=true
 type ServiceInsight struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	Mesh              string `json:"mesh,omitempty"`
 
-	Spec ServiceInsightSpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// ServiceInsightList contains a list of ServiceInsight
+// ServiceInsightList contains a list of ServiceInsights.
+//
+// +kubebuilder:object:root=true
 type ServiceInsightList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/service_insight_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/service_insight_types_deepcopy.go
deleted file mode 100644
index 10ee7b76b..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/service_insight_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ServiceInsight) DeepCopyInto(out *ServiceInsight) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(in.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceInsight.
-func (in *ServiceInsight) DeepCopy() *ServiceInsight {
-	if in == nil {
-		return nil
-	}
-	out := new(ServiceInsight)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *ServiceInsight) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *ServiceInsightList) DeepCopyInto(out *ServiceInsightList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	out.ListMeta = in.ListMeta
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]ServiceInsight, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceInsightList.
-func (in *ServiceInsightList) DeepCopy() *ServiceInsightList {
-	if in == nil {
-		return nil
-	}
-	out := new(ServiceInsightList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *ServiceInsightList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/timeout_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/timeout_types.go
index 765328d74..2eb4f7d81 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/timeout_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/timeout_types.go
@@ -18,24 +18,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-// EDIT THIS FILE!  THIS IS SCAFFOLDING FOR YOU TO OWN!
-// NOTE: json tags are required.  Any new fields you add must have json tags for the fields to be serialized.
 
-// Timeout defines the desired state of Timeout
-type TimeoutSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// Timeout is the Schema for the timeout API
+// Timeout is the Schema for the Timeout API.
+//
+// +kubebuilder:object:root=true
 type Timeout struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	Mesh              string `json:"mesh,omitempty"`
 
-	Spec TimeoutSpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// TimeoutList contains a list of Timeout
+// TimeoutList contains a list of Timeouts.
+//
+// +kubebuilder:object:root=true
 type TimeoutList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/timeout_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/timeout_types_deepcopy.go
deleted file mode 100644
index 3740a144c..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/timeout_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (t *Timeout) DeepCopyInto(out *Timeout) {
-	*out = *t
-	out.TypeMeta = t.TypeMeta
-	t.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(t.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficPermission.
-func (t *Timeout) DeepCopy() *Timeout {
-	if t == nil {
-		return nil
-	}
-	out := new(Timeout)
-	t.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (t *Timeout) DeepCopyObject() runtime.Object {
-	if c := t.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (l *TimeoutList) DeepCopyInto(out *TimeoutList) {
-	*out = *l
-	out.TypeMeta = l.TypeMeta
-	out.ListMeta = l.ListMeta
-	if l.Items != nil {
-		in, out := &l.Items, &out.Items
-		*out = make([]Timeout, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TimeoutList.
-func (l *TimeoutList) DeepCopy() *TimeoutList {
-	if l == nil {
-		return nil
-	}
-	out := new(TimeoutList)
-	l.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (l *TimeoutList) DeepCopyObject() runtime.Object {
-	if c := l.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficlogging_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficlogging_types.go
index ad3ff1753..c0c348e81 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficlogging_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficlogging_types.go
@@ -18,24 +18,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-// EDIT THIS FILE!  THIS IS SCAFFOLDING FOR YOU TO OWN!
-// NOTE: json tags are required.  Any new fields you add must have json tags for the fields to be serialized.
 
-// TrafficLogSpec defines the desired state of TrafficLog
-type TrafficLogSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// TrafficLog is the Schema for the trafficlogs API
+// TrafficLog is the Schema for the TrafficLog API.
+//
+// +kubebuilder:object:root=true
 type TrafficLog struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	Mesh              string `json:"mesh,omitempty"`
 
-	Spec TrafficLogSpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// TrafficLogList contains a list of TrafficLog
+// TrafficLogList contains a list of TrafficLogs.
+//
+// +kubebuilder:object:root=true
 type TrafficLogList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficlogging_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficlogging_types_deepcopy.go
deleted file mode 100644
index e6c4db56c..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficlogging_types_deepcopy.go
+++ /dev/null
@@ -1,83 +0,0 @@
-// +build !ignore_autogenerated
-
-/*
-Copyright 2019 Kuma authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by controller-gen. DO NOT EDIT.
-
-package v1alpha1
-
-import (
-	"k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *TrafficLog) DeepCopyInto(out *TrafficLog) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = in.Spec
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficLog.
-func (in *TrafficLog) DeepCopy() *TrafficLog {
-	if in == nil {
-		return nil
-	}
-	out := new(TrafficLog)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *TrafficLog) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *TrafficLogList) DeepCopyInto(out *TrafficLogList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	out.ListMeta = in.ListMeta
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]TrafficLog, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficLogList.
-func (in *TrafficLogList) DeepCopy() *TrafficLogList {
-	if in == nil {
-		return nil
-	}
-	out := new(TrafficLogList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *TrafficLogList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficpermission_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficpermission_types.go
index cc763dbed..f33bd57fe 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficpermission_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficpermission_types.go
@@ -18,23 +18,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-// Important: Run "make" to regenerate code after modifying this file
 
-// TrafficPermissionSpec defines the desired state of TrafficPermission
-type TrafficPermissionSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// TrafficPermission is the Schema for the proxypermissions API
+// TrafficPermission is the Schema for the TrafficPermission API.
+//
+// +kubebuilder:object:root=true
 type TrafficPermission struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	Mesh              string `json:"mesh,omitempty"`
 
-	Spec TrafficPermissionSpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// TrafficPermissionList contains a list of TrafficPermission
+// TrafficPermissionList contains a list of TrafficPermissions.
+//
+// +kubebuilder:object:root=true
 type TrafficPermissionList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficpermission_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficpermission_types_deepcopy.go
deleted file mode 100644
index 98ba2f7ad..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficpermission_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *TrafficPermission) DeepCopyInto(out *TrafficPermission) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(in.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficPermission.
-func (in *TrafficPermission) DeepCopy() *TrafficPermission {
-	if in == nil {
-		return nil
-	}
-	out := new(TrafficPermission)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *TrafficPermission) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *TrafficPermissionList) DeepCopyInto(out *TrafficPermissionList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	out.ListMeta = in.ListMeta
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]TrafficPermission, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficPermissionList.
-func (in *TrafficPermissionList) DeepCopy() *TrafficPermissionList {
-	if in == nil {
-		return nil
-	}
-	out := new(TrafficPermissionList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *TrafficPermissionList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficroute_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficroute_types.go
index e80f9da71..c253a3068 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficroute_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficroute_types.go
@@ -18,23 +18,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-// Important: Run "make" to regenerate code after modifying this file
 
-// TrafficRouteSpec defines the desired state of TrafficRoute
-type TrafficRouteSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// TrafficRoute is the Schema for the traffic routes API
+// TrafficRoute is the Schema for the Traffic Routes API.
+//
+// +kubebuilder:object:root=true
 type TrafficRoute struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	Mesh              string `json:"mesh,omitempty"`
 
-	Spec TrafficRouteSpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// TrafficRouteList contains a list of TrafficRoute
+// TrafficRouteList contains a list of TrafficRoutes.
+//
+// +kubebuilder:object:root=true
 type TrafficRouteList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficroute_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficroute_types_deepcopy.go
deleted file mode 100644
index 6f8fe104e..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/trafficroute_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *TrafficRoute) DeepCopyInto(out *TrafficRoute) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(in.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficRoute.
-func (in *TrafficRoute) DeepCopy() *TrafficRoute {
-	if in == nil {
-		return nil
-	}
-	out := new(TrafficRoute)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *TrafficRoute) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *TrafficRouteList) DeepCopyInto(out *TrafficRouteList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	out.ListMeta = in.ListMeta
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]TrafficRoute, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficRouteList.
-func (in *TrafficRouteList) DeepCopy() *TrafficRouteList {
-	if in == nil {
-		return nil
-	}
-	out := new(TrafficRouteList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *TrafficRouteList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/traffictrace_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/traffictrace_types.go
index 3145b2f33..af64aced8 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/traffictrace_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/traffictrace_types.go
@@ -18,24 +18,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-// EDIT THIS FILE!  THIS IS SCAFFOLDING FOR YOU TO OWN!
-// NOTE: json tags are required.  Any new fields you add must have json tags for the fields to be serialized.
 
-// TrafficTraceSpec defines the desired state of TrafficTrace
-type TrafficTraceSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// TrafficTrace is the Schema for the traffictraces API
+// TrafficTrace is the Schema for the TrafficTrace API.
+//
+// +kubebuilder:object:root=true
 type TrafficTrace struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	Mesh              string `json:"mesh,omitempty"`
 
-	Spec TrafficTraceSpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// TrafficTraceList contains a list of TrafficTrace
+// TrafficTraceList contains a list of TrafficTraces.
+//
+// +kubebuilder:object:root=true
 type TrafficTraceList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/traffictrace_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/traffictrace_types_deepcopy.go
deleted file mode 100644
index 397455484..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/traffictrace_types_deepcopy.go
+++ /dev/null
@@ -1,83 +0,0 @@
-// +build !ignore_autogenerated
-
-/*
-Copyright 2019 Kuma authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by controller-gen. DO NOT EDIT.
-
-package v1alpha1
-
-import (
-	"k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *TrafficTrace) DeepCopyInto(out *TrafficTrace) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = in.Spec
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficTrace.
-func (in *TrafficTrace) DeepCopy() *TrafficTrace {
-	if in == nil {
-		return nil
-	}
-	out := new(TrafficTrace)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *TrafficTrace) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *TrafficTraceList) DeepCopyInto(out *TrafficTraceList) {
-	*out = *in
-	out.TypeMeta = in.TypeMeta
-	out.ListMeta = in.ListMeta
-	if in.Items != nil {
-		in, out := &in.Items, &out.Items
-		*out = make([]TrafficTrace, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficTraceList.
-func (in *TrafficTraceList) DeepCopy() *TrafficTraceList {
-	if in == nil {
-		return nil
-	}
-	out := new(TrafficTraceList)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (in *TrafficTraceList) DeepCopyObject() runtime.Object {
-	if c := in.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_ingress_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_ingress_types.go
index 56f46c409..a5b345b3c 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_ingress_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_ingress_types.go
@@ -18,24 +18,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-// EDIT THIS FILE!  THIS IS SCAFFOLDING FOR YOU TO OWN!
-// NOTE: json tags are required.  Any new fields you add must have json tags for the fields to be serialized.
 
-// ZoneIngress defines the desired state of ZoneIngress
-type ZoneIngressSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// ZoneIngress is the Schema for the zone ingress API
+// ZoneIngress is the Schema for the Zone Ingress API.
+//
+// +kubebuilder:object:root=true
 type ZoneIngress struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	Mesh              string `json:"mesh,omitempty"`
 
-	Spec ZoneIngressSpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// ZoneIngressList contains a list of ZoneIngress
+// ZoneIngressList contains a list of ZoneIngresses.
+//
+// +kubebuilder:object:root=true
 type ZoneIngressList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_ingress_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_ingress_types_deepcopy.go
deleted file mode 100644
index 62c4eb4a8..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_ingress_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (zi *ZoneIngress) DeepCopyInto(out *ZoneIngress) {
-	*out = *zi
-	out.TypeMeta = zi.TypeMeta
-	zi.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(zi.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficPermission.
-func (zi *ZoneIngress) DeepCopy() *ZoneIngress {
-	if zi == nil {
-		return nil
-	}
-	out := new(ZoneIngress)
-	zi.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (zi *ZoneIngress) DeepCopyObject() runtime.Object {
-	if c := zi.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (l *ZoneIngressList) DeepCopyInto(out *ZoneIngressList) {
-	*out = *l
-	out.TypeMeta = l.TypeMeta
-	out.ListMeta = l.ListMeta
-	if l.Items != nil {
-		in, out := &l.Items, &out.Items
-		*out = make([]ZoneIngress, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficPermissionList.
-func (l *ZoneIngressList) DeepCopy() *ZoneIngressList {
-	if l == nil {
-		return nil
-	}
-	out := new(ZoneIngressList)
-	l.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (l *ZoneIngressList) DeepCopyObject() runtime.Object {
-	if c := l.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_insight_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_insight_types.go
index 83d9f6d9f..d687e800e 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_insight_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_insight_types.go
@@ -18,24 +18,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-// EDIT THIS FILE!  THIS IS SCAFFOLDING FOR YOU TO OWN!
-// NOTE: json tags are required.  Any new fields you add must have json tags for the fields to be serialized.
 
-// ZoneInsight defines the desired state of ZoneInsight
-type ZoneInsightSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// ZoneInsight is the Schema for the zone API
+// ZoneInsight is the Schema for the Zone Insight API.
+//
+// +kubebuilder:object:root=true
 type ZoneInsight struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	Mesh              string `json:"mesh,omitempty"`
 
-	Spec ZoneIngressInsightSpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// ZoneInsightList contains a list of Zone
+// ZoneInsightList contains a list of ZoneInsights.
+//
+// +kubebuilder:object:root=true
 type ZoneInsightList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_insight_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_insight_types_deepcopy.go
deleted file mode 100644
index 464d2eebc..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_insight_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (cb *ZoneInsight) DeepCopyInto(out *ZoneInsight) {
-	*out = *cb
-	out.TypeMeta = cb.TypeMeta
-	cb.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(cb.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficPermission.
-func (cb *ZoneInsight) DeepCopy() *ZoneInsight {
-	if cb == nil {
-		return nil
-	}
-	out := new(ZoneInsight)
-	cb.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (cb *ZoneInsight) DeepCopyObject() runtime.Object {
-	if c := cb.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (l *ZoneInsightList) DeepCopyInto(out *ZoneInsightList) {
-	*out = *l
-	out.TypeMeta = l.TypeMeta
-	out.ListMeta = l.ListMeta
-	if l.Items != nil {
-		in, out := &l.Items, &out.Items
-		*out = make([]ZoneInsight, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficPermissionList.
-func (l *ZoneInsightList) DeepCopy() *ZoneInsightList {
-	if l == nil {
-		return nil
-	}
-	out := new(ZoneInsightList)
-	l.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (l *ZoneInsightList) DeepCopyObject() runtime.Object {
-	if c := l.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_types.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_types.go
index 029e7af76..100543eaa 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_types.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_types.go
@@ -18,24 +18,24 @@ package v1alpha1
 
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-// EDIT THIS FILE!  THIS IS SCAFFOLDING FOR YOU TO OWN!
-// NOTE: json tags are required.  Any new fields you add must have json tags for the fields to be serialized.
 
-// Zone defines the desired state of Zone
-type ZoneSpec = map[string]interface{}
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
+)
 
-// Zone is the Schema for the zone API
+// Zone is the Schema for the Zone API.
+//
+// +kubebuilder:object:root=true
 type Zone struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 	Mesh              string `json:"mesh,omitempty"`
 
-	Spec ZoneSpec `json:"spec,omitempty"`
+	Spec model.RawMessage `json:"spec,omitempty"`
 }
 
-// ZoneList contains a list of Zone
+// ZoneList contains a list of Zones.
+//
+// +kubebuilder:object:root=true
 type ZoneList struct {
 	metav1.TypeMeta `json:",inline"`
 	metav1.ListMeta `json:"metadata,omitempty"`
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_types_deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_types_deepcopy.go
deleted file mode 100644
index dae336c95..000000000
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/zone_types_deepcopy.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package v1alpha1
-
-import (
-	runtime "k8s.io/apimachinery/pkg/runtime"
-)
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (cb *Zone) DeepCopyInto(out *Zone) {
-	*out = *cb
-	out.TypeMeta = cb.TypeMeta
-	cb.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-	out.Spec = runtime.DeepCopyJSON(cb.Spec)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficPermission.
-func (cb *Zone) DeepCopy() *Zone {
-	if cb == nil {
-		return nil
-	}
-	out := new(Zone)
-	cb.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (cb *Zone) DeepCopyObject() runtime.Object {
-	if c := cb.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (l *ZoneList) DeepCopyInto(out *ZoneList) {
-	*out = *l
-	out.TypeMeta = l.TypeMeta
-	out.ListMeta = l.ListMeta
-	if l.Items != nil {
-		in, out := &l.Items, &out.Items
-		*out = make([]Zone, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficPermissionList.
-func (l *ZoneList) DeepCopy() *ZoneList {
-	if l == nil {
-		return nil
-	}
-	out := new(ZoneList)
-	l.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
-func (l *ZoneList) DeepCopyObject() runtime.Object {
-	if c := l.DeepCopy(); c != nil {
-		return c
-	}
-	return nil
-}
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/zz_generated.deepcopy.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/zz_generated.deepcopy.go
new file mode 100644
index 000000000..98693646a
--- /dev/null
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/zz_generated.deepcopy.go
@@ -0,0 +1,1185 @@
+// +build !ignore_autogenerated
+
+/*
+Copyright 2021 Kuma authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Code generated by controller-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+	"k8s.io/apimachinery/pkg/runtime"
+)
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *CircuitBreaker) DeepCopyInto(out *CircuitBreaker) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CircuitBreaker.
+func (in *CircuitBreaker) DeepCopy() *CircuitBreaker {
+	if in == nil {
+		return nil
+	}
+	out := new(CircuitBreaker)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *CircuitBreaker) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *CircuitBreakerList) DeepCopyInto(out *CircuitBreakerList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]CircuitBreaker, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CircuitBreakerList.
+func (in *CircuitBreakerList) DeepCopy() *CircuitBreakerList {
+	if in == nil {
+		return nil
+	}
+	out := new(CircuitBreakerList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *CircuitBreakerList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Dataplane) DeepCopyInto(out *Dataplane) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Dataplane.
+func (in *Dataplane) DeepCopy() *Dataplane {
+	if in == nil {
+		return nil
+	}
+	out := new(Dataplane)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *Dataplane) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *DataplaneInsight) DeepCopyInto(out *DataplaneInsight) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Status = in.Status.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DataplaneInsight.
+func (in *DataplaneInsight) DeepCopy() *DataplaneInsight {
+	if in == nil {
+		return nil
+	}
+	out := new(DataplaneInsight)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *DataplaneInsight) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *DataplaneInsightList) DeepCopyInto(out *DataplaneInsightList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]DataplaneInsight, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DataplaneInsightList.
+func (in *DataplaneInsightList) DeepCopy() *DataplaneInsightList {
+	if in == nil {
+		return nil
+	}
+	out := new(DataplaneInsightList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *DataplaneInsightList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *DataplaneList) DeepCopyInto(out *DataplaneList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]Dataplane, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DataplaneList.
+func (in *DataplaneList) DeepCopy() *DataplaneList {
+	if in == nil {
+		return nil
+	}
+	out := new(DataplaneList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *DataplaneList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ExternalService) DeepCopyInto(out *ExternalService) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalService.
+func (in *ExternalService) DeepCopy() *ExternalService {
+	if in == nil {
+		return nil
+	}
+	out := new(ExternalService)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ExternalService) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ExternalServiceList) DeepCopyInto(out *ExternalServiceList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]ExternalService, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalServiceList.
+func (in *ExternalServiceList) DeepCopy() *ExternalServiceList {
+	if in == nil {
+		return nil
+	}
+	out := new(ExternalServiceList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ExternalServiceList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *FaultInjection) DeepCopyInto(out *FaultInjection) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FaultInjection.
+func (in *FaultInjection) DeepCopy() *FaultInjection {
+	if in == nil {
+		return nil
+	}
+	out := new(FaultInjection)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *FaultInjection) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *FaultInjectionList) DeepCopyInto(out *FaultInjectionList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]FaultInjection, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FaultInjectionList.
+func (in *FaultInjectionList) DeepCopy() *FaultInjectionList {
+	if in == nil {
+		return nil
+	}
+	out := new(FaultInjectionList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *FaultInjectionList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *HealthCheck) DeepCopyInto(out *HealthCheck) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HealthCheck.
+func (in *HealthCheck) DeepCopy() *HealthCheck {
+	if in == nil {
+		return nil
+	}
+	out := new(HealthCheck)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *HealthCheck) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *HealthCheckList) DeepCopyInto(out *HealthCheckList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]HealthCheck, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HealthCheckList.
+func (in *HealthCheckList) DeepCopy() *HealthCheckList {
+	if in == nil {
+		return nil
+	}
+	out := new(HealthCheckList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *HealthCheckList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Mesh) DeepCopyInto(out *Mesh) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Mesh.
+func (in *Mesh) DeepCopy() *Mesh {
+	if in == nil {
+		return nil
+	}
+	out := new(Mesh)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *Mesh) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *MeshInsight) DeepCopyInto(out *MeshInsight) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MeshInsight.
+func (in *MeshInsight) DeepCopy() *MeshInsight {
+	if in == nil {
+		return nil
+	}
+	out := new(MeshInsight)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *MeshInsight) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *MeshInsightList) DeepCopyInto(out *MeshInsightList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]MeshInsight, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MeshInsightList.
+func (in *MeshInsightList) DeepCopy() *MeshInsightList {
+	if in == nil {
+		return nil
+	}
+	out := new(MeshInsightList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *MeshInsightList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *MeshList) DeepCopyInto(out *MeshList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]Mesh, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MeshList.
+func (in *MeshList) DeepCopy() *MeshList {
+	if in == nil {
+		return nil
+	}
+	out := new(MeshList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *MeshList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ProxyTemplate) DeepCopyInto(out *ProxyTemplate) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProxyTemplate.
+func (in *ProxyTemplate) DeepCopy() *ProxyTemplate {
+	if in == nil {
+		return nil
+	}
+	out := new(ProxyTemplate)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ProxyTemplate) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ProxyTemplateList) DeepCopyInto(out *ProxyTemplateList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]ProxyTemplate, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProxyTemplateList.
+func (in *ProxyTemplateList) DeepCopy() *ProxyTemplateList {
+	if in == nil {
+		return nil
+	}
+	out := new(ProxyTemplateList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ProxyTemplateList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *RateLimit) DeepCopyInto(out *RateLimit) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RateLimit.
+func (in *RateLimit) DeepCopy() *RateLimit {
+	if in == nil {
+		return nil
+	}
+	out := new(RateLimit)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *RateLimit) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *RateLimitList) DeepCopyInto(out *RateLimitList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]RateLimit, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RateLimitList.
+func (in *RateLimitList) DeepCopy() *RateLimitList {
+	if in == nil {
+		return nil
+	}
+	out := new(RateLimitList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *RateLimitList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Retry) DeepCopyInto(out *Retry) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Retry.
+func (in *Retry) DeepCopy() *Retry {
+	if in == nil {
+		return nil
+	}
+	out := new(Retry)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *Retry) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *RetryList) DeepCopyInto(out *RetryList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]Retry, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RetryList.
+func (in *RetryList) DeepCopy() *RetryList {
+	if in == nil {
+		return nil
+	}
+	out := new(RetryList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *RetryList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ServiceInsight) DeepCopyInto(out *ServiceInsight) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceInsight.
+func (in *ServiceInsight) DeepCopy() *ServiceInsight {
+	if in == nil {
+		return nil
+	}
+	out := new(ServiceInsight)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ServiceInsight) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ServiceInsightList) DeepCopyInto(out *ServiceInsightList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]ServiceInsight, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceInsightList.
+func (in *ServiceInsightList) DeepCopy() *ServiceInsightList {
+	if in == nil {
+		return nil
+	}
+	out := new(ServiceInsightList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ServiceInsightList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Timeout) DeepCopyInto(out *Timeout) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Timeout.
+func (in *Timeout) DeepCopy() *Timeout {
+	if in == nil {
+		return nil
+	}
+	out := new(Timeout)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *Timeout) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *TimeoutList) DeepCopyInto(out *TimeoutList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]Timeout, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TimeoutList.
+func (in *TimeoutList) DeepCopy() *TimeoutList {
+	if in == nil {
+		return nil
+	}
+	out := new(TimeoutList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *TimeoutList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *TrafficLog) DeepCopyInto(out *TrafficLog) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficLog.
+func (in *TrafficLog) DeepCopy() *TrafficLog {
+	if in == nil {
+		return nil
+	}
+	out := new(TrafficLog)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *TrafficLog) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *TrafficLogList) DeepCopyInto(out *TrafficLogList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]TrafficLog, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficLogList.
+func (in *TrafficLogList) DeepCopy() *TrafficLogList {
+	if in == nil {
+		return nil
+	}
+	out := new(TrafficLogList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *TrafficLogList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *TrafficPermission) DeepCopyInto(out *TrafficPermission) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficPermission.
+func (in *TrafficPermission) DeepCopy() *TrafficPermission {
+	if in == nil {
+		return nil
+	}
+	out := new(TrafficPermission)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *TrafficPermission) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *TrafficPermissionList) DeepCopyInto(out *TrafficPermissionList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]TrafficPermission, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficPermissionList.
+func (in *TrafficPermissionList) DeepCopy() *TrafficPermissionList {
+	if in == nil {
+		return nil
+	}
+	out := new(TrafficPermissionList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *TrafficPermissionList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *TrafficRoute) DeepCopyInto(out *TrafficRoute) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficRoute.
+func (in *TrafficRoute) DeepCopy() *TrafficRoute {
+	if in == nil {
+		return nil
+	}
+	out := new(TrafficRoute)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *TrafficRoute) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *TrafficRouteList) DeepCopyInto(out *TrafficRouteList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]TrafficRoute, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficRouteList.
+func (in *TrafficRouteList) DeepCopy() *TrafficRouteList {
+	if in == nil {
+		return nil
+	}
+	out := new(TrafficRouteList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *TrafficRouteList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *TrafficTrace) DeepCopyInto(out *TrafficTrace) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficTrace.
+func (in *TrafficTrace) DeepCopy() *TrafficTrace {
+	if in == nil {
+		return nil
+	}
+	out := new(TrafficTrace)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *TrafficTrace) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *TrafficTraceList) DeepCopyInto(out *TrafficTraceList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]TrafficTrace, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficTraceList.
+func (in *TrafficTraceList) DeepCopy() *TrafficTraceList {
+	if in == nil {
+		return nil
+	}
+	out := new(TrafficTraceList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *TrafficTraceList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Zone) DeepCopyInto(out *Zone) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Zone.
+func (in *Zone) DeepCopy() *Zone {
+	if in == nil {
+		return nil
+	}
+	out := new(Zone)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *Zone) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ZoneIngress) DeepCopyInto(out *ZoneIngress) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZoneIngress.
+func (in *ZoneIngress) DeepCopy() *ZoneIngress {
+	if in == nil {
+		return nil
+	}
+	out := new(ZoneIngress)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ZoneIngress) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ZoneIngressList) DeepCopyInto(out *ZoneIngressList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]ZoneIngress, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZoneIngressList.
+func (in *ZoneIngressList) DeepCopy() *ZoneIngressList {
+	if in == nil {
+		return nil
+	}
+	out := new(ZoneIngressList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ZoneIngressList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ZoneInsight) DeepCopyInto(out *ZoneInsight) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec.DeepCopy()
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZoneInsight.
+func (in *ZoneInsight) DeepCopy() *ZoneInsight {
+	if in == nil {
+		return nil
+	}
+	out := new(ZoneInsight)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ZoneInsight) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ZoneInsightList) DeepCopyInto(out *ZoneInsightList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]ZoneInsight, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZoneInsightList.
+func (in *ZoneInsightList) DeepCopy() *ZoneInsightList {
+	if in == nil {
+		return nil
+	}
+	out := new(ZoneInsightList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ZoneInsightList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ZoneList) DeepCopyInto(out *ZoneList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]Zone, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZoneList.
+func (in *ZoneList) DeepCopy() *ZoneList {
+	if in == nil {
+		return nil
+	}
+	out := new(ZoneList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ZoneList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
diff --git a/pkg/plugins/resources/k8s/native/hack/boilerplate.go.txt b/pkg/plugins/resources/k8s/native/hack/boilerplate.go.txt
index 78c67c4b2..4cc364e18 100644
--- a/pkg/plugins/resources/k8s/native/hack/boilerplate.go.txt
+++ b/pkg/plugins/resources/k8s/native/hack/boilerplate.go.txt
@@ -1,5 +1,5 @@
 /*
-Copyright 2019 Kuma authors.
+Copyright YEAR Kuma authors.
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
@@ -12,4 +12,4 @@ distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-*/
\ No newline at end of file
+*/
diff --git a/pkg/plugins/resources/k8s/native/pkg/model/resources.go b/pkg/plugins/resources/k8s/native/pkg/model/resources.go
index a21effd66..c08747033 100644
--- a/pkg/plugins/resources/k8s/native/pkg/model/resources.go
+++ b/pkg/plugins/resources/k8s/native/pkg/model/resources.go
@@ -15,6 +15,7 @@ const (
 type KubernetesObject interface {
 	runtime.Object
 	metav1.Object
+
 	GetObjectMeta() *metav1.ObjectMeta
 	SetObjectMeta(*metav1.ObjectMeta)
 	GetMesh() string
@@ -29,3 +30,11 @@ type KubernetesList interface {
 	GetItems() []KubernetesObject
 	GetContinue() string
 }
+
+// RawMessage is a carrier for an untyped JSON payload.
+type RawMessage map[string]interface{}
+
+// DeepCopy ...
+func (in RawMessage) DeepCopy() RawMessage {
+	return runtime.DeepCopyJSON(in)
+}


Test patch:
diff --git a/pkg/plugins/resources/k8s/native/api/v1alpha1/suite_test.go b/pkg/plugins/resources/k8s/native/api/v1alpha1/suite_test.go
index 0c409ae7b..a954d1944 100644
--- a/pkg/plugins/resources/k8s/native/api/v1alpha1/suite_test.go
+++ b/pkg/plugins/resources/k8s/native/api/v1alpha1/suite_test.go
@@ -33,6 +33,7 @@ import (
 	logf "sigs.k8s.io/controller-runtime/pkg/log"
 	"sigs.k8s.io/controller-runtime/pkg/log/zap"
 
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/model"
 	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/test"
 )
 
@@ -73,3 +74,24 @@ var _ = AfterSuite(func() {
 	err := testEnv.Stop()
 	Expect(err).ToNot(HaveOccurred())
 })
+
+var _ = Describe("RawMessage", func() {
+	It("should deep copy", func() {
+		r1 := model.RawMessage(
+			map[string]interface{}{
+				"int": int64(2),
+				"str": "one",
+				"map": map[string]interface{}{
+					"true":  true,
+					"false": false,
+				},
+			},
+		)
+
+		r2 := r1.DeepCopy()
+		Expect(r1).To(Equal(r2))
+
+		r1["int"] = int64(32)
+		Expect(r1).ToNot(Equal(r2))
+	})
+})