Compare commits

...

22 Commits

Author SHA1 Message Date
Tom Wieczorek
5732f19d20 Update to 0.10.6 also in kustomization (#816) 2018-11-26 14:36:57 -08:00
Jesse Suen
0dfcd2f7d8 Update version to v0.10.6 2018-11-14 17:20:31 -08:00
Jesse Suen
7e49cff7e9 Fix issue preventing in-cluster app sync due to go-client changes (issue #774) 2018-11-14 17:17:08 -08:00
Conor Fennell
5d185b6584 add argo cluster permission to view logs (#766) 2018-11-13 18:47:49 -08:00
Jesse Suen
7bfa374b40 Bump up the default status/operation processors to 20/10 respectively 2018-11-13 18:18:21 -08:00
Jesse Suen
6c20e0f7d7 Bump version to v0.10.5 2018-11-13 15:28:02 -08:00
Jesse Suen
93d2dd7ed0 Update dependencies to k8s v1.12 and client-go v9.0 (#729)
Update dependencies to k8s v1.12 and client-go v9.0 (resolves #353)
Fix issue where applications could not be deleted on k8s v1.12 (resolves #718)
Refactor k8s dynamic resource libraries to promote code reuse
2018-11-13 14:59:12 -08:00
Jesse Suen
89ece31762 Update version to v0.10.4 2018-11-07 17:25:16 -08:00
Jesse Suen
d565a0a119 Health check is not discerning apiVersion when assessing CRDs (issue #753) (#754) 2018-11-07 17:24:20 -08:00
Mario Duarte
1e2b554f01 Fix nil pointer dereference in util/health (#723) 2018-11-07 17:24:14 -08:00
Alessandro Marrella
8cb2f5d7e4 Updated helm (#749) 2018-11-07 16:35:16 -08:00
Alexander Matyushentsev
c5814d5946 Update version to v0.10.3 2018-10-28 23:31:08 -07:00
Alexander Matyushentsev
a4a81d1de9 Fix applying TLS version settings (#731) 2018-10-28 23:30:00 -07:00
Tom Wieczorek
cb27cec021 Update to kustomize 1.0.10 (#728) (#728)
See also kubernetes-sigs/kustomize#514
2018-10-28 22:47:42 -07:00
Alexander Matyushentsev
e13e13e7ae Update manifests to v0.10.2 2018-10-25 11:52:17 -07:00
Tom Wieczorek
88d41f8efa Update to kustomize 1.0.9 (#722) 2018-10-25 11:51:22 -07:00
dthomson25
dbe09104a1 Fix app refresh err when k8s patch is too slow (#724) 2018-10-25 11:51:18 -07:00
Alexander Matyushentsev
6a18870ec1 Update manifests to v0.10.1 2018-10-24 12:57:02 -07:00
Jesse Suen
ca9f992fc2 Update version to v0.10.1 2018-10-24 11:40:52 -07:00
Jesse Suen
063ff34f00 Handle case where OIDC settings become invalid after dex server restart (issue #710) (#715) 2018-10-24 11:39:53 -07:00
Jesse Suen
a9980c3025 git clean also needs to clean files under gitignore (issue #711) (#712) 2018-10-19 22:11:25 -07:00
Alexander Matyushentsev
3f5967c83e Update manifests to v0.10.0 2018-10-19 14:29:37 -07:00
49 changed files with 1080 additions and 780 deletions

View File

@@ -55,13 +55,13 @@ RUN wget https://github.com/ksonnet/ksonnet/releases/download/v${KSONNET_VERSION
mv /tmp/ks_${KSONNET_VERSION}_linux_amd64/ks /usr/local/bin/ks
# Install helm
ENV HELM_VERSION=2.9.1
ENV HELM_VERSION=2.11.0
RUN wget https://storage.googleapis.com/kubernetes-helm/helm-v${HELM_VERSION}-linux-amd64.tar.gz && \
tar -C /tmp/ -xf helm-v${HELM_VERSION}-linux-amd64.tar.gz && \
mv /tmp/linux-amd64/helm /usr/local/bin/helm
# Install kustomize
ENV KUSTOMIZE_VERSION=1.0.8
ENV KUSTOMIZE_VERSION=1.0.10
RUN curl -L -o /usr/local/bin/kustomize https://github.com/kubernetes-sigs/kustomize/releases/download/v${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_linux_amd64 && \
chmod +x /usr/local/bin/kustomize

130
Gopkg.lock generated
View File

@@ -33,15 +33,15 @@
revision = "de5bf2ad457846296e2031421a34e2568e304e35"
[[projects]]
digest = "1:0c024ed5f8ee58bb5bcafcc1d55678cbaec13884a9798eaadfe6ca0d16ef9392"
branch = "master"
digest = "1:0caf9208419fa5db5a0ca7112affaa9550c54291dda8e2abac0c0e76181c959e"
name = "github.com/argoproj/argo"
packages = [
"pkg/apis/workflow",
"pkg/apis/workflow/v1alpha1",
]
pruneopts = ""
revision = "af636ddd8455660f307d835814d3112b90815dfd"
version = "v2.2.0"
revision = "7ef1cea68c94f7f0e1e2f8bd75bedc5a7df8af90"
[[projects]]
branch = "master"
@@ -354,6 +354,14 @@
revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5"
version = "v1.2.0"
[[projects]]
branch = "master"
digest = "1:1e5b1e14524ed08301977b7b8e10c719ed853cbf3f24ecb66fae783a46f207a6"
name = "github.com/google/btree"
packages = ["."]
pruneopts = ""
revision = "4030bb1f1f0c35b30ca7009e9ebd06849dd45306"
[[projects]]
digest = "1:14d826ee25139b4674e9768ac287a135f4e7c14e1134a5b15e4e152edfd49f41"
name = "github.com/google/go-jsonnet"
@@ -385,6 +393,17 @@
revision = "ee43cbb60db7bd22502942cccbc39059117352ab"
version = "v0.1.0"
[[projects]]
branch = "master"
digest = "1:009a1928b8c096338b68b5822d838a72b4d8520715c1463614476359f3282ec8"
name = "github.com/gregjones/httpcache"
packages = [
".",
"diskcache",
]
pruneopts = ""
revision = "9cad4c3443a7200dd6400aef47183728de563a38"
[[projects]]
branch = "master"
digest = "1:9dca8c981b8aed7448d94e78bc68a76784867a38b3036d5aabc0b32d92ffd1f4"
@@ -433,14 +452,6 @@
pruneopts = ""
revision = "0fb14efe8c47ae851c0034ed7a448854d3d34cf3"
[[projects]]
branch = "master"
digest = "1:f81c8d7354cc0c6340f2f7a48724ee6c2b3db3e918ecd441c985b4d2d97dd3e7"
name = "github.com/howeyc/gopass"
packages = ["."]
pruneopts = ""
revision = "bf9dde6d0d2c004a008c27aaee91170c786f6db8"
[[projects]]
digest = "1:23bc0b496ba341c6e3ba24d6358ff4a40a704d9eb5f9a3bd8e8fbd57ad869013"
name = "github.com/imdario/mergo"
@@ -466,12 +477,11 @@
revision = "d14ea06fba99483203c19d92cfcd13ebe73135f4"
[[projects]]
digest = "1:dd5cdbd84daf24b2a009364f3c24859b1e4de1eab87c451fb3bce09935d909fc"
digest = "1:31c6f3c4f1e15fcc24fcfc9f5f24603ff3963c56d6fa162116493b4025fb6acc"
name = "github.com/json-iterator/go"
packages = ["."]
pruneopts = ""
revision = "e7c7f3b33712573affdcc7a107218e7926b9a05b"
version = "1.0.6"
revision = "f2b4162afba35581b6d4a50d3b8f34e33c144682"
[[projects]]
digest = "1:41e0bed5df4f9fd04c418bf9b6b7179b3671e416ad6175332601ca1c8dc74606"
@@ -525,6 +535,22 @@
pruneopts = ""
revision = "bb74f1db0675b241733089d5a1faa5dd8b0ef57b"
[[projects]]
digest = "1:0c0ff2a89c1bb0d01887e1dac043ad7efbf3ec77482ef058ac423d13497e16fd"
name = "github.com/modern-go/concurrent"
packages = ["."]
pruneopts = ""
revision = "bacd9c7ef1dd9b15be4a9909b8ac7a4e313eec94"
version = "1.0.3"
[[projects]]
digest = "1:e32bdbdb7c377a07a9a46378290059822efdce5c8d96fe71940d87cb4f918855"
name = "github.com/modern-go/reflect2"
packages = ["."]
pruneopts = ""
revision = "4b7aa43c6742a2c18fdef89dd197aaae7dac7ccd"
version = "1.0.1"
[[projects]]
digest = "1:4c0404dc03d974acd5fcd8b8d3ce687b13bd169db032b89275e8b9d77b98ce8c"
name = "github.com/patrickmn/go-cache"
@@ -541,6 +567,22 @@
revision = "c37440a7cf42ac63b919c752ca73a85067e05992"
version = "v0.2.0"
[[projects]]
branch = "master"
digest = "1:c24598ffeadd2762552269271b3b1510df2d83ee6696c1e543a0ff653af494bc"
name = "github.com/petar/GoLLRB"
packages = ["llrb"]
pruneopts = ""
revision = "53be0d36a84c2a886ca057d34b6aa4468df9ccb4"
[[projects]]
digest = "1:b46305723171710475f2dd37547edd57b67b9de9f2a6267cafdd98331fd6897f"
name = "github.com/peterbourgon/diskv"
packages = ["."]
pruneopts = ""
revision = "5f041e8faa004a95c88a202771f4cc3e991971e6"
version = "v2.0.1"
[[projects]]
digest = "1:7365acd48986e205ccb8652cc746f09c8b7876030d53710ea6ef7d0bd0dcd7ca"
name = "github.com/pkg/errors"
@@ -1047,8 +1089,8 @@
revision = "eb3733d160e74a9c7e442f435eb3bea458e1d19f"
[[projects]]
branch = "release-1.10"
digest = "1:5beb32094452970c0d73a2bdacd79aa9cfaa4947a774d521c1bed4b4c2705f15"
branch = "release-1.12"
digest = "1:ed04c5203ecbf6358fb6a774b0ecd40ea992d6dcc42adc1d3b7cf9eceb66b6c8"
name = "k8s.io/api"
packages = [
"admission/v1beta1",
@@ -1063,10 +1105,12 @@
"authorization/v1beta1",
"autoscaling/v1",
"autoscaling/v2beta1",
"autoscaling/v2beta2",
"batch/v1",
"batch/v1beta1",
"batch/v2alpha1",
"certificates/v1beta1",
"coordination/v1beta1",
"core/v1",
"events/v1beta1",
"extensions/v1beta1",
@@ -1077,17 +1121,18 @@
"rbac/v1alpha1",
"rbac/v1beta1",
"scheduling/v1alpha1",
"scheduling/v1beta1",
"settings/v1alpha1",
"storage/v1",
"storage/v1alpha1",
"storage/v1beta1",
]
pruneopts = ""
revision = "8b7507fac302640dd5f1efbf9643199952cc58db"
revision = "475331a8afff5587f47d0470a93f79c60c573c03"
[[projects]]
branch = "release-1.10"
digest = "1:7cb811fe9560718bd0ada29f2091acab5c4b4380ed23ef2824f64ce7038d899e"
branch = "release-1.12"
digest = "1:39be82077450762b5e14b5268e679a14ac0e9c7d3286e2fcface437556a29e4c"
name = "k8s.io/apiextensions-apiserver"
packages = [
"pkg/apis/apiextensions",
@@ -1097,20 +1142,17 @@
"pkg/client/clientset/clientset/typed/apiextensions/v1beta1",
]
pruneopts = ""
revision = "b13a681559816a9c14f93086bbeeed1c7baf2bcb"
revision = "ca1024863b48cf0701229109df75ac5f0bb4907e"
[[projects]]
branch = "release-1.10"
digest = "1:b9c6e8e91bab6a419c58a63377532782a9f5616552164c38a9527f91c9309bbe"
branch = "release-1.12"
digest = "1:5899da40e41bcc8c1df101b72954096bba9d85b763bc17efc846062ccc111c7b"
name = "k8s.io/apimachinery"
packages = [
"pkg/api/equality",
"pkg/api/errors",
"pkg/api/meta",
"pkg/api/resource",
"pkg/apimachinery",
"pkg/apimachinery/announced",
"pkg/apimachinery/registered",
"pkg/apis/meta/internalversion",
"pkg/apis/meta/v1",
"pkg/apis/meta/v1/unstructured",
@@ -1137,6 +1179,7 @@
"pkg/util/intstr",
"pkg/util/json",
"pkg/util/mergepatch",
"pkg/util/naming",
"pkg/util/net",
"pkg/util/runtime",
"pkg/util/sets",
@@ -1151,11 +1194,11 @@
"third_party/forked/golang/reflect",
]
pruneopts = ""
revision = "f6313580a4d36c7c74a3d845dda6e116642c4f90"
revision = "f71dbbc36e126f5a371b85f6cca96bc8c57db2b6"
[[projects]]
branch = "release-7.0"
digest = "1:3a45889089f89cc371fb45b3f8a478248b755e4af17a8cf592e49bdf3481a0b3"
branch = "release-9.0"
digest = "1:77bf3d9f18ec82e08ac6c4c7e2d9d1a2ef8d16b25d3ff72fcefcf9256d751573"
name = "k8s.io/client-go"
packages = [
"discovery",
@@ -1173,12 +1216,15 @@
"informers/autoscaling",
"informers/autoscaling/v1",
"informers/autoscaling/v2beta1",
"informers/autoscaling/v2beta2",
"informers/batch",
"informers/batch/v1",
"informers/batch/v1beta1",
"informers/batch/v2alpha1",
"informers/certificates",
"informers/certificates/v1beta1",
"informers/coordination",
"informers/coordination/v1beta1",
"informers/core",
"informers/core/v1",
"informers/events",
@@ -1196,6 +1242,7 @@
"informers/rbac/v1beta1",
"informers/scheduling",
"informers/scheduling/v1alpha1",
"informers/scheduling/v1beta1",
"informers/settings",
"informers/settings/v1alpha1",
"informers/storage",
@@ -1227,6 +1274,8 @@
"kubernetes/typed/autoscaling/v1/fake",
"kubernetes/typed/autoscaling/v2beta1",
"kubernetes/typed/autoscaling/v2beta1/fake",
"kubernetes/typed/autoscaling/v2beta2",
"kubernetes/typed/autoscaling/v2beta2/fake",
"kubernetes/typed/batch/v1",
"kubernetes/typed/batch/v1/fake",
"kubernetes/typed/batch/v1beta1",
@@ -1235,6 +1284,8 @@
"kubernetes/typed/batch/v2alpha1/fake",
"kubernetes/typed/certificates/v1beta1",
"kubernetes/typed/certificates/v1beta1/fake",
"kubernetes/typed/coordination/v1beta1",
"kubernetes/typed/coordination/v1beta1/fake",
"kubernetes/typed/core/v1",
"kubernetes/typed/core/v1/fake",
"kubernetes/typed/events/v1beta1",
@@ -1253,6 +1304,8 @@
"kubernetes/typed/rbac/v1beta1/fake",
"kubernetes/typed/scheduling/v1alpha1",
"kubernetes/typed/scheduling/v1alpha1/fake",
"kubernetes/typed/scheduling/v1beta1",
"kubernetes/typed/scheduling/v1beta1/fake",
"kubernetes/typed/settings/v1alpha1",
"kubernetes/typed/settings/v1alpha1/fake",
"kubernetes/typed/storage/v1",
@@ -1268,10 +1321,12 @@
"listers/apps/v1beta2",
"listers/autoscaling/v1",
"listers/autoscaling/v2beta1",
"listers/autoscaling/v2beta2",
"listers/batch/v1",
"listers/batch/v1beta1",
"listers/batch/v2alpha1",
"listers/certificates/v1beta1",
"listers/coordination/v1beta1",
"listers/core/v1",
"listers/events/v1beta1",
"listers/extensions/v1beta1",
@@ -1281,12 +1336,14 @@
"listers/rbac/v1alpha1",
"listers/rbac/v1beta1",
"listers/scheduling/v1alpha1",
"listers/scheduling/v1beta1",
"listers/settings/v1alpha1",
"listers/storage/v1",
"listers/storage/v1alpha1",
"listers/storage/v1beta1",
"pkg/apis/clientauthentication",
"pkg/apis/clientauthentication/v1alpha1",
"pkg/apis/clientauthentication/v1beta1",
"pkg/version",
"plugin/pkg/client/auth/exec",
"plugin/pkg/client/auth/gcp",
@@ -1307,6 +1364,7 @@
"transport",
"util/buffer",
"util/cert",
"util/connrotation",
"util/flowcontrol",
"util/homedir",
"util/integer",
@@ -1315,11 +1373,11 @@
"util/workqueue",
]
pruneopts = ""
revision = "26a26f55b28aa1b338fbaf6fbbe0bcd76aed05e0"
revision = "13596e875accbd333e0b5bd5fd9462185acd9958"
[[projects]]
branch = "release-1.10"
digest = "1:34b0b3400ffdc2533ed4ea23721956638c2776ba49ca4c5def71dddcf0cdfd9b"
branch = "release-1.12"
digest = "1:e6fffdf0dfeb0d189a7c6d735e76e7564685d3b6513f8b19d3651191cb6b084b"
name = "k8s.io/code-generator"
packages = [
"cmd/go-to-protobuf",
@@ -1328,7 +1386,7 @@
"third_party/forked/golang/reflect",
]
pruneopts = ""
revision = "9de8e796a74d16d2a285165727d04c185ebca6dc"
revision = "3dcf91f64f638563e5106f21f50c31fa361c918d"
[[projects]]
branch = "master"
@@ -1356,7 +1414,7 @@
revision = "50ae88d24ede7b8bad68e23c805b5d3da5c8abaf"
[[projects]]
digest = "1:ad247ab9725165a7f289779d46747da832e33a4efe8ae264461afc571f65dac8"
digest = "1:6061aa42761235df375f20fa4a1aa6d1845cba3687575f3adb2ef3f3bc540af5"
name = "k8s.io/kubernetes"
packages = [
"pkg/apis/apps",
@@ -1365,11 +1423,12 @@
"pkg/apis/core",
"pkg/apis/extensions",
"pkg/apis/networking",
"pkg/apis/policy",
"pkg/kubectl/scheme",
]
pruneopts = ""
revision = "81753b10df112992bf51bbc2c2f85208aad78335"
version = "v1.10.2"
revision = "17c77c7898218073f14c8d573582e8d2313dc740"
version = "v1.12.2"
[solve-meta]
analyzer-name = "dep"
@@ -1394,7 +1453,6 @@
"github.com/gogo/protobuf/proto",
"github.com/gogo/protobuf/protoc-gen-gofast",
"github.com/gogo/protobuf/protoc-gen-gogofast",
"github.com/golang/glog",
"github.com/golang/protobuf/proto",
"github.com/golang/protobuf/protoc-gen-go",
"github.com/golang/protobuf/ptypes/empty",

View File

@@ -35,19 +35,19 @@ required = [
revision = "7858729281ec582767b20e0d696b6041d995d5e0"
[[constraint]]
branch = "release-1.10"
branch = "release-1.12"
name = "k8s.io/api"
[[constraint]]
name = "k8s.io/apiextensions-apiserver"
branch = "release-1.10"
branch = "release-1.12"
[[constraint]]
branch = "release-1.10"
branch = "release-1.12"
name = "k8s.io/code-generator"
[[constraint]]
branch = "release-7.0"
branch = "release-9.0"
name = "k8s.io/client-go"
[[constraint]]

View File

@@ -1 +1 @@
0.10.0
0.10.6

View File

@@ -330,7 +330,7 @@ func (ctrl *ApplicationController) finalizeApplicationDeletion(app *appv1.Applic
if err == nil {
config := clst.RESTConfig()
err = kube.DeleteResourceWithLabel(config, app.Spec.Destination.Namespace, common.LabelApplicationName, app.Name)
err = kube.DeleteResourcesWithLabel(config, app.Spec.Destination.Namespace, common.LabelApplicationName, app.Name)
if err == nil {
app.SetCascadedDeletion(false)
var patch []byte

View File

@@ -171,7 +171,10 @@ func (s *appStateManager) getLiveObjs(app *v1alpha1.Application, targetObjs []*u
controlledLiveObj := make([]*unstructured.Unstructured, len(targetObjs))
// Move live resources which have corresponding target object to controlledLiveObj
dynClientPool := dynamic.NewDynamicClientPool(restConfig)
dynamicIf, err := dynamic.NewForConfig(restConfig)
if err != nil {
return nil, nil, err
}
disco, err := discovery.NewDiscoveryClientForConfig(restConfig)
if err != nil {
return nil, nil, err
@@ -185,10 +188,6 @@ func (s *appStateManager) getLiveObjs(app *v1alpha1.Application, targetObjs []*u
// of ArgoCD. In order to determine that it is truly missing, we fall back to perform a
// direct lookup of the resource by name. See issue #141
gvk := targetObj.GroupVersionKind()
dclient, err := dynClientPool.ClientForGroupVersionKind(gvk)
if err != nil {
return nil, nil, err
}
apiResource, err := kubeutil.ServerResourceForGroupVersionKind(disco, gvk)
if err != nil {
if !apierr.IsNotFound(err) {
@@ -196,7 +195,7 @@ func (s *appStateManager) getLiveObjs(app *v1alpha1.Application, targetObjs []*u
}
// If we get here, the app is comprised of a custom resource which has yet to be registered
} else {
liveObj, err = kubeutil.GetLiveResource(dclient, targetObj, apiResource, app.Spec.Destination.Namespace)
liveObj, err = kubeutil.GetLiveResource(dynamicIf, targetObj, apiResource, app.Spec.Destination.Namespace)
if err != nil {
return nil, nil, err
}

View File

@@ -33,7 +33,7 @@ type syncContext struct {
proj *appv1.AppProject
comparison *appv1.ComparisonResult
config *rest.Config
dynClientPool dynamic.ClientPool
dynamicIf dynamic.Interface
disco discovery.DiscoveryInterface
kubectl kube.Kubectl
namespace string
@@ -112,13 +112,18 @@ func (s *appStateManager) SyncAppState(app *appv1.Application, state *appv1.Oper
}
restConfig := clst.RESTConfig()
dynClientPool := dynamic.NewDynamicClientPool(restConfig)
disco, err := discovery.NewDiscoveryClientForConfig(restConfig)
dynamicIf, err := dynamic.NewForConfig(restConfig)
if err != nil {
state.Phase = appv1.OperationError
state.Message = fmt.Sprintf("Failed to initialize dynamic client: %v", err)
return
}
disco, err := discovery.NewDiscoveryClientForConfig(restConfig)
if err != nil {
state.Phase = appv1.OperationError
state.Message = fmt.Sprintf("Failed to initialize discovery client: %v", err)
return
}
proj, err := argo.GetAppProject(&app.Spec, s.appclientset, s.namespace)
if err != nil {
@@ -132,7 +137,7 @@ func (s *appStateManager) SyncAppState(app *appv1.Application, state *appv1.Oper
proj: proj,
comparison: comparison,
config: restConfig,
dynClientPool: dynClientPool,
dynamicIf: dynamicIf,
disco: disco,
kubectl: s.kubectl,
namespace: app.Spec.Destination.Namespace,
@@ -627,15 +632,12 @@ func (sc *syncContext) runHook(hook *unstructured.Unstructured, hookType appv1.H
}
gvk := hook.GroupVersionKind()
dclient, err := sc.dynClientPool.ClientForGroupVersionKind(gvk)
if err != nil {
return false, err
}
apiResource, err := kube.ServerResourceForGroupVersionKind(sc.disco, gvk)
if err != nil {
return false, err
}
resIf := dclient.Resource(apiResource, sc.namespace)
resource := kube.ToGroupVersionResource(gvk.GroupVersion().String(), apiResource)
resIf := kube.ToResourceInterface(sc.dynamicIf, apiResource, resource, sc.namespace)
var liveObj *unstructured.Unstructured
existing, err := resIf.Get(hook.GetName(), metav1.GetOptions{})
@@ -938,15 +940,12 @@ func (sc *syncContext) deleteHook(name, kind, apiVersion string) error {
Version: groupVersion[1],
Kind: kind,
}
dclient, err := sc.dynClientPool.ClientForGroupVersionKind(gvk)
if err != nil {
return err
}
apiResource, err := kube.ServerResourceForGroupVersionKind(sc.disco, gvk)
if err != nil {
return err
}
resIf := dclient.Resource(apiResource, sc.namespace)
resource := kube.ToGroupVersionResource(gvk.GroupVersion().String(), apiResource)
resIf := kube.ToResourceInterface(sc.dynamicIf, apiResource, resource, sc.namespace)
return resIf.Delete(name, &metav1.DeleteOptions{})
}

View File

@@ -12,7 +12,14 @@ spec:
app: application-controller
spec:
containers:
- command: [/argocd-application-controller, --repo-server, 'argocd-repo-server:8081']
- command:
- /argocd-application-controller
- --repo-server
- argocd-repo-server:8081
- --status-processors
- "20"
- --operation-processors
- "10"
image: argoproj/argocd-application-controller:latest
name: application-controller
serviceAccountName: application-controller

View File

@@ -24,10 +24,10 @@ resources:
imageTags:
- name: argoproj/argocd-server
newTag: latest
newTag: v0.10.6
- name: argoproj/argocd-ui
newTag: latest
newTag: v0.10.6
- name: argoproj/argocd-repo-server
newTag: latest
newTag: v0.10.6
- name: argoproj/argocd-application-controller
newTag: latest
newTag: v0.10.6

View File

@@ -15,3 +15,10 @@ rules:
- events
verbs:
- list
- apiGroups:
- ""
resources:
- pods
- pods/log
verbs:
- get

View File

@@ -166,6 +166,13 @@ rules:
- events
verbs:
- list
- apiGroups:
- ""
resources:
- pods
- pods/log
verbs:
- get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
@@ -321,7 +328,11 @@ spec:
- /argocd-application-controller
- --repo-server
- argocd-repo-server:8081
image: argoproj/argocd-application-controller:latest
- --status-processors
- "20"
- --operation-processors
- "10"
image: argoproj/argocd-application-controller:v0.10.6
name: application-controller
serviceAccountName: application-controller
---
@@ -342,7 +353,7 @@ spec:
containers:
- command:
- /argocd-repo-server
image: argoproj/argocd-repo-server:latest
image: argoproj/argocd-repo-server:v0.10.6
name: argocd-repo-server
ports:
- containerPort: 8081
@@ -372,7 +383,7 @@ spec:
- /shared/app
- --repo-server
- argocd-repo-server:8081
image: argoproj/argocd-server:latest
image: argoproj/argocd-server:v0.10.6
name: argocd-server
readinessProbe:
httpGet:
@@ -389,7 +400,7 @@ spec:
- -r
- /app
- /shared
image: argoproj/argocd-ui:latest
image: argoproj/argocd-ui:v0.10.6
name: ui
volumeMounts:
- mountPath: /shared
@@ -429,7 +440,7 @@ spec:
- cp
- /argocd-util
- /shared
image: argoproj/argocd-server:latest
image: argoproj/argocd-server:v0.10.6
name: copyutil
volumeMounts:
- mountPath: /shared

View File

@@ -261,7 +261,11 @@ spec:
- /argocd-application-controller
- --repo-server
- argocd-repo-server:8081
image: argoproj/argocd-application-controller:latest
- --status-processors
- "20"
- --operation-processors
- "10"
image: argoproj/argocd-application-controller:v0.10.6
name: application-controller
serviceAccountName: application-controller
---
@@ -282,7 +286,7 @@ spec:
containers:
- command:
- /argocd-repo-server
image: argoproj/argocd-repo-server:latest
image: argoproj/argocd-repo-server:v0.10.6
name: argocd-repo-server
ports:
- containerPort: 8081
@@ -312,7 +316,7 @@ spec:
- /shared/app
- --repo-server
- argocd-repo-server:8081
image: argoproj/argocd-server:latest
image: argoproj/argocd-server:v0.10.6
name: argocd-server
readinessProbe:
httpGet:
@@ -329,7 +333,7 @@ spec:
- -r
- /app
- /shared
image: argoproj/argocd-ui:latest
image: argoproj/argocd-ui:v0.10.6
name: ui
volumeMounts:
- mountPath: /shared
@@ -369,7 +373,7 @@ spec:
- cp
- /argocd-util
- /shared
image: argoproj/argocd-server:latest
image: argoproj/argocd-server:v0.10.6
name: copyutil
volumeMounts:
- mountPath: /shared

View File

@@ -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_d72d4a667dcfda25, []int{0}
return fileDescriptor_generated_eab4c1f625372278, []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_d72d4a667dcfda25, []int{1}
return fileDescriptor_generated_eab4c1f625372278, []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_d72d4a667dcfda25, []int{2}
return fileDescriptor_generated_eab4c1f625372278, []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_d72d4a667dcfda25, []int{3}
return fileDescriptor_generated_eab4c1f625372278, []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_d72d4a667dcfda25, []int{4}
return fileDescriptor_generated_eab4c1f625372278, []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_d72d4a667dcfda25, []int{5}
return fileDescriptor_generated_eab4c1f625372278, []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_d72d4a667dcfda25, []int{6}
return fileDescriptor_generated_eab4c1f625372278, []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_d72d4a667dcfda25, []int{7}
return fileDescriptor_generated_eab4c1f625372278, []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_d72d4a667dcfda25, []int{8}
return fileDescriptor_generated_eab4c1f625372278, []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 *ApplicationSpec) Reset() { *m = ApplicationSpec{} }
func (*ApplicationSpec) ProtoMessage() {}
func (*ApplicationSpec) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{9}
return fileDescriptor_generated_eab4c1f625372278, []int{9}
}
func (m *ApplicationSpec) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -310,7 +310,7 @@ var xxx_messageInfo_ApplicationSpec proto.InternalMessageInfo
func (m *ApplicationStatus) Reset() { *m = ApplicationStatus{} }
func (*ApplicationStatus) ProtoMessage() {}
func (*ApplicationStatus) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{10}
return fileDescriptor_generated_eab4c1f625372278, []int{10}
}
func (m *ApplicationStatus) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -338,7 +338,7 @@ var xxx_messageInfo_ApplicationStatus proto.InternalMessageInfo
func (m *ApplicationWatchEvent) Reset() { *m = ApplicationWatchEvent{} }
func (*ApplicationWatchEvent) ProtoMessage() {}
func (*ApplicationWatchEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{11}
return fileDescriptor_generated_eab4c1f625372278, []int{11}
}
func (m *ApplicationWatchEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -366,7 +366,7 @@ var xxx_messageInfo_ApplicationWatchEvent proto.InternalMessageInfo
func (m *Cluster) Reset() { *m = Cluster{} }
func (*Cluster) ProtoMessage() {}
func (*Cluster) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{12}
return fileDescriptor_generated_eab4c1f625372278, []int{12}
}
func (m *Cluster) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -394,7 +394,7 @@ var xxx_messageInfo_Cluster proto.InternalMessageInfo
func (m *ClusterConfig) Reset() { *m = ClusterConfig{} }
func (*ClusterConfig) ProtoMessage() {}
func (*ClusterConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{13}
return fileDescriptor_generated_eab4c1f625372278, []int{13}
}
func (m *ClusterConfig) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -422,7 +422,7 @@ var xxx_messageInfo_ClusterConfig proto.InternalMessageInfo
func (m *ClusterList) Reset() { *m = ClusterList{} }
func (*ClusterList) ProtoMessage() {}
func (*ClusterList) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{14}
return fileDescriptor_generated_eab4c1f625372278, []int{14}
}
func (m *ClusterList) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -450,7 +450,7 @@ var xxx_messageInfo_ClusterList proto.InternalMessageInfo
func (m *ComparisonResult) Reset() { *m = ComparisonResult{} }
func (*ComparisonResult) ProtoMessage() {}
func (*ComparisonResult) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{15}
return fileDescriptor_generated_eab4c1f625372278, []int{15}
}
func (m *ComparisonResult) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -478,7 +478,7 @@ var xxx_messageInfo_ComparisonResult proto.InternalMessageInfo
func (m *ComponentParameter) Reset() { *m = ComponentParameter{} }
func (*ComponentParameter) ProtoMessage() {}
func (*ComponentParameter) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{16}
return fileDescriptor_generated_eab4c1f625372278, []int{16}
}
func (m *ComponentParameter) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -506,7 +506,7 @@ var xxx_messageInfo_ComponentParameter proto.InternalMessageInfo
func (m *ConnectionState) Reset() { *m = ConnectionState{} }
func (*ConnectionState) ProtoMessage() {}
func (*ConnectionState) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{17}
return fileDescriptor_generated_eab4c1f625372278, []int{17}
}
func (m *ConnectionState) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -534,7 +534,7 @@ var xxx_messageInfo_ConnectionState proto.InternalMessageInfo
func (m *DeploymentInfo) Reset() { *m = DeploymentInfo{} }
func (*DeploymentInfo) ProtoMessage() {}
func (*DeploymentInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{18}
return fileDescriptor_generated_eab4c1f625372278, []int{18}
}
func (m *DeploymentInfo) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -562,7 +562,7 @@ var xxx_messageInfo_DeploymentInfo proto.InternalMessageInfo
func (m *HealthStatus) Reset() { *m = HealthStatus{} }
func (*HealthStatus) ProtoMessage() {}
func (*HealthStatus) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{19}
return fileDescriptor_generated_eab4c1f625372278, []int{19}
}
func (m *HealthStatus) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -590,7 +590,7 @@ var xxx_messageInfo_HealthStatus proto.InternalMessageInfo
func (m *HookStatus) Reset() { *m = HookStatus{} }
func (*HookStatus) ProtoMessage() {}
func (*HookStatus) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{20}
return fileDescriptor_generated_eab4c1f625372278, []int{20}
}
func (m *HookStatus) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -618,7 +618,7 @@ var xxx_messageInfo_HookStatus proto.InternalMessageInfo
func (m *JWTToken) Reset() { *m = JWTToken{} }
func (*JWTToken) ProtoMessage() {}
func (*JWTToken) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{21}
return fileDescriptor_generated_eab4c1f625372278, []int{21}
}
func (m *JWTToken) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -646,7 +646,7 @@ var xxx_messageInfo_JWTToken proto.InternalMessageInfo
func (m *Operation) Reset() { *m = Operation{} }
func (*Operation) ProtoMessage() {}
func (*Operation) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{22}
return fileDescriptor_generated_eab4c1f625372278, []int{22}
}
func (m *Operation) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -674,7 +674,7 @@ var xxx_messageInfo_Operation proto.InternalMessageInfo
func (m *OperationState) Reset() { *m = OperationState{} }
func (*OperationState) ProtoMessage() {}
func (*OperationState) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{23}
return fileDescriptor_generated_eab4c1f625372278, []int{23}
}
func (m *OperationState) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -702,7 +702,7 @@ var xxx_messageInfo_OperationState proto.InternalMessageInfo
func (m *ParameterOverrides) Reset() { *m = ParameterOverrides{} }
func (*ParameterOverrides) ProtoMessage() {}
func (*ParameterOverrides) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{24}
return fileDescriptor_generated_eab4c1f625372278, []int{24}
}
func (m *ParameterOverrides) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -730,7 +730,7 @@ var xxx_messageInfo_ParameterOverrides proto.InternalMessageInfo
func (m *ProjectRole) Reset() { *m = ProjectRole{} }
func (*ProjectRole) ProtoMessage() {}
func (*ProjectRole) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{25}
return fileDescriptor_generated_eab4c1f625372278, []int{25}
}
func (m *ProjectRole) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -758,7 +758,7 @@ var xxx_messageInfo_ProjectRole proto.InternalMessageInfo
func (m *Repository) Reset() { *m = Repository{} }
func (*Repository) ProtoMessage() {}
func (*Repository) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{26}
return fileDescriptor_generated_eab4c1f625372278, []int{26}
}
func (m *Repository) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -786,7 +786,7 @@ var xxx_messageInfo_Repository proto.InternalMessageInfo
func (m *RepositoryList) Reset() { *m = RepositoryList{} }
func (*RepositoryList) ProtoMessage() {}
func (*RepositoryList) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{27}
return fileDescriptor_generated_eab4c1f625372278, []int{27}
}
func (m *RepositoryList) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -814,7 +814,7 @@ var xxx_messageInfo_RepositoryList proto.InternalMessageInfo
func (m *ResourceDetails) Reset() { *m = ResourceDetails{} }
func (*ResourceDetails) ProtoMessage() {}
func (*ResourceDetails) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{28}
return fileDescriptor_generated_eab4c1f625372278, []int{28}
}
func (m *ResourceDetails) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -842,7 +842,7 @@ var xxx_messageInfo_ResourceDetails proto.InternalMessageInfo
func (m *ResourceNode) Reset() { *m = ResourceNode{} }
func (*ResourceNode) ProtoMessage() {}
func (*ResourceNode) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{29}
return fileDescriptor_generated_eab4c1f625372278, []int{29}
}
func (m *ResourceNode) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -870,7 +870,7 @@ var xxx_messageInfo_ResourceNode proto.InternalMessageInfo
func (m *ResourceState) Reset() { *m = ResourceState{} }
func (*ResourceState) ProtoMessage() {}
func (*ResourceState) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{30}
return fileDescriptor_generated_eab4c1f625372278, []int{30}
}
func (m *ResourceState) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -898,7 +898,7 @@ var xxx_messageInfo_ResourceState proto.InternalMessageInfo
func (m *SyncOperation) Reset() { *m = SyncOperation{} }
func (*SyncOperation) ProtoMessage() {}
func (*SyncOperation) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{31}
return fileDescriptor_generated_eab4c1f625372278, []int{31}
}
func (m *SyncOperation) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -926,7 +926,7 @@ var xxx_messageInfo_SyncOperation proto.InternalMessageInfo
func (m *SyncOperationResource) Reset() { *m = SyncOperationResource{} }
func (*SyncOperationResource) ProtoMessage() {}
func (*SyncOperationResource) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{32}
return fileDescriptor_generated_eab4c1f625372278, []int{32}
}
func (m *SyncOperationResource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -954,7 +954,7 @@ var xxx_messageInfo_SyncOperationResource proto.InternalMessageInfo
func (m *SyncOperationResult) Reset() { *m = SyncOperationResult{} }
func (*SyncOperationResult) ProtoMessage() {}
func (*SyncOperationResult) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{33}
return fileDescriptor_generated_eab4c1f625372278, []int{33}
}
func (m *SyncOperationResult) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -982,7 +982,7 @@ var xxx_messageInfo_SyncOperationResult proto.InternalMessageInfo
func (m *SyncPolicy) Reset() { *m = SyncPolicy{} }
func (*SyncPolicy) ProtoMessage() {}
func (*SyncPolicy) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{34}
return fileDescriptor_generated_eab4c1f625372278, []int{34}
}
func (m *SyncPolicy) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1010,7 +1010,7 @@ var xxx_messageInfo_SyncPolicy proto.InternalMessageInfo
func (m *SyncPolicyAutomated) Reset() { *m = SyncPolicyAutomated{} }
func (*SyncPolicyAutomated) ProtoMessage() {}
func (*SyncPolicyAutomated) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{35}
return fileDescriptor_generated_eab4c1f625372278, []int{35}
}
func (m *SyncPolicyAutomated) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1038,7 +1038,7 @@ var xxx_messageInfo_SyncPolicyAutomated proto.InternalMessageInfo
func (m *SyncStrategy) Reset() { *m = SyncStrategy{} }
func (*SyncStrategy) ProtoMessage() {}
func (*SyncStrategy) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{36}
return fileDescriptor_generated_eab4c1f625372278, []int{36}
}
func (m *SyncStrategy) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1066,7 +1066,7 @@ var xxx_messageInfo_SyncStrategy proto.InternalMessageInfo
func (m *SyncStrategyApply) Reset() { *m = SyncStrategyApply{} }
func (*SyncStrategyApply) ProtoMessage() {}
func (*SyncStrategyApply) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{37}
return fileDescriptor_generated_eab4c1f625372278, []int{37}
}
func (m *SyncStrategyApply) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1094,7 +1094,7 @@ var xxx_messageInfo_SyncStrategyApply proto.InternalMessageInfo
func (m *SyncStrategyHook) Reset() { *m = SyncStrategyHook{} }
func (*SyncStrategyHook) ProtoMessage() {}
func (*SyncStrategyHook) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{38}
return fileDescriptor_generated_eab4c1f625372278, []int{38}
}
func (m *SyncStrategyHook) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1122,7 +1122,7 @@ var xxx_messageInfo_SyncStrategyHook proto.InternalMessageInfo
func (m *TLSClientConfig) Reset() { *m = TLSClientConfig{} }
func (*TLSClientConfig) ProtoMessage() {}
func (*TLSClientConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_generated_d72d4a667dcfda25, []int{39}
return fileDescriptor_generated_eab4c1f625372278, []int{39}
}
func (m *TLSClientConfig) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -9887,185 +9887,184 @@ var (
)
func init() {
proto.RegisterFile("github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1/generated.proto", fileDescriptor_generated_d72d4a667dcfda25)
proto.RegisterFile("github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1/generated.proto", fileDescriptor_generated_eab4c1f625372278)
}
var fileDescriptor_generated_d72d4a667dcfda25 = []byte{
// 2801 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5a, 0x4d, 0x8c, 0x1c, 0x47,
0xf5, 0xdf, 0x9e, 0x8f, 0xfd, 0x78, 0xfb, 0x61, 0xbb, 0xf2, 0xf1, 0x9f, 0xff, 0x46, 0xda, 0x5d,
0xb5, 0xf9, 0x08, 0x28, 0x99, 0xc1, 0x86, 0x40, 0x08, 0x08, 0x69, 0x7b, 0xd6, 0x8e, 0x37, 0x6b,
0xaf, 0x97, 0x9a, 0x4d, 0x2c, 0x85, 0x28, 0xd0, 0xee, 0xa9, 0x9d, 0x69, 0xcf, 0x4c, 0x77, 0xa7,
0xab, 0x66, 0x9d, 0x11, 0x0a, 0x72, 0x84, 0x40, 0x20, 0x40, 0x02, 0x22, 0x04, 0x12, 0x97, 0x08,
0xc1, 0x85, 0x73, 0xc4, 0x81, 0x1b, 0x1c, 0x50, 0x8e, 0x39, 0x80, 0x88, 0x42, 0x64, 0x91, 0xcd,
0x85, 0x1b, 0xe2, 0x9a, 0x13, 0xaa, 0x8f, 0xee, 0xaa, 0xee, 0x99, 0xf1, 0xae, 0x3d, 0x63, 0x03,
0xb7, 0xe9, 0x7a, 0xaf, 0xdf, 0xef, 0xf5, 0xab, 0x57, 0xef, 0xab, 0x06, 0xb6, 0x5b, 0x3e, 0x6b,
0xf7, 0xaf, 0x57, 0xbd, 0xb0, 0x57, 0x73, 0xe3, 0x56, 0x18, 0xc5, 0xe1, 0x0d, 0xf1, 0xe3, 0x49,
0xaf, 0x59, 0x8b, 0x3a, 0xad, 0x9a, 0x1b, 0xf9, 0xb4, 0xe6, 0x46, 0x51, 0xd7, 0xf7, 0x5c, 0xe6,
0x87, 0x41, 0xed, 0xf0, 0x9c, 0xdb, 0x8d, 0xda, 0xee, 0xb9, 0x5a, 0x8b, 0x04, 0x24, 0x76, 0x19,
0x69, 0x56, 0xa3, 0x38, 0x64, 0x21, 0xfa, 0xa2, 0x16, 0x55, 0x4d, 0x44, 0x89, 0x1f, 0x5f, 0xf7,
0x9a, 0xd5, 0xa8, 0xd3, 0xaa, 0x72, 0x51, 0x55, 0x43, 0x54, 0x35, 0x11, 0xb5, 0xfa, 0xa4, 0xa1,
0x45, 0x2b, 0x6c, 0x85, 0x35, 0x21, 0xf1, 0x7a, 0xff, 0x40, 0x3c, 0x89, 0x07, 0xf1, 0x4b, 0x22,
0xad, 0x7e, 0xae, 0xf3, 0x34, 0xad, 0xfa, 0x21, 0xd7, 0xad, 0xe7, 0x7a, 0x6d, 0x3f, 0x20, 0xf1,
0x40, 0x2b, 0xdb, 0x23, 0xcc, 0xad, 0x1d, 0x0e, 0xe9, 0xb7, 0x5a, 0x1b, 0xf7, 0x56, 0xdc, 0x0f,
0x98, 0xdf, 0x23, 0x43, 0x2f, 0x7c, 0xfe, 0xb8, 0x17, 0xa8, 0xd7, 0x26, 0x3d, 0x77, 0xe8, 0xbd,
0xcf, 0x8e, 0x7b, 0xaf, 0xcf, 0xfc, 0x6e, 0xcd, 0x0f, 0x18, 0x65, 0x71, 0xfe, 0x25, 0xfb, 0x15,
0x58, 0xde, 0xbc, 0xd6, 0xd8, 0xec, 0xb3, 0x76, 0x3d, 0x0c, 0x0e, 0xfc, 0x16, 0x7a, 0x0a, 0x16,
0xbd, 0x6e, 0x9f, 0x32, 0x12, 0xef, 0xba, 0x3d, 0x52, 0xb1, 0x36, 0xac, 0xc7, 0x17, 0x9c, 0x87,
0xde, 0xbe, 0xbd, 0x3e, 0x73, 0x74, 0x7b, 0x7d, 0xb1, 0xae, 0x49, 0xd8, 0xe4, 0x43, 0x9f, 0x82,
0xb9, 0x38, 0xec, 0x92, 0x4d, 0xbc, 0x5b, 0x29, 0x88, 0x57, 0x4e, 0xa9, 0x57, 0xe6, 0xb0, 0x5c,
0xc6, 0x09, 0xdd, 0xfe, 0x9b, 0x05, 0xb0, 0x19, 0x45, 0x7b, 0x71, 0x78, 0x83, 0x78, 0x0c, 0x7d,
0x03, 0xe6, 0xb9, 0xe9, 0x9a, 0x2e, 0x73, 0x05, 0xda, 0xe2, 0xf9, 0xcf, 0x54, 0xe5, 0x97, 0x54,
0xcd, 0x2f, 0xd1, 0x5b, 0xc9, 0xb9, 0xab, 0x87, 0xe7, 0xaa, 0x57, 0xaf, 0xf3, 0xf7, 0xaf, 0x10,
0xe6, 0x3a, 0x48, 0x81, 0x81, 0x5e, 0xc3, 0xa9, 0x54, 0xd4, 0x81, 0x12, 0x8d, 0x88, 0x27, 0x14,
0x5b, 0x3c, 0xbf, 0x5d, 0xbd, 0x67, 0x87, 0xa9, 0x6a, 0xb5, 0x1b, 0x11, 0xf1, 0x9c, 0x25, 0x05,
0x5b, 0xe2, 0x4f, 0x58, 0x80, 0xd8, 0xef, 0x59, 0xb0, 0xa2, 0xd9, 0x2e, 0xfb, 0x94, 0xa1, 0x97,
0x86, 0xbe, 0xb0, 0x7a, 0xb2, 0x2f, 0xe4, 0x6f, 0x8b, 0xef, 0x3b, 0xad, 0x80, 0xe6, 0x93, 0x15,
0xe3, 0xeb, 0x6e, 0x40, 0xd9, 0x67, 0xa4, 0x47, 0x2b, 0x85, 0x8d, 0xe2, 0xe3, 0x8b, 0xe7, 0x2f,
0x4c, 0xe5, 0xf3, 0x9c, 0x65, 0x85, 0x58, 0xde, 0xe6, 0xb2, 0xb1, 0x84, 0xb0, 0x7f, 0x59, 0x36,
0x3f, 0x8e, 0x7f, 0x35, 0x3a, 0x07, 0x8b, 0x34, 0xec, 0xc7, 0x1e, 0xc1, 0x24, 0x0a, 0x69, 0xc5,
0xda, 0x28, 0xf2, 0xcd, 0xe7, 0xbe, 0xd2, 0xd0, 0xcb, 0xd8, 0xe4, 0x41, 0x3f, 0xb0, 0x60, 0xa9,
0x49, 0x28, 0xf3, 0x03, 0x81, 0x9f, 0x68, 0xfe, 0xd5, 0xc9, 0x34, 0x4f, 0x16, 0xb7, 0xb4, 0x64,
0xe7, 0x61, 0xf5, 0x15, 0x4b, 0xc6, 0x22, 0xc5, 0x19, 0x70, 0xee, 0xf0, 0x4d, 0x42, 0xbd, 0xd8,
0x8f, 0xf8, 0x73, 0xa5, 0x98, 0x75, 0xf8, 0x2d, 0x4d, 0xc2, 0x26, 0x1f, 0xea, 0x40, 0x99, 0x3b,
0x34, 0xad, 0x94, 0x84, 0xf2, 0x17, 0x27, 0x50, 0x5e, 0x99, 0x93, 0x1f, 0x14, 0x6d, 0x77, 0xfe,
0x44, 0xb1, 0xc4, 0x40, 0x3f, 0xb2, 0xa0, 0xa2, 0x4e, 0x1b, 0x26, 0xd2, 0x94, 0xd7, 0xda, 0x3e,
0x23, 0x5d, 0x9f, 0xb2, 0x4a, 0x59, 0x28, 0x50, 0x3b, 0x99, 0x4b, 0x3d, 0x1b, 0x87, 0xfd, 0x68,
0xc7, 0x0f, 0x9a, 0xce, 0x86, 0x42, 0xaa, 0xd4, 0xc7, 0x08, 0xc6, 0x63, 0x21, 0xd1, 0x1b, 0x16,
0xac, 0x06, 0x6e, 0x8f, 0xd0, 0xc8, 0xe5, 0x9b, 0x2a, 0xc9, 0x4e, 0xd7, 0xf5, 0x3a, 0x42, 0xa3,
0xd9, 0x7b, 0xd3, 0xc8, 0x56, 0x1a, 0xad, 0xee, 0x8e, 0x15, 0x8d, 0xef, 0x00, 0x6b, 0xff, 0xa9,
0x08, 0x8b, 0x86, 0x23, 0x3c, 0x80, 0xc8, 0xd2, 0xcd, 0x44, 0x96, 0xe7, 0xa6, 0xe3, 0xc0, 0xe3,
0x42, 0x0b, 0x62, 0x30, 0x4b, 0x99, 0xcb, 0xfa, 0x54, 0x38, 0xe9, 0xe2, 0xf9, 0xcb, 0x53, 0xc2,
0x13, 0x32, 0x9d, 0x15, 0x85, 0x38, 0x2b, 0x9f, 0xb1, 0xc2, 0x42, 0xaf, 0xc0, 0x42, 0x18, 0xf1,
0x9c, 0xc1, 0x4f, 0x47, 0x49, 0x00, 0x6f, 0x4d, 0x00, 0x7c, 0x35, 0x91, 0xe5, 0x2c, 0x1f, 0xdd,
0x5e, 0x5f, 0x48, 0x1f, 0xb1, 0x46, 0xb1, 0x3d, 0x78, 0xd8, 0xd0, 0xaf, 0x1e, 0x06, 0x4d, 0x5f,
0x6c, 0xe8, 0x06, 0x94, 0xd8, 0x20, 0x4a, 0x92, 0x52, 0x6a, 0xa2, 0xfd, 0x41, 0x44, 0xb0, 0xa0,
0xf0, 0x34, 0xd4, 0x23, 0x94, 0xba, 0x2d, 0x92, 0x4f, 0x43, 0x57, 0xe4, 0x32, 0x4e, 0xe8, 0xf6,
0x2b, 0xf0, 0xe8, 0xe8, 0xa8, 0x81, 0x3e, 0x01, 0xb3, 0x94, 0xc4, 0x87, 0x24, 0x56, 0x40, 0xda,
0x32, 0x62, 0x15, 0x2b, 0x2a, 0xaa, 0xc1, 0x42, 0xea, 0x8d, 0x0a, 0xee, 0x8c, 0x62, 0x5d, 0xd0,
0x2e, 0xac, 0x79, 0xec, 0xf7, 0x2d, 0x38, 0x65, 0x60, 0x3e, 0x80, 0xe4, 0xd0, 0xc9, 0x26, 0x87,
0x8b, 0xd3, 0xf1, 0x98, 0x31, 0xd9, 0xe1, 0x0f, 0x45, 0x38, 0x63, 0xfa, 0x95, 0x38, 0x9e, 0xa2,
0x32, 0x20, 0x51, 0xf8, 0x3c, 0xbe, 0xac, 0xcc, 0xa9, 0x2b, 0x03, 0xb9, 0x8c, 0x13, 0x3a, 0xdf,
0xdf, 0xc8, 0x65, 0x6d, 0x65, 0xcb, 0x74, 0x7f, 0xf7, 0x5c, 0xd6, 0xc6, 0x82, 0xc2, 0x83, 0x35,
0x09, 0x0e, 0xfd, 0x38, 0x0c, 0x7a, 0x24, 0x60, 0xf9, 0x60, 0x7d, 0x41, 0x93, 0xb0, 0xc9, 0x87,
0xbe, 0x02, 0x2b, 0xcc, 0x8d, 0x5b, 0x84, 0x61, 0x72, 0xe8, 0xd3, 0xc4, 0x91, 0x17, 0x9c, 0x47,
0xd5, 0x9b, 0x2b, 0xfb, 0x19, 0x2a, 0xce, 0x71, 0xa3, 0xb7, 0x2c, 0x78, 0xcc, 0x0b, 0x7b, 0x51,
0x18, 0x90, 0x80, 0xed, 0xb9, 0xb1, 0xdb, 0x23, 0x8c, 0xc4, 0x57, 0x0f, 0x49, 0x1c, 0xfb, 0x4d,
0x42, 0x55, 0x08, 0xbe, 0x32, 0x81, 0x75, 0xeb, 0x43, 0xd2, 0x9d, 0xb3, 0x4a, 0xb9, 0xc7, 0xea,
0xe3, 0x91, 0xf1, 0x9d, 0xd4, 0xe2, 0xb9, 0xf9, 0xd0, 0xed, 0xf6, 0x09, 0xbd, 0xe8, 0xf3, 0x4c,
0x35, 0xab, 0x73, 0xf3, 0x0b, 0x7a, 0x19, 0x9b, 0x3c, 0xf6, 0x5b, 0xc5, 0x8c, 0x8b, 0x36, 0x92,
0xb8, 0x23, 0xf6, 0x52, 0x39, 0xe8, 0xb4, 0xe2, 0x8e, 0x0c, 0xdf, 0xfa, 0x74, 0xc9, 0x12, 0x41,
0x61, 0xa1, 0xef, 0x59, 0x22, 0x31, 0x27, 0xa7, 0x52, 0xc5, 0xd8, 0xfb, 0x50, 0x24, 0x98, 0xb9,
0x3e, 0x59, 0xc4, 0x26, 0x34, 0x77, 0xe1, 0x48, 0xe6, 0x68, 0xe5, 0x71, 0xa9, 0x0b, 0x27, 0xa9,
0x3b, 0xa1, 0xa3, 0x3e, 0x00, 0x1d, 0x04, 0xde, 0x5e, 0xd8, 0xf5, 0xbd, 0x81, 0x0a, 0x97, 0x93,
0x94, 0x64, 0x8d, 0x54, 0x98, 0xb3, 0xc2, 0xd3, 0x90, 0x7e, 0xc6, 0x06, 0x90, 0xfd, 0xe6, 0x6c,
0xf6, 0xe8, 0xc9, 0xd0, 0xfd, 0x13, 0x0b, 0x4e, 0x73, 0xff, 0x70, 0x63, 0x9f, 0x86, 0x01, 0x26,
0xb4, 0xdf, 0x65, 0x6a, 0x0f, 0x77, 0x26, 0xf4, 0x55, 0x53, 0xa4, 0x53, 0x51, 0xe6, 0x38, 0x9d,
0xa7, 0xe0, 0x21, 0x78, 0xc4, 0x60, 0xae, 0xed, 0x53, 0x16, 0xc6, 0x03, 0x15, 0x93, 0x26, 0xa9,
0xc7, 0xb7, 0x48, 0xd4, 0x0d, 0x07, 0xfc, 0x88, 0x6f, 0x07, 0x07, 0xa1, 0xde, 0x96, 0x4b, 0x12,
0x01, 0x27, 0x50, 0xe8, 0x75, 0x0b, 0x20, 0x4a, 0x0e, 0x08, 0xcf, 0x9f, 0xf7, 0xe1, 0xbc, 0xa6,
0xa5, 0x42, 0xba, 0x44, 0xb1, 0x01, 0x8a, 0x42, 0x98, 0x6d, 0x13, 0xb7, 0xcb, 0xda, 0xca, 0x2d,
0x9e, 0x9d, 0x00, 0xfe, 0x92, 0x10, 0x94, 0xcf, 0xdc, 0x72, 0x15, 0x2b, 0x18, 0xf4, 0x1d, 0x0b,
0x56, 0xd2, 0xa4, 0xca, 0x79, 0x49, 0xa5, 0x3c, 0x71, 0x0b, 0x74, 0x35, 0x23, 0xd0, 0x41, 0x3c,
0x7a, 0x66, 0xd7, 0x70, 0x0e, 0x14, 0x7d, 0xdb, 0x02, 0xf0, 0x92, 0x24, 0x4e, 0x55, 0x75, 0x78,
0x75, 0x3a, 0x07, 0x39, 0x2d, 0x0e, 0xb4, 0xf9, 0xd3, 0x25, 0x8a, 0x0d, 0x58, 0xfb, 0x43, 0x0b,
0x1e, 0x31, 0x5e, 0xbc, 0xe6, 0x32, 0xaf, 0x7d, 0xe1, 0x90, 0x67, 0x87, 0x9d, 0x4c, 0x59, 0xf1,
0x05, 0xb3, 0xac, 0xf8, 0xe8, 0xf6, 0xfa, 0x27, 0xc7, 0xb5, 0xd5, 0x37, 0xb9, 0x84, 0xaa, 0x10,
0x61, 0x54, 0x20, 0xaf, 0xc1, 0xa2, 0xa1, 0xb3, 0x8a, 0x5a, 0xd3, 0xca, 0xbb, 0x69, 0xa8, 0x32,
0x16, 0xb1, 0x89, 0x67, 0xff, 0xa5, 0x00, 0x73, 0xaa, 0xa0, 0x3f, 0x71, 0x1d, 0xb3, 0x01, 0x25,
0x5e, 0xa3, 0xe4, 0xd3, 0xae, 0x68, 0xf2, 0x05, 0x05, 0x45, 0x30, 0xeb, 0x89, 0xf1, 0x80, 0xaa,
0x3c, 0x2f, 0x4d, 0x72, 0x72, 0xa4, 0x76, 0x72, 0xdc, 0xa0, 0x75, 0x92, 0xcf, 0x58, 0xe1, 0xf0,
0x8e, 0xe7, 0x94, 0x17, 0x06, 0x01, 0xf1, 0xb4, 0xf3, 0x96, 0x26, 0xae, 0xb2, 0xeb, 0x59, 0x89,
0xce, 0xff, 0x29, 0xf4, 0x53, 0x39, 0x02, 0xce, 0x63, 0xdb, 0xbf, 0x2b, 0xc2, 0x72, 0x46, 0x73,
0xf4, 0x04, 0xcc, 0xf7, 0x29, 0x89, 0x03, 0x3d, 0x25, 0x49, 0x0b, 0xb1, 0xe7, 0xd5, 0x3a, 0x4e,
0x39, 0x38, 0x77, 0xe4, 0x52, 0x7a, 0x33, 0x8c, 0x9b, 0xca, 0xce, 0x29, 0xf7, 0x9e, 0x5a, 0xc7,
0x29, 0x07, 0x2f, 0x73, 0xae, 0x13, 0x37, 0x26, 0xf1, 0x7e, 0xd8, 0x21, 0x43, 0x3d, 0xa9, 0xa3,
0x49, 0xd8, 0xe4, 0x13, 0x46, 0x63, 0x5d, 0x5a, 0xef, 0xfa, 0x24, 0x60, 0x52, 0xcd, 0x29, 0x18,
0x6d, 0xff, 0x72, 0xc3, 0x94, 0xa8, 0x8d, 0x96, 0x23, 0xe0, 0x3c, 0x36, 0x8f, 0xba, 0xcb, 0xee,
0x4d, 0xaa, 0xa7, 0x4b, 0x2a, 0xfe, 0x4c, 0xe2, 0x3e, 0x99, 0x69, 0x95, 0x73, 0xe6, 0xe8, 0xf6,
0x7a, 0x76, 0x80, 0x85, 0xb3, 0x88, 0xf6, 0x9f, 0x2d, 0x48, 0xa6, 0x56, 0x0f, 0xa0, 0xde, 0x6e,
0x65, 0xeb, 0x6d, 0x67, 0xf2, 0x73, 0x32, 0xa6, 0xd6, 0x7e, 0xaf, 0x08, 0x43, 0xd9, 0x16, 0xbd,
0xcc, 0xe3, 0x2c, 0x5f, 0x23, 0xcd, 0xcd, 0x24, 0xd1, 0x7f, 0xfa, 0x64, 0x5f, 0xb7, 0xef, 0xf7,
0x88, 0x19, 0x42, 0x13, 0x29, 0xd8, 0x90, 0x88, 0x6e, 0x59, 0x1a, 0x60, 0x3f, 0x54, 0xb1, 0x6d,
0xba, 0xd5, 0xe0, 0x90, 0x0a, 0xfb, 0x21, 0x36, 0x30, 0xd1, 0x33, 0x69, 0x0f, 0x5c, 0x16, 0x87,
0xc2, 0xce, 0x76, 0xad, 0x1f, 0x65, 0x8a, 0x90, 0x5c, 0x27, 0x3b, 0x80, 0x85, 0x58, 0x0d, 0x0d,
0x92, 0x2c, 0x34, 0x89, 0x27, 0x26, 0x03, 0x08, 0x19, 0x4a, 0xd2, 0xce, 0x2f, 0x59, 0xa6, 0x58,
0xa3, 0xf1, 0xe3, 0x1f, 0x27, 0xad, 0xc7, 0x5c, 0xf6, 0xf8, 0xa7, 0x4d, 0x47, 0xca, 0x61, 0xff,
0xd0, 0x02, 0x34, 0x5c, 0x60, 0xf0, 0x7e, 0x33, 0xad, 0xf6, 0x55, 0xc8, 0x49, 0x51, 0x53, 0x76,
0xac, 0x79, 0x4e, 0x10, 0xd8, 0xcf, 0x42, 0x59, 0x54, 0xff, 0x2a, 0xc4, 0xa4, 0xbe, 0x26, 0xfa,
0x03, 0x2c, 0x69, 0xf6, 0x1f, 0x2d, 0xc8, 0x07, 0x48, 0x91, 0x5b, 0xe4, 0x3e, 0xe4, 0x73, 0x4b,
0xd6, 0xe6, 0x27, 0x6f, 0xc8, 0xd1, 0x4b, 0xb0, 0xe8, 0x32, 0x46, 0x7a, 0x11, 0x13, 0xee, 0x5b,
0xbc, 0x6b, 0xf7, 0x15, 0x05, 0xf2, 0x95, 0xb0, 0xe9, 0x1f, 0xf8, 0xc2, 0x75, 0x4d, 0x71, 0xf6,
0xbf, 0x0a, 0xb0, 0x92, 0x2d, 0x17, 0x33, 0x9b, 0x52, 0x38, 0x6e, 0x53, 0x8e, 0xed, 0x01, 0x8b,
0xff, 0x9d, 0x3d, 0xe0, 0xcb, 0x00, 0x4d, 0xf1, 0xd9, 0xc2, 0xa8, 0xa5, 0x7b, 0x8f, 0x09, 0x5b,
0xa9, 0x14, 0x6c, 0x48, 0x44, 0xab, 0x50, 0xf0, 0x9b, 0xe2, 0x30, 0x16, 0x1d, 0x50, 0xbc, 0x85,
0xed, 0x2d, 0x5c, 0xf0, 0x9b, 0x36, 0x85, 0x25, 0xb3, 0x50, 0x3d, 0xb1, 0xd3, 0x7c, 0x09, 0x96,
0xe5, 0xaf, 0x2d, 0xc2, 0x5c, 0xbf, 0x4b, 0xd5, 0xee, 0x3c, 0xa2, 0xd8, 0x97, 0x1b, 0x26, 0x11,
0x67, 0x79, 0xed, 0x9f, 0x17, 0x00, 0x2e, 0x85, 0x61, 0x47, 0x61, 0x26, 0x67, 0xc0, 0x1a, 0x7b,
0x06, 0x36, 0xa0, 0xd4, 0xf1, 0x83, 0x66, 0xfe, 0x94, 0xec, 0xf8, 0x41, 0x13, 0x0b, 0x0a, 0x3a,
0x0f, 0xe0, 0x46, 0xfe, 0x0b, 0x24, 0xa6, 0x7a, 0x42, 0x9c, 0xda, 0x65, 0x73, 0x6f, 0x5b, 0x51,
0xb0, 0xc1, 0x85, 0x9e, 0x50, 0x45, 0xa5, 0x1c, 0x34, 0x54, 0x72, 0x45, 0xe5, 0x3c, 0xd7, 0xd0,
0xa8, 0x1a, 0x9f, 0xce, 0x85, 0xb5, 0x8d, 0xa1, 0xb0, 0xa6, 0x8b, 0xec, 0xbd, 0xb6, 0x4b, 0xc9,
0xa8, 0x03, 0x36, 0x7b, 0xcc, 0xc4, 0xab, 0x01, 0xf3, 0xcf, 0x5d, 0xdb, 0x97, 0xa5, 0x82, 0x0d,
0x45, 0xdf, 0x95, 0x51, 0xa4, 0xa8, 0xdd, 0x7e, 0x9b, 0xd2, 0xbe, 0xd8, 0x61, 0x4e, 0x44, 0x67,
0xa1, 0x48, 0x5e, 0x8d, 0x84, 0x5d, 0x8a, 0x3a, 0xd2, 0x5c, 0x78, 0x35, 0xf2, 0x63, 0x42, 0x39,
0x13, 0x79, 0x35, 0xb2, 0x29, 0xe8, 0x19, 0x1e, 0x3a, 0x80, 0x12, 0x6f, 0x4a, 0x55, 0xea, 0xb9,
0x34, 0x61, 0xdf, 0xab, 0x47, 0x85, 0xf3, 0x62, 0x12, 0x3a, 0x08, 0x3c, 0x2c, 0xe4, 0xdb, 0xbf,
0x2a, 0x41, 0xae, 0xe9, 0x40, 0x7d, 0x73, 0x4c, 0x69, 0x4d, 0x71, 0x4c, 0x99, 0x7e, 0xf8, 0xa8,
0x51, 0x25, 0x7a, 0x0a, 0xca, 0x11, 0xdf, 0x0f, 0xe5, 0x3d, 0xeb, 0x49, 0x00, 0x15, 0x9b, 0x34,
0x62, 0xdb, 0x24, 0xb7, 0xb9, 0x6b, 0xc5, 0x63, 0xc2, 0xe2, 0xb7, 0xe4, 0x44, 0x41, 0x75, 0xef,
0xf2, 0x00, 0xef, 0x4e, 0xcb, 0xb2, 0xaa, 0x81, 0x4f, 0x47, 0x0b, 0xaa, 0x6d, 0x37, 0x10, 0xd1,
0xd7, 0x60, 0x81, 0x32, 0x37, 0x96, 0x41, 0x79, 0xf6, 0xae, 0xe3, 0x47, 0x6a, 0xbe, 0x46, 0x22,
0x04, 0x6b, 0x79, 0xe8, 0x45, 0x80, 0x03, 0x3f, 0xf0, 0x69, 0x5b, 0x48, 0x9f, 0xbb, 0xb7, 0x90,
0x7f, 0x31, 0x95, 0x80, 0x0d, 0x69, 0xf6, 0x4f, 0x2d, 0x40, 0x23, 0x02, 0x62, 0x9c, 0x94, 0x68,
0xd6, 0xfd, 0x08, 0xd8, 0x23, 0xab, 0xb5, 0x67, 0xe6, 0x7f, 0xf1, 0xe6, 0xfa, 0xcc, 0xad, 0xf7,
0x37, 0x66, 0xec, 0xef, 0x16, 0x60, 0xd1, 0xb8, 0xef, 0x39, 0x41, 0x78, 0xca, 0xdd, 0x4f, 0x15,
0x4e, 0x78, 0x3f, 0xf5, 0x38, 0xcc, 0x47, 0x61, 0xd7, 0xf7, 0x7c, 0x95, 0x9a, 0x16, 0x9c, 0x25,
0xd1, 0x6c, 0xa8, 0x35, 0x9c, 0x52, 0x11, 0x83, 0x85, 0x1b, 0x37, 0x99, 0x08, 0x0b, 0xc9, 0x6d,
0x56, 0x7d, 0x02, 0xa3, 0x24, 0x21, 0x46, 0xef, 0x7c, 0xb2, 0x42, 0xb1, 0x06, 0xb2, 0xff, 0x5a,
0x00, 0x10, 0xd7, 0x81, 0xbe, 0x18, 0xd0, 0x6c, 0x40, 0x29, 0x26, 0x51, 0x98, 0xb7, 0x03, 0xe7,
0xc0, 0x82, 0x92, 0xe9, 0xb7, 0x0a, 0x77, 0xd5, 0x6f, 0x15, 0x8f, 0xed, 0xb7, 0x78, 0xc2, 0xa1,
0xed, 0xbd, 0xd8, 0x3f, 0x74, 0x19, 0xd9, 0x21, 0x03, 0x15, 0xb5, 0x75, 0xc2, 0x69, 0x5c, 0xd2,
0x44, 0x9c, 0xe5, 0x1d, 0xd9, 0xaa, 0x96, 0xff, 0x83, 0xad, 0xea, 0x7b, 0x16, 0xac, 0x68, 0xcb,
0xfe, 0x6f, 0xdd, 0x40, 0x6b, 0xbd, 0xc7, 0xf4, 0x3d, 0xff, 0xb4, 0xe0, 0x54, 0x52, 0x61, 0xab,
0x8c, 0x3f, 0x95, 0x14, 0x9f, 0xb9, 0xcb, 0x29, 0x1e, 0x7f, 0x97, 0x63, 0x46, 0xf0, 0xd2, 0x31,
0x11, 0xfc, 0xcb, 0xb9, 0xe4, 0xfe, 0xb1, 0xa1, 0xe4, 0x8e, 0xd2, 0x5e, 0x62, 0x10, 0x78, 0xd9,
0x62, 0xc8, 0xfe, 0xad, 0x05, 0x4b, 0x09, 0x79, 0x37, 0x6c, 0x8a, 0x9a, 0x9d, 0x0a, 0x27, 0xb3,
0xb2, 0x35, 0xbb, 0x74, 0x07, 0x49, 0x43, 0x7d, 0x98, 0xf7, 0xda, 0x7e, 0xb7, 0x19, 0x93, 0x40,
0x6d, 0xcb, 0xb3, 0x53, 0x68, 0x75, 0x38, 0xbe, 0x76, 0x85, 0xba, 0x02, 0xc0, 0x29, 0x94, 0xfd,
0xfb, 0x22, 0x2c, 0x67, 0xfa, 0x22, 0x1e, 0xbe, 0xe4, 0x65, 0x4a, 0xc3, 0xd0, 0x39, 0x0d, 0x5f,
0xfb, 0x9a, 0x84, 0x4d, 0x3e, 0xbe, 0x1f, 0x5d, 0xff, 0x50, 0xca, 0xc8, 0xdf, 0xad, 0x5d, 0x4e,
0x08, 0x58, 0xf3, 0x18, 0x8d, 0x61, 0xf1, 0xae, 0x1b, 0xc3, 0x37, 0x2c, 0x40, 0xe2, 0x13, 0xb8,
0xe4, 0xb4, 0x7f, 0x53, 0xb1, 0x70, 0x6a, 0x76, 0x5b, 0x55, 0x1a, 0xa1, 0xfa, 0x10, 0x14, 0x1e,
0x01, 0x6f, 0xcc, 0x8b, 0xcb, 0x0f, 0x64, 0x5e, 0x6c, 0xff, 0xa6, 0x04, 0xcb, 0x99, 0xea, 0x20,
0xd3, 0x21, 0x59, 0xc7, 0x76, 0x48, 0x67, 0xa1, 0x1c, 0xc5, 0xfd, 0x40, 0xee, 0xd7, 0xbc, 0x76,
0xcc, 0x3d, 0xbe, 0x88, 0x25, 0x8d, 0xf7, 0x00, 0xcd, 0x78, 0x80, 0xfb, 0xb2, 0x8e, 0x9e, 0xd7,
0xca, 0x6c, 0x89, 0x55, 0xac, 0xa8, 0xe8, 0x35, 0x58, 0xa2, 0xe2, 0x30, 0xc4, 0x2e, 0x23, 0xad,
0xc1, 0x14, 0x66, 0xe6, 0x0d, 0x43, 0x9c, 0x73, 0xfa, 0xe8, 0xf6, 0xfa, 0x92, 0xb9, 0x82, 0x33,
0x70, 0xe8, 0x67, 0x16, 0xa0, 0x68, 0xd4, 0x45, 0x9f, 0x35, 0x61, 0xcd, 0x30, 0x5c, 0x91, 0x38,
0x8f, 0x72, 0xa7, 0x18, 0xd1, 0xd7, 0x8d, 0x50, 0x00, 0xbd, 0x6e, 0x0d, 0x0f, 0x31, 0xf6, 0xa6,
0x58, 0x0d, 0xca, 0x29, 0xcc, 0x1d, 0x87, 0x19, 0xf6, 0x2d, 0x0b, 0x1e, 0x19, 0xf9, 0x1e, 0xf7,
0x80, 0x56, 0x1c, 0xf6, 0xa3, 0x7c, 0x68, 0x12, 0xff, 0xf1, 0xc0, 0x92, 0x76, 0x82, 0x60, 0x9c,
0x04, 0xf4, 0xe2, 0xb8, 0x80, 0x6e, 0xff, 0xba, 0x00, 0x0f, 0x8d, 0x28, 0x64, 0xd1, 0x4d, 0xd3,
0x3a, 0xb2, 0xc0, 0x7b, 0x6e, 0x0a, 0xe7, 0x57, 0x65, 0x1a, 0xf9, 0x97, 0x85, 0x63, 0x07, 0x3c,
0xc7, 0xcf, 0x12, 0x0e, 0xa0, 0xdc, 0x0e, 0xc3, 0x4e, 0x32, 0x34, 0x98, 0x24, 0x63, 0xea, 0x56,
0xd7, 0x59, 0xe0, 0xa6, 0xe6, 0xcf, 0x14, 0x4b, 0xf1, 0xf6, 0xf7, 0x2d, 0x30, 0x6e, 0x0c, 0xd1,
0x37, 0x61, 0xc1, 0xed, 0xb3, 0xb0, 0xe7, 0x32, 0xd2, 0x54, 0x75, 0xc0, 0xee, 0x54, 0xee, 0x26,
0x37, 0x13, 0xa9, 0xd2, 0x42, 0xe9, 0x23, 0xd6, 0x78, 0xf6, 0x33, 0x72, 0xc7, 0x72, 0x2f, 0xe8,
0xa0, 0x61, 0x8d, 0x0f, 0x1a, 0xf6, 0x3f, 0x2c, 0xc8, 0x1c, 0x56, 0xd4, 0x83, 0x32, 0x57, 0x69,
0x30, 0x85, 0x1b, 0x69, 0x53, 0xee, 0x26, 0x97, 0x29, 0xed, 0x28, 0x7e, 0x62, 0x89, 0x82, 0x7c,
0x28, 0x71, 0x83, 0xaa, 0x89, 0xe7, 0xce, 0x94, 0xd0, 0xf8, 0x56, 0xc9, 0xd6, 0x96, 0xff, 0xc2,
0x02, 0xc2, 0x7e, 0x1a, 0xce, 0x0c, 0x69, 0xc4, 0x8d, 0x74, 0x10, 0x26, 0x17, 0xf0, 0x86, 0x91,
0x2e, 0xf2, 0x45, 0x2c, 0x69, 0xbc, 0x50, 0x38, 0x9d, 0x17, 0xcf, 0xe3, 0xd8, 0x19, 0x9a, 0x97,
0x77, 0x5f, 0xac, 0xf6, 0xff, 0x4a, 0xa9, 0x61, 0xf5, 0xf1, 0xb0, 0x06, 0x7c, 0x47, 0xf3, 0xf7,
0x07, 0xfc, 0x0c, 0xf9, 0x01, 0x25, 0x5e, 0x3f, 0x4e, 0x3e, 0x54, 0x0f, 0x26, 0xd4, 0x3a, 0x4e,
0x39, 0xd0, 0x79, 0x00, 0x79, 0x7f, 0xb5, 0xab, 0x3b, 0x82, 0x74, 0x28, 0xd3, 0x48, 0x29, 0xd8,
0xe0, 0xe2, 0x4d, 0x91, 0x47, 0x62, 0xb6, 0xc5, 0xeb, 0x60, 0x1e, 0x5c, 0x96, 0x64, 0x53, 0x54,
0x57, 0x6b, 0x38, 0xa5, 0xa2, 0x8f, 0xc3, 0x5c, 0x87, 0x0c, 0x04, 0x63, 0x49, 0x30, 0x2e, 0xf2,
0xd2, 0x6e, 0x47, 0x2e, 0xe1, 0x84, 0x86, 0x6c, 0x98, 0xf5, 0x5c, 0xc1, 0x55, 0x16, 0x5c, 0x20,
0xae, 0xb2, 0x36, 0x05, 0x93, 0xa2, 0x38, 0xd5, 0xb7, 0x3f, 0x58, 0x9b, 0x79, 0xe7, 0x83, 0xb5,
0x99, 0x77, 0x3f, 0x58, 0x9b, 0xb9, 0x75, 0xb4, 0x66, 0xbd, 0x7d, 0xb4, 0x66, 0xbd, 0x73, 0xb4,
0x66, 0xbd, 0x7b, 0xb4, 0x66, 0xfd, 0xfd, 0x68, 0xcd, 0xfa, 0xf1, 0x87, 0x6b, 0x33, 0x2f, 0xce,
0x27, 0xa6, 0xfd, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb4, 0xc5, 0xe3, 0x12, 0x1c, 0x2d, 0x00,
var fileDescriptor_generated_eab4c1f625372278 = []byte{
// 2785 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5a, 0x4d, 0x6c, 0x24, 0x47,
0x15, 0x76, 0xcf, 0x8f, 0x3d, 0xf3, 0xc6, 0xf6, 0xee, 0x56, 0x7e, 0x18, 0x1c, 0xc9, 0xb6, 0x7a,
0xf9, 0x09, 0x28, 0x19, 0xb3, 0x16, 0x81, 0x10, 0x10, 0x92, 0x7b, 0xbc, 0x1b, 0x3b, 0xde, 0xf5,
0x9a, 0x1a, 0x27, 0x2b, 0x85, 0x28, 0xd0, 0xdb, 0x53, 0x9e, 0xe9, 0x9d, 0x99, 0xee, 0x4e, 0x57,
0x8f, 0x37, 0x23, 0x14, 0xb4, 0x11, 0x02, 0x81, 0x00, 0x09, 0x88, 0x10, 0x48, 0x5c, 0x22, 0x04,
0x17, 0xce, 0x11, 0x07, 0x6e, 0x70, 0x40, 0x39, 0xe6, 0x00, 0x22, 0x5a, 0x22, 0x8b, 0x75, 0x2e,
0xdc, 0x10, 0xd7, 0x9c, 0x50, 0xfd, 0x74, 0x57, 0x75, 0xcf, 0xcc, 0xda, 0xbb, 0x33, 0xbb, 0xc0,
0x6d, 0xba, 0xde, 0xeb, 0xf7, 0xbd, 0x7e, 0xf5, 0xea, 0xfd, 0xd5, 0xc0, 0x76, 0xcb, 0x8d, 0xda,
0xfd, 0xeb, 0x35, 0xc7, 0xef, 0xad, 0xd9, 0x61, 0xcb, 0x0f, 0x42, 0xff, 0x06, 0xff, 0xf1, 0xb4,
0xd3, 0x5c, 0x0b, 0x3a, 0xad, 0x35, 0x3b, 0x70, 0xe9, 0x9a, 0x1d, 0x04, 0x5d, 0xd7, 0xb1, 0x23,
0xd7, 0xf7, 0xd6, 0x0e, 0x2f, 0xd8, 0xdd, 0xa0, 0x6d, 0x5f, 0x58, 0x6b, 0x11, 0x8f, 0x84, 0x76,
0x44, 0x9a, 0xb5, 0x20, 0xf4, 0x23, 0x1f, 0x7d, 0x49, 0x89, 0xaa, 0xc5, 0xa2, 0xf8, 0x8f, 0x6f,
0x38, 0xcd, 0x5a, 0xd0, 0x69, 0xd5, 0x98, 0xa8, 0x9a, 0x26, 0xaa, 0x16, 0x8b, 0x5a, 0x7a, 0x5a,
0xd3, 0xa2, 0xe5, 0xb7, 0xfc, 0x35, 0x2e, 0xf1, 0x7a, 0xff, 0x80, 0x3f, 0xf1, 0x07, 0xfe, 0x4b,
0x20, 0x2d, 0x7d, 0xbe, 0xf3, 0x2c, 0xad, 0xb9, 0x3e, 0xd3, 0xad, 0x67, 0x3b, 0x6d, 0xd7, 0x23,
0xe1, 0x40, 0x29, 0xdb, 0x23, 0x91, 0xbd, 0x76, 0x38, 0xa4, 0xdf, 0xd2, 0xda, 0xb8, 0xb7, 0xc2,
0xbe, 0x17, 0xb9, 0x3d, 0x32, 0xf4, 0xc2, 0x17, 0x4e, 0x7a, 0x81, 0x3a, 0x6d, 0xd2, 0xb3, 0xb3,
0xef, 0x99, 0xaf, 0xc1, 0xc2, 0xc6, 0xb5, 0xc6, 0x46, 0x3f, 0x6a, 0xd7, 0x7d, 0xef, 0xc0, 0x6d,
0xa1, 0x67, 0xa0, 0xe2, 0x74, 0xfb, 0x34, 0x22, 0xe1, 0xae, 0xdd, 0x23, 0x55, 0x63, 0xd5, 0x78,
0xb2, 0x6c, 0x3d, 0xf2, 0xee, 0xd1, 0xca, 0xcc, 0xf1, 0xd1, 0x4a, 0xa5, 0xae, 0x48, 0x58, 0xe7,
0x43, 0x9f, 0x81, 0xb9, 0xd0, 0xef, 0x92, 0x0d, 0xbc, 0x5b, 0xcd, 0xf1, 0x57, 0xce, 0xc8, 0x57,
0xe6, 0xb0, 0x58, 0xc6, 0x31, 0xdd, 0xfc, 0xbb, 0x01, 0xb0, 0x11, 0x04, 0x7b, 0xa1, 0x7f, 0x83,
0x38, 0x11, 0xfa, 0x26, 0x94, 0x98, 0x15, 0x9a, 0x76, 0x64, 0x73, 0xb4, 0xca, 0xfa, 0xe7, 0x6a,
0xe2, 0x63, 0x6a, 0xfa, 0xc7, 0xa8, 0x5d, 0x61, 0xdc, 0xb5, 0xc3, 0x0b, 0xb5, 0xab, 0xd7, 0xd9,
0xfb, 0x57, 0x48, 0x64, 0x5b, 0x48, 0x82, 0x81, 0x5a, 0xc3, 0x89, 0x54, 0xd4, 0x81, 0x02, 0x0d,
0x88, 0xc3, 0x15, 0xab, 0xac, 0x6f, 0xd7, 0xee, 0x7b, 0xef, 0x6b, 0x4a, 0xed, 0x46, 0x40, 0x1c,
0x6b, 0x5e, 0xc2, 0x16, 0xd8, 0x13, 0xe6, 0x20, 0xe6, 0x6d, 0x03, 0x16, 0x15, 0xdb, 0x65, 0x97,
0x46, 0xe8, 0x95, 0xa1, 0x2f, 0xac, 0x9d, 0xee, 0x0b, 0xd9, 0xdb, 0xfc, 0xfb, 0xce, 0x4a, 0xa0,
0x52, 0xbc, 0xa2, 0x7d, 0xdd, 0x0d, 0x28, 0xba, 0x11, 0xe9, 0xd1, 0x6a, 0x6e, 0x35, 0xff, 0x64,
0x65, 0xfd, 0xe2, 0x54, 0x3e, 0xcf, 0x5a, 0x90, 0x88, 0xc5, 0x6d, 0x26, 0x1b, 0x0b, 0x08, 0xf3,
0x57, 0x45, 0xfd, 0xe3, 0xd8, 0x57, 0xa3, 0x0b, 0x50, 0xa1, 0x7e, 0x3f, 0x74, 0x08, 0x26, 0x81,
0x4f, 0xab, 0xc6, 0x6a, 0x9e, 0x6d, 0x3e, 0xf3, 0x95, 0x86, 0x5a, 0xc6, 0x3a, 0x0f, 0xfa, 0xa1,
0x01, 0xf3, 0x4d, 0x42, 0x23, 0xd7, 0xe3, 0xf8, 0xb1, 0xe6, 0x5f, 0x9b, 0x4c, 0xf3, 0x78, 0x71,
0x53, 0x49, 0xb6, 0x1e, 0x95, 0x5f, 0x31, 0xaf, 0x2d, 0x52, 0x9c, 0x02, 0x67, 0x0e, 0xdf, 0x24,
0xd4, 0x09, 0xdd, 0x80, 0x3d, 0x57, 0xf3, 0x69, 0x87, 0xdf, 0x54, 0x24, 0xac, 0xf3, 0xa1, 0x0e,
0x14, 0x99, 0x43, 0xd3, 0x6a, 0x81, 0x2b, 0x7f, 0x69, 0x02, 0xe5, 0xa5, 0x39, 0xd9, 0x41, 0x51,
0x76, 0x67, 0x4f, 0x14, 0x0b, 0x0c, 0xf4, 0x63, 0x03, 0xaa, 0xf2, 0xb4, 0x61, 0x22, 0x4c, 0x79,
0xad, 0xed, 0x46, 0xa4, 0xeb, 0xd2, 0xa8, 0x5a, 0xe4, 0x0a, 0xac, 0x9d, 0xce, 0xa5, 0x9e, 0x0f,
0xfd, 0x7e, 0xb0, 0xe3, 0x7a, 0x4d, 0x6b, 0x55, 0x22, 0x55, 0xeb, 0x63, 0x04, 0xe3, 0xb1, 0x90,
0xe8, 0x2d, 0x03, 0x96, 0x3c, 0xbb, 0x47, 0x68, 0x60, 0xb3, 0x4d, 0x15, 0x64, 0xab, 0x6b, 0x3b,
0x1d, 0xae, 0xd1, 0xec, 0xfd, 0x69, 0x64, 0x4a, 0x8d, 0x96, 0x76, 0xc7, 0x8a, 0xc6, 0x77, 0x81,
0x35, 0xff, 0x9c, 0x87, 0x8a, 0xe6, 0x08, 0x0f, 0x21, 0xb2, 0x74, 0x53, 0x91, 0xe5, 0x85, 0xe9,
0x38, 0xf0, 0xb8, 0xd0, 0x82, 0x22, 0x98, 0xa5, 0x91, 0x1d, 0xf5, 0x29, 0x77, 0xd2, 0xca, 0xfa,
0xe5, 0x29, 0xe1, 0x71, 0x99, 0xd6, 0xa2, 0x44, 0x9c, 0x15, 0xcf, 0x58, 0x62, 0xa1, 0xd7, 0xa0,
0xec, 0x07, 0x2c, 0x67, 0xb0, 0xd3, 0x51, 0xe0, 0xc0, 0x9b, 0x13, 0x00, 0x5f, 0x8d, 0x65, 0x59,
0x0b, 0xc7, 0x47, 0x2b, 0xe5, 0xe4, 0x11, 0x2b, 0x14, 0xd3, 0x81, 0x47, 0x35, 0xfd, 0xea, 0xbe,
0xd7, 0x74, 0xf9, 0x86, 0xae, 0x42, 0x21, 0x1a, 0x04, 0x71, 0x52, 0x4a, 0x4c, 0xb4, 0x3f, 0x08,
0x08, 0xe6, 0x14, 0x96, 0x86, 0x7a, 0x84, 0x52, 0xbb, 0x45, 0xb2, 0x69, 0xe8, 0x8a, 0x58, 0xc6,
0x31, 0xdd, 0x7c, 0x0d, 0x1e, 0x1f, 0x1d, 0x35, 0xd0, 0xa7, 0x60, 0x96, 0x92, 0xf0, 0x90, 0x84,
0x12, 0x48, 0x59, 0x86, 0xaf, 0x62, 0x49, 0x45, 0x6b, 0x50, 0x4e, 0xbc, 0x51, 0xc2, 0x9d, 0x93,
0xac, 0x65, 0xe5, 0xc2, 0x8a, 0xc7, 0xfc, 0xc0, 0x80, 0x33, 0x1a, 0xe6, 0x43, 0x48, 0x0e, 0x9d,
0x74, 0x72, 0xb8, 0x34, 0x1d, 0x8f, 0x19, 0x93, 0x1d, 0xfe, 0x98, 0x87, 0x73, 0xba, 0x5f, 0xf1,
0xe3, 0xc9, 0x2b, 0x03, 0x12, 0xf8, 0x2f, 0xe2, 0xcb, 0xd2, 0x9c, 0xaa, 0x32, 0x10, 0xcb, 0x38,
0xa6, 0xb3, 0xfd, 0x0d, 0xec, 0xa8, 0x2d, 0x6d, 0x99, 0xec, 0xef, 0x9e, 0x1d, 0xb5, 0x31, 0xa7,
0xb0, 0x60, 0x4d, 0xbc, 0x43, 0x37, 0xf4, 0xbd, 0x1e, 0xf1, 0xa2, 0x6c, 0xb0, 0xbe, 0xa8, 0x48,
0x58, 0xe7, 0x43, 0x5f, 0x85, 0xc5, 0xc8, 0x0e, 0x5b, 0x24, 0xc2, 0xe4, 0xd0, 0xa5, 0xb1, 0x23,
0x97, 0xad, 0xc7, 0xe5, 0x9b, 0x8b, 0xfb, 0x29, 0x2a, 0xce, 0x70, 0xa3, 0x77, 0x0c, 0x78, 0xc2,
0xf1, 0x7b, 0x81, 0xef, 0x11, 0x2f, 0xda, 0xb3, 0x43, 0xbb, 0x47, 0x22, 0x12, 0x5e, 0x3d, 0x24,
0x61, 0xe8, 0x36, 0x09, 0x95, 0x21, 0xf8, 0xca, 0x04, 0xd6, 0xad, 0x0f, 0x49, 0xb7, 0xce, 0x4b,
0xe5, 0x9e, 0xa8, 0x8f, 0x47, 0xc6, 0x77, 0x53, 0x8b, 0xe5, 0xe6, 0x43, 0xbb, 0xdb, 0x27, 0xf4,
0x92, 0xcb, 0x32, 0xd5, 0xac, 0xca, 0xcd, 0x2f, 0xa9, 0x65, 0xac, 0xf3, 0x98, 0xef, 0xe4, 0x53,
0x2e, 0xda, 0x88, 0xe3, 0x0e, 0xdf, 0x4b, 0xe9, 0xa0, 0xd3, 0x8a, 0x3b, 0x22, 0x7c, 0xab, 0xd3,
0x25, 0x4a, 0x04, 0x89, 0x85, 0xbe, 0x6f, 0xf0, 0xc4, 0x1c, 0x9f, 0x4a, 0x19, 0x63, 0x1f, 0x40,
0x91, 0xa0, 0xe7, 0xfa, 0x78, 0x11, 0xeb, 0xd0, 0xcc, 0x85, 0x03, 0x91, 0xa3, 0xa5, 0xc7, 0x25,
0x2e, 0x1c, 0xa7, 0xee, 0x98, 0x8e, 0xfa, 0x00, 0x74, 0xe0, 0x39, 0x7b, 0x7e, 0xd7, 0x75, 0x06,
0x32, 0x5c, 0x4e, 0x52, 0x92, 0x35, 0x12, 0x61, 0xd6, 0x22, 0x4b, 0x43, 0xea, 0x19, 0x6b, 0x40,
0xe6, 0xdb, 0xb3, 0xe9, 0xa3, 0x27, 0x42, 0xf7, 0x4f, 0x0d, 0x38, 0xcb, 0xfc, 0xc3, 0x0e, 0x5d,
0xea, 0x7b, 0x98, 0xd0, 0x7e, 0x37, 0x92, 0x7b, 0xb8, 0x33, 0xa1, 0xaf, 0xea, 0x22, 0xad, 0xaa,
0x34, 0xc7, 0xd9, 0x2c, 0x05, 0x0f, 0xc1, 0xa3, 0x08, 0xe6, 0xda, 0x2e, 0x8d, 0xfc, 0x70, 0x20,
0x63, 0xd2, 0x24, 0xf5, 0xf8, 0x26, 0x09, 0xba, 0xfe, 0x80, 0x1d, 0xf1, 0x6d, 0xef, 0xc0, 0x57,
0xdb, 0xb2, 0x25, 0x10, 0x70, 0x0c, 0x85, 0xde, 0x34, 0x00, 0x82, 0xf8, 0x80, 0xb0, 0xfc, 0xf9,
0x00, 0xce, 0x6b, 0x52, 0x2a, 0x24, 0x4b, 0x14, 0x6b, 0xa0, 0xc8, 0x87, 0xd9, 0x36, 0xb1, 0xbb,
0x51, 0x5b, 0xba, 0xc5, 0xf3, 0x13, 0xc0, 0x6f, 0x71, 0x41, 0xd9, 0xcc, 0x2d, 0x56, 0xb1, 0x84,
0x41, 0xdf, 0x35, 0x60, 0x31, 0x49, 0xaa, 0x8c, 0x97, 0x54, 0x8b, 0x13, 0xb7, 0x40, 0x57, 0x53,
0x02, 0x2d, 0xc4, 0xa2, 0x67, 0x7a, 0x0d, 0x67, 0x40, 0xd1, 0x77, 0x0c, 0x00, 0x27, 0x4e, 0xe2,
0x54, 0x56, 0x87, 0x57, 0xa7, 0x73, 0x90, 0x93, 0xe2, 0x40, 0x99, 0x3f, 0x59, 0xa2, 0x58, 0x83,
0x35, 0x3f, 0x34, 0xe0, 0x31, 0xed, 0xc5, 0x6b, 0x76, 0xe4, 0xb4, 0x2f, 0x1e, 0xb2, 0xec, 0xb0,
0x93, 0x2a, 0x2b, 0xbe, 0xa8, 0x97, 0x15, 0x1f, 0x1d, 0xad, 0x7c, 0x7a, 0x5c, 0x67, 0x7d, 0x93,
0x49, 0xa8, 0x71, 0x11, 0x5a, 0x05, 0xf2, 0x06, 0x54, 0x34, 0x9d, 0x65, 0xd4, 0x9a, 0x56, 0xde,
0x4d, 0x42, 0x95, 0xb6, 0x88, 0x75, 0x3c, 0xf3, 0xaf, 0x39, 0x98, 0x93, 0x05, 0xfd, 0xa9, 0xeb,
0x98, 0x55, 0x28, 0xb0, 0x1a, 0x25, 0x9b, 0x76, 0x79, 0x93, 0xcf, 0x29, 0x28, 0x80, 0x59, 0x87,
0x8f, 0x07, 0x64, 0xe5, 0xb9, 0x35, 0xc9, 0xc9, 0x11, 0xda, 0x89, 0x71, 0x83, 0xd2, 0x49, 0x3c,
0x63, 0x89, 0xc3, 0x3a, 0x9e, 0x33, 0x8e, 0xef, 0x79, 0xc4, 0x51, 0xce, 0x5b, 0x98, 0xb8, 0xca,
0xae, 0xa7, 0x25, 0x5a, 0x1f, 0x93, 0xe8, 0x67, 0x32, 0x04, 0x9c, 0xc5, 0x36, 0x7f, 0x9f, 0x87,
0x85, 0x94, 0xe6, 0xe8, 0x29, 0x28, 0xf5, 0x29, 0x09, 0x3d, 0x35, 0x25, 0x49, 0x0a, 0xb1, 0x17,
0xe5, 0x3a, 0x4e, 0x38, 0x18, 0x77, 0x60, 0x53, 0x7a, 0xd3, 0x0f, 0x9b, 0xd2, 0xce, 0x09, 0xf7,
0x9e, 0x5c, 0xc7, 0x09, 0x07, 0x2b, 0x73, 0xae, 0x13, 0x3b, 0x24, 0xe1, 0xbe, 0xdf, 0x21, 0x43,
0x3d, 0xa9, 0xa5, 0x48, 0x58, 0xe7, 0xe3, 0x46, 0x8b, 0xba, 0xb4, 0xde, 0x75, 0x89, 0x17, 0x09,
0x35, 0xa7, 0x60, 0xb4, 0xfd, 0xcb, 0x0d, 0x5d, 0xa2, 0x32, 0x5a, 0x86, 0x80, 0xb3, 0xd8, 0x2c,
0xea, 0x2e, 0xd8, 0x37, 0xa9, 0x9a, 0x2e, 0xc9, 0xf8, 0x33, 0x89, 0xfb, 0xa4, 0xa6, 0x55, 0xd6,
0xb9, 0xe3, 0xa3, 0x95, 0xf4, 0x00, 0x0b, 0xa7, 0x11, 0xcd, 0xbf, 0x18, 0x10, 0x4f, 0xad, 0x1e,
0x42, 0xbd, 0xdd, 0x4a, 0xd7, 0xdb, 0xd6, 0xe4, 0xe7, 0x64, 0x4c, 0xad, 0x7d, 0x3b, 0x0f, 0x43,
0xd9, 0x16, 0xbd, 0xca, 0xe2, 0x2c, 0x5b, 0x23, 0xcd, 0x8d, 0x38, 0xd1, 0x7f, 0xf6, 0x74, 0x5f,
0xb7, 0xef, 0xf6, 0x88, 0x1e, 0x42, 0x63, 0x29, 0x58, 0x93, 0x88, 0x6e, 0x19, 0x0a, 0x60, 0xdf,
0x97, 0xb1, 0x6d, 0xba, 0xd5, 0xe0, 0x90, 0x0a, 0xfb, 0x3e, 0xd6, 0x30, 0xd1, 0x73, 0x49, 0x0f,
0x5c, 0xe4, 0x87, 0xc2, 0x4c, 0x77, 0xad, 0x1f, 0xa5, 0x8a, 0x90, 0x4c, 0x27, 0x3b, 0x80, 0x72,
0x28, 0x87, 0x06, 0x71, 0x16, 0x9a, 0xc4, 0x13, 0xe3, 0x01, 0x84, 0x08, 0x25, 0x49, 0xe7, 0x17,
0x2f, 0x53, 0xac, 0xd0, 0xd8, 0xf1, 0x0f, 0xe3, 0xd6, 0x63, 0x2e, 0x7d, 0xfc, 0x93, 0xa6, 0x23,
0xe1, 0x30, 0x7f, 0x64, 0x00, 0x1a, 0x2e, 0x30, 0x58, 0xbf, 0x99, 0x54, 0xfb, 0x32, 0xe4, 0x24,
0xa8, 0x09, 0x3b, 0x56, 0x3c, 0xa7, 0x08, 0xec, 0xe7, 0xa1, 0xc8, 0xab, 0x7f, 0x19, 0x62, 0x12,
0x5f, 0xe3, 0xfd, 0x01, 0x16, 0x34, 0xf3, 0x4f, 0x06, 0x64, 0x03, 0x24, 0xcf, 0x2d, 0x62, 0x1f,
0xb2, 0xb9, 0x25, 0x6d, 0xf3, 0xd3, 0x37, 0xe4, 0xe8, 0x15, 0xa8, 0xd8, 0x51, 0x44, 0x7a, 0x41,
0xc4, 0xdd, 0x37, 0x7f, 0xcf, 0xee, 0xcb, 0x0b, 0xe4, 0x2b, 0x7e, 0xd3, 0x3d, 0x70, 0xb9, 0xeb,
0xea, 0xe2, 0xcc, 0x7f, 0xe7, 0x60, 0x31, 0x5d, 0x2e, 0xa6, 0x36, 0x25, 0x77, 0xd2, 0xa6, 0x9c,
0xd8, 0x03, 0xe6, 0xff, 0x37, 0x7b, 0xc0, 0x57, 0x01, 0x9a, 0xfc, 0xb3, 0xb9, 0x51, 0x0b, 0xf7,
0x1f, 0x13, 0x36, 0x13, 0x29, 0x58, 0x93, 0x88, 0x96, 0x20, 0xe7, 0x36, 0xf9, 0x61, 0xcc, 0x5b,
0x20, 0x79, 0x73, 0xdb, 0x9b, 0x38, 0xe7, 0x36, 0x4d, 0x0a, 0xf3, 0x7a, 0xa1, 0x7a, 0x6a, 0xa7,
0xf9, 0x32, 0x2c, 0x88, 0x5f, 0x9b, 0x24, 0xb2, 0xdd, 0x2e, 0x95, 0xbb, 0xf3, 0x98, 0x64, 0x5f,
0x68, 0xe8, 0x44, 0x9c, 0xe6, 0x35, 0x7f, 0x91, 0x03, 0xd8, 0xf2, 0xfd, 0x8e, 0xc4, 0x8c, 0xcf,
0x80, 0x31, 0xf6, 0x0c, 0xac, 0x42, 0xa1, 0xe3, 0x7a, 0xcd, 0xec, 0x29, 0xd9, 0x71, 0xbd, 0x26,
0xe6, 0x14, 0xb4, 0x0e, 0x60, 0x07, 0xee, 0x4b, 0x24, 0xa4, 0x6a, 0x42, 0x9c, 0xd8, 0x65, 0x63,
0x6f, 0x5b, 0x52, 0xb0, 0xc6, 0x85, 0x9e, 0x92, 0x45, 0xa5, 0x18, 0x34, 0x54, 0x33, 0x45, 0x65,
0x89, 0x69, 0xa8, 0x55, 0x8d, 0xcf, 0x66, 0xc2, 0xda, 0xea, 0x50, 0x58, 0x53, 0x45, 0xf6, 0x5e,
0xdb, 0xa6, 0x64, 0xd4, 0x01, 0x9b, 0x3d, 0x61, 0xe2, 0xd5, 0x80, 0xd2, 0x0b, 0xd7, 0xf6, 0x45,
0xa9, 0x60, 0x42, 0xde, 0xb5, 0x45, 0x14, 0xc9, 0x2b, 0xb7, 0xdf, 0xa6, 0xb4, 0xcf, 0x77, 0x98,
0x11, 0xd1, 0x79, 0xc8, 0x93, 0xd7, 0x03, 0x6e, 0x97, 0xbc, 0x8a, 0x34, 0x17, 0x5f, 0x0f, 0xdc,
0x90, 0x50, 0xc6, 0x44, 0x5e, 0x0f, 0x4c, 0x0a, 0x6a, 0x86, 0x87, 0x0e, 0xa0, 0xc0, 0x9a, 0x52,
0x99, 0x7a, 0xb6, 0x26, 0xec, 0x7b, 0xd5, 0xa8, 0xb0, 0xc4, 0x27, 0xa1, 0x03, 0xcf, 0xc1, 0x5c,
0xbe, 0xf9, 0xeb, 0x02, 0x64, 0x9a, 0x0e, 0xd4, 0xd7, 0xc7, 0x94, 0xc6, 0x14, 0xc7, 0x94, 0xc9,
0x87, 0x8f, 0x1a, 0x55, 0xa2, 0x67, 0xa0, 0x18, 0xb0, 0xfd, 0x90, 0xde, 0xb3, 0x12, 0x07, 0x50,
0xbe, 0x49, 0x23, 0xb6, 0x4d, 0x70, 0xeb, 0xbb, 0x96, 0x3f, 0x21, 0x2c, 0x7e, 0x5b, 0x4c, 0x14,
0x64, 0xf7, 0x2e, 0x0e, 0xf0, 0xee, 0xb4, 0x2c, 0x2b, 0x1b, 0xf8, 0x64, 0xb4, 0x20, 0xdb, 0x76,
0x0d, 0x11, 0x7d, 0x1d, 0xca, 0x34, 0xb2, 0x43, 0x11, 0x94, 0x67, 0xef, 0x39, 0x7e, 0x24, 0xe6,
0x6b, 0xc4, 0x42, 0xb0, 0x92, 0x87, 0x5e, 0x06, 0x38, 0x70, 0x3d, 0x97, 0xb6, 0xb9, 0xf4, 0xb9,
0xfb, 0x0b, 0xf9, 0x97, 0x12, 0x09, 0x58, 0x93, 0x66, 0xfe, 0xcc, 0x00, 0x34, 0x22, 0x20, 0x86,
0x71, 0x89, 0x66, 0x3c, 0x88, 0x80, 0x3d, 0xb2, 0x5a, 0x7b, 0xae, 0xf4, 0xcb, 0xb7, 0x57, 0x66,
0x6e, 0x7d, 0xb0, 0x3a, 0x63, 0x7e, 0x2f, 0x07, 0x15, 0xed, 0xbe, 0xe7, 0x14, 0xe1, 0x29, 0x73,
0x3f, 0x95, 0x3b, 0xe5, 0xfd, 0xd4, 0x93, 0x50, 0x0a, 0xfc, 0xae, 0xeb, 0xb8, 0x32, 0x35, 0x95,
0xad, 0x79, 0xde, 0x6c, 0xc8, 0x35, 0x9c, 0x50, 0x51, 0x04, 0xe5, 0x1b, 0x37, 0x23, 0x1e, 0x16,
0xe2, 0xdb, 0xac, 0xfa, 0x04, 0x46, 0x89, 0x43, 0x8c, 0xda, 0xf9, 0x78, 0x85, 0x62, 0x05, 0x64,
0xfe, 0x2d, 0x07, 0xc0, 0xaf, 0x03, 0x5d, 0x3e, 0xa0, 0x59, 0x85, 0x42, 0x48, 0x02, 0x3f, 0x6b,
0x07, 0xc6, 0x81, 0x39, 0x25, 0xd5, 0x6f, 0xe5, 0xee, 0xa9, 0xdf, 0xca, 0x9f, 0xd8, 0x6f, 0xb1,
0x84, 0x43, 0xdb, 0x7b, 0xa1, 0x7b, 0x68, 0x47, 0x64, 0x87, 0x0c, 0x64, 0xd4, 0x56, 0x09, 0xa7,
0xb1, 0xa5, 0x88, 0x38, 0xcd, 0x3b, 0xb2, 0x55, 0x2d, 0xfe, 0x17, 0x5b, 0xd5, 0xdb, 0x06, 0x2c,
0x2a, 0xcb, 0xfe, 0x7f, 0xdd, 0x40, 0x2b, 0xbd, 0xc7, 0xf4, 0x3d, 0xff, 0x32, 0xe0, 0x4c, 0x5c,
0x61, 0xcb, 0x8c, 0x3f, 0x95, 0x14, 0x9f, 0xba, 0xcb, 0xc9, 0x9f, 0x7c, 0x97, 0xa3, 0x47, 0xf0,
0xc2, 0x09, 0x11, 0xfc, 0x2b, 0x99, 0xe4, 0xfe, 0x89, 0xa1, 0xe4, 0x8e, 0x92, 0x5e, 0x62, 0xe0,
0x39, 0xe9, 0x62, 0xc8, 0xfc, 0x9d, 0x01, 0xf3, 0x31, 0x79, 0xd7, 0x6f, 0xf2, 0x9a, 0x9d, 0x72,
0x27, 0x33, 0xd2, 0x35, 0xbb, 0x70, 0x07, 0x41, 0x43, 0x7d, 0x28, 0x39, 0x6d, 0xb7, 0xdb, 0x0c,
0x89, 0x27, 0xb7, 0xe5, 0xf9, 0x29, 0xb4, 0x3a, 0x0c, 0x5f, 0xb9, 0x42, 0x5d, 0x02, 0xe0, 0x04,
0xca, 0xfc, 0x43, 0x1e, 0x16, 0x52, 0x7d, 0x11, 0x0b, 0x5f, 0xe2, 0x32, 0xa5, 0xa1, 0xe9, 0x9c,
0x84, 0xaf, 0x7d, 0x45, 0xc2, 0x3a, 0x1f, 0xdb, 0x8f, 0xae, 0x7b, 0x28, 0x64, 0x64, 0xef, 0xd6,
0x2e, 0xc7, 0x04, 0xac, 0x78, 0xb4, 0xc6, 0x30, 0x7f, 0xcf, 0x8d, 0xe1, 0x5b, 0x06, 0x20, 0xfe,
0x09, 0x4c, 0x72, 0xd2, 0xbf, 0xc9, 0x58, 0x38, 0x35, 0xbb, 0x2d, 0x49, 0x8d, 0x50, 0x7d, 0x08,
0x0a, 0x8f, 0x80, 0xd7, 0xe6, 0xc5, 0xc5, 0x87, 0x32, 0x2f, 0x36, 0x7f, 0x5b, 0x80, 0x85, 0x54,
0x75, 0x90, 0xea, 0x90, 0x8c, 0x13, 0x3b, 0xa4, 0xf3, 0x50, 0x0c, 0xc2, 0xbe, 0x27, 0xf6, 0xab,
0xa4, 0x1c, 0x73, 0x8f, 0x2d, 0x62, 0x41, 0x63, 0x3d, 0x40, 0x33, 0x1c, 0xe0, 0xbe, 0xa8, 0xa3,
0x4b, 0x4a, 0x99, 0x4d, 0xbe, 0x8a, 0x25, 0x15, 0xbd, 0x01, 0xf3, 0x94, 0x1f, 0x86, 0xd0, 0x8e,
0x48, 0x6b, 0x30, 0x85, 0x99, 0x79, 0x43, 0x13, 0x67, 0x9d, 0x3d, 0x3e, 0x5a, 0x99, 0xd7, 0x57,
0x70, 0x0a, 0x0e, 0xfd, 0xdc, 0x00, 0x14, 0x8c, 0xba, 0xe8, 0x33, 0x26, 0xac, 0x19, 0x86, 0x2b,
0x12, 0xeb, 0x71, 0xe6, 0x14, 0x23, 0xfa, 0xba, 0x11, 0x0a, 0xa0, 0x37, 0x8d, 0xe1, 0x21, 0xc6,
0xde, 0x14, 0xab, 0x41, 0x31, 0x85, 0xb9, 0xeb, 0x30, 0xc3, 0xbc, 0x65, 0xc0, 0x63, 0x23, 0xdf,
0x63, 0x1e, 0xd0, 0x0a, 0xfd, 0x7e, 0x90, 0x0d, 0x4d, 0xfc, 0x3f, 0x1e, 0x58, 0xd0, 0x4e, 0x11,
0x8c, 0xe3, 0x80, 0x9e, 0x1f, 0x17, 0xd0, 0xcd, 0xdf, 0xe4, 0xe0, 0x91, 0x11, 0x85, 0x2c, 0xba,
0xa9, 0x5b, 0x47, 0x14, 0x78, 0x2f, 0x4c, 0xe1, 0xfc, 0xca, 0x4c, 0x23, 0xfe, 0xb2, 0x70, 0xe2,
0x80, 0xe7, 0xe4, 0x59, 0xc2, 0x01, 0x14, 0xdb, 0xbe, 0xdf, 0x89, 0x87, 0x06, 0x93, 0x64, 0x4c,
0xd5, 0xea, 0x5a, 0x65, 0x66, 0x6a, 0xf6, 0x4c, 0xb1, 0x10, 0x6f, 0xfe, 0xc0, 0x00, 0xed, 0xc6,
0x10, 0x7d, 0x0b, 0xca, 0x76, 0x3f, 0xf2, 0x7b, 0x76, 0x44, 0x9a, 0xb2, 0x0e, 0xd8, 0x9d, 0xca,
0xdd, 0xe4, 0x46, 0x2c, 0x55, 0x58, 0x28, 0x79, 0xc4, 0x0a, 0xcf, 0x7c, 0x4e, 0xec, 0x58, 0xe6,
0x05, 0x15, 0x34, 0x8c, 0xf1, 0x41, 0xc3, 0xfc, 0xa7, 0x01, 0xa9, 0xc3, 0x8a, 0x7a, 0x50, 0x64,
0x2a, 0x0d, 0xa6, 0x70, 0x23, 0xad, 0xcb, 0xdd, 0x60, 0x32, 0x85, 0x1d, 0xf9, 0x4f, 0x2c, 0x50,
0x90, 0x0b, 0x05, 0x66, 0x50, 0x39, 0xf1, 0xdc, 0x99, 0x12, 0x1a, 0xdb, 0x2a, 0xd1, 0xda, 0xb2,
0x5f, 0x98, 0x43, 0x98, 0xcf, 0xc2, 0xb9, 0x21, 0x8d, 0x98, 0x91, 0x0e, 0xfc, 0xf8, 0x02, 0x5e,
0x33, 0xd2, 0x25, 0xb6, 0x88, 0x05, 0x8d, 0x15, 0x0a, 0x67, 0xb3, 0xe2, 0x59, 0x1c, 0x3b, 0x47,
0xb3, 0xf2, 0x1e, 0x88, 0xd5, 0x3e, 0x2e, 0x95, 0x1a, 0x56, 0x1f, 0x0f, 0x6b, 0xc0, 0x76, 0x34,
0x7b, 0x7f, 0xc0, 0xce, 0x90, 0xeb, 0x51, 0xe2, 0xf4, 0xc3, 0xf8, 0x43, 0xd5, 0x60, 0x42, 0xae,
0xe3, 0x84, 0x03, 0xad, 0x03, 0x88, 0xfb, 0xab, 0x5d, 0xd5, 0x11, 0x24, 0x43, 0x99, 0x46, 0x42,
0xc1, 0x1a, 0x17, 0x6b, 0x8a, 0x1c, 0x12, 0x46, 0x9b, 0xac, 0x0e, 0x66, 0xc1, 0x65, 0x5e, 0x34,
0x45, 0x75, 0xb9, 0x86, 0x13, 0x2a, 0xfa, 0x24, 0xcc, 0x75, 0xc8, 0x80, 0x33, 0x16, 0x38, 0x63,
0x85, 0x95, 0x76, 0x3b, 0x62, 0x09, 0xc7, 0x34, 0x64, 0xc2, 0xac, 0x63, 0x73, 0xae, 0x22, 0xe7,
0x02, 0x7e, 0x95, 0xb5, 0xc1, 0x99, 0x24, 0xc5, 0xaa, 0xbd, 0x7b, 0x67, 0x79, 0xe6, 0xbd, 0x3b,
0xcb, 0x33, 0xef, 0xdf, 0x59, 0x9e, 0xb9, 0x75, 0xbc, 0x6c, 0xbc, 0x7b, 0xbc, 0x6c, 0xbc, 0x77,
0xbc, 0x6c, 0xbc, 0x7f, 0xbc, 0x6c, 0xfc, 0xe3, 0x78, 0xd9, 0xf8, 0xc9, 0x87, 0xcb, 0x33, 0x2f,
0x97, 0x62, 0xd3, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x22, 0x16, 0x8c, 0xe7, 0x2c, 0x00,
0x00,
}

View File

@@ -8,7 +8,6 @@ package github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1;
import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
import "k8s.io/apimachinery/pkg/runtime/generated.proto";
import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto";
import "k8s.io/apimachinery/pkg/util/intstr/generated.proto";
// Package-wide variables from generator "generated".
option go_package = "v1alpha1";

View File

@@ -2,7 +2,6 @@ package versioned
import (
argoprojv1alpha1 "github.com/argoproj/argo-cd/pkg/client/clientset/versioned/typed/application/v1alpha1"
glog "github.com/golang/glog"
discovery "k8s.io/client-go/discovery"
rest "k8s.io/client-go/rest"
flowcontrol "k8s.io/client-go/util/flowcontrol"
@@ -56,7 +55,6 @@ func NewForConfig(c *rest.Config) (*Clientset, error) {
cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy)
if err != nil {
glog.Errorf("failed to create the DiscoveryClient: %v", err)
return nil, err
}
return &cs, nil

View File

@@ -23,9 +23,10 @@ func NewSimpleClientset(objects ...runtime.Object) *Clientset {
}
}
fakePtr := testing.Fake{}
fakePtr.AddReactor("*", "*", testing.ObjectReaction(o))
fakePtr.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) {
cs := &Clientset{}
cs.discovery = &fakediscovery.FakeDiscovery{Fake: &cs.Fake}
cs.AddReactor("*", "*", testing.ObjectReaction(o))
cs.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) {
gvr := action.GetResource()
ns := action.GetNamespace()
watch, err := o.Watch(gvr, ns)
@@ -35,7 +36,7 @@ func NewSimpleClientset(objects ...runtime.Object) *Clientset {
return true, watch, nil
})
return &Clientset{fakePtr, &fakediscovery.FakeDiscovery{Fake: &fakePtr}}
return cs
}
// Clientset implements clientset.Interface. Meant to be embedded into a

