diff --git a/controller/cache/cache.go b/controller/cache/cache.go index e5e2aa32d096b..f9cb19b0dd08b 100644 --- a/controller/cache/cache.go +++ b/controller/cache/cache.go @@ -8,8 +8,11 @@ import ( log "github.com/sirupsen/logrus" + "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/discovery" "k8s.io/client-go/tools/cache" appv1 "github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1" @@ -23,6 +26,7 @@ const ( ) type LiveStateCache interface { + IsNamespaced(server string, gvk schema.GroupVersionKind) (bool, error) // Returns child nodes for a given k8s resource GetChildren(server string, obj *unstructured.Unstructured) ([]appv1.ResourceNode, error) // Returns state of live nodes which correspond for target nodes of specified application. @@ -31,6 +35,14 @@ type LiveStateCache interface { Run(ctx context.Context) } +func GetTargetObjKey(a *appv1.Application, un *unstructured.Unstructured, isNamespaced bool) kube.ResourceKey { + key := kube.GetResourceKey(un) + if isNamespaced && key.Namespace == "" { + key.Namespace = a.Spec.Destination.Namespace + } + return key +} + func NewLiveStateCache(db db.ArgoDB, appInformer cache.SharedIndexInformer, kubectl kube.Kubectl, onAppUpdated func(appName string)) LiveStateCache { return &liveStateCache{ appInformer: appInformer, @@ -76,6 +88,7 @@ func (c *liveStateCache) getCluster(server string) (*clusterInfo, error) { } info = &clusterInfo{ + apis: make(map[schema.GroupVersionKind]v1.APIResource), lock: &sync.Mutex{}, nodes: make(map[kube.ResourceKey]*node), onAppUpdated: c.onAppUpdated, @@ -86,6 +99,23 @@ func (c *liveStateCache) getCluster(server string) (*clusterInfo, error) { } c.clusters[cluster.Server] = info + disco, err := discovery.NewDiscoveryClientForConfig(cluster.RESTConfig()) + if err != nil { + return nil, err + } + resources, err := disco.ServerResources() + if err != nil { + return nil, err + } + for _, r := range resources { + gv, err := schema.ParseGroupVersion(r.GroupVersion) + if err != nil { + gv = schema.GroupVersion{} + } + for i := range r.APIResources { + info.apis[gv.WithKind(r.APIResources[i].Kind)] = r.APIResources[i] + } + } } c.lock.Unlock() err := info.ensureSynced() @@ -95,6 +125,14 @@ func (c *liveStateCache) getCluster(server string) (*clusterInfo, error) { return info, nil } +func (c *liveStateCache) IsNamespaced(server string, gvk schema.GroupVersionKind) (bool, error) { + clusterInfo, err := c.getCluster(server) + if err != nil { + return false, err + } + return clusterInfo.isNamespaced(gvk), nil +} + func (c *liveStateCache) GetChildren(server string, obj *unstructured.Unstructured) ([]appv1.ResourceNode, error) { clusterInfo, err := c.getCluster(server) if err != nil { diff --git a/controller/cache/cluster.go b/controller/cache/cluster.go index d0598e6c8e513..d9304a3fc1950 100644 --- a/controller/cache/cluster.go +++ b/controller/cache/cluster.go @@ -24,6 +24,7 @@ const ( ) type clusterInfo struct { + apis map[schema.GroupVersionKind]metav1.APIResource nodes map[kube.ResourceKey]*node lock *sync.Mutex onAppUpdated func(appName string) @@ -115,6 +116,13 @@ func (c *clusterInfo) getChildren(obj *unstructured.Unstructured) []appv1.Resour return children } +func (c *clusterInfo) isNamespaced(gvk schema.GroupVersionKind) bool { + if api, ok := c.apis[gvk]; ok && !api.Namespaced { + return false + } + return true +} + func (c *clusterInfo) getControlledLiveObjs(a *appv1.Application, targetObjs []*unstructured.Unstructured) (map[kube.ResourceKey]*unstructured.Unstructured, error) { c.lock.Lock() defer c.lock.Unlock() @@ -128,7 +136,7 @@ func (c *clusterInfo) getControlledLiveObjs(a *appv1.Application, targetObjs []* lock := &sync.Mutex{} err := util.RunAllAsync(len(targetObjs), func(i int) error { targetObj := targetObjs[i] - key := kube.GetResourceKeyNS(targetObj, util.FirstNonEmpty(targetObj.GetNamespace(), a.Spec.Destination.Namespace)) + key := GetTargetObjKey(a, targetObj, c.isNamespaced(targetObj.GroupVersionKind())) lock.Lock() controlledObj := controlledObjs[key] lock.Unlock() diff --git a/controller/cache/cluster_test.go b/controller/cache/cluster_test.go index 96c58c05486dd..d19404597ab70 100644 --- a/controller/cache/cluster_test.go +++ b/controller/cache/cluster_test.go @@ -4,17 +4,15 @@ import ( "sync" "testing" - "github.com/argoproj/argo-cd/common" - corev1 "k8s.io/api/core/v1" - - "github.com/argoproj/argo-cd/util/kube" - "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" + "github.com/argoproj/argo-cd/common" "github.com/argoproj/argo-cd/errors" + "github.com/argoproj/argo-cd/util/kube" "github.com/ghodss/yaml" "github.com/stretchr/testify/assert" @@ -83,6 +81,7 @@ func newCluster(resources ...*unstructured.Unstructured) *clusterInfo { cluster: &appv1.Cluster{}, syncTime: nil, syncLock: &sync.Mutex{}, + apis: make(map[schema.GroupVersionKind]v1.APIResource), } } @@ -93,18 +92,26 @@ func TestGetChildren(t *testing.T) { rsChildren := cluster.getChildren(testRS) assert.Equal(t, []appv1.ResourceNode{{ - Kind: "Pod", Namespace: "default", Name: "helm-guestbook-pod", Group: "", Version: "v1", Tags: []string{"0/0"}, Children: make([]appv1.ResourceNode, 0), + Kind: "Pod", + Namespace: "default", + Name: "helm-guestbook-pod", + Group: "", + Version: "v1", + Tags: []string{"0/0"}, + Children: make([]appv1.ResourceNode, 0), + ResourceVersion: "123", }}, rsChildren) deployChildren := cluster.getChildren(testDeploy) assert.Equal(t, []appv1.ResourceNode{{ - Kind: "ReplicaSet", - Namespace: "default", - Name: "helm-guestbook-rs", - Group: "extensions", - Version: "v1beta1", - Children: rsChildren, - Tags: []string{}, + Kind: "ReplicaSet", + Namespace: "default", + Name: "helm-guestbook-rs", + Group: "extensions", + Version: "v1beta1", + ResourceVersion: "123", + Children: rsChildren, + Tags: []string{}, }}, deployChildren) } @@ -169,9 +176,23 @@ func TestProcessNewChildEvent(t *testing.T) { rsChildren := cluster.getChildren(testRS) assert.Equal(t, []appv1.ResourceNode{{ - Kind: "Pod", Namespace: "default", Name: "helm-guestbook-pod", Group: "", Version: "v1", Tags: []string{"0/0"}, Children: make([]appv1.ResourceNode, 0), + Kind: "Pod", + Namespace: "default", + Name: "helm-guestbook-pod", + Group: "", + Version: "v1", + Tags: []string{"0/0"}, + Children: make([]appv1.ResourceNode, 0), + ResourceVersion: "123", }, { - Kind: "Pod", Namespace: "default", Name: "helm-guestbook-pod2", Group: "", Version: "v1", Tags: []string{"0/0"}, Children: make([]appv1.ResourceNode, 0), + Kind: "Pod", + Namespace: "default", + Name: "helm-guestbook-pod2", + Group: "", + Version: "v1", + Tags: []string{"0/0"}, + Children: make([]appv1.ResourceNode, 0), + ResourceVersion: "123", }}, rsChildren) } diff --git a/controller/state.go b/controller/state.go index d6c748b66a066..412f1b06eae1a 100644 --- a/controller/state.go +++ b/controller/state.go @@ -155,8 +155,14 @@ func (m *appStateManager) CompareAppState(app *v1alpha1.Application, revision st controlledLiveObj := make([]*unstructured.Unstructured, len(targetObjs)) for i, obj := range targetObjs { + gvk := obj.GroupVersionKind() - key := kubeutil.NewResourceKey(gvk.Group, gvk.Kind, util.FirstNonEmpty(obj.GetNamespace(), app.Spec.Destination.Namespace), obj.GetName()) + + ns := util.FirstNonEmpty(obj.GetNamespace(), app.Spec.Destination.Namespace) + if namespaced, err := m.liveStateCache.IsNamespaced(app.Spec.Destination.Server, obj.GroupVersionKind()); err == nil && !namespaced { + ns = "" + } + key := kubeutil.NewResourceKey(gvk.Group, gvk.Kind, ns, obj.GetName()) if liveObj, ok := liveObjByKey[key]; ok { controlledLiveObj[i] = liveObj delete(liveObjByKey, key) diff --git a/controller/sync.go b/controller/sync.go index f5f664e50faab..a52d4c07e9515 100644 --- a/controller/sync.go +++ b/controller/sync.go @@ -10,7 +10,6 @@ import ( apierr "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/discovery" "k8s.io/client-go/dynamic" "k8s.io/client-go/rest" @@ -31,6 +30,7 @@ type syncContext struct { disco discovery.DiscoveryInterface kubectl kube.Kubectl namespace string + server string syncOp *appv1.SyncOperation syncRes *appv1.SyncOperationResult syncResources []appv1.SyncOperationResource @@ -135,6 +135,7 @@ func (m *appStateManager) SyncAppState(app *appv1.Application, state *appv1.Oper disco: disco, kubectl: m.kubectl, namespace: app.Spec.Destination.Namespace, + server: app.Spec.Destination.Server, syncOp: &syncOp, syncRes: syncRes, syncResources: syncResources, @@ -163,14 +164,16 @@ func (m *appStateManager) SyncAppState(app *appv1.Application, state *appv1.Oper // indicates the live object needs to be pruned. A liveObj of nil indicates the object has yet to // be deployed type syncTask struct { - liveObj *unstructured.Unstructured - targetObj *unstructured.Unstructured + liveObj *unstructured.Unstructured + targetObj *unstructured.Unstructured + skipDryRun bool } // sync has performs the actual apply or hook based sync func (sc *syncContext) sync() { syncTasks, successful := sc.generateSyncTasks() if !successful { + sc.setOperationPhase(appv1.OperationFailed, "one or more synchronization tasks are not valid") return } @@ -236,21 +239,70 @@ func (sc *syncContext) forceAppRefresh() { // generateSyncTasks() generates the list of sync tasks we will be performing during this sync. func (sc *syncContext) generateSyncTasks() ([]syncTask, bool) { syncTasks := make([]syncTask, 0) + successful := true for _, resourceState := range sc.resources { if sc.syncResources == nil || (resourceState.Live != nil && argo.ContainsSyncResource(resourceState.Live.GetName(), resourceState.Live.GroupVersionKind(), sc.syncResources)) || (resourceState.Target != nil && argo.ContainsSyncResource(resourceState.Target.GetName(), resourceState.Target.GroupVersionKind(), sc.syncResources)) { + skipDryRun := false + var targetObj *unstructured.Unstructured + if resourceState.Target != nil { + targetObj = resourceState.Target.DeepCopy() + if targetObj.GetNamespace() == "" { + targetObj.SetNamespace(sc.namespace) + } + gvk := targetObj.GroupVersionKind() + serverRes, err := kube.ServerResourceForGroupVersionKind(sc.disco, gvk) + if err != nil { + // Special case for custom resources: if custom resource definition is not supported by the cluster by defined in application then + // skip verification using `kubectl apply --dry-run` and since CRD should be created during app synchronization. + if apierr.IsNotFound(err) && hasCRDOfGroupKind(sc.resources, gvk.Group, gvk.Kind) { + skipDryRun = true + } else { + sc.setResourceDetails(&appv1.ResourceDetails{ + Name: targetObj.GetName(), + Kind: targetObj.GetKind(), + Namespace: targetObj.GetNamespace(), + Message: err.Error(), + Status: appv1.ResourceDetailsSyncFailed, + }) + } + } else { + if !sc.proj.IsResourcePermitted(metav1.GroupKind{Group: gvk.Group, Kind: gvk.Kind}, serverRes.Namespaced) { + sc.setResourceDetails(&appv1.ResourceDetails{ + Name: targetObj.GetName(), + Kind: targetObj.GetKind(), + Namespace: targetObj.GetNamespace(), + Message: fmt.Sprintf("Resource %s:%s is not permitted in project %s.", gvk.Group, gvk.Kind, sc.proj.Name), + Status: appv1.ResourceDetailsSyncFailed, + }) + successful = false + } + + if serverRes.Namespaced && !sc.proj.IsDestinationPermitted(appv1.ApplicationDestination{Namespace: targetObj.GetNamespace(), Server: sc.server}) { + sc.setResourceDetails(&appv1.ResourceDetails{ + Name: targetObj.GetName(), + Kind: targetObj.GetKind(), + Namespace: targetObj.GetNamespace(), + Message: fmt.Sprintf("namespace %v is not permitted in project '%s'", targetObj.GetNamespace(), sc.proj.Name), + Status: appv1.ResourceDetailsSyncFailed, + }) + successful = false + } + } + } syncTask := syncTask{ - liveObj: resourceState.Live, - targetObj: resourceState.Target, + liveObj: resourceState.Live, + targetObj: targetObj, + skipDryRun: skipDryRun, } syncTasks = append(syncTasks, syncTask) } } sort.Sort(newKindSorter(syncTasks, resourceOrder)) - return syncTasks, true + return syncTasks, successful } // startedPreSyncPhase detects if we already started the PreSync stage of a sync operation. @@ -303,9 +355,9 @@ func (sc *syncContext) applyObject(targetObj *unstructured.Unstructured, dryRun resDetails := appv1.ResourceDetails{ Name: targetObj.GetName(), Kind: targetObj.GetKind(), - Namespace: sc.namespace, + Namespace: targetObj.GetNamespace(), } - message, err := sc.kubectl.ApplyResource(sc.config, targetObj, sc.namespace, dryRun, force) + message, err := sc.kubectl.ApplyResource(sc.config, targetObj, targetObj.GetNamespace(), dryRun, force) if err != nil { resDetails.Message = err.Error() resDetails.Status = appv1.ResourceDetailsSyncFailed @@ -345,14 +397,14 @@ func (sc *syncContext) pruneObject(liveObj *unstructured.Unstructured, prune, dr return resDetails } -func hasCRDOfGroupKind(tasks []syncTask, group, kind string) bool { - for _, task := range tasks { - if kube.IsCRD(task.targetObj) { - crdGroup, ok, err := unstructured.NestedString(task.targetObj.Object, "spec", "group") +func hasCRDOfGroupKind(resources []ControlledResource, group string, kind string) bool { + for _, res := range resources { + if res.Target != nil && kube.IsCRD(res.Target) { + crdGroup, ok, err := unstructured.NestedString(res.Target.Object, "spec", "group") if err != nil || !ok { continue } - crdKind, ok, err := unstructured.NestedString(task.targetObj.Object, "spec", "names", "kind") + crdKind, ok, err := unstructured.NestedString(res.Target.Object, "spec", "names", "kind") if err != nil || !ok { continue } @@ -397,43 +449,12 @@ func (sc *syncContext) doApplySync(syncTasks []syncTask, dryRun, force, update b } wg.Wait() - processCreateTasks := func(tasks []syncTask, gvk schema.GroupVersionKind) { - serverRes, err := kube.ServerResourceForGroupVersionKind(sc.disco, gvk) - if err != nil { - // Special case for custom resources: if custom resource definition is not supported by the cluster by defined in application then - // skip verification using `kubectl apply --dry-run` and since CRD should be created during app synchronization. - if dryRun && apierr.IsNotFound(err) && hasCRDOfGroupKind(createTasks, gvk.Group, gvk.Kind) { - return - } - syncSuccessful = false - for _, task := range tasks { - sc.setResourceDetails(&appv1.ResourceDetails{ - Name: task.targetObj.GetName(), - Kind: task.targetObj.GetKind(), - Namespace: sc.namespace, - Message: err.Error(), - Status: appv1.ResourceDetailsSyncFailed, - }) - } - return - } - - if !sc.proj.IsResourcePermitted(metav1.GroupKind{Group: gvk.Group, Kind: gvk.Kind}, serverRes.Namespaced) { - syncSuccessful = false - for _, task := range tasks { - sc.setResourceDetails(&appv1.ResourceDetails{ - Name: task.targetObj.GetName(), - Kind: task.targetObj.GetKind(), - Namespace: sc.namespace, - Message: fmt.Sprintf("Resource %s:%s is not permitted in project %s.", gvk.Group, gvk.Kind, sc.proj.Name), - Status: appv1.ResourceDetailsSyncFailed, - }) - } - return - } - + processCreateTasks := func(tasks []syncTask) { var createWg sync.WaitGroup for i := range tasks { + if dryRun && tasks[i].skipDryRun { + continue + } createWg.Add(1) go func(t syncTask) { defer createWg.Done() @@ -456,14 +477,14 @@ func (sc *syncContext) doApplySync(syncTasks []syncTask, dryRun, force, update b for _, task := range createTasks { //Only wait if the type of the next task is different than the previous type if len(tasksGroup) > 0 && tasksGroup[0].targetObj.GetKind() != task.targetObj.GetKind() { - processCreateTasks(tasksGroup, tasksGroup[0].targetObj.GroupVersionKind()) + processCreateTasks(tasksGroup) tasksGroup = []syncTask{task} } else { tasksGroup = append(tasksGroup, task) } } if len(tasksGroup) > 0 { - processCreateTasks(tasksGroup, tasksGroup[0].targetObj.GroupVersionKind()) + processCreateTasks(tasksGroup) } return syncSuccessful } diff --git a/controller/sync_hooks.go b/controller/sync_hooks.go index cf26c30fc048d..9a8b509825369 100644 --- a/controller/sync_hooks.go +++ b/controller/sync_hooks.go @@ -90,6 +90,17 @@ func (sc *syncContext) verifyPermittedHooks(hooks []*unstructured.Unstructured) sc.setOperationPhase(appv1.OperationFailed, fmt.Sprintf("Hook resource %s:%s is not permitted in project %s", gvk.Group, gvk.Kind, sc.proj.Name)) return false } + + if serverRes.Namespaced && !sc.proj.IsDestinationPermitted(appv1.ApplicationDestination{Namespace: hook.GetNamespace(), Server: sc.server}) { + sc.setResourceDetails(&appv1.ResourceDetails{ + Name: hook.GetName(), + Kind: hook.GetKind(), + Namespace: hook.GetNamespace(), + Message: fmt.Sprintf("namespace %v is not permitted in project '%s'", hook.GetNamespace(), sc.proj.Name), + Status: appv1.ResourceDetailsSyncFailed, + }) + return false + } } return true } @@ -103,6 +114,9 @@ func (sc *syncContext) getHooks(hookTypes ...appv1.HookType) ([]*unstructured.Un if err != nil { return nil, err } + if hook.GetNamespace() == "" { + hook.SetNamespace(sc.namespace) + } if !isArgoHook(&hook) { // TODO: in the future, if we want to map helm hooks to Argo CD lifecycles, we should // include helm hooks in the returned list @@ -138,7 +152,7 @@ func (sc *syncContext) runHooks(hooks []*unstructured.Unstructured, hookType app sc.setResourceDetails(&appv1.ResourceDetails{ Name: hook.GetName(), Kind: hook.GetKind(), - Namespace: sc.namespace, + Namespace: hook.GetNamespace(), Message: "Skipped", }) continue @@ -223,7 +237,7 @@ func (sc *syncContext) runHook(hook *unstructured.Unstructured, hookType appv1.H return false, err } resource := kube.ToGroupVersionResource(gvk.GroupVersion().String(), apiResource) - resIf := kube.ToResourceInterface(sc.dynamicIf, apiResource, resource, sc.namespace) + resIf := kube.ToResourceInterface(sc.dynamicIf, apiResource, resource, hook.GetNamespace()) var liveObj *unstructured.Unstructured existing, err := resIf.Get(hook.GetName(), metav1.GetOptions{}) @@ -236,7 +250,7 @@ func (sc *syncContext) runHook(hook *unstructured.Unstructured, hookType appv1.H if err != nil { sc.log.Warnf("Failed to set application label on hook %v: %v", hook, err) } - _, err := sc.kubectl.ApplyResource(sc.config, hook, sc.namespace, false, false) + _, err := sc.kubectl.ApplyResource(sc.config, hook, hook.GetNamespace(), false, false) if err != nil { return false, fmt.Errorf("Failed to create %s hook %s '%s': %v", hookType, gvk, hook.GetName(), err) } @@ -253,7 +267,7 @@ func (sc *syncContext) runHook(hook *unstructured.Unstructured, hookType appv1.H hookStatus := newHookStatus(liveObj, hookType) if hookStatus.Status.Completed() { if enforceHookDeletePolicy(hook, hookStatus.Status) { - err = sc.deleteHook(hook.GetName(), hook.GetKind(), hook.GetAPIVersion()) + err = sc.deleteHook(hook.GetName(), hook.GetKind(), hook.GetAPIVersion(), hook.GetNamespace()) if err != nil { hookStatus.Status = appv1.OperationFailed hookStatus.Message = fmt.Sprintf("failed to delete %s hook: %v", hookStatus.Status, err) @@ -348,6 +362,7 @@ func newHookStatus(hook *unstructured.Unstructured, hookType appv1.HookType) app Kind: hook.GetKind(), APIVersion: hook.GetAPIVersion(), Type: hookType, + Namespace: hook.GetNamespace(), } gvk := schema.FromAPIVersionAndKind(hookStatus.APIVersion, hookStatus.Kind) if isBatchJob(gvk) { @@ -542,7 +557,7 @@ func (sc *syncContext) terminate() { } if isRunnable(hookStatus) { hookStatus.Status = appv1.OperationFailed - err := sc.deleteHook(hookStatus.Name, hookStatus.Kind, hookStatus.APIVersion) + err := sc.deleteHook(hookStatus.Name, hookStatus.Kind, hookStatus.APIVersion, hookStatus.Namespace) if err != nil { hookStatus.Message = fmt.Sprintf("Failed to delete %s hook %s/%s: %v", hookStatus.Type, hookStatus.Kind, hookStatus.Name, err) terminateSuccessful = false @@ -559,14 +574,14 @@ func (sc *syncContext) terminate() { } } -func (sc *syncContext) deleteHook(name, kind, apiVersion string) error { +func (sc *syncContext) deleteHook(name, kind, apiVersion string, namespace string) error { gvk := schema.FromAPIVersionAndKind(apiVersion, kind) apiResource, err := kube.ServerResourceForGroupVersionKind(sc.disco, gvk) if err != nil { return err } resource := kube.ToGroupVersionResource(gvk.GroupVersion().String(), apiResource) - resIf := kube.ToResourceInterface(sc.dynamicIf, apiResource, resource, sc.namespace) + resIf := kube.ToResourceInterface(sc.dynamicIf, apiResource, resource, namespace) propagationPolicy := metav1.DeletePropagationForeground return resIf.Delete(name, &metav1.DeleteOptions{PropagationPolicy: &propagationPolicy}) } diff --git a/controller/sync_test.go b/controller/sync_test.go index c8a885efab5bb..a669a660df158 100644 --- a/controller/sync_test.go +++ b/controller/sync_test.go @@ -37,6 +37,7 @@ func newTestSyncCtx(resources ...*v1.APIResourceList) *syncContext { comparison: &v1alpha1.ComparisonResult{}, config: &rest.Config{}, namespace: "test-namespace", + server: "https://test-server", syncRes: &v1alpha1.SyncOperationResult{}, syncOp: &v1alpha1.SyncOperation{ Prune: true, @@ -49,6 +50,10 @@ func newTestSyncCtx(resources ...*v1.APIResourceList) *syncContext { Name: "test", }, Spec: v1alpha1.AppProjectSpec{ + Destinations: []v1alpha1.ApplicationDestination{{ + Server: "https://test-server", + Namespace: "test-namespace", + }}, ClusterResourceWhitelist: []v1.GroupKind{ {Group: "*", Kind: "*"}, }, @@ -60,6 +65,21 @@ func newTestSyncCtx(resources ...*v1.APIResourceList) *syncContext { } } +func TestSyncNotPermittedNamespace(t *testing.T) { + syncCtx := newTestSyncCtx() + syncCtx.kubectl = kubetest.MockKubectlCmd{} + syncCtx.resources = []ControlledResource{{ + Live: nil, + Target: kube.MustToUnstructured(&apiv1.Pod{TypeMeta: v1.TypeMeta{Kind: "pod"}, ObjectMeta: v1.ObjectMeta{Namespace: "kube-system"}}), + }, { + Live: nil, + Target: kube.MustToUnstructured(&apiv1.Service{TypeMeta: v1.TypeMeta{Kind: "service"}}), + }} + syncCtx.sync() + assert.Equal(t, v1alpha1.OperationFailed, syncCtx.opState.Phase) + assert.Contains(t, syncCtx.syncRes.Resources[0].Message, "not permitted in project") +} + func TestSyncCreateInSortedOrder(t *testing.T) { syncCtx := newTestSyncCtx() syncCtx.kubectl = kubetest.MockKubectlCmd{} diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index 993130fe712d0..354e6f26464aa 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -30,7 +30,7 @@ const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package func (m *AWSAuthConfig) Reset() { *m = AWSAuthConfig{} } func (*AWSAuthConfig) ProtoMessage() {} func (*AWSAuthConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{0} + return fileDescriptor_generated_60d98fe9cf636171, []int{0} } func (m *AWSAuthConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -58,7 +58,7 @@ var xxx_messageInfo_AWSAuthConfig proto.InternalMessageInfo func (m *AppProject) Reset() { *m = AppProject{} } func (*AppProject) ProtoMessage() {} func (*AppProject) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{1} + return fileDescriptor_generated_60d98fe9cf636171, []int{1} } func (m *AppProject) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -86,7 +86,7 @@ var xxx_messageInfo_AppProject proto.InternalMessageInfo func (m *AppProjectList) Reset() { *m = AppProjectList{} } func (*AppProjectList) ProtoMessage() {} func (*AppProjectList) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{2} + return fileDescriptor_generated_60d98fe9cf636171, []int{2} } func (m *AppProjectList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -114,7 +114,7 @@ var xxx_messageInfo_AppProjectList proto.InternalMessageInfo func (m *AppProjectSpec) Reset() { *m = AppProjectSpec{} } func (*AppProjectSpec) ProtoMessage() {} func (*AppProjectSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{3} + return fileDescriptor_generated_60d98fe9cf636171, []int{3} } func (m *AppProjectSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -142,7 +142,7 @@ var xxx_messageInfo_AppProjectSpec proto.InternalMessageInfo func (m *Application) Reset() { *m = Application{} } func (*Application) ProtoMessage() {} func (*Application) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{4} + return fileDescriptor_generated_60d98fe9cf636171, []int{4} } func (m *Application) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -170,7 +170,7 @@ var xxx_messageInfo_Application proto.InternalMessageInfo func (m *ApplicationCondition) Reset() { *m = ApplicationCondition{} } func (*ApplicationCondition) ProtoMessage() {} func (*ApplicationCondition) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{5} + return fileDescriptor_generated_60d98fe9cf636171, []int{5} } func (m *ApplicationCondition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -198,7 +198,7 @@ var xxx_messageInfo_ApplicationCondition proto.InternalMessageInfo func (m *ApplicationDestination) Reset() { *m = ApplicationDestination{} } func (*ApplicationDestination) ProtoMessage() {} func (*ApplicationDestination) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{6} + return fileDescriptor_generated_60d98fe9cf636171, []int{6} } func (m *ApplicationDestination) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -226,7 +226,7 @@ var xxx_messageInfo_ApplicationDestination proto.InternalMessageInfo func (m *ApplicationList) Reset() { *m = ApplicationList{} } func (*ApplicationList) ProtoMessage() {} func (*ApplicationList) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{7} + return fileDescriptor_generated_60d98fe9cf636171, []int{7} } func (m *ApplicationList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -254,7 +254,7 @@ var xxx_messageInfo_ApplicationList proto.InternalMessageInfo func (m *ApplicationSource) Reset() { *m = ApplicationSource{} } func (*ApplicationSource) ProtoMessage() {} func (*ApplicationSource) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{8} + return fileDescriptor_generated_60d98fe9cf636171, []int{8} } func (m *ApplicationSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -282,7 +282,7 @@ var xxx_messageInfo_ApplicationSource proto.InternalMessageInfo func (m *ApplicationSourceHelm) Reset() { *m = ApplicationSourceHelm{} } func (*ApplicationSourceHelm) ProtoMessage() {} func (*ApplicationSourceHelm) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{9} + return fileDescriptor_generated_60d98fe9cf636171, []int{9} } func (m *ApplicationSourceHelm) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -310,7 +310,7 @@ var xxx_messageInfo_ApplicationSourceHelm proto.InternalMessageInfo func (m *ApplicationSourceKsonnet) Reset() { *m = ApplicationSourceKsonnet{} } func (*ApplicationSourceKsonnet) ProtoMessage() {} func (*ApplicationSourceKsonnet) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{10} + return fileDescriptor_generated_60d98fe9cf636171, []int{10} } func (m *ApplicationSourceKsonnet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -338,7 +338,7 @@ var xxx_messageInfo_ApplicationSourceKsonnet proto.InternalMessageInfo func (m *ApplicationSourceKustomize) Reset() { *m = ApplicationSourceKustomize{} } func (*ApplicationSourceKustomize) ProtoMessage() {} func (*ApplicationSourceKustomize) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{11} + return fileDescriptor_generated_60d98fe9cf636171, []int{11} } func (m *ApplicationSourceKustomize) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -366,7 +366,7 @@ var xxx_messageInfo_ApplicationSourceKustomize proto.InternalMessageInfo func (m *ApplicationSpec) Reset() { *m = ApplicationSpec{} } func (*ApplicationSpec) ProtoMessage() {} func (*ApplicationSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{12} + return fileDescriptor_generated_60d98fe9cf636171, []int{12} } func (m *ApplicationSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -394,7 +394,7 @@ var xxx_messageInfo_ApplicationSpec proto.InternalMessageInfo func (m *ApplicationStatus) Reset() { *m = ApplicationStatus{} } func (*ApplicationStatus) ProtoMessage() {} func (*ApplicationStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{13} + return fileDescriptor_generated_60d98fe9cf636171, []int{13} } func (m *ApplicationStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -422,7 +422,7 @@ var xxx_messageInfo_ApplicationStatus proto.InternalMessageInfo func (m *ApplicationWatchEvent) Reset() { *m = ApplicationWatchEvent{} } func (*ApplicationWatchEvent) ProtoMessage() {} func (*ApplicationWatchEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{14} + return fileDescriptor_generated_60d98fe9cf636171, []int{14} } func (m *ApplicationWatchEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -450,7 +450,7 @@ var xxx_messageInfo_ApplicationWatchEvent proto.InternalMessageInfo func (m *Cluster) Reset() { *m = Cluster{} } func (*Cluster) ProtoMessage() {} func (*Cluster) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{15} + return fileDescriptor_generated_60d98fe9cf636171, []int{15} } func (m *Cluster) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -478,7 +478,7 @@ var xxx_messageInfo_Cluster proto.InternalMessageInfo func (m *ClusterConfig) Reset() { *m = ClusterConfig{} } func (*ClusterConfig) ProtoMessage() {} func (*ClusterConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{16} + return fileDescriptor_generated_60d98fe9cf636171, []int{16} } func (m *ClusterConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -506,7 +506,7 @@ var xxx_messageInfo_ClusterConfig proto.InternalMessageInfo func (m *ClusterList) Reset() { *m = ClusterList{} } func (*ClusterList) ProtoMessage() {} func (*ClusterList) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{17} + return fileDescriptor_generated_60d98fe9cf636171, []int{17} } func (m *ClusterList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -534,7 +534,7 @@ var xxx_messageInfo_ClusterList proto.InternalMessageInfo func (m *ComparisonResult) Reset() { *m = ComparisonResult{} } func (*ComparisonResult) ProtoMessage() {} func (*ComparisonResult) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{18} + return fileDescriptor_generated_60d98fe9cf636171, []int{18} } func (m *ComparisonResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -562,7 +562,7 @@ var xxx_messageInfo_ComparisonResult proto.InternalMessageInfo func (m *ComponentParameter) Reset() { *m = ComponentParameter{} } func (*ComponentParameter) ProtoMessage() {} func (*ComponentParameter) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{19} + return fileDescriptor_generated_60d98fe9cf636171, []int{19} } func (m *ComponentParameter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -590,7 +590,7 @@ var xxx_messageInfo_ComponentParameter proto.InternalMessageInfo func (m *ConnectionState) Reset() { *m = ConnectionState{} } func (*ConnectionState) ProtoMessage() {} func (*ConnectionState) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{20} + return fileDescriptor_generated_60d98fe9cf636171, []int{20} } func (m *ConnectionState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -618,7 +618,7 @@ var xxx_messageInfo_ConnectionState proto.InternalMessageInfo func (m *DeploymentInfo) Reset() { *m = DeploymentInfo{} } func (*DeploymentInfo) ProtoMessage() {} func (*DeploymentInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{21} + return fileDescriptor_generated_60d98fe9cf636171, []int{21} } func (m *DeploymentInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -646,7 +646,7 @@ var xxx_messageInfo_DeploymentInfo proto.InternalMessageInfo func (m *HealthStatus) Reset() { *m = HealthStatus{} } func (*HealthStatus) ProtoMessage() {} func (*HealthStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{22} + return fileDescriptor_generated_60d98fe9cf636171, []int{22} } func (m *HealthStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -674,7 +674,7 @@ var xxx_messageInfo_HealthStatus proto.InternalMessageInfo func (m *HookStatus) Reset() { *m = HookStatus{} } func (*HookStatus) ProtoMessage() {} func (*HookStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{23} + return fileDescriptor_generated_60d98fe9cf636171, []int{23} } func (m *HookStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -702,7 +702,7 @@ var xxx_messageInfo_HookStatus proto.InternalMessageInfo func (m *JWTToken) Reset() { *m = JWTToken{} } func (*JWTToken) ProtoMessage() {} func (*JWTToken) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{24} + return fileDescriptor_generated_60d98fe9cf636171, []int{24} } func (m *JWTToken) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -730,7 +730,7 @@ var xxx_messageInfo_JWTToken proto.InternalMessageInfo func (m *Operation) Reset() { *m = Operation{} } func (*Operation) ProtoMessage() {} func (*Operation) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{25} + return fileDescriptor_generated_60d98fe9cf636171, []int{25} } func (m *Operation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -758,7 +758,7 @@ var xxx_messageInfo_Operation proto.InternalMessageInfo func (m *OperationState) Reset() { *m = OperationState{} } func (*OperationState) ProtoMessage() {} func (*OperationState) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{26} + return fileDescriptor_generated_60d98fe9cf636171, []int{26} } func (m *OperationState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -786,7 +786,7 @@ var xxx_messageInfo_OperationState proto.InternalMessageInfo func (m *ParameterOverrides) Reset() { *m = ParameterOverrides{} } func (*ParameterOverrides) ProtoMessage() {} func (*ParameterOverrides) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{27} + return fileDescriptor_generated_60d98fe9cf636171, []int{27} } func (m *ParameterOverrides) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -814,7 +814,7 @@ var xxx_messageInfo_ParameterOverrides proto.InternalMessageInfo func (m *ProjectRole) Reset() { *m = ProjectRole{} } func (*ProjectRole) ProtoMessage() {} func (*ProjectRole) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{28} + return fileDescriptor_generated_60d98fe9cf636171, []int{28} } func (m *ProjectRole) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -842,7 +842,7 @@ var xxx_messageInfo_ProjectRole proto.InternalMessageInfo func (m *Repository) Reset() { *m = Repository{} } func (*Repository) ProtoMessage() {} func (*Repository) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{29} + return fileDescriptor_generated_60d98fe9cf636171, []int{29} } func (m *Repository) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -870,7 +870,7 @@ var xxx_messageInfo_Repository proto.InternalMessageInfo func (m *RepositoryList) Reset() { *m = RepositoryList{} } func (*RepositoryList) ProtoMessage() {} func (*RepositoryList) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{30} + return fileDescriptor_generated_60d98fe9cf636171, []int{30} } func (m *RepositoryList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -898,7 +898,7 @@ var xxx_messageInfo_RepositoryList proto.InternalMessageInfo func (m *ResourceDetails) Reset() { *m = ResourceDetails{} } func (*ResourceDetails) ProtoMessage() {} func (*ResourceDetails) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{31} + return fileDescriptor_generated_60d98fe9cf636171, []int{31} } func (m *ResourceDetails) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -926,7 +926,7 @@ var xxx_messageInfo_ResourceDetails proto.InternalMessageInfo func (m *ResourceNode) Reset() { *m = ResourceNode{} } func (*ResourceNode) ProtoMessage() {} func (*ResourceNode) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{32} + return fileDescriptor_generated_60d98fe9cf636171, []int{32} } func (m *ResourceNode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -954,7 +954,7 @@ var xxx_messageInfo_ResourceNode proto.InternalMessageInfo func (m *ResourceState) Reset() { *m = ResourceState{} } func (*ResourceState) ProtoMessage() {} func (*ResourceState) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{33} + return fileDescriptor_generated_60d98fe9cf636171, []int{33} } func (m *ResourceState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -982,7 +982,7 @@ var xxx_messageInfo_ResourceState proto.InternalMessageInfo func (m *ResourceSummary) Reset() { *m = ResourceSummary{} } func (*ResourceSummary) ProtoMessage() {} func (*ResourceSummary) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{34} + return fileDescriptor_generated_60d98fe9cf636171, []int{34} } func (m *ResourceSummary) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1010,7 +1010,7 @@ var xxx_messageInfo_ResourceSummary proto.InternalMessageInfo func (m *SyncOperation) Reset() { *m = SyncOperation{} } func (*SyncOperation) ProtoMessage() {} func (*SyncOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{35} + return fileDescriptor_generated_60d98fe9cf636171, []int{35} } func (m *SyncOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1038,7 +1038,7 @@ var xxx_messageInfo_SyncOperation proto.InternalMessageInfo func (m *SyncOperationResource) Reset() { *m = SyncOperationResource{} } func (*SyncOperationResource) ProtoMessage() {} func (*SyncOperationResource) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{36} + return fileDescriptor_generated_60d98fe9cf636171, []int{36} } func (m *SyncOperationResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1066,7 +1066,7 @@ var xxx_messageInfo_SyncOperationResource proto.InternalMessageInfo func (m *SyncOperationResult) Reset() { *m = SyncOperationResult{} } func (*SyncOperationResult) ProtoMessage() {} func (*SyncOperationResult) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{37} + return fileDescriptor_generated_60d98fe9cf636171, []int{37} } func (m *SyncOperationResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1094,7 +1094,7 @@ var xxx_messageInfo_SyncOperationResult proto.InternalMessageInfo func (m *SyncPolicy) Reset() { *m = SyncPolicy{} } func (*SyncPolicy) ProtoMessage() {} func (*SyncPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{38} + return fileDescriptor_generated_60d98fe9cf636171, []int{38} } func (m *SyncPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1122,7 +1122,7 @@ var xxx_messageInfo_SyncPolicy proto.InternalMessageInfo func (m *SyncPolicyAutomated) Reset() { *m = SyncPolicyAutomated{} } func (*SyncPolicyAutomated) ProtoMessage() {} func (*SyncPolicyAutomated) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{39} + return fileDescriptor_generated_60d98fe9cf636171, []int{39} } func (m *SyncPolicyAutomated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1150,7 +1150,7 @@ var xxx_messageInfo_SyncPolicyAutomated proto.InternalMessageInfo func (m *SyncStrategy) Reset() { *m = SyncStrategy{} } func (*SyncStrategy) ProtoMessage() {} func (*SyncStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{40} + return fileDescriptor_generated_60d98fe9cf636171, []int{40} } func (m *SyncStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1178,7 +1178,7 @@ var xxx_messageInfo_SyncStrategy proto.InternalMessageInfo func (m *SyncStrategyApply) Reset() { *m = SyncStrategyApply{} } func (*SyncStrategyApply) ProtoMessage() {} func (*SyncStrategyApply) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{41} + return fileDescriptor_generated_60d98fe9cf636171, []int{41} } func (m *SyncStrategyApply) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1206,7 +1206,7 @@ var xxx_messageInfo_SyncStrategyApply proto.InternalMessageInfo func (m *SyncStrategyHook) Reset() { *m = SyncStrategyHook{} } func (*SyncStrategyHook) ProtoMessage() {} func (*SyncStrategyHook) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{42} + return fileDescriptor_generated_60d98fe9cf636171, []int{42} } func (m *SyncStrategyHook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1234,7 +1234,7 @@ var xxx_messageInfo_SyncStrategyHook proto.InternalMessageInfo func (m *TLSClientConfig) Reset() { *m = TLSClientConfig{} } func (*TLSClientConfig) ProtoMessage() {} func (*TLSClientConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_generated_f60a9f091afaa173, []int{43} + return fileDescriptor_generated_60d98fe9cf636171, []int{43} } func (m *TLSClientConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2318,6 +2318,10 @@ func (m *HookStatus) MarshalTo(dAtA []byte) (int, error) { i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) i += copy(dAtA[i:], m.Message) + dAtA[i] = 0x3a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i += copy(dAtA[i:], m.Namespace) return i, nil } @@ -3545,6 +3549,8 @@ func (m *HookStatus) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = len(m.Message) n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -4173,6 +4179,7 @@ func (this *HookStatus) String() string { `Type:` + fmt.Sprintf("%v", this.Type) + `,`, `Status:` + fmt.Sprintf("%v", this.Status) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, `}`, }, "") return s @@ -8022,6 +8029,35 @@ func (m *HookStatus) Unmarshal(dAtA []byte) error { } m.Message = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -11230,200 +11266,201 @@ var ( ) func init() { - proto.RegisterFile("github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1/generated.proto", fileDescriptor_generated_f60a9f091afaa173) -} - -var fileDescriptor_generated_f60a9f091afaa173 = []byte{ - // 3051 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3a, 0xcd, 0x8f, 0x23, 0x47, - 0xf5, 0xd3, 0xfe, 0x98, 0xb1, 0xdf, 0x7c, 0xec, 0x6e, 0xe5, 0xe3, 0xe7, 0xdf, 0xe4, 0xa7, 0x99, - 0x51, 0xef, 0x0f, 0x08, 0x28, 0xf1, 0xb0, 0x2b, 0x02, 0x21, 0x20, 0xa4, 0xe9, 0x99, 0xdd, 0xcc, - 0x64, 0x76, 0x67, 0x27, 0xe5, 0x49, 0x56, 0x0a, 0x51, 0xa0, 0xb7, 0x5d, 0xb6, 0x7b, 0x6d, 0x77, - 0x77, 0xba, 0xda, 0xb3, 0xeb, 0x44, 0x89, 0x36, 0x44, 0x48, 0x20, 0x40, 0xe2, 0x43, 0x08, 0x24, - 0x2e, 0x11, 0x82, 0x4b, 0xb8, 0x41, 0xc4, 0x1f, 0xc0, 0x01, 0xe5, 0x98, 0x03, 0x88, 0x28, 0x44, - 0x23, 0x32, 0xb9, 0x70, 0x43, 0x5c, 0x73, 0x42, 0xf5, 0xd1, 0x5d, 0xd5, 0x6d, 0x7b, 0xc7, 0xbb, - 0xf6, 0x2e, 0x70, 0x73, 0xd5, 0x7b, 0xfd, 0xde, 0xab, 0xf7, 0x5e, 0xbd, 0xaf, 0x32, 0xec, 0x34, - 0xdd, 0xa8, 0xd5, 0xbb, 0x56, 0x75, 0xfc, 0xee, 0xba, 0x1d, 0x36, 0xfd, 0x20, 0xf4, 0xaf, 0xf3, - 0x1f, 0x8f, 0x3b, 0xf5, 0xf5, 0xa0, 0xdd, 0x5c, 0xb7, 0x03, 0x97, 0xae, 0xdb, 0x41, 0xd0, 0x71, - 0x1d, 0x3b, 0x72, 0x7d, 0x6f, 0xfd, 0xf0, 0x9c, 0xdd, 0x09, 0x5a, 0xf6, 0xb9, 0xf5, 0x26, 0xf1, - 0x48, 0x68, 0x47, 0xa4, 0x5e, 0x0d, 0x42, 0x3f, 0xf2, 0xd1, 0x97, 0x15, 0xa9, 0x6a, 0x4c, 0x8a, - 0xff, 0xf8, 0x86, 0x53, 0xaf, 0x06, 0xed, 0x66, 0x95, 0x91, 0xaa, 0x6a, 0xa4, 0xaa, 0x31, 0xa9, - 0xe5, 0xc7, 0x35, 0x29, 0x9a, 0x7e, 0xd3, 0x5f, 0xe7, 0x14, 0xaf, 0xf5, 0x1a, 0x7c, 0xc5, 0x17, - 0xfc, 0x97, 0xe0, 0xb4, 0xfc, 0x85, 0xf6, 0x93, 0xb4, 0xea, 0xfa, 0x4c, 0xb6, 0xae, 0xed, 0xb4, - 0x5c, 0x8f, 0x84, 0x7d, 0x25, 0x6c, 0x97, 0x44, 0xf6, 0xfa, 0xe1, 0x80, 0x7c, 0xcb, 0xeb, 0xa3, - 0xbe, 0x0a, 0x7b, 0x5e, 0xe4, 0x76, 0xc9, 0xc0, 0x07, 0x5f, 0x3c, 0xe9, 0x03, 0xea, 0xb4, 0x48, - 0xd7, 0xce, 0x7e, 0x67, 0xbe, 0x0c, 0x8b, 0x1b, 0x57, 0x6b, 0x1b, 0xbd, 0xa8, 0xb5, 0xe9, 0x7b, - 0x0d, 0xb7, 0x89, 0x9e, 0x80, 0x79, 0xa7, 0xd3, 0xa3, 0x11, 0x09, 0xf7, 0xec, 0x2e, 0xa9, 0x18, - 0x6b, 0xc6, 0xa3, 0x65, 0xeb, 0x81, 0x77, 0x8f, 0x56, 0x67, 0x8e, 0x8f, 0x56, 0xe7, 0x37, 0x15, - 0x08, 0xeb, 0x78, 0xe8, 0xb3, 0x30, 0x17, 0xfa, 0x1d, 0xb2, 0x81, 0xf7, 0x2a, 0x39, 0xfe, 0xc9, - 0x29, 0xf9, 0xc9, 0x1c, 0x16, 0xdb, 0x38, 0x86, 0x9b, 0x7f, 0x35, 0x00, 0x36, 0x82, 0x60, 0x3f, - 0xf4, 0xaf, 0x13, 0x27, 0x42, 0xdf, 0x84, 0x12, 0xd3, 0x42, 0xdd, 0x8e, 0x6c, 0xce, 0x6d, 0xfe, - 0xfc, 0xe7, 0xab, 0xe2, 0x30, 0x55, 0xfd, 0x30, 0xca, 0x2a, 0x0c, 0xbb, 0x7a, 0x78, 0xae, 0x7a, - 0xe5, 0x1a, 0xfb, 0xfe, 0x32, 0x89, 0x6c, 0x0b, 0x49, 0x66, 0xa0, 0xf6, 0x70, 0x42, 0x15, 0xb5, - 0xa1, 0x40, 0x03, 0xe2, 0x70, 0xc1, 0xe6, 0xcf, 0xef, 0x54, 0xef, 0xda, 0xf6, 0x55, 0x25, 0x76, - 0x2d, 0x20, 0x8e, 0xb5, 0x20, 0xd9, 0x16, 0xd8, 0x0a, 0x73, 0x26, 0xe6, 0x07, 0x06, 0x2c, 0x29, - 0xb4, 0x4b, 0x2e, 0x8d, 0xd0, 0x8b, 0x03, 0x27, 0xac, 0x8e, 0x77, 0x42, 0xf6, 0x35, 0x3f, 0xdf, - 0x69, 0xc9, 0xa8, 0x14, 0xef, 0x68, 0xa7, 0xbb, 0x0e, 0x45, 0x37, 0x22, 0x5d, 0x5a, 0xc9, 0xad, - 0xe5, 0x1f, 0x9d, 0x3f, 0x7f, 0x61, 0x2a, 0xc7, 0xb3, 0x16, 0x25, 0xc7, 0xe2, 0x0e, 0xa3, 0x8d, - 0x05, 0x0b, 0xf3, 0x17, 0x45, 0xfd, 0x70, 0xec, 0xd4, 0xe8, 0x1c, 0xcc, 0x53, 0xbf, 0x17, 0x3a, - 0x04, 0x93, 0xc0, 0xa7, 0x15, 0x63, 0x2d, 0xcf, 0x8c, 0xcf, 0x7c, 0xa5, 0xa6, 0xb6, 0xb1, 0x8e, - 0x83, 0xbe, 0x67, 0xc0, 0x42, 0x9d, 0xd0, 0xc8, 0xf5, 0x38, 0xff, 0x58, 0xf2, 0x67, 0x27, 0x93, - 0x3c, 0xde, 0xdc, 0x52, 0x94, 0xad, 0x07, 0xe5, 0x29, 0x16, 0xb4, 0x4d, 0x8a, 0x53, 0xcc, 0x99, - 0xc3, 0xd7, 0x09, 0x75, 0x42, 0x37, 0x60, 0xeb, 0x4a, 0x3e, 0xed, 0xf0, 0x5b, 0x0a, 0x84, 0x75, - 0x3c, 0xd4, 0x86, 0x22, 0x73, 0x68, 0x5a, 0x29, 0x70, 0xe1, 0x2f, 0x4e, 0x20, 0xbc, 0x54, 0x27, - 0xbb, 0x28, 0x4a, 0xef, 0x6c, 0x45, 0xb1, 0xe0, 0x81, 0x7e, 0x60, 0x40, 0x45, 0xde, 0x36, 0x4c, - 0x84, 0x2a, 0xaf, 0xb6, 0xdc, 0x88, 0x74, 0x5c, 0x1a, 0x55, 0x8a, 0x5c, 0x80, 0xf5, 0xf1, 0x5c, - 0xea, 0xe9, 0xd0, 0xef, 0x05, 0xbb, 0xae, 0x57, 0xb7, 0xd6, 0x24, 0xa7, 0xca, 0xe6, 0x08, 0xc2, - 0x78, 0x24, 0x4b, 0xf4, 0x13, 0x03, 0x96, 0x3d, 0xbb, 0x4b, 0x68, 0x60, 0x33, 0xa3, 0x0a, 0xb0, - 0xd5, 0xb1, 0x9d, 0x36, 0x97, 0x68, 0xf6, 0xee, 0x24, 0x32, 0xa5, 0x44, 0xcb, 0x7b, 0x23, 0x49, - 0xe3, 0xdb, 0xb0, 0x35, 0xff, 0x98, 0x87, 0x79, 0xcd, 0x11, 0xee, 0x43, 0x64, 0xe9, 0xa4, 0x22, - 0xcb, 0x33, 0xd3, 0x71, 0xe0, 0x51, 0xa1, 0x05, 0x45, 0x30, 0x4b, 0x23, 0x3b, 0xea, 0x51, 0xee, - 0xa4, 0xf3, 0xe7, 0x2f, 0x4d, 0x89, 0x1f, 0xa7, 0x69, 0x2d, 0x49, 0x8e, 0xb3, 0x62, 0x8d, 0x25, - 0x2f, 0xf4, 0x32, 0x94, 0xfd, 0x80, 0xe5, 0x0c, 0x76, 0x3b, 0x0a, 0x9c, 0xf1, 0xd6, 0x04, 0x8c, - 0xaf, 0xc4, 0xb4, 0xac, 0xc5, 0xe3, 0xa3, 0xd5, 0x72, 0xb2, 0xc4, 0x8a, 0x8b, 0xe9, 0xc0, 0x83, - 0x9a, 0x7c, 0x9b, 0xbe, 0x57, 0x77, 0xb9, 0x41, 0xd7, 0xa0, 0x10, 0xf5, 0x83, 0x38, 0x29, 0x25, - 0x2a, 0x3a, 0xe8, 0x07, 0x04, 0x73, 0x08, 0x4b, 0x43, 0x5d, 0x42, 0xa9, 0xdd, 0x24, 0xd9, 0x34, - 0x74, 0x59, 0x6c, 0xe3, 0x18, 0x6e, 0xbe, 0x0c, 0x0f, 0x0f, 0x8f, 0x1a, 0xe8, 0xd3, 0x30, 0x4b, - 0x49, 0x78, 0x48, 0x42, 0xc9, 0x48, 0x69, 0x86, 0xef, 0x62, 0x09, 0x45, 0xeb, 0x50, 0x4e, 0xbc, - 0x51, 0xb2, 0x3b, 0x23, 0x51, 0xcb, 0xca, 0x85, 0x15, 0x8e, 0xf9, 0xa1, 0x01, 0xa7, 0x34, 0x9e, - 0xf7, 0x21, 0x39, 0xb4, 0xd3, 0xc9, 0xe1, 0xe2, 0x74, 0x3c, 0x66, 0x44, 0x76, 0xf8, 0xed, 0x2c, - 0x9c, 0xd1, 0xfd, 0x8a, 0x5f, 0x4f, 0x5e, 0x19, 0x90, 0xc0, 0x7f, 0x0e, 0x5f, 0x92, 0xea, 0x54, - 0x95, 0x81, 0xd8, 0xc6, 0x31, 0x9c, 0xd9, 0x37, 0xb0, 0xa3, 0x96, 0xd4, 0x65, 0x62, 0xdf, 0x7d, - 0x3b, 0x6a, 0x61, 0x0e, 0x61, 0xc1, 0x9a, 0x78, 0x87, 0x6e, 0xe8, 0x7b, 0x5d, 0xe2, 0x45, 0xd9, - 0x60, 0x7d, 0x41, 0x81, 0xb0, 0x8e, 0x87, 0xbe, 0x06, 0x4b, 0x91, 0x1d, 0x36, 0x49, 0x84, 0xc9, - 0xa1, 0x4b, 0x63, 0x47, 0x2e, 0x5b, 0x0f, 0xcb, 0x2f, 0x97, 0x0e, 0x52, 0x50, 0x9c, 0xc1, 0x46, - 0xef, 0x18, 0xf0, 0x88, 0xe3, 0x77, 0x03, 0xdf, 0x23, 0x5e, 0xb4, 0x6f, 0x87, 0x76, 0x97, 0x44, - 0x24, 0xbc, 0x72, 0x48, 0xc2, 0xd0, 0xad, 0x13, 0x2a, 0x43, 0xf0, 0xe5, 0x09, 0xb4, 0xbb, 0x39, - 0x40, 0xdd, 0x3a, 0x2b, 0x85, 0x7b, 0x64, 0x73, 0x34, 0x67, 0x7c, 0x3b, 0xb1, 0x58, 0x6e, 0x3e, - 0xb4, 0x3b, 0x3d, 0x42, 0x2f, 0xba, 0x2c, 0x53, 0xcd, 0xaa, 0xdc, 0xfc, 0xbc, 0xda, 0xc6, 0x3a, - 0x0e, 0xf2, 0xa0, 0xd0, 0x22, 0x9d, 0x6e, 0x65, 0x8e, 0xbb, 0xe2, 0xfe, 0x94, 0x22, 0x0c, 0xf7, - 0x84, 0x6d, 0xd2, 0xe9, 0x5a, 0x25, 0x66, 0x50, 0xf6, 0x0b, 0x73, 0x3e, 0xe8, 0x5b, 0x06, 0x94, - 0xdb, 0x3d, 0x1a, 0xf9, 0x5d, 0xf7, 0x15, 0x52, 0x29, 0x71, 0xae, 0xcf, 0x4d, 0x93, 0xeb, 0x6e, - 0x4c, 0x5c, 0xc4, 0x9b, 0x64, 0x89, 0x15, 0x5b, 0xf4, 0x0a, 0xcc, 0xb5, 0xa9, 0xef, 0x79, 0x24, - 0xaa, 0x94, 0xb9, 0x04, 0xb5, 0xa9, 0x4a, 0x20, 0x48, 0x5b, 0xf3, 0xcc, 0xe7, 0xe5, 0x02, 0xc7, - 0x0c, 0xcd, 0xd7, 0xe1, 0xa1, 0xa1, 0x9a, 0x62, 0xae, 0x1e, 0x92, 0x0e, 0xb1, 0x29, 0x19, 0x56, - 0x88, 0x63, 0x05, 0xc2, 0x3a, 0x1e, 0xaa, 0x02, 0x70, 0x7b, 0x0a, 0x93, 0xe7, 0xb8, 0xc9, 0x97, - 0x58, 0x02, 0x7b, 0x3e, 0xd9, 0xc5, 0x1a, 0x86, 0xf9, 0x2c, 0x54, 0x46, 0x49, 0x9c, 0xbd, 0x6d, - 0xc6, 0x78, 0xb7, 0xcd, 0xdc, 0x87, 0xe5, 0xd1, 0x66, 0x40, 0xe7, 0x01, 0x58, 0x44, 0xdc, 0x0f, - 0x49, 0xc3, 0xbd, 0x29, 0x69, 0x26, 0x59, 0x76, 0x2f, 0x81, 0x60, 0x0d, 0xcb, 0x7c, 0x27, 0x9f, - 0x0a, 0x9c, 0xb5, 0x38, 0x1b, 0x72, 0xd2, 0x32, 0x6c, 0x5e, 0x9a, 0xa6, 0xcd, 0xb4, 0x98, 0x2f, - 0x0a, 0x57, 0xc9, 0x0b, 0x7d, 0xc7, 0xe0, 0xe5, 0x62, 0x9c, 0x2b, 0x64, 0xe6, 0xbf, 0x07, 0xa5, - 0xab, 0x5e, 0x81, 0xc6, 0x9b, 0x58, 0x67, 0xcd, 0x02, 0x6b, 0x20, 0x2a, 0x47, 0x19, 0x07, 0x93, - 0xc0, 0x1a, 0x17, 0x94, 0x31, 0x1c, 0xf5, 0x00, 0x68, 0xdf, 0x73, 0xf6, 0xfd, 0x8e, 0xeb, 0xf4, - 0x65, 0x12, 0x9f, 0xa4, 0x51, 0xa8, 0x25, 0xc4, 0x84, 0x6f, 0xa9, 0x35, 0xd6, 0x18, 0x99, 0x6f, - 0x65, 0x12, 0x82, 0x28, 0x28, 0x7e, 0x64, 0xc0, 0x69, 0x16, 0xb5, 0xec, 0xd0, 0xa5, 0xbe, 0x87, - 0x09, 0xed, 0x75, 0x22, 0x69, 0xc3, 0xdd, 0x09, 0x23, 0xa8, 0x4e, 0xd2, 0xaa, 0x48, 0x75, 0x9c, - 0xce, 0x42, 0xf0, 0x00, 0x7b, 0x14, 0xc1, 0x5c, 0xcb, 0xa5, 0x91, 0x1f, 0xf6, 0x65, 0xa6, 0x9c, - 0xa4, 0x4b, 0xdc, 0x22, 0x41, 0xc7, 0xef, 0xb3, 0xab, 0xb0, 0xe3, 0x35, 0x7c, 0x65, 0x96, 0x6d, - 0xc1, 0x01, 0xc7, 0xac, 0xd0, 0x1b, 0x06, 0x40, 0x10, 0x87, 0x6d, 0x56, 0xd5, 0xdd, 0x83, 0x2c, - 0x92, 0x5c, 0xad, 0x64, 0x8b, 0x62, 0x8d, 0x29, 0xf2, 0x61, 0xb6, 0x45, 0xec, 0x4e, 0xd4, 0x92, - 0x6e, 0xf1, 0xf4, 0x04, 0xec, 0xb7, 0x39, 0xa1, 0x6c, 0x3d, 0x29, 0x76, 0xb1, 0x64, 0x83, 0xbe, - 0x6d, 0xc0, 0x52, 0x52, 0xea, 0x31, 0x5c, 0x52, 0x29, 0x4e, 0xdc, 0x98, 0x5f, 0x49, 0x11, 0xb4, - 0x10, 0xcb, 0xe9, 0xe9, 0x3d, 0x9c, 0x61, 0x8a, 0xde, 0x34, 0x00, 0x9c, 0xb8, 0xb4, 0xa4, 0xb2, - 0x67, 0xb9, 0x32, 0x9d, 0x8b, 0x9c, 0x94, 0xac, 0x4a, 0xfd, 0xc9, 0x16, 0xc5, 0x1a, 0x5b, 0xf3, - 0x63, 0x23, 0x15, 0xff, 0xaf, 0xda, 0x91, 0xd3, 0xba, 0x70, 0xc8, 0x6a, 0x96, 0xdd, 0x54, 0xb1, - 0xfb, 0x25, 0xbd, 0xd8, 0xfd, 0xe4, 0x68, 0xf5, 0x33, 0xa3, 0xe6, 0x3d, 0x37, 0x18, 0x85, 0x2a, - 0x27, 0xa1, 0xd5, 0xc5, 0xaf, 0xc1, 0xbc, 0x26, 0xb3, 0x8c, 0x5a, 0xd3, 0xaa, 0x06, 0x93, 0x50, - 0xa5, 0x6d, 0x62, 0x9d, 0x9f, 0xf9, 0xe7, 0x1c, 0xcc, 0xc9, 0x36, 0x73, 0xec, 0xea, 0x7a, 0x0d, - 0x0a, 0x2c, 0x03, 0x64, 0x8b, 0x41, 0x9e, 0xf1, 0x38, 0x04, 0x05, 0x30, 0xeb, 0xf0, 0xa1, 0x95, - 0xec, 0x87, 0xb6, 0x27, 0xb9, 0x39, 0x42, 0x3a, 0x31, 0x04, 0x53, 0x32, 0x89, 0x35, 0x96, 0x7c, - 0x58, 0x1f, 0x7e, 0xca, 0x61, 0xb9, 0xd1, 0x51, 0xce, 0x5b, 0x98, 0xb8, 0xf7, 0xdb, 0x4c, 0x53, - 0xb4, 0xfe, 0x47, 0x72, 0x3f, 0x95, 0x01, 0xe0, 0x2c, 0x6f, 0xf3, 0xf7, 0x79, 0x58, 0x4c, 0x49, - 0x8e, 0x1e, 0x83, 0x52, 0x8f, 0x92, 0xd0, 0x53, 0x25, 0x43, 0xd2, 0x1e, 0x3c, 0x27, 0xf7, 0x71, - 0x82, 0xc1, 0xb0, 0x03, 0x9b, 0xd2, 0x1b, 0x7e, 0x58, 0x97, 0x7a, 0x4e, 0xb0, 0xf7, 0xe5, 0x3e, - 0x4e, 0x30, 0x58, 0x39, 0x70, 0x8d, 0xd8, 0x21, 0x09, 0x0f, 0xfc, 0x36, 0x19, 0x98, 0x94, 0x58, - 0x0a, 0x84, 0x75, 0x3c, 0xae, 0xb4, 0xa8, 0x43, 0x37, 0x3b, 0x2e, 0xf1, 0x22, 0x21, 0xe6, 0x14, - 0x94, 0x76, 0x70, 0xa9, 0xa6, 0x53, 0x54, 0x4a, 0xcb, 0x00, 0x70, 0x96, 0x37, 0x8b, 0xba, 0x8b, - 0xf6, 0x0d, 0xaa, 0x66, 0x9e, 0x32, 0xfe, 0x4c, 0xe2, 0x3e, 0xa9, 0x19, 0xaa, 0x75, 0xe6, 0xf8, - 0x68, 0x35, 0x3d, 0x56, 0xc5, 0x69, 0x8e, 0xe6, 0x9f, 0x0c, 0x88, 0x67, 0xa9, 0xf7, 0xa1, 0x0b, - 0x6c, 0xa6, 0xbb, 0x40, 0x6b, 0xf2, 0x7b, 0x32, 0xa2, 0x03, 0xfc, 0x30, 0x0f, 0x03, 0xd9, 0x16, - 0xbd, 0xc4, 0xe2, 0x2c, 0xdb, 0x23, 0xf5, 0x8d, 0x38, 0xd1, 0x7f, 0x6e, 0xbc, 0xd3, 0x1d, 0xb8, - 0x5d, 0xa2, 0x87, 0xd0, 0x98, 0x0a, 0xd6, 0x28, 0xa2, 0x5b, 0x86, 0x62, 0x70, 0xe0, 0xcb, 0xd8, - 0x36, 0xdd, 0x6a, 0x70, 0x40, 0x84, 0x03, 0x1f, 0x6b, 0x3c, 0xd1, 0x53, 0xc9, 0x64, 0xa6, 0xc8, - 0x2f, 0x85, 0x99, 0x9e, 0xa5, 0x7c, 0x92, 0x2a, 0x42, 0x32, 0xf3, 0x95, 0xc7, 0xa0, 0x14, 0xc6, - 0x5d, 0xe9, 0x5c, 0xfa, 0x0e, 0x26, 0xfd, 0x68, 0x82, 0x81, 0x5e, 0x85, 0x72, 0x28, 0x07, 0x5f, - 0xb4, 0x52, 0xe2, 0xe6, 0x9c, 0xe4, 0x16, 0xc5, 0x43, 0xb4, 0x5a, 0xaf, 0xdb, 0xb5, 0xc3, 0xbe, - 0x9a, 0x5f, 0xc4, 0x00, 0x8a, 0x15, 0x3f, 0xf3, 0xfb, 0x06, 0xa0, 0xc1, 0x12, 0x03, 0xad, 0x43, - 0x39, 0xe9, 0x42, 0x65, 0xd0, 0x49, 0xe8, 0x24, 0xe8, 0x58, 0xe1, 0x8c, 0x11, 0xda, 0xcf, 0x42, - 0x91, 0xf7, 0x28, 0x32, 0xc8, 0x24, 0xde, 0xc6, 0x9b, 0x18, 0x2c, 0x60, 0xe6, 0x1f, 0x0c, 0xc8, - 0x86, 0x48, 0x9e, 0x5d, 0x84, 0x25, 0xb2, 0xd9, 0x25, 0xad, 0xf5, 0xf1, 0x07, 0x45, 0xe8, 0x45, - 0x98, 0xb7, 0xa3, 0x88, 0x74, 0x83, 0x88, 0x3b, 0x70, 0xfe, 0x8e, 0x1d, 0x98, 0x97, 0xc8, 0x97, - 0xfd, 0xba, 0xdb, 0x70, 0xb9, 0xf3, 0xea, 0xe4, 0xcc, 0x7f, 0xe6, 0x60, 0x29, 0x5d, 0x30, 0xa6, - 0x3c, 0x22, 0x77, 0xa2, 0x47, 0x9c, 0x34, 0x9b, 0xc8, 0xff, 0x67, 0xce, 0x26, 0x5e, 0x02, 0xa8, - 0xf3, 0x63, 0x73, 0xa5, 0x16, 0xee, 0x3e, 0x2a, 0x6c, 0x25, 0x54, 0xb0, 0x46, 0x11, 0x2d, 0x43, - 0xce, 0xad, 0xf3, 0xeb, 0x98, 0xb7, 0x40, 0xe2, 0xe6, 0x76, 0xb6, 0x70, 0xce, 0xad, 0x9b, 0x14, - 0x16, 0xf4, 0x52, 0x75, 0x6c, 0xa7, 0xf9, 0x0a, 0x2c, 0x8a, 0x5f, 0x5b, 0x24, 0xb2, 0xdd, 0x0e, - 0x95, 0xd6, 0x79, 0x48, 0xa2, 0x2f, 0xd6, 0x74, 0x20, 0x4e, 0xe3, 0x9a, 0x3f, 0xcb, 0x01, 0x6c, - 0xfb, 0x7e, 0x5b, 0xf2, 0x8c, 0xef, 0x80, 0x31, 0xf2, 0x0e, 0xac, 0x41, 0xa1, 0xed, 0x7a, 0xf5, - 0xec, 0x2d, 0xd9, 0x75, 0xbd, 0x3a, 0xe6, 0x10, 0xd6, 0x4a, 0xdb, 0x81, 0xfb, 0x3c, 0x09, 0xa9, - 0x7a, 0xb9, 0x48, 0xf4, 0xb2, 0xb1, 0xbf, 0x23, 0x21, 0x58, 0xc3, 0x42, 0x8f, 0xc9, 0xb2, 0x52, - 0x0c, 0xc0, 0x2a, 0x99, 0xb2, 0xb2, 0xc4, 0x24, 0xd4, 0xea, 0xc6, 0x27, 0x33, 0x81, 0x6d, 0x6d, - 0x20, 0xb0, 0xa9, 0x32, 0x7b, 0xbf, 0x65, 0x53, 0x32, 0xec, 0x82, 0xcd, 0x9e, 0x30, 0x89, 0xad, - 0x41, 0xe9, 0x99, 0xab, 0x07, 0xa2, 0x58, 0x30, 0x21, 0xef, 0xda, 0x22, 0x8a, 0xe4, 0x95, 0xdb, - 0xef, 0x50, 0xda, 0xe3, 0x16, 0x66, 0x40, 0x74, 0x16, 0xf2, 0xe4, 0x66, 0xc0, 0xf5, 0x92, 0x57, - 0x91, 0xe6, 0xc2, 0xcd, 0xc0, 0x0d, 0x09, 0x65, 0x48, 0xe4, 0x66, 0x60, 0x52, 0x50, 0xb3, 0x65, - 0xd4, 0x80, 0x02, 0x6b, 0x4b, 0x65, 0xf2, 0xd9, 0x9e, 0xb0, 0xf3, 0x55, 0x23, 0x6c, 0x3e, 0xcd, - 0x62, 0x5b, 0x98, 0xd3, 0x37, 0x7f, 0x59, 0x80, 0x4c, 0xdb, 0x81, 0x7a, 0xfa, 0xf8, 0xdc, 0x98, - 0xe2, 0xf8, 0x3c, 0x39, 0xf8, 0xb0, 0x11, 0x3a, 0x7a, 0x02, 0x8a, 0x01, 0xb3, 0x87, 0xf4, 0x9e, - 0xd5, 0x38, 0x80, 0x72, 0x23, 0x0d, 0x31, 0x9b, 0xc0, 0xd6, 0xad, 0x96, 0x3f, 0x21, 0x2c, 0xbe, - 0x2e, 0x66, 0x0a, 0xb2, 0x7f, 0x17, 0x17, 0x78, 0x6f, 0x5a, 0x9a, 0x95, 0x2d, 0x7c, 0x32, 0x5c, - 0x90, 0x8d, 0xbb, 0xc6, 0x11, 0x7d, 0x1d, 0xca, 0x34, 0xb2, 0x43, 0x11, 0x94, 0x67, 0xef, 0x38, - 0x7e, 0x24, 0xea, 0xab, 0xc5, 0x44, 0xb0, 0xa2, 0x87, 0x5e, 0x00, 0x68, 0xb8, 0x9e, 0x4b, 0x5b, - 0x9c, 0xfa, 0xdc, 0xdd, 0x85, 0xfc, 0x8b, 0x09, 0x05, 0xac, 0x51, 0x33, 0x7f, 0x6c, 0x00, 0x1a, - 0x12, 0x10, 0xc3, 0xb8, 0x48, 0x33, 0xee, 0x45, 0xc0, 0x1e, 0x5a, 0xaf, 0x3d, 0x55, 0xfa, 0xf9, - 0x5b, 0xab, 0x33, 0xb7, 0x3e, 0x5c, 0x9b, 0x31, 0xdf, 0xce, 0xc1, 0xbc, 0xf6, 0x0e, 0x39, 0x46, - 0x78, 0xca, 0xbc, 0x9b, 0xe6, 0xc6, 0x7c, 0x37, 0x7d, 0x14, 0x4a, 0x81, 0xdf, 0x71, 0x1d, 0x57, - 0xa6, 0xa6, 0xb2, 0xb5, 0xc0, 0xdb, 0x0d, 0xb9, 0x87, 0x13, 0x28, 0x8a, 0xa0, 0x7c, 0xfd, 0x46, - 0xc4, 0xc3, 0x42, 0xfc, 0xca, 0xba, 0x39, 0x81, 0x52, 0xe2, 0x10, 0xa3, 0x2c, 0x1f, 0xef, 0x50, - 0xac, 0x18, 0x21, 0x13, 0x66, 0x9b, 0xa1, 0xdf, 0x0b, 0xc4, 0x50, 0xbf, 0x6c, 0x01, 0x8b, 0x76, - 0xfc, 0x8d, 0x92, 0x62, 0x09, 0x31, 0xff, 0x92, 0x03, 0xe0, 0x4f, 0xd9, 0x2e, 0x1f, 0xe3, 0xac, - 0x41, 0x21, 0x24, 0x81, 0x9f, 0xd5, 0x15, 0xc3, 0xc0, 0x1c, 0x92, 0xea, 0xca, 0x72, 0x77, 0xd4, - 0x95, 0xe5, 0x4f, 0xec, 0xca, 0x58, 0x52, 0xa2, 0xad, 0xfd, 0xd0, 0x3d, 0xb4, 0x23, 0xb2, 0x4b, - 0xfa, 0x32, 0xb2, 0xab, 0xa4, 0x54, 0xdb, 0x56, 0x40, 0x9c, 0xc6, 0x1d, 0xda, 0xd0, 0x16, 0xff, - 0x8d, 0x0d, 0xed, 0x07, 0x06, 0x2c, 0x29, 0xcd, 0xfe, 0x77, 0xfd, 0x7b, 0x42, 0xc9, 0x3d, 0xa2, - 0x3b, 0xfa, 0x87, 0x01, 0xa7, 0xe2, 0xba, 0x5a, 0x56, 0x05, 0x53, 0x29, 0x03, 0x52, 0xef, 0x90, - 0xf9, 0x93, 0xdf, 0x21, 0xf5, 0x28, 0x5f, 0x38, 0x21, 0xca, 0x7f, 0x35, 0x53, 0x00, 0xfc, 0xff, - 0x40, 0x01, 0x80, 0x92, 0x1e, 0xa2, 0xef, 0x39, 0xe9, 0x82, 0xc9, 0xfc, 0x4d, 0x1e, 0x16, 0x62, - 0xf0, 0x9e, 0x5f, 0x57, 0x87, 0x31, 0xc6, 0x3b, 0xcc, 0x18, 0x8f, 0xaa, 0x89, 0x06, 0xf3, 0xb7, - 0x6b, 0x26, 0xf8, 0xc5, 0x95, 0x87, 0x4d, 0x8c, 0xc3, 0x6f, 0x35, 0x16, 0x30, 0xa6, 0x93, 0x43, - 0x59, 0x48, 0x15, 0xd3, 0x3a, 0x89, 0xab, 0xa8, 0x18, 0x8e, 0xfe, 0x0f, 0x0a, 0x91, 0xdd, 0x8c, - 0xdf, 0xd3, 0x78, 0x0d, 0x70, 0x60, 0x37, 0x29, 0xe6, 0xbb, 0xa8, 0x07, 0x25, 0xa7, 0xe5, 0x76, - 0xea, 0x21, 0x61, 0xfd, 0x5c, 0x7e, 0xc2, 0x91, 0xaa, 0xae, 0x3d, 0xe5, 0xc8, 0x9b, 0x92, 0x01, - 0x4e, 0x58, 0xa1, 0x0d, 0x38, 0x15, 0x37, 0x6a, 0x71, 0x41, 0x58, 0xe2, 0xe7, 0x48, 0x2e, 0x1f, - 0x4e, 0x83, 0x71, 0x16, 0xdf, 0xfc, 0x5d, 0x0e, 0x16, 0x13, 0x63, 0xf2, 0xe2, 0x25, 0xd1, 0x9c, - 0x71, 0x1b, 0xcd, 0xdd, 0x03, 0x07, 0x8d, 0x6d, 0x5a, 0xb8, 0x5d, 0xf6, 0x11, 0x6f, 0xb4, 0x2a, - 0x66, 0x69, 0xd9, 0xe7, 0x40, 0x81, 0xb0, 0x8e, 0xc7, 0x24, 0xe9, 0xb8, 0x87, 0xe2, 0x74, 0xb2, - 0x2e, 0x4d, 0x24, 0xb9, 0x14, 0x03, 0xb0, 0xc2, 0x61, 0x92, 0xd4, 0xdd, 0x46, 0x43, 0x76, 0xe6, - 0x89, 0x24, 0x5b, 0x6e, 0xa3, 0x81, 0x39, 0xc4, 0x7c, 0x33, 0xaf, 0x6e, 0xb5, 0x6c, 0xa3, 0xc7, - 0xd3, 0x9b, 0xe6, 0x71, 0xb9, 0x13, 0x3c, 0x2e, 0x56, 0x71, 0x7e, 0x3c, 0x15, 0x17, 0xee, 0x40, - 0xc5, 0xc5, 0x91, 0x2a, 0x56, 0x43, 0x8d, 0xd9, 0x3b, 0x1e, 0x6a, 0xa8, 0x57, 0x85, 0xb9, 0xfb, - 0xf2, 0xaa, 0x60, 0xfe, 0xba, 0x00, 0x8b, 0xa9, 0x0a, 0x32, 0xd5, 0x45, 0x1b, 0x27, 0x76, 0xd1, - 0x67, 0xa1, 0x18, 0x84, 0x3d, 0x4f, 0x84, 0x9c, 0x92, 0xb2, 0xd8, 0x3e, 0xdb, 0xc4, 0x02, 0xc6, - 0xfa, 0xc4, 0x7a, 0xd8, 0xc7, 0x3d, 0xd1, 0x6b, 0x95, 0x94, 0x30, 0x5b, 0x7c, 0x17, 0x4b, 0x28, - 0x7a, 0x0d, 0x16, 0x28, 0x0f, 0x86, 0xa1, 0x1d, 0x91, 0x66, 0x7f, 0x0a, 0x2f, 0x2b, 0x35, 0x8d, - 0x9c, 0x75, 0xfa, 0xf8, 0x68, 0x75, 0x41, 0xdf, 0xc1, 0x29, 0x76, 0xe8, 0xa7, 0x06, 0xa0, 0x60, - 0xd8, 0x9f, 0x14, 0x8c, 0x09, 0xeb, 0xca, 0xc1, 0xaa, 0xd5, 0x7a, 0xf8, 0xf8, 0x68, 0x75, 0x48, - 0x35, 0x8b, 0x87, 0x08, 0x80, 0xde, 0x30, 0xf4, 0xe1, 0x95, 0x78, 0x70, 0xd9, 0x9f, 0x62, 0xc7, - 0x20, 0x66, 0x75, 0xb7, 0x1f, 0x61, 0xdd, 0x32, 0xe0, 0xa1, 0xa1, 0xdf, 0x4d, 0x2b, 0xd6, 0x9d, - 0x98, 0x8e, 0xcc, 0x5f, 0xe5, 0xe0, 0x81, 0x21, 0xcd, 0x0e, 0xba, 0xa1, 0x6b, 0xc7, 0x98, 0xda, - 0x68, 0x4f, 0x56, 0x1a, 0xe2, 0xef, 0x0f, 0xc3, 0x74, 0x72, 0x87, 0xf3, 0xa6, 0x06, 0x14, 0x5b, - 0xbe, 0xdf, 0x8e, 0x07, 0x4b, 0x93, 0x54, 0x4c, 0x6a, 0x1c, 0x62, 0x95, 0x99, 0xaa, 0xd9, 0x9a, - 0x62, 0x41, 0xde, 0xfc, 0xae, 0x01, 0xda, 0xbb, 0x32, 0x7a, 0x15, 0xca, 0x76, 0x2f, 0xf2, 0xbb, - 0x76, 0x44, 0xea, 0xb2, 0x0e, 0xdc, 0x9b, 0xca, 0x0b, 0xf6, 0x46, 0x4c, 0x55, 0x68, 0x28, 0x59, - 0x62, 0xc5, 0xcf, 0x7c, 0x4a, 0x58, 0x2c, 0xf3, 0x81, 0x0a, 0x1a, 0xc6, 0xe8, 0xa0, 0x61, 0xfe, - 0xdd, 0x80, 0xd4, 0x65, 0x45, 0x5d, 0x28, 0x32, 0x91, 0xfa, 0x53, 0xf8, 0xdf, 0x82, 0x4e, 0x77, - 0x83, 0xd1, 0x14, 0x7a, 0xe4, 0x3f, 0xb1, 0xe0, 0x82, 0x5c, 0x28, 0x30, 0x85, 0xca, 0xb9, 0xf8, - 0xee, 0x94, 0xb8, 0x31, 0x53, 0xc9, 0x3f, 0xf3, 0xf8, 0x7e, 0x1b, 0x73, 0x16, 0xe6, 0x93, 0x70, - 0x66, 0x40, 0x22, 0xa6, 0xa4, 0x86, 0x1f, 0xff, 0x4d, 0x43, 0x53, 0xd2, 0x45, 0xb6, 0x89, 0x05, - 0xcc, 0x7c, 0xdb, 0x80, 0xd3, 0x59, 0xf2, 0x2c, 0x8e, 0x9d, 0xa1, 0x59, 0x7a, 0xf7, 0x44, 0x6b, - 0xff, 0x2b, 0x85, 0x1a, 0x14, 0x1f, 0x0f, 0x4a, 0xc0, 0x2c, 0x9a, 0x7d, 0x65, 0x62, 0x77, 0xc8, - 0xf5, 0x28, 0x71, 0x7a, 0x61, 0x7c, 0x50, 0x35, 0xbc, 0x92, 0xfb, 0x38, 0xc1, 0x40, 0xe7, 0x01, - 0xc4, 0x2b, 0xe7, 0x9e, 0xea, 0x08, 0x93, 0xc1, 0x5d, 0x2d, 0x81, 0x60, 0x0d, 0x8b, 0x35, 0xce, - 0x0e, 0x09, 0xa3, 0x2d, 0xd6, 0x07, 0xb1, 0xe0, 0xb2, 0x20, 0x1a, 0xe7, 0x4d, 0xb9, 0x87, 0x13, - 0x28, 0xfa, 0x14, 0xcc, 0xb5, 0x49, 0x9f, 0x23, 0x16, 0x38, 0xa2, 0xf8, 0xe7, 0x91, 0xd8, 0xc2, - 0x31, 0x8c, 0x75, 0xba, 0x8e, 0xcd, 0xb1, 0x8a, 0x1c, 0x8b, 0x77, 0xba, 0x9b, 0x1b, 0x1c, 0x49, - 0x42, 0xac, 0xea, 0xbb, 0x1f, 0xad, 0xcc, 0xbc, 0xf7, 0xd1, 0xca, 0xcc, 0xfb, 0x1f, 0xad, 0xcc, - 0xdc, 0x3a, 0x5e, 0x31, 0xde, 0x3d, 0x5e, 0x31, 0xde, 0x3b, 0x5e, 0x31, 0xde, 0x3f, 0x5e, 0x31, - 0xfe, 0x76, 0xbc, 0x62, 0xfc, 0xf0, 0xe3, 0x95, 0x99, 0x17, 0x4a, 0xb1, 0x6a, 0xff, 0x15, 0x00, - 0x00, 0xff, 0xff, 0x96, 0xa1, 0xca, 0xef, 0xa3, 0x31, 0x00, 0x00, + proto.RegisterFile("github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1/generated.proto", fileDescriptor_generated_60d98fe9cf636171) +} + +var fileDescriptor_generated_60d98fe9cf636171 = []byte{ + // 3058 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3a, 0x5b, 0x8f, 0x1c, 0x47, + 0xd5, 0xdb, 0x73, 0xd9, 0x9d, 0x39, 0x7b, 0xb1, 0x5d, 0xb9, 0x7c, 0xf3, 0x6d, 0x3e, 0xed, 0xae, + 0xda, 0xdf, 0xf7, 0x11, 0x50, 0x32, 0x8b, 0x2d, 0x02, 0x21, 0x20, 0xa4, 0xed, 0x5d, 0x3b, 0xbb, + 0x59, 0x7b, 0xbd, 0xa9, 0xd9, 0xc4, 0x52, 0x88, 0x02, 0xed, 0x9e, 0x9a, 0x99, 0xf6, 0xcc, 0x74, + 0x77, 0xba, 0x7a, 0xd6, 0x9e, 0x44, 0x89, 0x1c, 0x22, 0x24, 0x10, 0x20, 0x71, 0x11, 0x12, 0x12, + 0x2f, 0x11, 0x82, 0x97, 0xf0, 0x06, 0x11, 0x3f, 0x80, 0x07, 0xe4, 0xc7, 0x3c, 0x80, 0x88, 0x42, + 0xb4, 0x22, 0x9b, 0x17, 0xde, 0x10, 0xaf, 0x79, 0x42, 0x75, 0xe9, 0xae, 0xea, 0x9e, 0x19, 0xef, + 0xd8, 0x33, 0x36, 0xf0, 0x36, 0x55, 0xe7, 0xf4, 0x39, 0xa7, 0xce, 0x39, 0x75, 0x6e, 0x35, 0xb0, + 0xd3, 0x74, 0xa3, 0x56, 0xef, 0x5a, 0xd5, 0xf1, 0xbb, 0xeb, 0x76, 0xd8, 0xf4, 0x83, 0xd0, 0xbf, + 0xce, 0x7f, 0x3c, 0xe9, 0xd4, 0xd7, 0x83, 0x76, 0x73, 0xdd, 0x0e, 0x5c, 0xba, 0x6e, 0x07, 0x41, + 0xc7, 0x75, 0xec, 0xc8, 0xf5, 0xbd, 0xf5, 0xc3, 0x73, 0x76, 0x27, 0x68, 0xd9, 0xe7, 0xd6, 0x9b, + 0xc4, 0x23, 0xa1, 0x1d, 0x91, 0x7a, 0x35, 0x08, 0xfd, 0xc8, 0x47, 0x5f, 0x56, 0xa4, 0xaa, 0x31, + 0x29, 0xfe, 0xe3, 0x1b, 0x4e, 0xbd, 0x1a, 0xb4, 0x9b, 0x55, 0x46, 0xaa, 0xaa, 0x91, 0xaa, 0xc6, + 0xa4, 0x96, 0x9f, 0xd4, 0xa4, 0x68, 0xfa, 0x4d, 0x7f, 0x9d, 0x53, 0xbc, 0xd6, 0x6b, 0xf0, 0x15, + 0x5f, 0xf0, 0x5f, 0x82, 0xd3, 0xf2, 0x17, 0xda, 0x4f, 0xd3, 0xaa, 0xeb, 0x33, 0xd9, 0xba, 0xb6, + 0xd3, 0x72, 0x3d, 0x12, 0xf6, 0x95, 0xb0, 0x5d, 0x12, 0xd9, 0xeb, 0x87, 0x03, 0xf2, 0x2d, 0xaf, + 0x8f, 0xfa, 0x2a, 0xec, 0x79, 0x91, 0xdb, 0x25, 0x03, 0x1f, 0x7c, 0xf1, 0xa4, 0x0f, 0xa8, 0xd3, + 0x22, 0x5d, 0x3b, 0xfb, 0x9d, 0xf9, 0x2a, 0x2c, 0x6e, 0x5c, 0xad, 0x6d, 0xf4, 0xa2, 0xd6, 0xa6, + 0xef, 0x35, 0xdc, 0x26, 0x7a, 0x0a, 0xe6, 0x9d, 0x4e, 0x8f, 0x46, 0x24, 0xdc, 0xb3, 0xbb, 0xa4, + 0x62, 0xac, 0x19, 0x8f, 0x97, 0xad, 0x87, 0x6e, 0x1f, 0xad, 0xce, 0x1c, 0x1f, 0xad, 0xce, 0x6f, + 0x2a, 0x10, 0xd6, 0xf1, 0xd0, 0x67, 0x61, 0x2e, 0xf4, 0x3b, 0x64, 0x03, 0xef, 0x55, 0x72, 0xfc, + 0x93, 0x53, 0xf2, 0x93, 0x39, 0x2c, 0xb6, 0x71, 0x0c, 0x37, 0xff, 0x62, 0x00, 0x6c, 0x04, 0xc1, + 0x7e, 0xe8, 0x5f, 0x27, 0x4e, 0x84, 0xbe, 0x09, 0x25, 0xa6, 0x85, 0xba, 0x1d, 0xd9, 0x9c, 0xdb, + 0xfc, 0xf9, 0xcf, 0x57, 0xc5, 0x61, 0xaa, 0xfa, 0x61, 0x94, 0x55, 0x18, 0x76, 0xf5, 0xf0, 0x5c, + 0xf5, 0xca, 0x35, 0xf6, 0xfd, 0x65, 0x12, 0xd9, 0x16, 0x92, 0xcc, 0x40, 0xed, 0xe1, 0x84, 0x2a, + 0x6a, 0x43, 0x81, 0x06, 0xc4, 0xe1, 0x82, 0xcd, 0x9f, 0xdf, 0xa9, 0xde, 0xb3, 0xed, 0xab, 0x4a, + 0xec, 0x5a, 0x40, 0x1c, 0x6b, 0x41, 0xb2, 0x2d, 0xb0, 0x15, 0xe6, 0x4c, 0xcc, 0x0f, 0x0d, 0x58, + 0x52, 0x68, 0x97, 0x5c, 0x1a, 0xa1, 0x97, 0x07, 0x4e, 0x58, 0x1d, 0xef, 0x84, 0xec, 0x6b, 0x7e, + 0xbe, 0xd3, 0x92, 0x51, 0x29, 0xde, 0xd1, 0x4e, 0x77, 0x1d, 0x8a, 0x6e, 0x44, 0xba, 0xb4, 0x92, + 0x5b, 0xcb, 0x3f, 0x3e, 0x7f, 0xfe, 0xc2, 0x54, 0x8e, 0x67, 0x2d, 0x4a, 0x8e, 0xc5, 0x1d, 0x46, + 0x1b, 0x0b, 0x16, 0xe6, 0xcf, 0x8b, 0xfa, 0xe1, 0xd8, 0xa9, 0xd1, 0x39, 0x98, 0xa7, 0x7e, 0x2f, + 0x74, 0x08, 0x26, 0x81, 0x4f, 0x2b, 0xc6, 0x5a, 0x9e, 0x19, 0x9f, 0xf9, 0x4a, 0x4d, 0x6d, 0x63, + 0x1d, 0x07, 0x7d, 0xcf, 0x80, 0x85, 0x3a, 0xa1, 0x91, 0xeb, 0x71, 0xfe, 0xb1, 0xe4, 0xcf, 0x4f, + 0x26, 0x79, 0xbc, 0xb9, 0xa5, 0x28, 0x5b, 0x0f, 0xcb, 0x53, 0x2c, 0x68, 0x9b, 0x14, 0xa7, 0x98, + 0x33, 0x87, 0xaf, 0x13, 0xea, 0x84, 0x6e, 0xc0, 0xd6, 0x95, 0x7c, 0xda, 0xe1, 0xb7, 0x14, 0x08, + 0xeb, 0x78, 0xa8, 0x0d, 0x45, 0xe6, 0xd0, 0xb4, 0x52, 0xe0, 0xc2, 0x5f, 0x9c, 0x40, 0x78, 0xa9, + 0x4e, 0x76, 0x51, 0x94, 0xde, 0xd9, 0x8a, 0x62, 0xc1, 0x03, 0xfd, 0xc0, 0x80, 0x8a, 0xbc, 0x6d, + 0x98, 0x08, 0x55, 0x5e, 0x6d, 0xb9, 0x11, 0xe9, 0xb8, 0x34, 0xaa, 0x14, 0xb9, 0x00, 0xeb, 0xe3, + 0xb9, 0xd4, 0xb3, 0xa1, 0xdf, 0x0b, 0x76, 0x5d, 0xaf, 0x6e, 0xad, 0x49, 0x4e, 0x95, 0xcd, 0x11, + 0x84, 0xf1, 0x48, 0x96, 0xe8, 0x27, 0x06, 0x2c, 0x7b, 0x76, 0x97, 0xd0, 0xc0, 0x66, 0x46, 0x15, + 0x60, 0xab, 0x63, 0x3b, 0x6d, 0x2e, 0xd1, 0xec, 0xbd, 0x49, 0x64, 0x4a, 0x89, 0x96, 0xf7, 0x46, + 0x92, 0xc6, 0x77, 0x60, 0x6b, 0xfe, 0x21, 0x0f, 0xf3, 0x9a, 0x23, 0x3c, 0x80, 0xc8, 0xd2, 0x49, + 0x45, 0x96, 0xe7, 0xa6, 0xe3, 0xc0, 0xa3, 0x42, 0x0b, 0x8a, 0x60, 0x96, 0x46, 0x76, 0xd4, 0xa3, + 0xdc, 0x49, 0xe7, 0xcf, 0x5f, 0x9a, 0x12, 0x3f, 0x4e, 0xd3, 0x5a, 0x92, 0x1c, 0x67, 0xc5, 0x1a, + 0x4b, 0x5e, 0xe8, 0x55, 0x28, 0xfb, 0x01, 0xcb, 0x19, 0xec, 0x76, 0x14, 0x38, 0xe3, 0xad, 0x09, + 0x18, 0x5f, 0x89, 0x69, 0x59, 0x8b, 0xc7, 0x47, 0xab, 0xe5, 0x64, 0x89, 0x15, 0x17, 0xd3, 0x81, + 0x87, 0x35, 0xf9, 0x36, 0x7d, 0xaf, 0xee, 0x72, 0x83, 0xae, 0x41, 0x21, 0xea, 0x07, 0x71, 0x52, + 0x4a, 0x54, 0x74, 0xd0, 0x0f, 0x08, 0xe6, 0x10, 0x96, 0x86, 0xba, 0x84, 0x52, 0xbb, 0x49, 0xb2, + 0x69, 0xe8, 0xb2, 0xd8, 0xc6, 0x31, 0xdc, 0x7c, 0x15, 0x1e, 0x1d, 0x1e, 0x35, 0xd0, 0xff, 0xc3, + 0x2c, 0x25, 0xe1, 0x21, 0x09, 0x25, 0x23, 0xa5, 0x19, 0xbe, 0x8b, 0x25, 0x14, 0xad, 0x43, 0x39, + 0xf1, 0x46, 0xc9, 0xee, 0x8c, 0x44, 0x2d, 0x2b, 0x17, 0x56, 0x38, 0xe6, 0x47, 0x06, 0x9c, 0xd2, + 0x78, 0x3e, 0x80, 0xe4, 0xd0, 0x4e, 0x27, 0x87, 0x8b, 0xd3, 0xf1, 0x98, 0x11, 0xd9, 0xe1, 0x37, + 0xb3, 0x70, 0x46, 0xf7, 0x2b, 0x7e, 0x3d, 0x79, 0x65, 0x40, 0x02, 0xff, 0x05, 0x7c, 0x49, 0xaa, + 0x53, 0x55, 0x06, 0x62, 0x1b, 0xc7, 0x70, 0x66, 0xdf, 0xc0, 0x8e, 0x5a, 0x52, 0x97, 0x89, 0x7d, + 0xf7, 0xed, 0xa8, 0x85, 0x39, 0x84, 0x05, 0x6b, 0xe2, 0x1d, 0xba, 0xa1, 0xef, 0x75, 0x89, 0x17, + 0x65, 0x83, 0xf5, 0x05, 0x05, 0xc2, 0x3a, 0x1e, 0xfa, 0x1a, 0x2c, 0x45, 0x76, 0xd8, 0x24, 0x11, + 0x26, 0x87, 0x2e, 0x8d, 0x1d, 0xb9, 0x6c, 0x3d, 0x2a, 0xbf, 0x5c, 0x3a, 0x48, 0x41, 0x71, 0x06, + 0x1b, 0xbd, 0x67, 0xc0, 0x63, 0x8e, 0xdf, 0x0d, 0x7c, 0x8f, 0x78, 0xd1, 0xbe, 0x1d, 0xda, 0x5d, + 0x12, 0x91, 0xf0, 0xca, 0x21, 0x09, 0x43, 0xb7, 0x4e, 0xa8, 0x0c, 0xc1, 0x97, 0x27, 0xd0, 0xee, + 0xe6, 0x00, 0x75, 0xeb, 0xac, 0x14, 0xee, 0xb1, 0xcd, 0xd1, 0x9c, 0xf1, 0x9d, 0xc4, 0x62, 0xb9, + 0xf9, 0xd0, 0xee, 0xf4, 0x08, 0xbd, 0xe8, 0xb2, 0x4c, 0x35, 0xab, 0x72, 0xf3, 0x8b, 0x6a, 0x1b, + 0xeb, 0x38, 0xc8, 0x83, 0x42, 0x8b, 0x74, 0xba, 0x95, 0x39, 0xee, 0x8a, 0xfb, 0x53, 0x8a, 0x30, + 0xdc, 0x13, 0xb6, 0x49, 0xa7, 0x6b, 0x95, 0x98, 0x41, 0xd9, 0x2f, 0xcc, 0xf9, 0xa0, 0x6f, 0x19, + 0x50, 0x6e, 0xf7, 0x68, 0xe4, 0x77, 0xdd, 0xd7, 0x48, 0xa5, 0xc4, 0xb9, 0xbe, 0x30, 0x4d, 0xae, + 0xbb, 0x31, 0x71, 0x11, 0x6f, 0x92, 0x25, 0x56, 0x6c, 0xd1, 0x6b, 0x30, 0xd7, 0xa6, 0xbe, 0xe7, + 0x91, 0xa8, 0x52, 0xe6, 0x12, 0xd4, 0xa6, 0x2a, 0x81, 0x20, 0x6d, 0xcd, 0x33, 0x9f, 0x97, 0x0b, + 0x1c, 0x33, 0x34, 0xdf, 0x84, 0x47, 0x86, 0x6a, 0x8a, 0xb9, 0x7a, 0x48, 0x3a, 0xc4, 0xa6, 0x64, + 0x58, 0x21, 0x8e, 0x15, 0x08, 0xeb, 0x78, 0xa8, 0x0a, 0xc0, 0xed, 0x29, 0x4c, 0x9e, 0xe3, 0x26, + 0x5f, 0x62, 0x09, 0xec, 0xc5, 0x64, 0x17, 0x6b, 0x18, 0xe6, 0xf3, 0x50, 0x19, 0x25, 0x71, 0xf6, + 0xb6, 0x19, 0xe3, 0xdd, 0x36, 0x73, 0x1f, 0x96, 0x47, 0x9b, 0x01, 0x9d, 0x07, 0x60, 0x11, 0x71, + 0x3f, 0x24, 0x0d, 0xf7, 0xa6, 0xa4, 0x99, 0x64, 0xd9, 0xbd, 0x04, 0x82, 0x35, 0x2c, 0xf3, 0xbd, + 0x7c, 0x2a, 0x70, 0xd6, 0xe2, 0x6c, 0xc8, 0x49, 0xcb, 0xb0, 0x79, 0x69, 0x9a, 0x36, 0xd3, 0x62, + 0xbe, 0x28, 0x5c, 0x25, 0x2f, 0xf4, 0x1d, 0x83, 0x97, 0x8b, 0x71, 0xae, 0x90, 0x99, 0xff, 0x3e, + 0x94, 0xae, 0x7a, 0x05, 0x1a, 0x6f, 0x62, 0x9d, 0x35, 0x0b, 0xac, 0x81, 0xa8, 0x1c, 0x65, 0x1c, + 0x4c, 0x02, 0x6b, 0x5c, 0x50, 0xc6, 0x70, 0xd4, 0x03, 0xa0, 0x7d, 0xcf, 0xd9, 0xf7, 0x3b, 0xae, + 0xd3, 0x97, 0x49, 0x7c, 0x92, 0x46, 0xa1, 0x96, 0x10, 0x13, 0xbe, 0xa5, 0xd6, 0x58, 0x63, 0x64, + 0xbe, 0x93, 0x49, 0x08, 0xa2, 0xa0, 0xf8, 0x91, 0x01, 0xa7, 0x59, 0xd4, 0xb2, 0x43, 0x97, 0xfa, + 0x1e, 0x26, 0xb4, 0xd7, 0x89, 0xa4, 0x0d, 0x77, 0x27, 0x8c, 0xa0, 0x3a, 0x49, 0xab, 0x22, 0xd5, + 0x71, 0x3a, 0x0b, 0xc1, 0x03, 0xec, 0x51, 0x04, 0x73, 0x2d, 0x97, 0x46, 0x7e, 0xd8, 0x97, 0x99, + 0x72, 0x92, 0x2e, 0x71, 0x8b, 0x04, 0x1d, 0xbf, 0xcf, 0xae, 0xc2, 0x8e, 0xd7, 0xf0, 0x95, 0x59, + 0xb6, 0x05, 0x07, 0x1c, 0xb3, 0x42, 0x6f, 0x19, 0x00, 0x41, 0x1c, 0xb6, 0x59, 0x55, 0x77, 0x1f, + 0xb2, 0x48, 0x72, 0xb5, 0x92, 0x2d, 0x8a, 0x35, 0xa6, 0xc8, 0x87, 0xd9, 0x16, 0xb1, 0x3b, 0x51, + 0x4b, 0xba, 0xc5, 0xb3, 0x13, 0xb0, 0xdf, 0xe6, 0x84, 0xb2, 0xf5, 0xa4, 0xd8, 0xc5, 0x92, 0x0d, + 0xfa, 0xb6, 0x01, 0x4b, 0x49, 0xa9, 0xc7, 0x70, 0x49, 0xa5, 0x38, 0x71, 0x63, 0x7e, 0x25, 0x45, + 0xd0, 0x42, 0x2c, 0xa7, 0xa7, 0xf7, 0x70, 0x86, 0x29, 0x7a, 0xdb, 0x00, 0x70, 0xe2, 0xd2, 0x92, + 0xca, 0x9e, 0xe5, 0xca, 0x74, 0x2e, 0x72, 0x52, 0xb2, 0x2a, 0xf5, 0x27, 0x5b, 0x14, 0x6b, 0x6c, + 0xcd, 0x4f, 0x8c, 0x54, 0xfc, 0xbf, 0x6a, 0x47, 0x4e, 0xeb, 0xc2, 0x21, 0xab, 0x59, 0x76, 0x53, + 0xc5, 0xee, 0x97, 0xf4, 0x62, 0xf7, 0xd3, 0xa3, 0xd5, 0xcf, 0x8c, 0x9a, 0xf7, 0xdc, 0x60, 0x14, + 0xaa, 0x9c, 0x84, 0x56, 0x17, 0xbf, 0x01, 0xf3, 0x9a, 0xcc, 0x32, 0x6a, 0x4d, 0xab, 0x1a, 0x4c, + 0x42, 0x95, 0xb6, 0x89, 0x75, 0x7e, 0xe6, 0x9f, 0x72, 0x30, 0x27, 0xdb, 0xcc, 0xb1, 0xab, 0xeb, + 0x35, 0x28, 0xb0, 0x0c, 0x90, 0x2d, 0x06, 0x79, 0xc6, 0xe3, 0x10, 0x14, 0xc0, 0xac, 0xc3, 0x87, + 0x56, 0xb2, 0x1f, 0xda, 0x9e, 0xe4, 0xe6, 0x08, 0xe9, 0xc4, 0x10, 0x4c, 0xc9, 0x24, 0xd6, 0x58, + 0xf2, 0x61, 0x7d, 0xf8, 0x29, 0x87, 0xe5, 0x46, 0x47, 0x39, 0x6f, 0x61, 0xe2, 0xde, 0x6f, 0x33, + 0x4d, 0xd1, 0xfa, 0x2f, 0xc9, 0xfd, 0x54, 0x06, 0x80, 0xb3, 0xbc, 0xcd, 0xdf, 0xe5, 0x61, 0x31, + 0x25, 0x39, 0x7a, 0x02, 0x4a, 0x3d, 0x4a, 0x42, 0x4f, 0x95, 0x0c, 0x49, 0x7b, 0xf0, 0x82, 0xdc, + 0xc7, 0x09, 0x06, 0xc3, 0x0e, 0x6c, 0x4a, 0x6f, 0xf8, 0x61, 0x5d, 0xea, 0x39, 0xc1, 0xde, 0x97, + 0xfb, 0x38, 0xc1, 0x60, 0xe5, 0xc0, 0x35, 0x62, 0x87, 0x24, 0x3c, 0xf0, 0xdb, 0x64, 0x60, 0x52, + 0x62, 0x29, 0x10, 0xd6, 0xf1, 0xb8, 0xd2, 0xa2, 0x0e, 0xdd, 0xec, 0xb8, 0xc4, 0x8b, 0x84, 0x98, + 0x53, 0x50, 0xda, 0xc1, 0xa5, 0x9a, 0x4e, 0x51, 0x29, 0x2d, 0x03, 0xc0, 0x59, 0xde, 0x2c, 0xea, + 0x2e, 0xda, 0x37, 0xa8, 0x9a, 0x79, 0xca, 0xf8, 0x33, 0x89, 0xfb, 0xa4, 0x66, 0xa8, 0xd6, 0x99, + 0xe3, 0xa3, 0xd5, 0xf4, 0x58, 0x15, 0xa7, 0x39, 0x9a, 0x7f, 0x34, 0x20, 0x9e, 0xa5, 0x3e, 0x80, + 0x2e, 0xb0, 0x99, 0xee, 0x02, 0xad, 0xc9, 0xef, 0xc9, 0x88, 0x0e, 0xf0, 0xa3, 0x3c, 0x0c, 0x64, + 0x5b, 0xf4, 0x0a, 0x8b, 0xb3, 0x6c, 0x8f, 0xd4, 0x37, 0xe2, 0x44, 0xff, 0xb9, 0xf1, 0x4e, 0x77, + 0xe0, 0x76, 0x89, 0x1e, 0x42, 0x63, 0x2a, 0x58, 0xa3, 0x88, 0x6e, 0x19, 0x8a, 0xc1, 0x81, 0x2f, + 0x63, 0xdb, 0x74, 0xab, 0xc1, 0x01, 0x11, 0x0e, 0x7c, 0xac, 0xf1, 0x44, 0xcf, 0x24, 0x93, 0x99, + 0x22, 0xbf, 0x14, 0x66, 0x7a, 0x96, 0xf2, 0x69, 0xaa, 0x08, 0xc9, 0xcc, 0x57, 0x9e, 0x80, 0x52, + 0x18, 0x77, 0xa5, 0x73, 0xe9, 0x3b, 0x98, 0xf4, 0xa3, 0x09, 0x06, 0x7a, 0x1d, 0xca, 0xa1, 0x1c, + 0x7c, 0xd1, 0x4a, 0x89, 0x9b, 0x73, 0x92, 0x5b, 0x14, 0x0f, 0xd1, 0x6a, 0xbd, 0x6e, 0xd7, 0x0e, + 0xfb, 0x6a, 0x7e, 0x11, 0x03, 0x28, 0x56, 0xfc, 0xcc, 0xef, 0x1b, 0x80, 0x06, 0x4b, 0x0c, 0xb4, + 0x0e, 0xe5, 0xa4, 0x0b, 0x95, 0x41, 0x27, 0xa1, 0x93, 0xa0, 0x63, 0x85, 0x33, 0x46, 0x68, 0x3f, + 0x0b, 0x45, 0xde, 0xa3, 0xc8, 0x20, 0x93, 0x78, 0x1b, 0x6f, 0x62, 0xb0, 0x80, 0x99, 0xbf, 0x37, + 0x20, 0x1b, 0x22, 0x79, 0x76, 0x11, 0x96, 0xc8, 0x66, 0x97, 0xb4, 0xd6, 0xc7, 0x1f, 0x14, 0xa1, + 0x97, 0x61, 0xde, 0x8e, 0x22, 0xd2, 0x0d, 0x22, 0xee, 0xc0, 0xf9, 0xbb, 0x76, 0x60, 0x5e, 0x22, + 0x5f, 0xf6, 0xeb, 0x6e, 0xc3, 0xe5, 0xce, 0xab, 0x93, 0x33, 0xff, 0x91, 0x83, 0xa5, 0x74, 0xc1, + 0x98, 0xf2, 0x88, 0xdc, 0x89, 0x1e, 0x71, 0xd2, 0x6c, 0x22, 0xff, 0xef, 0x39, 0x9b, 0x78, 0x05, + 0xa0, 0xce, 0x8f, 0xcd, 0x95, 0x5a, 0xb8, 0xf7, 0xa8, 0xb0, 0x95, 0x50, 0xc1, 0x1a, 0x45, 0xb4, + 0x0c, 0x39, 0xb7, 0xce, 0xaf, 0x63, 0xde, 0x02, 0x89, 0x9b, 0xdb, 0xd9, 0xc2, 0x39, 0xb7, 0x6e, + 0x52, 0x58, 0xd0, 0x4b, 0xd5, 0xb1, 0x9d, 0xe6, 0x2b, 0xb0, 0x28, 0x7e, 0x6d, 0x91, 0xc8, 0x76, + 0x3b, 0x54, 0x5a, 0xe7, 0x11, 0x89, 0xbe, 0x58, 0xd3, 0x81, 0x38, 0x8d, 0x6b, 0xde, 0xce, 0x01, + 0x6c, 0xfb, 0x7e, 0x5b, 0xf2, 0x8c, 0xef, 0x80, 0x31, 0xf2, 0x0e, 0xac, 0x41, 0xa1, 0xed, 0x7a, + 0xf5, 0xec, 0x2d, 0xd9, 0x75, 0xbd, 0x3a, 0xe6, 0x10, 0xd6, 0x4a, 0xdb, 0x81, 0xfb, 0x22, 0x09, + 0xa9, 0x7a, 0xb9, 0x48, 0xf4, 0xb2, 0xb1, 0xbf, 0x23, 0x21, 0x58, 0xc3, 0x42, 0x4f, 0xc8, 0xb2, + 0x52, 0x0c, 0xc0, 0x2a, 0x99, 0xb2, 0xb2, 0xc4, 0x24, 0xd4, 0xea, 0xc6, 0xa7, 0x33, 0x81, 0x6d, + 0x6d, 0x20, 0xb0, 0xa9, 0x32, 0x7b, 0xbf, 0x65, 0x53, 0x32, 0xec, 0x82, 0xcd, 0x9e, 0x70, 0xc1, + 0x52, 0x73, 0xd4, 0xb9, 0x31, 0xe6, 0xa8, 0x35, 0x28, 0x3d, 0x77, 0xf5, 0x40, 0x54, 0x17, 0x26, + 0xe4, 0x5d, 0x5b, 0x84, 0x9d, 0xbc, 0xba, 0x27, 0x3b, 0x94, 0xf6, 0xb8, 0x4b, 0x30, 0x20, 0x3a, + 0x0b, 0x79, 0x72, 0x33, 0xe0, 0x8a, 0xcc, 0x2b, 0xd2, 0x17, 0x6e, 0x06, 0x6e, 0x48, 0x28, 0x43, + 0x22, 0x37, 0x03, 0x93, 0x82, 0x1a, 0x46, 0xa3, 0x06, 0x14, 0x58, 0x1f, 0x2b, 0xb3, 0xd5, 0xf6, + 0x84, 0xad, 0xb2, 0x9a, 0x79, 0xf3, 0xf1, 0x17, 0xdb, 0xc2, 0x9c, 0xbe, 0xf9, 0x8b, 0x02, 0x64, + 0xfa, 0x14, 0xd4, 0xd3, 0xe7, 0xed, 0xc6, 0x14, 0xe7, 0xed, 0xc9, 0xc1, 0x87, 0xcd, 0xdc, 0xd1, + 0x53, 0x50, 0x0c, 0x98, 0x01, 0xa5, 0xbb, 0xad, 0xc6, 0x11, 0x97, 0x5b, 0x75, 0x88, 0x9d, 0x05, + 0xb6, 0x6e, 0xe6, 0xfc, 0x09, 0x66, 0x7e, 0x53, 0x0c, 0x21, 0x64, 0xc3, 0x2f, 0x6e, 0xfc, 0xde, + 0xb4, 0x34, 0x2b, 0x7b, 0xfe, 0x64, 0x1a, 0x21, 0x3b, 0x7d, 0x8d, 0x23, 0xfa, 0x3a, 0x94, 0x69, + 0x64, 0x87, 0x22, 0x8a, 0xcf, 0xde, 0x75, 0xc0, 0x49, 0xd4, 0x57, 0x8b, 0x89, 0x60, 0x45, 0x0f, + 0xbd, 0x04, 0xd0, 0x70, 0x3d, 0x97, 0xb6, 0x38, 0xf5, 0xb9, 0x7b, 0xcb, 0x11, 0x17, 0x13, 0x0a, + 0x58, 0xa3, 0x66, 0xfe, 0xd8, 0x00, 0x34, 0x24, 0x82, 0x86, 0x71, 0x55, 0x67, 0xdc, 0x8f, 0x08, + 0x3f, 0xb4, 0xc0, 0x7b, 0xa6, 0xf4, 0xb3, 0x77, 0x56, 0x67, 0x6e, 0x7d, 0xb4, 0x36, 0x63, 0xbe, + 0x9b, 0x83, 0x79, 0xed, 0xe1, 0x72, 0x8c, 0x78, 0x96, 0x79, 0x68, 0xcd, 0x8d, 0xf9, 0xd0, 0xfa, + 0x38, 0x94, 0x02, 0xbf, 0xe3, 0x3a, 0xae, 0xcc, 0x65, 0x65, 0x6b, 0x81, 0xf7, 0x27, 0x72, 0x0f, + 0x27, 0x50, 0x14, 0x41, 0xf9, 0xfa, 0x8d, 0x88, 0x87, 0x85, 0xf8, 0x59, 0x76, 0x73, 0x02, 0xa5, + 0xc4, 0x21, 0x46, 0x59, 0x3e, 0xde, 0xa1, 0x58, 0x31, 0x42, 0x26, 0xcc, 0x36, 0x43, 0xbf, 0x17, + 0x88, 0x57, 0x80, 0xb2, 0x05, 0x2c, 0x3c, 0xf2, 0x47, 0x4d, 0x8a, 0x25, 0xc4, 0xfc, 0x73, 0x0e, + 0x80, 0xbf, 0x7d, 0xbb, 0x7c, 0xee, 0xb3, 0x06, 0x85, 0x90, 0x04, 0x7e, 0x56, 0x57, 0x0c, 0x03, + 0x73, 0x48, 0xaa, 0x8d, 0xcb, 0xdd, 0x55, 0x1b, 0x97, 0x3f, 0xb1, 0x8d, 0x63, 0x59, 0x8c, 0xb6, + 0xf6, 0x43, 0xf7, 0xd0, 0x8e, 0xc8, 0x2e, 0xe9, 0xcb, 0x54, 0xa0, 0xb2, 0x58, 0x6d, 0x5b, 0x01, + 0x71, 0x1a, 0x77, 0x68, 0x07, 0x5c, 0xfc, 0x17, 0x76, 0xc0, 0x1f, 0x1a, 0xb0, 0xa4, 0x34, 0xfb, + 0x9f, 0xf5, 0x77, 0x0b, 0x25, 0xf7, 0x88, 0x76, 0xea, 0xef, 0x06, 0x9c, 0x8a, 0x0b, 0x71, 0x59, + 0x46, 0x4c, 0xa5, 0x6e, 0x48, 0x25, 0xdc, 0xfc, 0xc9, 0x09, 0x57, 0x8f, 0xf2, 0x85, 0x13, 0xa2, + 0xfc, 0x57, 0x33, 0x15, 0xc3, 0xff, 0x0e, 0x54, 0x0c, 0x28, 0x69, 0x3a, 0xfa, 0x9e, 0x93, 0xae, + 0xb0, 0xcc, 0x5f, 0xe7, 0x61, 0x21, 0x06, 0xef, 0xf9, 0x75, 0x75, 0x18, 0x63, 0xbc, 0xc3, 0x8c, + 0xf1, 0x0a, 0x9b, 0x68, 0x30, 0x7f, 0xa7, 0xee, 0x83, 0x5f, 0x5c, 0x79, 0xd8, 0xc4, 0x38, 0xfc, + 0x56, 0x63, 0x01, 0x63, 0x3a, 0x39, 0x94, 0x95, 0x57, 0x31, 0xad, 0x93, 0xb8, 0xec, 0x8a, 0xe1, + 0xe8, 0x7f, 0xa0, 0x10, 0xd9, 0xcd, 0xf8, 0x01, 0x8e, 0xd7, 0x00, 0x07, 0x76, 0x93, 0x62, 0xbe, + 0x8b, 0x7a, 0x50, 0x72, 0x5a, 0x6e, 0xa7, 0x1e, 0x12, 0xd6, 0x00, 0xe6, 0x27, 0x9c, 0xc1, 0xea, + 0xda, 0x53, 0x8e, 0xbc, 0x29, 0x19, 0xe0, 0x84, 0x15, 0xda, 0x80, 0x53, 0x71, 0x67, 0x17, 0x57, + 0x90, 0x25, 0x7e, 0x8e, 0xe4, 0xf2, 0xe1, 0x34, 0x18, 0x67, 0xf1, 0xcd, 0xdf, 0xe6, 0x60, 0x31, + 0x31, 0x26, 0x2f, 0x5e, 0x12, 0xcd, 0x19, 0x77, 0xd0, 0xdc, 0x7d, 0x70, 0xd0, 0xd8, 0xa6, 0x85, + 0x3b, 0x65, 0x1f, 0xf1, 0xa8, 0xab, 0x62, 0x96, 0x96, 0x7d, 0x0e, 0x14, 0x08, 0xeb, 0x78, 0x4c, + 0x92, 0x8e, 0x7b, 0x28, 0x4e, 0x27, 0x0b, 0xd9, 0x44, 0x92, 0x4b, 0x31, 0x00, 0x2b, 0x1c, 0x26, + 0x49, 0xdd, 0x6d, 0x34, 0x64, 0x1d, 0x9b, 0x48, 0xb2, 0xe5, 0x36, 0x1a, 0x98, 0x43, 0xcc, 0xb7, + 0xf3, 0xea, 0x56, 0xcb, 0xbe, 0x7b, 0x3c, 0xbd, 0x69, 0x1e, 0x97, 0x3b, 0xc1, 0xe3, 0x62, 0x15, + 0xe7, 0xc7, 0x53, 0x71, 0xe1, 0x2e, 0x54, 0x5c, 0x1c, 0xa9, 0x62, 0x35, 0x05, 0x99, 0xbd, 0xeb, + 0x29, 0x88, 0x7a, 0x86, 0x98, 0x7b, 0x20, 0xcf, 0x10, 0xe6, 0xaf, 0x0a, 0xb0, 0x98, 0xaa, 0x20, + 0x53, 0x6d, 0xb7, 0x71, 0x62, 0xdb, 0x7d, 0x16, 0x8a, 0x41, 0xd8, 0xf3, 0x44, 0xc8, 0x29, 0x29, + 0x8b, 0xed, 0xb3, 0x4d, 0x2c, 0x60, 0xac, 0xb1, 0xac, 0x87, 0x7d, 0xdc, 0x13, 0xcd, 0x59, 0x49, + 0x09, 0xb3, 0xc5, 0x77, 0xb1, 0x84, 0xa2, 0x37, 0x60, 0x81, 0xf2, 0x60, 0x18, 0xda, 0x11, 0x69, + 0xf6, 0xa7, 0xf0, 0x14, 0x53, 0xd3, 0xc8, 0x59, 0xa7, 0x8f, 0x8f, 0x56, 0x17, 0xf4, 0x1d, 0x9c, + 0x62, 0x87, 0x7e, 0x6a, 0x00, 0x0a, 0x86, 0xfd, 0xab, 0xc1, 0x98, 0xb0, 0xae, 0x1c, 0xac, 0x5a, + 0xad, 0x47, 0x8f, 0x8f, 0x56, 0x87, 0x54, 0xb3, 0x78, 0x88, 0x00, 0xe8, 0x2d, 0x43, 0x9f, 0x76, + 0x89, 0x17, 0x9a, 0xfd, 0x29, 0x76, 0x0c, 0x62, 0xb8, 0x77, 0xe7, 0x99, 0xd7, 0x2d, 0x03, 0x1e, + 0x19, 0xfa, 0xdd, 0xb4, 0x62, 0xdd, 0x89, 0xe9, 0xc8, 0xfc, 0x65, 0x0e, 0x1e, 0x1a, 0xd2, 0xec, + 0xa0, 0x1b, 0xba, 0x76, 0x8c, 0xa9, 0xcd, 0x02, 0x65, 0xa5, 0x21, 0xfe, 0x2f, 0x31, 0x4c, 0x27, + 0x77, 0x39, 0xa0, 0x6a, 0x40, 0xb1, 0xe5, 0xfb, 0xed, 0x78, 0x12, 0x35, 0x49, 0xc5, 0xa4, 0xe6, + 0x27, 0x56, 0x99, 0xa9, 0x9a, 0xad, 0x29, 0x16, 0xe4, 0xcd, 0xef, 0x1a, 0xa0, 0x3d, 0x44, 0xa3, + 0xd7, 0xa1, 0x6c, 0xf7, 0x22, 0xbf, 0x6b, 0x47, 0xa4, 0x2e, 0xeb, 0xc0, 0xbd, 0xa9, 0x3c, 0x79, + 0x6f, 0xc4, 0x54, 0x85, 0x86, 0x92, 0x25, 0x56, 0xfc, 0xcc, 0x67, 0x84, 0xc5, 0x32, 0x1f, 0xa8, + 0xa0, 0x61, 0x8c, 0x0e, 0x1a, 0xe6, 0xdf, 0x0c, 0x48, 0x5d, 0x56, 0xd4, 0x85, 0x22, 0x13, 0xa9, + 0x3f, 0x85, 0x3f, 0x3a, 0xe8, 0x74, 0x37, 0x18, 0x4d, 0xa1, 0x47, 0xfe, 0x13, 0x0b, 0x2e, 0xc8, + 0x85, 0x02, 0x53, 0xa8, 0x1c, 0xa4, 0xef, 0x4e, 0x89, 0x1b, 0x33, 0x95, 0xfc, 0xf7, 0x8f, 0xef, + 0xb7, 0x31, 0x67, 0x61, 0x3e, 0x0d, 0x67, 0x06, 0x24, 0x62, 0x4a, 0x6a, 0xf8, 0xf1, 0xff, 0x3a, + 0x34, 0x25, 0x5d, 0x64, 0x9b, 0x58, 0xc0, 0xcc, 0x77, 0x0d, 0x38, 0x9d, 0x25, 0xcf, 0xe2, 0xd8, + 0x19, 0x9a, 0xa5, 0x77, 0x5f, 0xb4, 0xf6, 0xdf, 0x52, 0xa8, 0x41, 0xf1, 0xf1, 0xa0, 0x04, 0xcc, + 0xa2, 0xd9, 0x67, 0x29, 0x76, 0x87, 0x5c, 0x8f, 0x12, 0xa7, 0x17, 0xc6, 0x07, 0x55, 0xc3, 0x2b, + 0xb9, 0x8f, 0x13, 0x0c, 0x74, 0x1e, 0x40, 0x3c, 0x8b, 0xee, 0xa9, 0x8e, 0x30, 0x99, 0xf4, 0xd5, + 0x12, 0x08, 0xd6, 0xb0, 0x58, 0xe3, 0xec, 0x90, 0x30, 0xda, 0x62, 0x7d, 0x10, 0x0b, 0x2e, 0x0b, + 0xa2, 0x71, 0xde, 0x94, 0x7b, 0x38, 0x81, 0xa2, 0xff, 0x83, 0xb9, 0x36, 0xe9, 0x73, 0xc4, 0x02, + 0x47, 0x14, 0x7f, 0x55, 0x12, 0x5b, 0x38, 0x86, 0xb1, 0x4e, 0xd7, 0xb1, 0x39, 0x56, 0x91, 0x63, + 0xf1, 0x4e, 0x77, 0x73, 0x83, 0x23, 0x49, 0x88, 0x55, 0xbd, 0xfd, 0xf1, 0xca, 0xcc, 0xfb, 0x1f, + 0xaf, 0xcc, 0x7c, 0xf0, 0xf1, 0xca, 0xcc, 0xad, 0xe3, 0x15, 0xe3, 0xf6, 0xf1, 0x8a, 0xf1, 0xfe, + 0xf1, 0x8a, 0xf1, 0xc1, 0xf1, 0x8a, 0xf1, 0xd7, 0xe3, 0x15, 0xe3, 0x87, 0x9f, 0xac, 0xcc, 0xbc, + 0x54, 0x8a, 0x55, 0xfb, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x61, 0xd8, 0x86, 0x6b, 0xd4, 0x31, + 0x00, 0x00, } diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index 40d2cf0ecf437..2af986ea21c28 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -310,6 +310,9 @@ message HookStatus { // A human readable message indicating details about why the resource is in this condition. optional string message = 6; + + // Namespace is a hook object namespace + optional string namespace = 7; } // JWTToken holds the issuedAt and expiresAt values of a token diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index 130bd03071b65..5e6cadf3a23b6 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -270,6 +270,8 @@ type HookStatus struct { Status OperationPhase `json:"status" protobuf:"bytes,5,opt,name=status"` // A human readable message indicating details about why the resource is in this condition. Message string `json:"message,omitempty" protobuf:"bytes,6,opt,name=message"` + // Namespace is a hook object namespace + Namespace string `json:"namespace,omitempty" protobuf:"bytes,7,opt,name=namespace"` } // SyncOperationResult represent result of sync operation diff --git a/server/swagger.json b/server/swagger.json index e531dbd0c25b9..dcdf6d8a688c2 100644 --- a/server/swagger.json +++ b/server/swagger.json @@ -2584,6 +2584,10 @@ "type": "string", "title": "Name is the resource name" }, + "namespace": { + "type": "string", + "title": "Namespace is a hook object namespace" + }, "status": { "type": "string", "title": "Status a simple, high-level summary of where the resource is in its lifecycle" diff --git a/test/e2e/functional/multi-namespace/deployment-with-namespace.yaml b/test/e2e/functional/multi-namespace/deployment-with-namespace.yaml new file mode 100644 index 0000000000000..ade2a4b323190 --- /dev/null +++ b/test/e2e/functional/multi-namespace/deployment-with-namespace.yaml @@ -0,0 +1,33 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: helm-guestbook + namespace: kube-system + labels: + app: helm-guestbook +spec: + replicas: 1 + selector: + matchLabels: + app: helm-guestbook + template: + metadata: + labels: + app: helm-guestbook + spec: + containers: + - name: helm-guestbook + image: "gcr.io/heptio-images/ks-guestbook-demo:0.1" + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 80 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http \ No newline at end of file diff --git a/test/e2e/functional/multi-namespace/deployment.yaml b/test/e2e/functional/multi-namespace/deployment.yaml new file mode 100644 index 0000000000000..37e8022338503 --- /dev/null +++ b/test/e2e/functional/multi-namespace/deployment.yaml @@ -0,0 +1,32 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: helm-guestbook + labels: + app: helm-guestbook +spec: + replicas: 1 + selector: + matchLabels: + app: helm-guestbook + template: + metadata: + labels: + app: helm-guestbook + spec: + containers: + - name: helm-guestbook + image: "gcr.io/heptio-images/ks-guestbook-demo:0.1" + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 80 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http diff --git a/util/kube/kube.go b/util/kube/kube.go index dcaa34cfc84a9..c3e1205a2d30f 100644 --- a/util/kube/kube.go +++ b/util/kube/kube.go @@ -11,8 +11,6 @@ import ( "strings" "time" - "github.com/argoproj/argo-cd/util" - "github.com/ghodss/yaml" "github.com/pkg/errors" log "github.com/sirupsen/logrus" @@ -80,6 +78,10 @@ type ResourceKey struct { Name string } +func (k *ResourceKey) String() string { + return fmt.Sprintf("%s/%s/%s/%s", k.Group, k.Kind, k.Namespace, k.Name) +} + func NewResourceKey(group string, kind string, namespace string, name string) ResourceKey { if group == "extensions" { group = "apps" @@ -89,12 +91,8 @@ func NewResourceKey(group string, kind string, namespace string, name string) Re } func GetResourceKey(obj *unstructured.Unstructured) ResourceKey { - return GetResourceKeyNS(obj, "") -} - -func GetResourceKeyNS(obj *unstructured.Unstructured, namespace string) ResourceKey { gvk := obj.GroupVersionKind() - return NewResourceKey(gvk.Group, gvk.Kind, util.FirstNonEmpty(obj.GetNamespace(), namespace), obj.GetName()) + return NewResourceKey(gvk.Group, gvk.Kind, obj.GetNamespace(), obj.GetName()) } // TestConfig tests to make sure the REST config is usable