View File

@@ -6,15 +6,14 @@ import (
runtime "k8s.io/apimachinery/pkg/runtime"
schema "k8s.io/apimachinery/pkg/runtime/schema"
serializer "k8s.io/apimachinery/pkg/runtime/serializer"
util_runtime "k8s.io/apimachinery/pkg/util/runtime"
)
var scheme = runtime.NewScheme()
var codecs = serializer.NewCodecFactory(scheme)
var parameterCodec = runtime.NewParameterCodec(scheme)
func init() {
v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"})
AddToScheme(scheme)
var localSchemeBuilder = runtime.SchemeBuilder{
argoprojv1alpha1.AddToScheme,
}
// AddToScheme adds all types of this clientset into the given scheme. This allows composition
@@ -27,10 +26,13 @@ func init() {
// )
//
// kclientset, _ := kubernetes.NewForConfig(c)
// aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
//
// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types
// correctly.
func AddToScheme(scheme *runtime.Scheme) {
argoprojv1alpha1.AddToScheme(scheme)
var AddToScheme = localSchemeBuilder.AddToScheme
func init() {
v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"})
util_runtime.Must(AddToScheme(scheme))
}

View File

@@ -6,15 +6,14 @@ import (
runtime "k8s.io/apimachinery/pkg/runtime"
schema "k8s.io/apimachinery/pkg/runtime/schema"
serializer "k8s.io/apimachinery/pkg/runtime/serializer"
util_runtime "k8s.io/apimachinery/pkg/util/runtime"
)
var Scheme = runtime.NewScheme()
var Codecs = serializer.NewCodecFactory(Scheme)
var ParameterCodec = runtime.NewParameterCodec(Scheme)
func init() {
v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"})
AddToScheme(Scheme)
var localSchemeBuilder = runtime.SchemeBuilder{
argoprojv1alpha1.AddToScheme,
}
// AddToScheme adds all types of this clientset into the given scheme. This allows composition
@@ -27,10 +26,13 @@ func init() {
// )
//
// kclientset, _ := kubernetes.NewForConfig(c)
// aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
//
// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types
// correctly.
func AddToScheme(scheme *runtime.Scheme) {
argoprojv1alpha1.AddToScheme(scheme)
var AddToScheme = localSchemeBuilder.AddToScheme
func init() {
v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"})
util_runtime.Must(AddToScheme(Scheme))
}

View File

@@ -44,7 +44,7 @@ func (c *FakeApplications) List(opts v1.ListOptions) (result *v1alpha1.Applicati
if label == nil {
label = labels.Everything()
}
list := &v1alpha1.ApplicationList{}
list := &v1alpha1.ApplicationList{ListMeta: obj.(*v1alpha1.ApplicationList).ListMeta}
for _, item := range obj.(*v1alpha1.ApplicationList).Items {
if label.Matches(labels.Set(item.Labels)) {
list.Items = append(list.Items, item)

View File

@@ -44,7 +44,7 @@ func (c *FakeAppProjects) List(opts v1.ListOptions) (result *v1alpha1.AppProject
if label == nil {
label = labels.Everything()
}
list := &v1alpha1.AppProjectList{}
list := &v1alpha1.AppProjectList{ListMeta: obj.(*v1alpha1.AppProjectList).ListMeta}
for _, item := range obj.(*v1alpha1.AppProjectList).Items {
if label.Matches(labels.Set(item.Labels)) {
list.Items = append(list.Items, item)

View File

@@ -14,12 +14,16 @@ import (
cache "k8s.io/client-go/tools/cache"
)
// SharedInformerOption defines the functional option type for SharedInformerFactory.
type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory
type sharedInformerFactory struct {
client versioned.Interface
namespace string
tweakListOptions internalinterfaces.TweakListOptionsFunc
lock sync.Mutex
defaultResync time.Duration
customResync map[reflect.Type]time.Duration
informers map[reflect.Type]cache.SharedIndexInformer
// startedInformers is used for tracking which informers have been started.
@@ -27,23 +31,62 @@ type sharedInformerFactory struct {
startedInformers map[reflect.Type]bool
}
// NewSharedInformerFactory constructs a new instance of sharedInformerFactory
// WithCustomResyncConfig sets a custom resync period for the specified informer types.
func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption {
return func(factory *sharedInformerFactory) *sharedInformerFactory {
for k, v := range resyncConfig {
factory.customResync[reflect.TypeOf(k)] = v
}
return factory
}
}
// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory.
func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption {
return func(factory *sharedInformerFactory) *sharedInformerFactory {
factory.tweakListOptions = tweakListOptions
return factory
}
}
// WithNamespace limits the SharedInformerFactory to the specified namespace.
func WithNamespace(namespace string) SharedInformerOption {
return func(factory *sharedInformerFactory) *sharedInformerFactory {
factory.namespace = namespace
return factory
}
}
// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces.
func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory {
return NewFilteredSharedInformerFactory(client, defaultResync, v1.NamespaceAll, nil)
return NewSharedInformerFactoryWithOptions(client, defaultResync)
}
// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory.
// Listers obtained via this SharedInformerFactory will be subject to the same filters
// as specified here.
// Deprecated: Please use NewSharedInformerFactoryWithOptions instead
func NewFilteredSharedInformerFactory(client versioned.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory {
return &sharedInformerFactory{
return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions))
}
// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options.
func NewSharedInformerFactoryWithOptions(client versioned.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory {
factory := &sharedInformerFactory{
client: client,
namespace: namespace,
tweakListOptions: tweakListOptions,
namespace: v1.NamespaceAll,
defaultResync: defaultResync,
informers: make(map[reflect.Type]cache.SharedIndexInformer),
startedInformers: make(map[reflect.Type]bool),
customResync: make(map[reflect.Type]time.Duration),
}
// Apply all options
for _, opt := range options {
factory = opt(factory)
}
return factory
}
// Start initializes all requested informers.
@@ -92,7 +135,13 @@ func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internal
if exists {
return informer
}
informer = newFunc(f.client, f.defaultResync)
resyncPeriod, exists := f.customResync[informerType]
if !exists {
resyncPeriod = f.defaultResync
}
informer = newFunc(f.client, resyncPeriod)
f.informers[informerType] = informer
return informer

View File

@@ -46,7 +46,7 @@ func (m *ManifestRequest) Reset() { *m = ManifestRequest{} }
func (m *ManifestRequest) String() string { return proto.CompactTextString(m) }
func (*ManifestRequest) ProtoMessage() {}
func (*ManifestRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_e1170ea85be6baa9, []int{0}
return fileDescriptor_repository_49651600e73b0b40, []int{0}
}
func (m *ManifestRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -146,7 +146,7 @@ func (m *ManifestResponse) Reset() { *m = ManifestResponse{} }
func (m *ManifestResponse) String() string { return proto.CompactTextString(m) }
func (*ManifestResponse) ProtoMessage() {}
func (*ManifestResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_e1170ea85be6baa9, []int{1}
return fileDescriptor_repository_49651600e73b0b40, []int{1}
}
func (m *ManifestResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -224,7 +224,7 @@ func (m *ListDirRequest) Reset() { *m = ListDirRequest{} }
func (m *ListDirRequest) String() string { return proto.CompactTextString(m) }
func (*ListDirRequest) ProtoMessage() {}
func (*ListDirRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_e1170ea85be6baa9, []int{2}
return fileDescriptor_repository_49651600e73b0b40, []int{2}
}
func (m *ListDirRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -286,7 +286,7 @@ func (m *FileList) Reset() { *m = FileList{} }
func (m *FileList) String() string { return proto.CompactTextString(m) }
func (*FileList) ProtoMessage() {}
func (*FileList) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_e1170ea85be6baa9, []int{3}
return fileDescriptor_repository_49651600e73b0b40, []int{3}
}
func (m *FileList) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -336,7 +336,7 @@ func (m *GetFileRequest) Reset() { *m = GetFileRequest{} }
func (m *GetFileRequest) String() string { return proto.CompactTextString(m) }
func (*GetFileRequest) ProtoMessage() {}
func (*GetFileRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_e1170ea85be6baa9, []int{4}
return fileDescriptor_repository_49651600e73b0b40, []int{4}
}
func (m *GetFileRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -398,7 +398,7 @@ func (m *GetFileResponse) Reset() { *m = GetFileResponse{} }
func (m *GetFileResponse) String() string { return proto.CompactTextString(m) }
func (*GetFileResponse) ProtoMessage() {}
func (*GetFileResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_e1170ea85be6baa9, []int{5}
return fileDescriptor_repository_49651600e73b0b40, []int{5}
}
func (m *GetFileResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2099,10 +2099,10 @@ var (
)
func init() {
proto.RegisterFile("reposerver/repository/repository.proto", fileDescriptor_repository_e1170ea85be6baa9)
proto.RegisterFile("reposerver/repository/repository.proto", fileDescriptor_repository_49651600e73b0b40)
}
var fileDescriptor_repository_e1170ea85be6baa9 = []byte{
var fileDescriptor_repository_49651600e73b0b40 = []byte{
// 584 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x55, 0xdd, 0x8a, 0xd3, 0x40,
0x14, 0xde, 0x6c, 0xbb, 0xdd, 0x76, 0x2a, 0xee, 0x3a, 0x14, 0x09, 0x69, 0x29, 0x21, 0xa0, 0xf4,

View File

@@ -37,7 +37,7 @@ func (m *UpdatePasswordRequest) Reset() { *m = UpdatePasswordRequest{} }
func (m *UpdatePasswordRequest) String() string { return proto.CompactTextString(m) }
func (*UpdatePasswordRequest) ProtoMessage() {}
func (*UpdatePasswordRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_account_c227670d8e34bf5f, []int{0}
return fileDescriptor_account_d27ff2bbd0f6944b, []int{0}
}
func (m *UpdatePasswordRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -90,7 +90,7 @@ func (m *UpdatePasswordResponse) Reset() { *m = UpdatePasswordResponse{}
func (m *UpdatePasswordResponse) String() string { return proto.CompactTextString(m) }
func (*UpdatePasswordResponse) ProtoMessage() {}
func (*UpdatePasswordResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_account_c227670d8e34bf5f, []int{1}
return fileDescriptor_account_d27ff2bbd0f6944b, []int{1}
}
func (m *UpdatePasswordResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -566,10 +566,10 @@ var (
)
func init() {
proto.RegisterFile("server/account/account.proto", fileDescriptor_account_c227670d8e34bf5f)
proto.RegisterFile("server/account/account.proto", fileDescriptor_account_d27ff2bbd0f6944b)
}
var fileDescriptor_account_c227670d8e34bf5f = []byte{
var fileDescriptor_account_d27ff2bbd0f6944b = []byte{
// 268 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x29, 0x4e, 0x2d, 0x2a,
0x4b, 0x2d, 0xd2, 0x4f, 0x4c, 0x4e, 0xce, 0x2f, 0xcd, 0x2b, 0x81, 0xd1, 0x7a, 0x05, 0x45, 0xf9,

View File

@@ -51,7 +51,7 @@ func (m *ApplicationQuery) Reset() { *m = ApplicationQuery{} }
func (m *ApplicationQuery) String() string { return proto.CompactTextString(m) }
func (*ApplicationQuery) ProtoMessage() {}
func (*ApplicationQuery) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{0}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{0}
}
func (m *ApplicationQuery) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -115,7 +115,7 @@ func (m *ApplicationResourceEventsQuery) Reset() { *m = ApplicationResou
func (m *ApplicationResourceEventsQuery) String() string { return proto.CompactTextString(m) }
func (*ApplicationResourceEventsQuery) ProtoMessage() {}
func (*ApplicationResourceEventsQuery) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{1}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{1}
}
func (m *ApplicationResourceEventsQuery) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -178,7 +178,7 @@ func (m *ApplicationManifestQuery) Reset() { *m = ApplicationManifestQue
func (m *ApplicationManifestQuery) String() string { return proto.CompactTextString(m) }
func (*ApplicationManifestQuery) ProtoMessage() {}
func (*ApplicationManifestQuery) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{2}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{2}
}
func (m *ApplicationManifestQuery) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -231,7 +231,7 @@ func (m *ApplicationResponse) Reset() { *m = ApplicationResponse{} }
func (m *ApplicationResponse) String() string { return proto.CompactTextString(m) }
func (*ApplicationResponse) ProtoMessage() {}
func (*ApplicationResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{3}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{3}
}
func (m *ApplicationResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -272,7 +272,7 @@ func (m *ApplicationCreateRequest) Reset() { *m = ApplicationCreateReque
func (m *ApplicationCreateRequest) String() string { return proto.CompactTextString(m) }
func (*ApplicationCreateRequest) ProtoMessage() {}
func (*ApplicationCreateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{4}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{4}
}
func (m *ApplicationCreateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -326,7 +326,7 @@ func (m *ApplicationUpdateRequest) Reset() { *m = ApplicationUpdateReque
func (m *ApplicationUpdateRequest) String() string { return proto.CompactTextString(m) }
func (*ApplicationUpdateRequest) ProtoMessage() {}
func (*ApplicationUpdateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{5}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{5}
}
func (m *ApplicationUpdateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -374,7 +374,7 @@ func (m *ApplicationDeleteRequest) Reset() { *m = ApplicationDeleteReque
func (m *ApplicationDeleteRequest) String() string { return proto.CompactTextString(m) }
func (*ApplicationDeleteRequest) ProtoMessage() {}
func (*ApplicationDeleteRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{6}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{6}
}
func (m *ApplicationDeleteRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -435,7 +435,7 @@ func (m *ApplicationSyncRequest) Reset() { *m = ApplicationSyncRequest{}
func (m *ApplicationSyncRequest) String() string { return proto.CompactTextString(m) }
func (*ApplicationSyncRequest) ProtoMessage() {}
func (*ApplicationSyncRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{7}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{7}
}
func (m *ApplicationSyncRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -526,7 +526,7 @@ func (m *ParameterOverrides) Reset() { *m = ParameterOverrides{} }
func (m *ParameterOverrides) String() string { return proto.CompactTextString(m) }
func (*ParameterOverrides) ProtoMessage() {}
func (*ParameterOverrides) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{8}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{8}
}
func (m *ParameterOverrides) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -575,7 +575,7 @@ func (m *Parameter) Reset() { *m = Parameter{} }
func (m *Parameter) String() string { return proto.CompactTextString(m) }
func (*Parameter) ProtoMessage() {}
func (*Parameter) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{9}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{9}
}
func (m *Parameter) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -638,7 +638,7 @@ func (m *ApplicationUpdateSpecRequest) Reset() { *m = ApplicationUpdateS
func (m *ApplicationUpdateSpecRequest) String() string { return proto.CompactTextString(m) }
func (*ApplicationUpdateSpecRequest) ProtoMessage() {}
func (*ApplicationUpdateSpecRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{10}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{10}
}
func (m *ApplicationUpdateSpecRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -695,7 +695,7 @@ func (m *ApplicationRollbackRequest) Reset() { *m = ApplicationRollbackR
func (m *ApplicationRollbackRequest) String() string { return proto.CompactTextString(m) }
func (*ApplicationRollbackRequest) ProtoMessage() {}
func (*ApplicationRollbackRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{11}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{11}
}
func (m *ApplicationRollbackRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -766,7 +766,7 @@ func (m *ApplicationDeleteResourceRequest) Reset() { *m = ApplicationDel
func (m *ApplicationDeleteResourceRequest) String() string { return proto.CompactTextString(m) }
func (*ApplicationDeleteResourceRequest) ProtoMessage() {}
func (*ApplicationDeleteResourceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{12}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{12}
}
func (m *ApplicationDeleteResourceRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -840,7 +840,7 @@ func (m *ApplicationPodLogsQuery) Reset() { *m = ApplicationPodLogsQuery
func (m *ApplicationPodLogsQuery) String() string { return proto.CompactTextString(m) }
func (*ApplicationPodLogsQuery) ProtoMessage() {}
func (*ApplicationPodLogsQuery) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{13}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{13}
}
func (m *ApplicationPodLogsQuery) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -930,7 +930,7 @@ func (m *LogEntry) Reset() { *m = LogEntry{} }
func (m *LogEntry) String() string { return proto.CompactTextString(m) }
func (*LogEntry) ProtoMessage() {}
func (*LogEntry) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{14}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{14}
}
func (m *LogEntry) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -984,7 +984,7 @@ func (m *OperationTerminateRequest) Reset() { *m = OperationTerminateReq
func (m *OperationTerminateRequest) String() string { return proto.CompactTextString(m) }
func (*OperationTerminateRequest) ProtoMessage() {}
func (*OperationTerminateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{15}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{15}
}
func (m *OperationTerminateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1030,7 +1030,7 @@ func (m *OperationTerminateResponse) Reset() { *m = OperationTerminateRe
func (m *OperationTerminateResponse) String() string { return proto.CompactTextString(m) }
func (*OperationTerminateResponse) ProtoMessage() {}
func (*OperationTerminateResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_application_29e2d383e1dc72bd, []int{16}
return fileDescriptor_application_a0bd93d5f02bc9d6, []int{16}
}
func (m *OperationTerminateResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4934,10 +4934,10 @@ var (
)
func init() {
proto.RegisterFile("server/application/application.proto", fileDescriptor_application_29e2d383e1dc72bd)
proto.RegisterFile("server/application/application.proto", fileDescriptor_application_a0bd93d5f02bc9d6)
}
var fileDescriptor_application_29e2d383e1dc72bd = []byte{
var fileDescriptor_application_a0bd93d5f02bc9d6 = []byte{
// 1427 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0xcf, 0x6f, 0x1b, 0x45,
0x14, 0x66, 0xec, 0xc4, 0x8e, 0x5f, 0x2a, 0x04, 0x43, 0x1b, 0x96, 0x25, 0x4d, 0xac, 0x6d, 0x9a,

View File

@@ -45,7 +45,7 @@ func (m *ClusterQuery) Reset() { *m = ClusterQuery{} }
func (m *ClusterQuery) String() string { return proto.CompactTextString(m) }
func (*ClusterQuery) ProtoMessage() {}
func (*ClusterQuery) Descriptor() ([]byte, []int) {
return fileDescriptor_cluster_bf8d7367dfc95a3e, []int{0}
return fileDescriptor_cluster_0875510a34378ea0, []int{0}
}
func (m *ClusterQuery) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -91,7 +91,7 @@ func (m *ClusterResponse) Reset() { *m = ClusterResponse{} }
func (m *ClusterResponse) String() string { return proto.CompactTextString(m) }
func (*ClusterResponse) ProtoMessage() {}
func (*ClusterResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_cluster_bf8d7367dfc95a3e, []int{1}
return fileDescriptor_cluster_0875510a34378ea0, []int{1}
}
func (m *ClusterResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -132,7 +132,7 @@ func (m *ClusterCreateRequest) Reset() { *m = ClusterCreateRequest{} }
func (m *ClusterCreateRequest) String() string { return proto.CompactTextString(m) }
func (*ClusterCreateRequest) ProtoMessage() {}
func (*ClusterCreateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_cluster_bf8d7367dfc95a3e, []int{2}
return fileDescriptor_cluster_0875510a34378ea0, []int{2}
}
func (m *ClusterCreateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -189,7 +189,7 @@ func (m *ClusterCreateFromKubeConfigRequest) Reset() { *m = ClusterCreat
func (m *ClusterCreateFromKubeConfigRequest) String() string { return proto.CompactTextString(m) }
func (*ClusterCreateFromKubeConfigRequest) ProtoMessage() {}
func (*ClusterCreateFromKubeConfigRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_cluster_bf8d7367dfc95a3e, []int{3}
return fileDescriptor_cluster_0875510a34378ea0, []int{3}
}
func (m *ClusterCreateFromKubeConfigRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -257,7 +257,7 @@ func (m *ClusterUpdateRequest) Reset() { *m = ClusterUpdateRequest{} }
func (m *ClusterUpdateRequest) String() string { return proto.CompactTextString(m) }
func (*ClusterUpdateRequest) ProtoMessage() {}
func (*ClusterUpdateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_cluster_bf8d7367dfc95a3e, []int{4}
return fileDescriptor_cluster_0875510a34378ea0, []int{4}
}
func (m *ClusterUpdateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1393,10 +1393,10 @@ var (
)
func init() {
proto.RegisterFile("server/cluster/cluster.proto", fileDescriptor_cluster_bf8d7367dfc95a3e)
proto.RegisterFile("server/cluster/cluster.proto", fileDescriptor_cluster_0875510a34378ea0)
}
var fileDescriptor_cluster_bf8d7367dfc95a3e = []byte{
var fileDescriptor_cluster_0875510a34378ea0 = []byte{
// 564 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x95, 0xcd, 0x6e, 0x13, 0x31,
0x10, 0xc7, 0xe5, 0xb6, 0xda, 0x12, 0x83, 0xf8, 0xb0, 0x0a, 0x5a, 0xd2, 0x10, 0xa5, 0x3e, 0x54,

View File

@@ -46,7 +46,7 @@ func (m *ProjectCreateRequest) Reset() { *m = ProjectCreateRequest{} }
func (m *ProjectCreateRequest) String() string { return proto.CompactTextString(m) }
func (*ProjectCreateRequest) ProtoMessage() {}
func (*ProjectCreateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_project_8d94583ca767d5b3, []int{0}
return fileDescriptor_project_082822b5d17b8c4e, []int{0}
}
func (m *ProjectCreateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -96,7 +96,7 @@ func (m *ProjectTokenDeleteRequest) Reset() { *m = ProjectTokenDeleteReq
func (m *ProjectTokenDeleteRequest) String() string { return proto.CompactTextString(m) }
func (*ProjectTokenDeleteRequest) ProtoMessage() {}
func (*ProjectTokenDeleteRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_project_8d94583ca767d5b3, []int{1}
return fileDescriptor_project_082822b5d17b8c4e, []int{1}
}
func (m *ProjectTokenDeleteRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -162,7 +162,7 @@ func (m *ProjectTokenCreateRequest) Reset() { *m = ProjectTokenCreateReq
func (m *ProjectTokenCreateRequest) String() string { return proto.CompactTextString(m) }
func (*ProjectTokenCreateRequest) ProtoMessage() {}
func (*ProjectTokenCreateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_project_8d94583ca767d5b3, []int{2}
return fileDescriptor_project_082822b5d17b8c4e, []int{2}
}
func (m *ProjectTokenCreateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -231,7 +231,7 @@ func (m *ProjectTokenResponse) Reset() { *m = ProjectTokenResponse{} }
func (m *ProjectTokenResponse) String() string { return proto.CompactTextString(m) }
func (*ProjectTokenResponse) ProtoMessage() {}
func (*ProjectTokenResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_project_8d94583ca767d5b3, []int{3}
return fileDescriptor_project_082822b5d17b8c4e, []int{3}
}
func (m *ProjectTokenResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -279,7 +279,7 @@ func (m *ProjectQuery) Reset() { *m = ProjectQuery{} }
func (m *ProjectQuery) String() string { return proto.CompactTextString(m) }
func (*ProjectQuery) ProtoMessage() {}
func (*ProjectQuery) Descriptor() ([]byte, []int) {
return fileDescriptor_project_8d94583ca767d5b3, []int{4}
return fileDescriptor_project_082822b5d17b8c4e, []int{4}
}
func (m *ProjectQuery) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -326,7 +326,7 @@ func (m *ProjectUpdateRequest) Reset() { *m = ProjectUpdateRequest{} }
func (m *ProjectUpdateRequest) String() string { return proto.CompactTextString(m) }
func (*ProjectUpdateRequest) ProtoMessage() {}
func (*ProjectUpdateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_project_8d94583ca767d5b3, []int{5}
return fileDescriptor_project_082822b5d17b8c4e, []int{5}
}
func (m *ProjectUpdateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -372,7 +372,7 @@ func (m *EmptyResponse) Reset() { *m = EmptyResponse{} }
func (m *EmptyResponse) String() string { return proto.CompactTextString(m) }
func (*EmptyResponse) ProtoMessage() {}
func (*EmptyResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_project_8d94583ca767d5b3, []int{6}
return fileDescriptor_project_082822b5d17b8c4e, []int{6}
}
func (m *EmptyResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1846,10 +1846,10 @@ var (
)
func init() {
proto.RegisterFile("server/project/project.proto", fileDescriptor_project_8d94583ca767d5b3)
proto.RegisterFile("server/project/project.proto", fileDescriptor_project_082822b5d17b8c4e)
}
var fileDescriptor_project_8d94583ca767d5b3 = []byte{
var fileDescriptor_project_082822b5d17b8c4e = []byte{
// 697 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x5d, 0x6b, 0x13, 0x4d,
0x14, 0x66, 0x9a, 0xbe, 0x79, 0xdf, 0x4e, 0x5e, 0xb5, 0x0c, 0xad, 0xa6, 0xb1, 0x8d, 0x61, 0x2e,

View File

@@ -46,7 +46,7 @@ func (m *RepoAppsQuery) Reset() { *m = RepoAppsQuery{} }
func (m *RepoAppsQuery) String() string { return proto.CompactTextString(m) }
func (*RepoAppsQuery) ProtoMessage() {}
func (*RepoAppsQuery) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_6cfdcc280f230e64, []int{0}
return fileDescriptor_repository_31d36efd186d2b01, []int{0}
}
func (m *RepoAppsQuery) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -102,7 +102,7 @@ func (m *AppInfo) Reset() { *m = AppInfo{} }
func (m *AppInfo) String() string { return proto.CompactTextString(m) }
func (*AppInfo) ProtoMessage() {}
func (*AppInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_6cfdcc280f230e64, []int{1}
return fileDescriptor_repository_31d36efd186d2b01, []int{1}
}
func (m *AppInfo) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -159,7 +159,7 @@ func (m *RepoAppDetailsQuery) Reset() { *m = RepoAppDetailsQuery{} }
func (m *RepoAppDetailsQuery) String() string { return proto.CompactTextString(m) }
func (*RepoAppDetailsQuery) ProtoMessage() {}
func (*RepoAppDetailsQuery) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_6cfdcc280f230e64, []int{2}
return fileDescriptor_repository_31d36efd186d2b01, []int{2}
}
func (m *RepoAppDetailsQuery) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -224,7 +224,7 @@ func (m *RepoAppDetailsResponse) Reset() { *m = RepoAppDetailsResponse{}
func (m *RepoAppDetailsResponse) String() string { return proto.CompactTextString(m) }
func (*RepoAppDetailsResponse) ProtoMessage() {}
func (*RepoAppDetailsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_6cfdcc280f230e64, []int{3}
return fileDescriptor_repository_31d36efd186d2b01, []int{3}
}
func (m *RepoAppDetailsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -293,7 +293,7 @@ func (m *RepoAppsResponse) Reset() { *m = RepoAppsResponse{} }
func (m *RepoAppsResponse) String() string { return proto.CompactTextString(m) }
func (*RepoAppsResponse) ProtoMessage() {}
func (*RepoAppsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_6cfdcc280f230e64, []int{4}
return fileDescriptor_repository_31d36efd186d2b01, []int{4}
}
func (m *RepoAppsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -344,7 +344,7 @@ func (m *KsonnetAppSpec) Reset() { *m = KsonnetAppSpec{} }
func (m *KsonnetAppSpec) String() string { return proto.CompactTextString(m) }
func (*KsonnetAppSpec) ProtoMessage() {}
func (*KsonnetAppSpec) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_6cfdcc280f230e64, []int{5}
return fileDescriptor_repository_31d36efd186d2b01, []int{5}
}
func (m *KsonnetAppSpec) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -408,7 +408,7 @@ func (m *HelmAppSpec) Reset() { *m = HelmAppSpec{} }
func (m *HelmAppSpec) String() string { return proto.CompactTextString(m) }
func (*HelmAppSpec) ProtoMessage() {}
func (*HelmAppSpec) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_6cfdcc280f230e64, []int{6}
return fileDescriptor_repository_31d36efd186d2b01, []int{6}
}
func (m *HelmAppSpec) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -470,7 +470,7 @@ func (m *KustomizeAppSpec) Reset() { *m = KustomizeAppSpec{} }
func (m *KustomizeAppSpec) String() string { return proto.CompactTextString(m) }
func (*KustomizeAppSpec) ProtoMessage() {}
func (*KustomizeAppSpec) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_6cfdcc280f230e64, []int{7}
return fileDescriptor_repository_31d36efd186d2b01, []int{7}
}
func (m *KustomizeAppSpec) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -524,7 +524,7 @@ func (m *KsonnetEnvironment) Reset() { *m = KsonnetEnvironment{} }
func (m *KsonnetEnvironment) String() string { return proto.CompactTextString(m) }
func (*KsonnetEnvironment) ProtoMessage() {}
func (*KsonnetEnvironment) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_6cfdcc280f230e64, []int{8}
return fileDescriptor_repository_31d36efd186d2b01, []int{8}
}
func (m *KsonnetEnvironment) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -595,7 +595,7 @@ func (m *KsonnetEnvironmentDestination) Reset() { *m = KsonnetEnvironmen
func (m *KsonnetEnvironmentDestination) String() string { return proto.CompactTextString(m) }
func (*KsonnetEnvironmentDestination) ProtoMessage() {}
func (*KsonnetEnvironmentDestination) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_6cfdcc280f230e64, []int{9}
return fileDescriptor_repository_31d36efd186d2b01, []int{9}
}
func (m *KsonnetEnvironmentDestination) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -650,7 +650,7 @@ func (m *RepoQuery) Reset() { *m = RepoQuery{} }
func (m *RepoQuery) String() string { return proto.CompactTextString(m) }
func (*RepoQuery) ProtoMessage() {}
func (*RepoQuery) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_6cfdcc280f230e64, []int{10}
return fileDescriptor_repository_31d36efd186d2b01, []int{10}
}
func (m *RepoQuery) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -696,7 +696,7 @@ func (m *RepoResponse) Reset() { *m = RepoResponse{} }
func (m *RepoResponse) String() string { return proto.CompactTextString(m) }
func (*RepoResponse) ProtoMessage() {}
func (*RepoResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_6cfdcc280f230e64, []int{11}
return fileDescriptor_repository_31d36efd186d2b01, []int{11}
}
func (m *RepoResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -737,7 +737,7 @@ func (m *RepoCreateRequest) Reset() { *m = RepoCreateRequest{} }
func (m *RepoCreateRequest) String() string { return proto.CompactTextString(m) }
func (*RepoCreateRequest) ProtoMessage() {}
func (*RepoCreateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_6cfdcc280f230e64, []int{12}
return fileDescriptor_repository_31d36efd186d2b01, []int{12}
}
func (m *RepoCreateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -791,7 +791,7 @@ func (m *RepoUpdateRequest) Reset() { *m = RepoUpdateRequest{} }
func (m *RepoUpdateRequest) String() string { return proto.CompactTextString(m) }
func (*RepoUpdateRequest) ProtoMessage() {}
func (*RepoUpdateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_repository_6cfdcc280f230e64, []int{13}
return fileDescriptor_repository_31d36efd186d2b01, []int{13}
}
func (m *RepoUpdateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3710,10 +3710,10 @@ var (
)
func init() {
proto.RegisterFile("server/repository/repository.proto", fileDescriptor_repository_6cfdcc280f230e64)
proto.RegisterFile("server/repository/repository.proto", fileDescriptor_repository_31d36efd186d2b01)
}
var fileDescriptor_repository_6cfdcc280f230e64 = []byte{
var fileDescriptor_repository_31d36efd186d2b01 = []byte{
// 911 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0x4f, 0x6f, 0x5b, 0x45,
0x10, 0xd7, 0xc6, 0xa9, 0x13, 0x8f, 0xdb, 0x2a, 0xdd, 0x96, 0x60, 0x1e, 0x8e, 0x1b, 0x2d, 0x12,

View File

@@ -243,6 +243,7 @@ func (a *ArgoCDServer) Run(ctx context.Context, port int) {
tlsConfig := tls.Config{
Certificates: []tls.Certificate{*a.settings.Certificate},
}
a.TLSConfigCustomizer(&tlsConfig)
tlsl = tls.NewListener(tlsl, &tlsConfig)
// Now, we build another mux recursively to match HTTPS and gRPC.

View File

@@ -47,7 +47,7 @@ func (m *SessionCreateRequest) Reset() { *m = SessionCreateRequest{} }
func (m *SessionCreateRequest) String() string { return proto.CompactTextString(m) }
func (*SessionCreateRequest) ProtoMessage() {}
func (*SessionCreateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_session_217b926c109d1cc2, []int{0}
return fileDescriptor_session_8e535ce77fc5e082, []int{0}
}
func (m *SessionCreateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -108,7 +108,7 @@ func (m *SessionDeleteRequest) Reset() { *m = SessionDeleteRequest{} }
func (m *SessionDeleteRequest) String() string { return proto.CompactTextString(m) }
func (*SessionDeleteRequest) ProtoMessage() {}
func (*SessionDeleteRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_session_217b926c109d1cc2, []int{1}
return fileDescriptor_session_8e535ce77fc5e082, []int{1}
}
func (m *SessionDeleteRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -149,7 +149,7 @@ func (m *SessionResponse) Reset() { *m = SessionResponse{} }
func (m *SessionResponse) String() string { return proto.CompactTextString(m) }
func (*SessionResponse) ProtoMessage() {}
func (*SessionResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_session_217b926c109d1cc2, []int{2}
return fileDescriptor_session_8e535ce77fc5e082, []int{2}
}
func (m *SessionResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -827,10 +827,10 @@ var (
)
func init() {
proto.RegisterFile("server/session/session.proto", fileDescriptor_session_217b926c109d1cc2)
proto.RegisterFile("server/session/session.proto", fileDescriptor_session_8e535ce77fc5e082)
}
var fileDescriptor_session_217b926c109d1cc2 = []byte{
var fileDescriptor_session_8e535ce77fc5e082 = []byte{
// 356 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xb1, 0x4e, 0xeb, 0x30,
0x14, 0x86, 0xe5, 0x5e, 0xdd, 0xde, 0x7b, 0x3d, 0xdc, 0x8a, 0x28, 0x82, 0x28, 0x2a, 0x15, 0xca,

View File

@@ -42,7 +42,7 @@ func (m *SettingsQuery) Reset() { *m = SettingsQuery{} }
func (m *SettingsQuery) String() string { return proto.CompactTextString(m) }
func (*SettingsQuery) ProtoMessage() {}
func (*SettingsQuery) Descriptor() ([]byte, []int) {
return fileDescriptor_settings_0a30d430c5f54e91, []int{0}
return fileDescriptor_settings_71506a99e4ff7448, []int{0}
}
func (m *SettingsQuery) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -83,7 +83,7 @@ func (m *Settings) Reset() { *m = Settings{} }
func (m *Settings) String() string { return proto.CompactTextString(m) }
func (*Settings) ProtoMessage() {}
func (*Settings) Descriptor() ([]byte, []int) {
return fileDescriptor_settings_0a30d430c5f54e91, []int{1}
return fileDescriptor_settings_71506a99e4ff7448, []int{1}
}
func (m *Settings) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -137,7 +137,7 @@ func (m *DexConfig) Reset() { *m = DexConfig{} }
func (m *DexConfig) String() string { return proto.CompactTextString(m) }
func (*DexConfig) ProtoMessage() {}
func (*DexConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_settings_0a30d430c5f54e91, []int{2}
return fileDescriptor_settings_71506a99e4ff7448, []int{2}
}
func (m *DexConfig) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -185,7 +185,7 @@ func (m *Connector) Reset() { *m = Connector{} }
func (m *Connector) String() string { return proto.CompactTextString(m) }
func (*Connector) ProtoMessage() {}
func (*Connector) Descriptor() ([]byte, []int) {
return fileDescriptor_settings_0a30d430c5f54e91, []int{3}
return fileDescriptor_settings_71506a99e4ff7448, []int{3}
}
func (m *Connector) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -974,10 +974,10 @@ var (
)
func init() {
proto.RegisterFile("server/settings/settings.proto", fileDescriptor_settings_0a30d430c5f54e91)
proto.RegisterFile("server/settings/settings.proto", fileDescriptor_settings_71506a99e4ff7448)
}
var fileDescriptor_settings_0a30d430c5f54e91 = []byte{
var fileDescriptor_settings_71506a99e4ff7448 = []byte{
// 322 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x91, 0x41, 0x4b, 0xc3, 0x40,
0x10, 0x85, 0xd9, 0x46, 0xac, 0x19, 0x91, 0xea, 0x22, 0x12, 0x8b, 0xc4, 0x92, 0x53, 0x41, 0x4c,

View File

@@ -1198,87 +1198,6 @@
"accountUpdatePasswordResponse": {
"type": "object"
},
"apismetav1ObjectMeta": {
"description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects\nusers must create.",
"type": "object",
"properties": {
"annotations": {
"type": "object",
"title": "Annotations is an unstructured key value map stored with a resource that may be\nset by external tools to store and retrieve arbitrary metadata. They are not\nqueryable and should be preserved when modifying objects.\nMore info: http://kubernetes.io/docs/user-guide/annotations\n+optional",
"additionalProperties": {
"type": "string"
}
},
"clusterName": {
"type": "string",
"title": "The name of the cluster which the object belongs to.\nThis is used to distinguish resources with same name and namespace in different clusters.\nThis field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n+optional"
},
"creationTimestamp": {
"$ref": "#/definitions/v1Time"
},
"deletionGracePeriodSeconds": {
"type": "string",
"format": "int64",
"title": "Number of seconds allowed for this object to gracefully terminate before\nit will be removed from the system. Only set when deletionTimestamp is also set.\nMay only be shortened.\nRead-only.\n+optional"
},
"deletionTimestamp": {
"$ref": "#/definitions/v1Time"
},
"finalizers": {
"type": "array",
"title": "Must be empty before the object is deleted from the registry. Each entry\nis an identifier for the responsible component that will remove the entry\nfrom the list. If the deletionTimestamp of the object is non-nil, entries\nin this list can only be removed.\n+optional\n+patchStrategy=merge",
"items": {
"type": "string"
}
},
"generateName": {
"description": "GenerateName is an optional prefix, used by the server, to generate a unique\nname ONLY IF the Name field has not been provided.\nIf this field is used, the name returned to the client will be different\nthan the name passed. This value will also be combined with a unique suffix.\nThe provided value has the same validation rules as the Name field,\nand may be truncated by the length of the suffix required to make the value\nunique on the server.\n\nIf this field is specified and the generated name exists, the server will\nNOT return a 409 - instead, it will either return 201 Created or 500 with Reason\nServerTimeout indicating a unique name could not be found in the time allotted, and the client\nshould retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.\nMore info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n+optional",
"type": "string"
},
"generation": {
"type": "string",
"format": "int64",
"title": "A sequence number representing a specific generation of the desired state.\nPopulated by the system. Read-only.\n+optional"
},
"initializers": {
"$ref": "#/definitions/v1Initializers"
},
"labels": {
"type": "object",
"title": "Map of string keys and values that can be used to organize and categorize\n(scope and select) objects. May match selectors of replication controllers\nand services.\nMore info: http://kubernetes.io/docs/user-guide/labels\n+optional",
"additionalProperties": {
"type": "string"
}
},
"name": {
"type": "string",
"title": "Name must be unique within a namespace. Is required when creating resources, although\nsome resources may allow a client to request the generation of an appropriate name\nautomatically. Name is primarily intended for creation idempotence and configuration\ndefinition.\nCannot be updated.\nMore info: http://kubernetes.io/docs/user-guide/identifiers#names\n+optional"
},
"namespace": {
"description": "Namespace defines the space within each name must be unique. An empty namespace is\nequivalent to the \"default\" namespace, but \"default\" is the canonical representation.\nNot all objects are required to be scoped to a namespace - the value of this field for\nthose objects will be empty.\n\nMust be a DNS_LABEL.\nCannot be updated.\nMore info: http://kubernetes.io/docs/user-guide/namespaces\n+optional",
"type": "string"
},
"ownerReferences": {
"type": "array",
"title": "List of objects depended by this object. If ALL objects in the list have\nbeen deleted, this object will be garbage collected. If this object is managed by a controller,\nthen an entry in this list will point to this controller, with the controller field set to true.\nThere cannot be more than one managing controller.\n+optional\n+patchMergeKey=uid\n+patchStrategy=merge",
"items": {
"$ref": "#/definitions/v1OwnerReference"
}
},
"resourceVersion": {
"description": "An opaque value that represents the internal version of this object that can\nbe used by clients to determine when objects have changed. May be used for optimistic\nconcurrency, change detection, and the watch operation on a resource or set of resources.\nClients must treat these values as opaque and passed unmodified back to the server.\nThey may only be valid for a particular resource or set of resources.\n\nPopulated by the system.\nRead-only.\nValue must be treated as opaque by clients and .\nMore info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n+optional",
"type": "string"
},
"selfLink": {
"type": "string",
"title": "SelfLink is a URL representing this object.\nPopulated by the system.\nRead-only.\n+optional"
},
"uid": {
"description": "UID is the unique in time and space value for this object. It is typically generated by\nthe server on successful creation of a resource and is not allowed to change on PUT\noperations.\n\nPopulated by the system.\nRead-only.\nMore info: http://kubernetes.io/docs/user-guide/identifiers#uids\n+optional",
"type": "string"
}
}
},
"applicationApplicationResponse": {
"type": "object"
},
@@ -1693,7 +1612,7 @@
"title": "A human-readable description of the status of this operation.\nTODO: decide on maximum length.\n+optional"
},
"metadata": {
"$ref": "#/definitions/apismetav1ObjectMeta"
"$ref": "#/definitions/v1ObjectMeta"
},
"reason": {
"type": "string",
@@ -1814,7 +1733,7 @@
"type": "object",
"properties": {
"continue": {
"description": "continue may be set if the user set a limit on the number of items returned, and indicates that\nthe server has more data available. The value is opaque and may be used to issue another request\nto the endpoint that served this list to retrieve the next set of available objects. Continuing a\nlist may not be possible if the server configuration has changed or more than a few minutes have\npassed. The resourceVersion field returned when using this continue value will be identical to\nthe value in the first response.",
"description": "continue may be set if the user set a limit on the number of items returned, and indicates that\nthe server has more data available. The value is opaque and may be used to issue another request\nto the endpoint that served this list to retrieve the next set of available objects. Continuing a\nconsistent list may not be possible if the server configuration has changed or more than a few\nminutes have passed. The resourceVersion field returned when using this continue value will be\nidentical to the value in the first response, unless you have received this token from an error\nmessage.",
"type": "string"
},
"resourceVersion": {
@@ -1843,6 +1762,87 @@
}
}
},
"v1ObjectMeta": {
"description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects\nusers must create.",
"type": "object",
"properties": {
"annotations": {
"type": "object",
"title": "Annotations is an unstructured key value map stored with a resource that may be\nset by external tools to store and retrieve arbitrary metadata. They are not\nqueryable and should be preserved when modifying objects.\nMore info: http://kubernetes.io/docs/user-guide/annotations\n+optional",
"additionalProperties": {
"type": "string"
}
},
"clusterName": {
"type": "string",
"title": "The name of the cluster which the object belongs to.\nThis is used to distinguish resources with same name and namespace in different clusters.\nThis field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n+optional"
},
"creationTimestamp": {
"$ref": "#/definitions/v1Time"
},
"deletionGracePeriodSeconds": {
"type": "string",
"format": "int64",
"title": "Number of seconds allowed for this object to gracefully terminate before\nit will be removed from the system. Only set when deletionTimestamp is also set.\nMay only be shortened.\nRead-only.\n+optional"
},
"deletionTimestamp": {
"$ref": "#/definitions/v1Time"
},
"finalizers": {
"type": "array",
"title": "Must be empty before the object is deleted from the registry. Each entry\nis an identifier for the responsible component that will remove the entry\nfrom the list. If the deletionTimestamp of the object is non-nil, entries\nin this list can only be removed.\n+optional\n+patchStrategy=merge",
"items": {
"type": "string"
}
},
"generateName": {
"description": "GenerateName is an optional prefix, used by the server, to generate a unique\nname ONLY IF the Name field has not been provided.\nIf this field is used, the name returned to the client will be different\nthan the name passed. This value will also be combined with a unique suffix.\nThe provided value has the same validation rules as the Name field,\nand may be truncated by the length of the suffix required to make the value\nunique on the server.\n\nIf this field is specified and the generated name exists, the server will\nNOT return a 409 - instead, it will either return 201 Created or 500 with Reason\nServerTimeout indicating a unique name could not be found in the time allotted, and the client\nshould retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.\nMore info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n+optional",
"type": "string"
},
"generation": {
"type": "string",
"format": "int64",
"title": "A sequence number representing a specific generation of the desired state.\nPopulated by the system. Read-only.\n+optional"
},
"initializers": {
"$ref": "#/definitions/v1Initializers"
},
"labels": {
"type": "object",
"title": "Map of string keys and values that can be used to organize and categorize\n(scope and select) objects. May match selectors of replication controllers\nand services.\nMore info: http://kubernetes.io/docs/user-guide/labels\n+optional",
"additionalProperties": {
"type": "string"
}
},
"name": {
"type": "string",
"title": "Name must be unique within a namespace. Is required when creating resources, although\nsome resources may allow a client to request the generation of an appropriate name\nautomatically. Name is primarily intended for creation idempotence and configuration\ndefinition.\nCannot be updated.\nMore info: http://kubernetes.io/docs/user-guide/identifiers#names\n+optional"
},
"namespace": {
"description": "Namespace defines the space within each name must be unique. An empty namespace is\nequivalent to the \"default\" namespace, but \"default\" is the canonical representation.\nNot all objects are required to be scoped to a namespace - the value of this field for\nthose objects will be empty.\n\nMust be a DNS_LABEL.\nCannot be updated.\nMore info: http://kubernetes.io/docs/user-guide/namespaces\n+optional",
"type": "string"
},
"ownerReferences": {
"type": "array",
"title": "List of objects depended by this object. If ALL objects in the list have\nbeen deleted, this object will be garbage collected. If this object is managed by a controller,\nthen an entry in this list will point to this controller, with the controller field set to true.\nThere cannot be more than one managing controller.\n+optional\n+patchMergeKey=uid\n+patchStrategy=merge",
"items": {
"$ref": "#/definitions/v1OwnerReference"
}
},
"resourceVersion": {
"description": "An opaque value that represents the internal version of this object that can\nbe used by clients to determine when objects have changed. May be used for optimistic\nconcurrency, change detection, and the watch operation on a resource or set of resources.\nClients must treat these values as opaque and passed unmodified back to the server.\nThey may only be valid for a particular resource or set of resources.\n\nPopulated by the system.\nRead-only.\nValue must be treated as opaque by clients and .\nMore info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n+optional",
"type": "string"
},
"selfLink": {
"type": "string",
"title": "SelfLink is a URL representing this object.\nPopulated by the system.\nRead-only.\n+optional"
},
"uid": {
"description": "UID is the unique in time and space value for this object. It is typically generated by\nthe server on successful creation of a resource and is not allowed to change on PUT\noperations.\n\nPopulated by the system.\nRead-only.\nMore info: http://kubernetes.io/docs/user-guide/identifiers#uids\n+optional",
"type": "string"
}
}
},
"v1ObjectReference": {
"type": "object",
"title": "ObjectReference contains enough information to let you inspect or modify the referred object.\n+k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object",
@@ -2025,7 +2025,7 @@
"title": "AppProject is a definition of AppProject resource.\n+genclient\n+genclient:noStatus\n+k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object",
"properties": {
"metadata": {
"$ref": "#/definitions/apismetav1ObjectMeta"
"$ref": "#/definitions/v1ObjectMeta"
},
"spec": {
"$ref": "#/definitions/v1alpha1AppProjectSpec"
@@ -2096,7 +2096,7 @@
"title": "Application is a definition of Application resource.\n+genclient\n+genclient:noStatus\n+k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object",
"properties": {
"metadata": {
"$ref": "#/definitions/apismetav1ObjectMeta"
"$ref": "#/definitions/v1ObjectMeta"
},
"operation": {
"$ref": "#/definitions/v1alpha1Operation"

View File

@@ -51,7 +51,7 @@ func (m *VersionMessage) Reset() { *m = VersionMessage{} }
func (m *VersionMessage) String() string { return proto.CompactTextString(m) }
func (*VersionMessage) ProtoMessage() {}
func (*VersionMessage) Descriptor() ([]byte, []int) {
return fileDescriptor_version_6f54499c257f90e5, []int{0}
return fileDescriptor_version_cdcdf9fc14514c9b, []int{0}
}
func (m *VersionMessage) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -781,10 +781,10 @@ var (
)
func init() {
proto.RegisterFile("server/version/version.proto", fileDescriptor_version_6f54499c257f90e5)
proto.RegisterFile("server/version/version.proto", fileDescriptor_version_cdcdf9fc14514c9b)
}
var fileDescriptor_version_6f54499c257f90e5 = []byte{
var fileDescriptor_version_cdcdf9fc14514c9b = []byte{
// 343 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x92, 0xcf, 0x4a, 0xc3, 0x40,
0x10, 0xc6, 0x49, 0xd5, 0xfe, 0x59, 0x4a, 0x0f, 0x8b, 0xd4, 0x25, 0x96, 0x22, 0x3d, 0x88, 0x08,

View File

@@ -122,6 +122,7 @@ func RefreshApp(appIf v1alpha1.ApplicationInterface, name string) (*argoappv1.Ap
}
// WaitForRefresh watches an application until its comparison timestamp is after the refresh timestamp
// If refresh timestamp is not present, will use current timestamp at time of call
func WaitForRefresh(appIf v1alpha1.ApplicationInterface, name string, timeout *time.Duration) (*argoappv1.Application, error) {
ctx := context.Background()
var cancel context.CancelFunc
@@ -136,6 +137,7 @@ func WaitForRefresh(appIf v1alpha1.ApplicationInterface, name string, timeout *t
return nil, err
}
defer watchIf.Stop()
now := time.Now().UTC()
for {
select {
@@ -161,6 +163,9 @@ func WaitForRefresh(appIf v1alpha1.ApplicationInterface, name string, timeout *t
return nil, fmt.Errorf("Application event object failed conversion: %v", next)
}
refreshTimestampStr := app.ObjectMeta.Annotations[common.AnnotationKeyRefresh]
if refreshTimestampStr == "" {
refreshTimestampStr = now.String()
}
refreshTimestamp, err := time.Parse(time.RFC3339, refreshTimestampStr)
if err != nil {
return nil, fmt.Errorf("Unable to parse '%s': %v", common.AnnotationKeyRefresh, err)

View File

@@ -20,7 +20,6 @@ import (
"github.com/coreos/dex/api"
oidc "github.com/coreos/go-oidc"
jwt "github.com/dgrijalva/jwt-go"
log "github.com/sirupsen/logrus"
"golang.org/x/oauth2"
"google.golang.org/grpc"
@@ -325,15 +324,9 @@ func (a *ClientApp) HandleCallback(w http.ResponseWriter, r *http.Request) {
return
}
idToken, err := a.verify(rawIDToken)
claims, err := a.sessionMgr.VerifyToken(rawIDToken)
if err != nil {
http.Error(w, fmt.Sprintf("Failed to verify ID token: %v", err), http.StatusInternalServerError)
return
}
var claims jwt.MapClaims
err = idToken.Claims(&claims)
if err != nil {
http.Error(w, fmt.Sprintf("Failed to unmarshal claims: %v", err), http.StatusInternalServerError)
http.Error(w, fmt.Sprintf("invalid session token: %v", err), http.StatusInternalServerError)
return
}
flags := []string{"path=/"}

View File

@@ -149,7 +149,7 @@ func (m *nativeGitClient) Checkout(revision string) error {
if _, err := m.runCmd("git", "checkout", "--force", revision); err != nil {
return err
}
if _, err := m.runCmd("git", "clean", "-fd"); err != nil {
if _, err := m.runCmd("git", "clean", "-fdx"); err != nil {
return err
}
return nil

View File

@@ -9,40 +9,47 @@ import (
extv1beta1 "k8s.io/api/extensions/v1beta1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/kubernetes/pkg/apis/apps"
appv1 "github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1"
"github.com/argoproj/argo-cd/util/kube"
"k8s.io/kubernetes/pkg/apis/apps"
)
// GetAppHealth returns the health of a k8s resource
func GetAppHealth(kubectl kube.Kubectl, obj *unstructured.Unstructured) (*appv1.HealthStatus, error) {
var err error
var health *appv1.HealthStatus
switch obj.GetKind() {
case kube.DeploymentKind:
health, err = getDeploymentHealth(kubectl, obj)
case kube.ServiceKind:
health, err = getServiceHealth(kubectl, obj)
case kube.IngressKind:
health, err = getIngressHealth(kubectl, obj)
case kube.StatefulSetKind:
health, err = getStatefulSetHealth(kubectl, obj)
case kube.ReplicaSetKind:
health, err = getReplicaSetHealth(kubectl, obj)
case kube.DaemonSetKind:
health, err = getDaemonSetHealth(kubectl, obj)
case kube.PersistentVolumeClaimKind:
health, err = getPvcHealth(kubectl, obj)
default:
health = &appv1.HealthStatus{Status: appv1.HealthStatusHealthy}
gvk := obj.GroupVersionKind()
switch gvk.Group {
case "apps", "extensions":
switch gvk.Kind {
case kube.DeploymentKind:
health, err = getDeploymentHealth(kubectl, obj)
case kube.IngressKind:
health, err = getIngressHealth(kubectl, obj)
case kube.StatefulSetKind:
health, err = getStatefulSetHealth(kubectl, obj)
case kube.ReplicaSetKind:
health, err = getReplicaSetHealth(kubectl, obj)
case kube.DaemonSetKind:
health, err = getDaemonSetHealth(kubectl, obj)
}
case "":
switch gvk.Kind {
case kube.ServiceKind:
health, err = getServiceHealth(kubectl, obj)
case kube.PersistentVolumeClaimKind:
health, err = getPVCHealth(kubectl, obj)
}
}
if err != nil {
health.Status = appv1.HealthStatusUnknown
health.StatusDetails = err.Error()
health = &appv1.HealthStatus{
Status: appv1.HealthStatusUnknown,
StatusDetails: err.Error(),
}
} else if health == nil {
health = &appv1.HealthStatus{Status: appv1.HealthStatusHealthy}
}
return health, err
}
@@ -71,7 +78,7 @@ func IsWorse(current, new appv1.HealthStatusCode) bool {
return newIndex > currentIndex
}
func getPvcHealth(kubectl kube.Kubectl, obj *unstructured.Unstructured) (*appv1.HealthStatus, error) {
func getPVCHealth(kubectl kube.Kubectl, obj *unstructured.Unstructured) (*appv1.HealthStatus, error) {
obj, err := kubectl.ConvertToVersion(obj, "", "v1")
if err != nil {
return nil, err

View File

@@ -12,74 +12,45 @@ import (
"github.com/argoproj/argo-cd/util/kube"
)
func assertAppHealth(t *testing.T, yamlPath string, expectedStatus appv1.HealthStatusCode) {
yamlBytes, err := ioutil.ReadFile(yamlPath)
assert.Nil(t, err)
var obj unstructured.Unstructured
err = yaml.Unmarshal(yamlBytes, &obj)
assert.Nil(t, err)
health, err := GetAppHealth(kube.KubectlCmd{}, &obj)
assert.Nil(t, err)
assert.NotNil(t, health)
assert.Equal(t, expectedStatus, health.Status)
}
func TestDeploymentHealth(t *testing.T) {
yamlBytes, err := ioutil.ReadFile("../kube/testdata/nginx.yaml")
assert.Nil(t, err)
var obj unstructured.Unstructured
err = yaml.Unmarshal(yamlBytes, &obj)
assert.Nil(t, err)
health, err := GetAppHealth(kube.KubectlCmd{}, &obj)
assert.Nil(t, err)
assert.NotNil(t, health)
assert.Equal(t, appv1.HealthStatusHealthy, health.Status)
}
func TestDeploymentProgressing(t *testing.T) {
yamlBytes, err := ioutil.ReadFile("./testdata/progressing.yaml")
assert.Nil(t, err)
var obj unstructured.Unstructured
err = yaml.Unmarshal(yamlBytes, &obj)
assert.Nil(t, err)
health, err := GetAppHealth(kube.KubectlCmd{}, &obj)
assert.Nil(t, err)
assert.NotNil(t, health)
assert.Equal(t, appv1.HealthStatusProgressing, health.Status)
}
func TestDeploymentDegraded(t *testing.T) {
yamlBytes, err := ioutil.ReadFile("./testdata/degraded.yaml")
assert.Nil(t, err)
var obj unstructured.Unstructured
err = yaml.Unmarshal(yamlBytes, &obj)
assert.Nil(t, err)
health, err := GetAppHealth(kube.KubectlCmd{}, &obj)
assert.Nil(t, err)
assert.NotNil(t, health)
assert.Equal(t, appv1.HealthStatusDegraded, health.Status)
assertAppHealth(t, "../kube/testdata/nginx.yaml", appv1.HealthStatusHealthy)
assertAppHealth(t, "./testdata/deployment-progressing.yaml", appv1.HealthStatusProgressing)
assertAppHealth(t, "./testdata/deployment-degraded.yaml", appv1.HealthStatusDegraded)
}
func TestStatefulSetHealth(t *testing.T) {
yamlBytes, err := ioutil.ReadFile("./testdata/statefulset.yaml")
assert.Nil(t, err)
var obj unstructured.Unstructured
err = yaml.Unmarshal(yamlBytes, &obj)
assert.Nil(t, err)
health, err := GetAppHealth(kube.KubectlCmd{}, &obj)
assert.Nil(t, err)
assert.NotNil(t, health)
assert.Equal(t, appv1.HealthStatusHealthy, health.Status)
assertAppHealth(t, "./testdata/statefulset.yaml", appv1.HealthStatusHealthy)
}
func TestPvcHealthy(t *testing.T) {
yamlBytes, err := ioutil.ReadFile("./testdata/pvc-bound.yaml")
assert.Nil(t, err)
var obj unstructured.Unstructured
err = yaml.Unmarshal(yamlBytes, &obj)
assert.Nil(t, err)
health, err := GetAppHealth(kube.KubectlCmd{}, &obj)
assert.Nil(t, err)
assert.NotNil(t, health)
assert.Equal(t, appv1.HealthStatusHealthy, health.Status)
func TestPVCHealth(t *testing.T) {
assertAppHealth(t, "./testdata/pvc-bound.yaml", appv1.HealthStatusHealthy)
assertAppHealth(t, "./testdata/pvc-pending.yaml", appv1.HealthStatusProgressing)
}
func TestPvcPending(t *testing.T) {
yamlBytes, err := ioutil.ReadFile("./testdata/pvc-pending.yaml")
assert.Nil(t, err)
var obj unstructured.Unstructured
err = yaml.Unmarshal(yamlBytes, &obj)
assert.Nil(t, err)
health, err := GetAppHealth(kube.KubectlCmd{}, &obj)
assert.Nil(t, err)
assert.NotNil(t, health)
assert.Equal(t, appv1.HealthStatusProgressing, health.Status)
func TestServiceHealth(t *testing.T) {
assertAppHealth(t, "./testdata/svc-clusterip.yaml", appv1.HealthStatusHealthy)
assertAppHealth(t, "./testdata/svc-loadbalancer.yaml", appv1.HealthStatusHealthy)
assertAppHealth(t, "./testdata/svc-loadbalancer-unassigned.yaml", appv1.HealthStatusProgressing)
}
func TestIngressHealth(t *testing.T) {
assertAppHealth(t, "./testdata/ingress.yaml", appv1.HealthStatusHealthy)
assertAppHealth(t, "./testdata/ingress-unassigned.yaml", appv1.HealthStatusProgressing)
}
func TestCRD(t *testing.T) {
// This ensures we do not try to compare only based on "Kind"
assertAppHealth(t, "./testdata/knative-service.yaml", appv1.HealthStatusHealthy)
}

View File

@@ -0,0 +1,24 @@
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
creationTimestamp: 2018-09-20T06:47:27Z
generation: 9
name: argocd-server-ingress
namespace: argocd
resourceVersion: "23207680"
selfLink: /apis/extensions/v1beta1/namespaces/argocd/ingresses/argocd-server-ingress
uid: 09927cae-bca1-11e8-bbd2-42010a8a00bb
spec:
rules:
- host: example.argoproj.io
http:
paths:
- backend:
serviceName: argocd-server
servicePort: https
status:
loadBalancer: {}

26
util/health/testdata/ingress.yaml vendored Normal file
View File

@@ -0,0 +1,26 @@
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
creationTimestamp: 2018-09-20T06:47:27Z
generation: 9
name: argocd-server-ingress
namespace: argocd
resourceVersion: "23207680"
selfLink: /apis/extensions/v1beta1/namespaces/argocd/ingresses/argocd-server-ingress
uid: 09927cae-bca1-11e8-bbd2-42010a8a00bb
spec:
rules:
- host: example.argoproj.io
http:
paths:
- backend:
serviceName: argocd-server
servicePort: https
status:
loadBalancer:
ingress:
- ip: 1.2.3.4

View File

@@ -0,0 +1,14 @@
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
name: helloworld
spec:
runLatest:
configuration:
revisionTemplate:
spec:
container:
env:
- name: TARGET
value: world
image: helloworld:latest

25
util/health/testdata/svc-clusterip.yaml vendored Normal file
View File

@@ -0,0 +1,25 @@
apiVersion: v1
kind: Service
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"argocd-metrics","namespace":"argocd"},"spec":{"ports":[{"name":"http","port":8082,"protocol":"TCP","targetPort":8082}],"selector":{"app":"argocd-server"}}}
creationTimestamp: 2018-10-27T06:36:27Z
name: argocd-metrics
namespace: argocd
resourceVersion: "1131"
selfLink: /api/v1/namespaces/argocd/services/argocd-metrics
uid: a1f65069-d9b2-11e8-b3c1-9ae2f452bd03
spec:
clusterIP: 10.96.199.2
ports:
- name: http
port: 8082
protocol: TCP
targetPort: 8082
selector:
app: argocd-server
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}

View File

@@ -0,0 +1,25 @@
apiVersion: v1
kind: Service
metadata:
creationTimestamp: 2018-11-06T01:07:35Z
name: argo-artifacts
namespace: argo
resourceVersion: "346792"
selfLink: /api/v1/namespaces/argo/services/argo-artifacts
uid: 586f5e57-e160-11e8-b3c1-9ae2f452bd03
spec:
clusterIP: 10.105.70.181
externalTrafficPolicy: Cluster
ports:
- name: service
nodePort: 32667
port: 9000
protocol: TCP
targetPort: 9000
selector:
app: minio
release: argo-artifacts
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer: {}

View File

@@ -0,0 +1,35 @@
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "600"
creationTimestamp: 2018-06-05T23:34:58Z
labels:
applications.argoproj.io/app-name: argocd-cdp
name: argocd-server
namespace: argocd
resourceVersion: "32559487"
selfLink: /api/v1/namespaces/argocd/services/argocd-server
uid: 0f5885a9-6919-11e8-ad29-020124679688
spec:
clusterIP: 100.69.46.185
externalTrafficPolicy: Cluster
ports:
- name: http
nodePort: 30354
port: 80
protocol: TCP
targetPort: 8080
- name: https
nodePort: 31866
port: 443
protocol: TCP
targetPort: 8080
selector:
app: argocd-server
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer:
ingress:
- hostname: abc123.us-west-2.elb.amazonaws.com

View File

@@ -32,59 +32,30 @@ type KubectlCmd struct{}
// WatchResources Watches all the existing resources with the provided label name in the provided namespace in the cluster provided by the config
func (k KubectlCmd) WatchResources(
ctx context.Context, config *rest.Config, namespace string, selector func(kind schema.GroupVersionKind) metav1.ListOptions) (chan watch.Event, error) {
ctx context.Context,
config *rest.Config,
namespace string,
selector func(kind schema.GroupVersionKind) metav1.ListOptions,
) (chan watch.Event, error) {
log.Infof("Start watching for resources changes with in cluster %s", config.Host)
dynClientPool := dynamic.NewDynamicClientPool(config)
disco, err := discovery.NewDiscoveryClientForConfig(config)
apiResIfs, err := filterAPIResources(config, watchSupported, namespace)
if err != nil {
return nil, err
}
serverResources, err := GetCachedServerResources(config.Host, disco)
if err != nil {
return nil, err
}
items := make([]struct {
resource dynamic.ResourceInterface
gvk schema.GroupVersionKind
}, 0)
for _, apiResourcesList := range serverResources {
for i := range apiResourcesList.APIResources {
apiResource := apiResourcesList.APIResources[i]
watchSupported := false
for _, verb := range apiResource.Verbs {
if verb == watchVerb {
watchSupported = true
break
}
}
if watchSupported && !isExcludedResourceGroup(apiResource) {
dclient, err := dynClientPool.ClientForGroupVersionKind(schema.FromAPIVersionAndKind(apiResourcesList.GroupVersion, apiResource.Kind))
if err != nil {
return nil, err
}
items = append(items, struct {
resource dynamic.ResourceInterface
gvk schema.GroupVersionKind
}{resource: dclient.Resource(&apiResource, namespace), gvk: schema.FromAPIVersionAndKind(apiResourcesList.GroupVersion, apiResource.Kind)})
}
}
}
ch := make(chan watch.Event)
go func() {
var wg sync.WaitGroup
wg.Add(len(items))
for i := 0; i < len(items); i++ {
item := items[i]
go func() {
wg.Add(len(apiResIfs))
for _, a := range apiResIfs {
go func(apiResIf apiResourceInterface) {
defer wg.Done()
w, err := item.resource.Watch(selector(item.gvk))
gvk := schema.FromAPIVersionAndKind(apiResIf.groupVersion, apiResIf.apiResource.Kind)
w, err := apiResIf.resourceIf.Watch(selector(gvk))
if err == nil {
defer w.Stop()
copyEventsChannel(ctx, w.ResultChan(), ch)
}
}()
}(a)
}
wg.Wait()
close(ch)
@@ -95,13 +66,12 @@ func (k KubectlCmd) WatchResources(
// DeleteResource deletes resource
func (k KubectlCmd) DeleteResource(config *rest.Config, obj *unstructured.Unstructured, namespace string) error {
dynClientPool := dynamic.NewDynamicClientPool(config)
disco, err := discovery.NewDiscoveryClientForConfig(config)
dynamicIf, err := dynamic.NewForConfig(config)
if err != nil {
return err
}
gvk := obj.GroupVersionKind()
dclient, err := dynClientPool.ClientForGroupVersionKind(gvk)
disco, err := discovery.NewDiscoveryClientForConfig(config)
if err != nil {
return err
}
@@ -109,9 +79,10 @@ func (k KubectlCmd) DeleteResource(config *rest.Config, obj *unstructured.Unstru
if err != nil {
return err
}
reIf := dclient.Resource(apiResource, namespace)
resource := gvk.GroupVersion().WithResource(apiResource.Name)
resourceIf := ToResourceInterface(dynamicIf, apiResource, resource, namespace)
propagationPolicy := metav1.DeletePropagationForeground
return reIf.Delete(obj.GetName(), &metav1.DeleteOptions{PropagationPolicy: &propagationPolicy})
return resourceIf.Delete(obj.GetName(), &metav1.DeleteOptions{PropagationPolicy: &propagationPolicy})
}
// ApplyResource performs an apply of a unstructured resource

View File

@@ -204,17 +204,32 @@ func FlushServerResourcesCache() {
apiResourceCache.Flush()
}
func ToGroupVersionResource(groupVersion string, apiResource *metav1.APIResource) schema.GroupVersionResource {
gvk := schema.FromAPIVersionAndKind(groupVersion, apiResource.Kind)
gv := gvk.GroupVersion()
return gv.WithResource(apiResource.Name)
}
func ToResourceInterface(dynamicIf dynamic.Interface, apiResource *metav1.APIResource, resource schema.GroupVersionResource, namespace string) dynamic.ResourceInterface {
if apiResource.Namespaced {
return dynamicIf.Resource(resource).Namespace(namespace)
}
return dynamicIf.Resource(resource)
}
// GetLiveResource returns the corresponding live resource from a unstructured object
func GetLiveResource(dclient dynamic.Interface, obj *unstructured.Unstructured, apiResource *metav1.APIResource, namespace string) (*unstructured.Unstructured, error) {
func GetLiveResource(dynamicIf dynamic.Interface, obj *unstructured.Unstructured, apiResource *metav1.APIResource, namespace string) (*unstructured.Unstructured, error) {
resourceName := obj.GetName()
if resourceName == "" {
return nil, fmt.Errorf("resource was supplied without a name")
}
reIf := dclient.Resource(apiResource, namespace)
gvk := obj.GroupVersionKind()
resource := ToGroupVersionResource(gvk.GroupVersion().String(), apiResource)
reIf := ToResourceInterface(dynamicIf, apiResource, resource, namespace)
liveObj, err := reIf.Get(resourceName, metav1.GetOptions{})
if err != nil {
if apierr.IsNotFound(err) {
log.Infof("No live counterpart to %s/%s/%s/%s in namespace: '%s'", apiResource.Group, apiResource.Version, apiResource.Name, resourceName, namespace)
log.Infof("No live counterpart to %s, %s/%s", gvk.String(), namespace, resourceName)
return nil, nil
}
return nil, errors.WithStack(err)
@@ -235,9 +250,19 @@ func isExcludedResourceGroup(resource metav1.APIResource) bool {
return resource.Group == "servicecatalog.k8s.io"
}
func WatchResourcesWithLabel(ctx context.Context, config *rest.Config, namespace string, labelName string) (chan watch.Event, error) {
log.Infof("Start watching for resources changes with label %s in cluster %s", labelName, config.Host)
dynClientPool := dynamic.NewDynamicClientPool(config)
type apiResourceInterface struct {
groupVersion string
apiResource metav1.APIResource
resourceIf dynamic.ResourceInterface
}
type filterFunc func(groupVersion string, apiResource *metav1.APIResource) bool
func filterAPIResources(config *rest.Config, filter filterFunc, namespace string) ([]apiResourceInterface, error) {
dynamicIf, err := dynamic.NewForConfig(config)
if err != nil {
return nil, err
}
disco, err := discovery.NewDiscoveryClientForConfig(config)
if err != nil {
return nil, err
@@ -246,41 +271,58 @@ func WatchResourcesWithLabel(ctx context.Context, config *rest.Config, namespace
if err != nil {
return nil, err
}
resources := make([]dynamic.ResourceInterface, 0)
apiResIfs := make([]apiResourceInterface, 0)
for _, apiResourcesList := range serverResources {
for i := range apiResourcesList.APIResources {
apiResource := apiResourcesList.APIResources[i]
watchSupported := false
for _, verb := range apiResource.Verbs {
if verb == watchVerb {
watchSupported = true
break
for _, apiResource := range apiResourcesList.APIResources {
if filter(apiResourcesList.GroupVersion, &apiResource) {
resource := ToGroupVersionResource(apiResourcesList.GroupVersion, &apiResource)
resourceIf := ToResourceInterface(dynamicIf, &apiResource, resource, namespace)
apiResIf := apiResourceInterface{
groupVersion: apiResourcesList.GroupVersion,
apiResource: apiResource,
resourceIf: resourceIf,
}
}
if watchSupported && !isExcludedResourceGroup(apiResource) {
dclient, err := dynClientPool.ClientForGroupVersionKind(schema.FromAPIVersionAndKind(apiResourcesList.GroupVersion, apiResource.Kind))
if err != nil {
return nil, err
}
resources = append(resources, dclient.Resource(&apiResource, namespace))
apiResIfs = append(apiResIfs, apiResIf)
}
}
}
return apiResIfs, nil
}
// isSupportedVerb returns whether or not a APIResource supports a specific verb
func isSupportedVerb(apiResource *metav1.APIResource, verb string) bool {
for _, v := range apiResource.Verbs {
if v == verb {
return true
}
}
return false
}
func watchSupported(groupVersion string, apiResource *metav1.APIResource) bool {
return isSupportedVerb(apiResource, watchVerb) && !isExcludedResourceGroup(*apiResource)
}
func WatchResourcesWithLabel(ctx context.Context, config *rest.Config, namespace string, labelName string) (chan watch.Event, error) {
log.Infof("Start watching for resources changes with label %s in cluster %s", labelName, config.Host)
apiResIfs, err := filterAPIResources(config, watchSupported, namespace)
if err != nil {
return nil, err
}
ch := make(chan watch.Event)
go func() {
var wg sync.WaitGroup
wg.Add(len(resources))
for i := 0; i < len(resources); i++ {
resource := resources[i]
go func() {
wg.Add(len(apiResIfs))
for _, apiResIf := range apiResIfs {
go func(resourceIf dynamic.ResourceInterface) {
defer wg.Done()
w, err := resource.Watch(metav1.ListOptions{LabelSelector: labelName})
w, err := resourceIf.Watch(metav1.ListOptions{LabelSelector: labelName})
if err == nil {
defer w.Stop()
copyEventsChannel(ctx, w.ResultChan(), ch)
}
}()
}(apiResIf.resourceIf)
}
wg.Wait()
close(ch)
@@ -310,47 +352,23 @@ func copyEventsChannel(ctx context.Context, src <-chan watch.Event, dst chan wat
// GetResourcesWithLabel returns all kubernetes resources with specified label
func GetResourcesWithLabel(config *rest.Config, namespace string, labelName string, labelValue string) ([]*unstructured.Unstructured, error) {
dynClientPool := dynamic.NewDynamicClientPool(config)
disco, err := discovery.NewDiscoveryClientForConfig(config)
listSupported := func(groupVersion string, apiResource *metav1.APIResource) bool {
return isSupportedVerb(apiResource, listVerb) && !isExcludedResourceGroup(*apiResource)
}
apiResIfs, err := filterAPIResources(config, listSupported, namespace)
if err != nil {
return nil, err
}
resources, err := GetCachedServerResources(config.Host, disco)
if err != nil {
return nil, err
}
var resourceInterfaces []dynamic.ResourceInterface
for _, apiResourcesList := range resources {
for i := range apiResourcesList.APIResources {
apiResource := apiResourcesList.APIResources[i]
listSupported := false
for _, verb := range apiResource.Verbs {
if verb == listVerb {
listSupported = true
break
}
}
if listSupported && !isExcludedResourceGroup(apiResource) {
dclient, err := dynClientPool.ClientForGroupVersionKind(schema.FromAPIVersionAndKind(apiResourcesList.GroupVersion, apiResource.Kind))
if err != nil {
return nil, err
}
resourceInterfaces = append(resourceInterfaces, dclient.Resource(&apiResource, namespace))
}
}
}
var asyncErr error
var result []*unstructured.Unstructured
var wg sync.WaitGroup
var lock sync.Mutex
wg.Add(len(resourceInterfaces))
for _, c := range resourceInterfaces {
go func(client dynamic.ResourceInterface) {
wg.Add(len(apiResIfs))
for _, apiResIf := range apiResIfs {
go func(resourceIf dynamic.ResourceInterface) {
defer wg.Done()
list, err := client.List(metav1.ListOptions{
list, err := resourceIf.List(metav1.ListOptions{
LabelSelector: fmt.Sprintf("%s=%s", labelName, labelValue),
})
if err != nil {
@@ -360,8 +378,8 @@ func GetResourcesWithLabel(config *rest.Config, namespace string, labelName stri
return
}
// apply client side filtering since not every kubernetes API supports label filtering
for i := range list.(*unstructured.UnstructuredList).Items {
item := list.(*unstructured.UnstructuredList).Items[i]
for i := range list.Items {
item := list.Items[i]
labels := item.GetLabels()
if labels != nil {
if value, ok := labels[labelName]; ok && value == labelValue {
@@ -371,86 +389,62 @@ func GetResourcesWithLabel(config *rest.Config, namespace string, labelName stri
}
}
}
}(c)
}(apiResIf.resourceIf)
}
wg.Wait()
return result, asyncErr
}
// DeleteResourceWithLabel delete all resources which match to specified label selector
func DeleteResourceWithLabel(config *rest.Config, namespace string, labelName string, labelValue string) error {
dynClientPool := dynamic.NewDynamicClientPool(config)
disco, err := discovery.NewDiscoveryClientForConfig(config)
if err != nil {
return err
}
resources, err := GetCachedServerResources(config.Host, disco)
if err != nil {
return err
}
type resClient struct {
dynamic.ResourceInterface
deleteCollectionSupported bool
}
var resourceInterfaces []resClient
for _, apiResourcesList := range resources {
for i := range apiResourcesList.APIResources {
apiResource := apiResourcesList.APIResources[i]
deleteCollectionSupported := false
deleteSupported := false
for _, verb := range apiResource.Verbs {
if verb == deleteCollectionVerb {
deleteCollectionSupported = true
} else if verb == deleteVerb {
deleteSupported = true
}
}
dclient, err := dynClientPool.ClientForGroupVersionKind(schema.FromAPIVersionAndKind(apiResourcesList.GroupVersion, apiResource.Kind))
if err != nil {
return err
}
if (deleteCollectionSupported || deleteSupported) &&
!IsCRDGroupVersionKind(schema.FromAPIVersionAndKind(apiResourcesList.GroupVersion, apiResource.Kind)) &&
!isExcludedResourceGroup(apiResource) {
resourceInterfaces = append(resourceInterfaces, resClient{
dclient.Resource(&apiResource, namespace),
deleteCollectionSupported,
})
// DeleteResourcesWithLabel delete all resources which match to specified label selector
func DeleteResourcesWithLabel(config *rest.Config, namespace string, labelName string, labelValue string) error {
deleteSupported := func(groupVersion string, apiResource *metav1.APIResource) bool {
if !isSupportedVerb(apiResource, deleteCollectionVerb) {
// if we can't delete by collection, we better be able to list and delete
if !isSupportedVerb(apiResource, listVerb) || !isSupportedVerb(apiResource, deleteVerb) {
return false
}
}
if isExcludedResourceGroup(*apiResource) {
return false
}
if IsCRDGroupVersionKind(schema.FromAPIVersionAndKind(groupVersion, apiResource.Kind)) {
return false
}
return true
}
apiResIfs, err := filterAPIResources(config, deleteSupported, namespace)
if err != nil {
return err
}
var asyncErr error
propagationPolicy := metav1.DeletePropagationForeground
var wg sync.WaitGroup
wg.Add(len(resourceInterfaces))
for _, c := range resourceInterfaces {
go func(client resClient) {
wg.Add(len(apiResIfs))
for _, a := range apiResIfs {
go func(apiResIf apiResourceInterface) {
defer wg.Done()
if client.deleteCollectionSupported {
err = client.DeleteCollection(&metav1.DeleteOptions{
deleteCollectionSupported := isSupportedVerb(&apiResIf.apiResource, deleteCollectionVerb)
resourceIf := apiResIf.resourceIf
if deleteCollectionSupported {
err = resourceIf.DeleteCollection(&metav1.DeleteOptions{
PropagationPolicy: &propagationPolicy,
}, metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", labelName, labelValue)})
if err != nil && !apierr.IsNotFound(err) {
asyncErr = err
}
} else {
items, err := client.List(metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", labelName, labelValue)})
items, err := resourceIf.List(metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", labelName, labelValue)})
if err != nil {
asyncErr = err
return
}
for _, item := range items.(*unstructured.UnstructuredList).Items {
for _, item := range items.Items {
// apply client side filtering since not every kubernetes API supports label filtering
labels := item.GetLabels()
if labels != nil {
if value, ok := labels[labelName]; ok && value == labelValue {
err = client.Delete(item.GetName(), &metav1.DeleteOptions{
err = resourceIf.Delete(item.GetName(), &metav1.DeleteOptions{
PropagationPolicy: &propagationPolicy,
})
if err != nil && !apierr.IsNotFound(err) {
@@ -461,7 +455,7 @@ func DeleteResourceWithLabel(config *rest.Config, namespace string, labelName st
}
}
}
}(c)
}(a)
}
wg.Wait()
return asyncErr
@@ -487,8 +481,10 @@ type listResult struct {
}
// ListResources returns a list of resources of a particular API type using the dynamic client
func ListResources(dclient dynamic.Interface, apiResource metav1.APIResource, namespace string, listOpts metav1.ListOptions) ([]*unstructured.Unstructured, error) {
reIf := dclient.Resource(&apiResource, namespace)
func ListResources(dynamicIf dynamic.Interface, apiResource metav1.APIResource, namespace string, listOpts metav1.ListOptions) ([]*unstructured.Unstructured, error) {
gvk := schema.FromAPIVersionAndKind(apiResource.Version, apiResource.Kind)
resource := ToGroupVersionResource(gvk.GroupVersion().String(), &apiResource)
reIf := ToResourceInterface(dynamicIf, &apiResource, resource, namespace)
liveObjs, err := reIf.List(listOpts)
if err != nil {
return nil, errors.WithStack(err)
@@ -526,7 +522,13 @@ func cleanKubectlOutput(s string) string {
// WriteKubeConfig takes a rest.Config and writes it as a kubeconfig at the specified path
func WriteKubeConfig(restConfig *rest.Config, namespace, filename string) error {
var kubeConfig = clientcmdapi.Config{
kubeConfig := NewKubeConfig(restConfig, namespace)
return clientcmd.WriteToFile(*kubeConfig, filename)
}
// NewKubeConfig converts a clientcmdapi.Config (kubeconfig) from a rest.Config
func NewKubeConfig(restConfig *rest.Config, namespace string) *clientcmdapi.Config {
return &clientcmdapi.Config{
CurrentContext: restConfig.Host,
Contexts: map[string]*clientcmdapi.Context{
restConfig.Host: {
@@ -537,49 +539,62 @@ func WriteKubeConfig(restConfig *rest.Config, namespace, filename string) error
},
Clusters: map[string]*clientcmdapi.Cluster{
restConfig.Host: {
Server: restConfig.Host,
Server: restConfig.Host,
InsecureSkipTLSVerify: restConfig.TLSClientConfig.Insecure,
CertificateAuthority: restConfig.TLSClientConfig.CAFile,
CertificateAuthorityData: restConfig.TLSClientConfig.CAData,
},
},
AuthInfos: map[string]*clientcmdapi.AuthInfo{
restConfig.Host: {},
restConfig.Host: newAuthInfo(restConfig),
},
}
// Set Cluster info
if restConfig.TLSClientConfig.Insecure {
kubeConfig.Clusters[restConfig.Host].InsecureSkipTLSVerify = true
}
if restConfig.TLSClientConfig.CAFile != "" {
kubeConfig.Clusters[restConfig.Host].CertificateAuthority = restConfig.TLSClientConfig.CAFile
}
// Set AuthInfo
if len(restConfig.TLSClientConfig.CAData) > 0 {
kubeConfig.Clusters[restConfig.Host].CertificateAuthorityData = restConfig.TLSClientConfig.CAData
}
}
// newAuthInfo returns an AuthInfo from a rest config, detecting if the rest.Config is an
// in-cluster config and automatically setting the token path appropriately.
func newAuthInfo(restConfig *rest.Config) *clientcmdapi.AuthInfo {
authInfo := clientcmdapi.AuthInfo{}
haveCredentials := false
if restConfig.TLSClientConfig.CertFile != "" {
kubeConfig.AuthInfos[restConfig.Host].ClientCertificate = restConfig.TLSClientConfig.CertFile
authInfo.ClientCertificate = restConfig.TLSClientConfig.CertFile
haveCredentials = true
}
if len(restConfig.TLSClientConfig.CertData) > 0 {
kubeConfig.AuthInfos[restConfig.Host].ClientCertificateData = restConfig.TLSClientConfig.CertData
authInfo.ClientCertificateData = restConfig.TLSClientConfig.CertData
haveCredentials = true
}
if restConfig.TLSClientConfig.KeyFile != "" {
kubeConfig.AuthInfos[restConfig.Host].ClientKey = restConfig.TLSClientConfig.KeyFile
authInfo.ClientKey = restConfig.TLSClientConfig.KeyFile
haveCredentials = true
}
if len(restConfig.TLSClientConfig.KeyData) > 0 {
kubeConfig.AuthInfos[restConfig.Host].ClientKeyData = restConfig.TLSClientConfig.KeyData
authInfo.ClientKeyData = restConfig.TLSClientConfig.KeyData
haveCredentials = true
}
if restConfig.Username != "" {
kubeConfig.AuthInfos[restConfig.Host].Username = restConfig.Username
authInfo.Username = restConfig.Username
haveCredentials = true
}
if restConfig.Password != "" {
kubeConfig.AuthInfos[restConfig.Host].Password = restConfig.Password
authInfo.Password = restConfig.Password
haveCredentials = true
}
if restConfig.BearerToken != "" {
kubeConfig.AuthInfos[restConfig.Host].Token = restConfig.BearerToken
authInfo.Token = restConfig.BearerToken
haveCredentials = true
}
if restConfig.ExecProvider != nil {
kubeConfig.AuthInfos[restConfig.Host].Exec = restConfig.ExecProvider
authInfo.Exec = restConfig.ExecProvider
haveCredentials = true
}
return clientcmd.WriteToFile(kubeConfig, filename)
if restConfig.ExecProvider == nil && !haveCredentials {
// If no credentials were set (or there was no exec provider), we assume in-cluster config.
// In-cluster configs from the go-client will no longer set bearer tokens, so we set the
// well known token path. See issue #774
authInfo.TokenFile = "/var/run/secrets/kubernetes.io/serviceaccount/token"
}
return &authInfo
}
var diffSeparator = regexp.MustCompile(`\n---`)

View File

@@ -18,7 +18,9 @@ import (
fakediscovery "k8s.io/client-go/discovery/fake"
fakedynamic "k8s.io/client-go/dynamic/fake"
"k8s.io/client-go/kubernetes/fake"
"k8s.io/client-go/rest"
kubetesting "k8s.io/client-go/testing"
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
"github.com/argoproj/argo-cd/common"
argoappv1 "github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1"
@@ -100,8 +102,8 @@ func TestGetLiveResource(t *testing.T) {
assert.True(t, ok)
fakeDiscovery.Fake.Resources = resourceList()
fakeDynClient := fakedynamic.FakeClient{
Fake: &kubetesting.Fake{},
fakeDynClient := fakedynamic.FakeDynamicClient{
Fake: kubetesting.Fake{},
}
fakeDynClient.Fake.AddReactor("get", "*", func(action kubetesting.Action) (handled bool, ret runtime.Object, err error) {
svc, err := kubeclientset.CoreV1().Services(test.TestNamespace).Get(demoSvc.Name, metav1.GetOptions{})
@@ -119,8 +121,8 @@ func TestGetLiveResource(t *testing.T) {
func TestListResources(t *testing.T) {
kubeclientset := fake.NewSimpleClientset(test.DemoService(), test.DemoDeployment())
fakeDynClient := fakedynamic.FakeClient{
Fake: &kubetesting.Fake{},
fakeDynClient := fakedynamic.FakeDynamicClient{
Fake: kubetesting.Fake{},
}
fakeDynClient.Fake.AddReactor("list", "services", func(action kubetesting.Action) (handled bool, ret runtime.Object, err error) {
svcList, err := kubeclientset.CoreV1().Services(test.TestNamespace).List(metav1.ListOptions{})
@@ -304,3 +306,24 @@ spec:
assert.Equal(t, float64(0.2), requestsBefore["cpu"])
assert.Equal(t, "200m", requestsAfter["cpu"])
}
func TestInClusterKubeConfig(t *testing.T) {
restConfig := &rest.Config{}
kubeConfig := NewKubeConfig(restConfig, "")
assert.NotEmpty(t, kubeConfig.AuthInfos[kubeConfig.CurrentContext].TokenFile)
restConfig = &rest.Config{
Password: "foo",
}
kubeConfig = NewKubeConfig(restConfig, "")
assert.Empty(t, kubeConfig.AuthInfos[kubeConfig.CurrentContext].TokenFile)
restConfig = &rest.Config{
ExecProvider: &clientcmdapi.ExecConfig{
APIVersion: "client.authentication.k8s.io/v1alpha1",
Command: "aws-iam-authenticator",
},
}
kubeConfig = NewKubeConfig(restConfig, "")
assert.Empty(t, kubeConfig.AuthInfos[kubeConfig.CurrentContext].TokenFile)
}

View File

@@ -160,7 +160,29 @@ func (mgr *SessionManager) VerifyToken(tokenString string) (jwt.Claims, error) {
verifier := provider.Verifier(&oidc.Config{ClientID: claims.Audience})
idToken, err := verifier.Verify(context.Background(), tokenString)
if err != nil {
return nil, err
// HACK: if we failed token verification, it's possible the reason was because dex
// restarted and has new JWKS signing keys (we do not back dex with persistent storage
// so keys might be regenerated). Detect this by:
// 1. looking for the specific error message
// 2. re-initializing the OIDC provider
// 3. re-attempting token verification
// NOTE: the error message is sensitive to implementation of verifier.Verify()
if !strings.Contains(err.Error(), "failed to verify signature") {
return nil, err
}
provider, retryErr := mgr.initializeOIDCProvider()
if retryErr != nil {
// return original error if we fail to re-initialize OIDC
return nil, err
}
verifier = provider.Verifier(&oidc.Config{ClientID: claims.Audience})
idToken, err = verifier.Verify(context.Background(), tokenString)
if err != nil {
return nil, err
}
// If we get here, we successfully re-initialized OIDC and after re-initialization,
// the token is now valid.
log.Info("New OIDC settings detected")
}
var claims jwt.MapClaims
err = idToken.Claims(&claims)
@@ -168,6 +190,7 @@ func (mgr *SessionManager) VerifyToken(tokenString string) (jwt.Claims, error) {
}
}
// Username is a helper to extract a human readable username from a context
func Username(ctx context.Context) string {
claims, ok := ctx.Value("claims").(jwt.Claims)
if !ok {
@@ -194,8 +217,7 @@ func MakeCookieMetadata(key, value string, flags ...string) string {
return strings.Join(components, "; ")
}
// OIDCProvider lazily initializes and returns the OIDC provider, querying the well known oidc
// configuration path (http://example-argocd.com/api/dex/.well-known/openid-configuration).
// OIDCProvider lazily initializes, memoizes, and returns the OIDC provider.
// We have to initialize the provider lazily since ArgoCD is an OIDC client to itself, which
// presents a chicken-and-egg problem of (1) serving dex over HTTP, and (2) querying the OIDC
// provider (ourselves) to initialize the app.
@@ -203,6 +225,12 @@ func (mgr *SessionManager) OIDCProvider() (*oidc.Provider, error) {
if mgr.provider != nil {
return mgr.provider, nil
}
return mgr.initializeOIDCProvider()
}
// initializeOIDCProvider re-initializes the OIDC provider, querying the well known oidc
// configuration path (http://example-argocd.com/api/dex/.well-known/openid-configuration)
func (mgr *SessionManager) initializeOIDCProvider() (*oidc.Provider, error) {
if !mgr.settings.IsSSOConfigured() {
return nil, fmt.Errorf("SSO is not configured")
}
@@ -213,7 +241,6 @@ func (mgr *SessionManager) OIDCProvider() (*oidc.Provider, error) {
if err != nil {
return nil, fmt.Errorf("Failed to query provider %q: %v", issuerURL, err)
}
// Returns the scopes the provider supports
// See: https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata
var s struct {
@@ -223,24 +250,27 @@ func (mgr *SessionManager) OIDCProvider() (*oidc.Provider, error) {
return nil, fmt.Errorf("Failed to parse provider scopes_supported: %v", err)
}
log.Infof("OpenID supported scopes: %v", s.ScopesSupported)
offlineAsScope := false
if len(s.ScopesSupported) == 0 {
// scopes_supported is a "RECOMMENDED" discovery claim, not a required
// one. If missing, assume that the provider follows the spec and has
// an "offline_access" scope.
mgr.offlineAsScope = true
offlineAsScope = true
} else {
// See if scopes_supported has the "offline_access" scope.
for _, scope := range s.ScopesSupported {
if scope == oidc.ScopeOfflineAccess {
mgr.offlineAsScope = true
offlineAsScope = true
break
}
}
}
mgr.provider = provider
mgr.offlineAsScope = offlineAsScope
return mgr.provider, nil
}
// OfflineAsScope returns whether or not the OIDC provider supports offline as a scope
func (mgr *SessionManager) OfflineAsScope() bool {
_, _ = mgr.OIDCProvider() // forces offlineAsScope to be determined
return mgr.offlineAsScope