diff --git a/chart/compass/charts/director/templates/deployment.yaml b/chart/compass/charts/director/templates/deployment.yaml index 38143fd5e6..e456b14682 100644 --- a/chart/compass/charts/director/templates/deployment.yaml +++ b/chart/compass/charts/director/templates/deployment.yaml @@ -121,6 +121,10 @@ spec: value: {{ .Values.deployment.args.token.csrExpiration | quote }} - name: APP_URL value: "https://{{ .Values.global.gateway.tls.host }}.{{ .Values.global.ingress.domainName }}{{ .Values.global.director.prefix }}" + - name: APP_OPERATION_PATH + value: {{ .Values.global.director.operations.path }} + - name: APP_LAST_OPERATION_PATH + value: {{ .Values.global.director.operations.lastOperationPath }} - name: APP_CONNECTOR_URL value: "https://{{ .Values.global.gateway.tls.host }}.{{ .Values.global.ingress.domainName }}{{ .Values.global.connector.prefix }}/graphql" - name: APP_CONFIGURATION_FILE diff --git a/chart/compass/charts/operations-controller/templates/deployment.yaml b/chart/compass/charts/operations-controller/templates/deployment.yaml index 887f5893a0..1aa8bc1bec 100644 --- a/chart/compass/charts/operations-controller/templates/deployment.yaml +++ b/chart/compass/charts/operations-controller/templates/deployment.yaml @@ -38,8 +38,8 @@ spec: value: "true" - name: GRAPHQL_CLIENT_GRAPHQL_ENDPOINT value: "http://{{ .Values.global.gateway.tls.host }}.{{ .Release.Namespace }}.svc.cluster.local:{{.Values.global.gateway.port }}/director/graphql" - - name: DIRECTOR_INTERNAL_ADDRESS - value: "http://compass-director.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.global.director.operations.port }}" + - name: DIRECTOR_OPERATION_ENDPOINT + value: "http://compass-director.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.global.director.operations.port }}{{ .Values.global.director.operations.path }}" image: {{ .Values.global.images.containerRegistry.path }}/{{ .Values.global.images.connector.dir }}compass-operations-controller:{{ .Values.global.images.operations_controller.version }} name: manager ports: diff --git a/chart/compass/values.yaml b/chart/compass/values.yaml index 82c049df53..4c03cd7163 100644 --- a/chart/compass/values.yaml +++ b/chart/compass/values.yaml @@ -13,7 +13,7 @@ global: path: eu.gcr.io/kyma-project/incubator connector: dir: - version: "PR-1741" + version: "PR-1762" connectivity_adapter: dir: version: "PR-1750" @@ -22,13 +22,13 @@ global: version: "PR-1750" director: dir: - version: "PR-1741" + version: "PR-1762" gateway: dir: version: "PR-1750" operations_controller: dir: - version: "PR-1750" + version: "PR-1762" tenant_fetcher: dir: version: "PR-1750" @@ -37,7 +37,7 @@ global: version: "PR-15" schema_migrator: dir: - version: "PR-1761" + version: "PR-1762" system_broker: dir: version: "PR-1750" @@ -55,7 +55,7 @@ global: tests: director: dir: - version: "PR-1741" + version: "PR-1762" connector: dir: version: "PR-1741" @@ -101,6 +101,8 @@ global: port: 3003 operations: port: 3002 + path: "/operation" + lastOperationPath: "/last_operation" clientIDHeaderKey: client_user diff --git a/components/connector/go.mod b/components/connector/go.mod index 771903e3f0..6807eed221 100644 --- a/components/connector/go.mod +++ b/components/connector/go.mod @@ -14,7 +14,7 @@ require ( github.com/vektah/gqlparser v1.3.1 github.com/vrischmann/envconfig v1.3.0 golang.org/x/text v0.3.5 // indirect - k8s.io/api v0.20.2 - k8s.io/apimachinery v0.20.2 - k8s.io/client-go v0.20.2 + k8s.io/api v0.17.2 + k8s.io/apimachinery v0.17.2 + k8s.io/client-go v0.17.2 ) diff --git a/components/connector/go.sum b/components/connector/go.sum index e591ceec93..005576c50d 100644 --- a/components/connector/go.sum +++ b/components/connector/go.sum @@ -137,6 +137,7 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -250,6 +251,7 @@ github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d h1:7XGaL1e6bYS1yIonGp9761ExpPPV1ui0SAC59Yube9k= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= @@ -901,12 +903,15 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +k8s.io/api v0.17.2 h1:NF1UFXcKN7/OOv1uxdRz3qfra8AHsPav5M93hlV9+Dc= k8s.io/api v0.17.2/go.mod h1:BS9fjjLc4CMuqfSO8vgbHPKMt5+SF0ET6u/RVDihTo4= k8s.io/api v0.20.2 h1:y/HR22XDZY3pniu9hIFDLpUCPq2w5eQ6aV/VFQ7uJMw= k8s.io/api v0.20.2/go.mod h1:d7n6Ehyzx+S+cE3VhTGfVNNqtGc/oL9DCdYYahlurV8= +k8s.io/apimachinery v0.17.2 h1:hwDQQFbdRlpnnsR64Asdi55GyCaIP/3WQpMmbNBeWr4= k8s.io/apimachinery v0.17.2/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= k8s.io/apimachinery v0.20.2 h1:hFx6Sbt1oG0n6DZ+g4bFt5f6BoMkOjKWsQFu077M3Vg= k8s.io/apimachinery v0.20.2/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= +k8s.io/client-go v0.17.2 h1:ndIfkfXEGrNhLIgkr0+qhRguSD3u6DCmonepn1O6NYc= k8s.io/client-go v0.17.2/go.mod h1:QAzRgsa0C2xl4/eVpeVAZMvikCn8Nm81yqVx3Kk9XYI= k8s.io/client-go v0.20.2 h1:uuf+iIAbfnCSw8IGAv/Rg0giM+2bOzHLOsbbrwrdhNQ= k8s.io/client-go v0.20.2/go.mod h1:kH5brqWqp7HDxUFKoEgiI4v8G1xzbe9giaCenUWJzgE= @@ -919,9 +924,11 @@ k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.4.0 h1:7+X0fUguPyrKEC4WjH8iGDg3laWgMo5tMnRTIGTTxGQ= k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a h1:UcxjrRMyNx/i/y8G7kPvLyy7rfbeuf1PYyBf973pgyU= k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd h1:sOHNzJIkytDF6qadMNKhhDRpc6ODik8lVC6nOur7B2c= k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= +k8s.io/utils v0.0.0-20191114184206-e782cd3c129f h1:GiPwtSzdP43eI1hpPCbROQCCIgCuiMMNF8YUVLF3vJo= k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= @@ -932,6 +939,7 @@ sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff/v4 v4.0.2 h1:YHQV7Dajm86OuqnIR6zAelnDWBRjo+YhYV9PmGrh1s8= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/components/connector/internal/certificates/loader.go b/components/connector/internal/certificates/loader.go index 1b2fdc114c..139878e4e0 100644 --- a/components/connector/internal/certificates/loader.go +++ b/components/connector/internal/certificates/loader.go @@ -56,7 +56,7 @@ func (cl *certLoader) Run(ctx context.Context) { } func (cl *certLoader) loadSecretToCache(ctx context.Context, secret types.NamespacedName) { - secretData, appError := cl.secretsRepository.Get(ctx, secret) + secretData, appError := cl.secretsRepository.Get(secret) if appError != nil { log.C(ctx).WithError(appError).Errorf("Failed to load secret %s to cache", secret.String()) diff --git a/components/connector/internal/revocation/loader.go b/components/connector/internal/revocation/loader.go index 1981e9fae5..7dc9644877 100644 --- a/components/connector/internal/revocation/loader.go +++ b/components/connector/internal/revocation/loader.go @@ -54,7 +54,7 @@ func (rl *revokedCertificatesLoader) startKubeWatch(ctx context.Context) { default: } log.C(ctx).Info("Starting watcher for revocation list configmap changes...") - watcher, err := rl.configMapManager.Watch(ctx, metav1.ListOptions{ + watcher, err := rl.configMapManager.Watch(metav1.ListOptions{ FieldSelector: "metadata.name=" + rl.configMapName, Watch: true, }) diff --git a/components/connector/internal/revocation/loader_test.go b/components/connector/internal/revocation/loader_test.go index 7259e3622b..9e1474f111 100644 --- a/components/connector/internal/revocation/loader_test.go +++ b/components/connector/internal/revocation/loader_test.go @@ -22,7 +22,7 @@ func prep(ctx context.Context, number int) (Cache, *testWatch, *mocks.Manager) { } configListManagerMock := &mocks.Manager{} configListManagerMock. - On("Watch", mock.Anything, mock.AnythingOfType("v1.ListOptions")). + On("Watch", mock.AnythingOfType("v1.ListOptions")). Return(watcher, nil). Times(number) loader := NewRevokedCertificatesLoader(cache, configListManagerMock, configMapName, time.Millisecond) @@ -192,7 +192,7 @@ func Test_revokedCertificatesLoader(t *testing.T) { newWatcher := &testWatch{ events: make(chan watch.Event, 100), } - managerMock.On("Watch", mock.Anything, mock.AnythingOfType("v1.ListOptions")). + managerMock.On("Watch", mock.AnythingOfType("v1.ListOptions")). Return(newWatcher, nil).Once() newWatcher.putEvent(watch.Event{ diff --git a/components/connector/internal/revocation/mocks/Manager.go b/components/connector/internal/revocation/mocks/Manager.go index a0a656ccf4..4965319a9a 100644 --- a/components/connector/internal/revocation/mocks/Manager.go +++ b/components/connector/internal/revocation/mocks/Manager.go @@ -1,13 +1,10 @@ -// Code generated by mockery v1.0.0. DO NOT EDIT. +// Code generated by mockery v1.1.2. DO NOT EDIT. package mocks import ( - context "context" - - corev1 "k8s.io/api/core/v1" - mock "github.com/stretchr/testify/mock" + corev1 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -19,13 +16,13 @@ type Manager struct { mock.Mock } -// Get provides a mock function with given fields: ctx, name, options -func (_m *Manager) Get(ctx context.Context, name string, options v1.GetOptions) (*corev1.ConfigMap, error) { - ret := _m.Called(ctx, name, options) +// Get provides a mock function with given fields: name, options +func (_m *Manager) Get(name string, options v1.GetOptions) (*corev1.ConfigMap, error) { + ret := _m.Called(name, options) var r0 *corev1.ConfigMap - if rf, ok := ret.Get(0).(func(context.Context, string, v1.GetOptions) *corev1.ConfigMap); ok { - r0 = rf(ctx, name, options) + if rf, ok := ret.Get(0).(func(string, v1.GetOptions) *corev1.ConfigMap); ok { + r0 = rf(name, options) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*corev1.ConfigMap) @@ -33,8 +30,8 @@ func (_m *Manager) Get(ctx context.Context, name string, options v1.GetOptions) } var r1 error - if rf, ok := ret.Get(1).(func(context.Context, string, v1.GetOptions) error); ok { - r1 = rf(ctx, name, options) + if rf, ok := ret.Get(1).(func(string, v1.GetOptions) error); ok { + r1 = rf(name, options) } else { r1 = ret.Error(1) } @@ -42,13 +39,13 @@ func (_m *Manager) Get(ctx context.Context, name string, options v1.GetOptions) return r0, r1 } -// Update provides a mock function with given fields: ctx, configmap, options -func (_m *Manager) Update(ctx context.Context, configmap *corev1.ConfigMap, options v1.UpdateOptions) (*corev1.ConfigMap, error) { - ret := _m.Called(ctx, configmap, options) +// Update provides a mock function with given fields: configmap +func (_m *Manager) Update(configmap *corev1.ConfigMap) (*corev1.ConfigMap, error) { + ret := _m.Called(configmap) var r0 *corev1.ConfigMap - if rf, ok := ret.Get(0).(func(context.Context, *corev1.ConfigMap, v1.UpdateOptions) *corev1.ConfigMap); ok { - r0 = rf(ctx, configmap, options) + if rf, ok := ret.Get(0).(func(*corev1.ConfigMap) *corev1.ConfigMap); ok { + r0 = rf(configmap) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*corev1.ConfigMap) @@ -56,8 +53,8 @@ func (_m *Manager) Update(ctx context.Context, configmap *corev1.ConfigMap, opti } var r1 error - if rf, ok := ret.Get(1).(func(context.Context, *corev1.ConfigMap, v1.UpdateOptions) error); ok { - r1 = rf(ctx, configmap, options) + if rf, ok := ret.Get(1).(func(*corev1.ConfigMap) error); ok { + r1 = rf(configmap) } else { r1 = ret.Error(1) } @@ -65,13 +62,13 @@ func (_m *Manager) Update(ctx context.Context, configmap *corev1.ConfigMap, opti return r0, r1 } -// Watch provides a mock function with given fields: ctx, opts -func (_m *Manager) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - ret := _m.Called(ctx, opts) +// Watch provides a mock function with given fields: opts +func (_m *Manager) Watch(opts v1.ListOptions) (watch.Interface, error) { + ret := _m.Called(opts) var r0 watch.Interface - if rf, ok := ret.Get(0).(func(context.Context, v1.ListOptions) watch.Interface); ok { - r0 = rf(ctx, opts) + if rf, ok := ret.Get(0).(func(v1.ListOptions) watch.Interface); ok { + r0 = rf(opts) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(watch.Interface) @@ -79,8 +76,8 @@ func (_m *Manager) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interf } var r1 error - if rf, ok := ret.Get(1).(func(context.Context, v1.ListOptions) error); ok { - r1 = rf(ctx, opts) + if rf, ok := ret.Get(1).(func(v1.ListOptions) error); ok { + r1 = rf(opts) } else { r1 = ret.Error(1) } diff --git a/components/connector/internal/revocation/repository.go b/components/connector/internal/revocation/repository.go index 75f4c6661d..fa1f2763d0 100644 --- a/components/connector/internal/revocation/repository.go +++ b/components/connector/internal/revocation/repository.go @@ -11,9 +11,9 @@ import ( //go:generate mockery -name=Manager type Manager interface { - Get(ctx context.Context, name string, options metav1.GetOptions) (*v1.ConfigMap, error) - Update(ctx context.Context, configmap *v1.ConfigMap, options metav1.UpdateOptions) (*v1.ConfigMap, error) - Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Get(name string, options metav1.GetOptions) (*v1.ConfigMap, error) + Update(configmap *v1.ConfigMap) (*v1.ConfigMap, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) } //go:generate mockery --name=RevokedCertificatesRepository @@ -37,7 +37,7 @@ func NewRepository(configMapManager Manager, configMapName string, revokedCertsC } func (r *revokedCertifiatesRepository) Insert(ctx context.Context, hash string) error { - configMap, err := r.configMapManager.Get(ctx, r.configMapName, metav1.GetOptions{}) + configMap, err := r.configMapManager.Get(r.configMapName, metav1.GetOptions{}) if err != nil { return err } @@ -52,7 +52,7 @@ func (r *revokedCertifiatesRepository) Insert(ctx context.Context, hash string) updatedConfigMap.Data = revokedCerts err = retry.RetryOnConflict(retry.DefaultBackoff, func() error { - _, err = r.configMapManager.Update(ctx, updatedConfigMap, metav1.UpdateOptions{}) + _, err = r.configMapManager.Update(updatedConfigMap) return err }) diff --git a/components/connector/internal/revocation/repository_test.go b/components/connector/internal/revocation/repository_test.go index 516d72a388..224ab619b5 100644 --- a/components/connector/internal/revocation/repository_test.go +++ b/components/connector/internal/revocation/repository_test.go @@ -60,15 +60,15 @@ func TestRevokedCertificatesRepository(t *testing.T) { someHash := "someHash" configListManagerMock := &mocks.Manager{} - configListManagerMock.On("Get", ctx, configMapName, mock.AnythingOfType("v1.GetOptions")).Return( + configListManagerMock.On("Get", configMapName, mock.AnythingOfType("v1.GetOptions")).Return( &v1.ConfigMap{ Data: nil, }, nil) - configListManagerMock.On("Update", ctx, &v1.ConfigMap{ + configListManagerMock.On("Update", &v1.ConfigMap{ Data: map[string]string{ someHash: someHash, - }}, mock.AnythingOfType("v1.UpdateOptions")).Return(&v1.ConfigMap{ + }}).Return(&v1.ConfigMap{ Data: map[string]string{ someHash: someHash, }}, nil) @@ -90,15 +90,15 @@ func TestRevokedCertificatesRepository(t *testing.T) { someHash := "someHash" configListManagerMock := &mocks.Manager{} - configListManagerMock.On("Get", ctx, configMapName, mock.AnythingOfType("v1.GetOptions")).Return( + configListManagerMock.On("Get", configMapName, mock.AnythingOfType("v1.GetOptions")).Return( &v1.ConfigMap{ Data: nil, }, nil) - configListManagerMock.On("Update", ctx, &v1.ConfigMap{ + configListManagerMock.On("Update", &v1.ConfigMap{ Data: map[string]string{ someHash: someHash, - }}, mock.AnythingOfType("v1.UpdateOptions")).Return(nil, errors.New("some error")) + }}).Return(nil, errors.New("some error")) repository := NewRepository(configListManagerMock, configMapName, cache) diff --git a/components/connector/internal/secrets/mocks/Manager.go b/components/connector/internal/secrets/mocks/Manager.go index 2defdbcd7e..254e038677 100644 --- a/components/connector/internal/secrets/mocks/Manager.go +++ b/components/connector/internal/secrets/mocks/Manager.go @@ -1,13 +1,10 @@ -// Code generated by mockery v1.0.0. DO NOT EDIT. +// Code generated by mockery v1.1.2. DO NOT EDIT. package mocks import ( - context "context" - - corev1 "k8s.io/api/core/v1" - mock "github.com/stretchr/testify/mock" + corev1 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -17,13 +14,13 @@ type Manager struct { mock.Mock } -// Get provides a mock function with given fields: ctx, name, options -func (_m *Manager) Get(ctx context.Context, name string, options v1.GetOptions) (*corev1.Secret, error) { - ret := _m.Called(ctx, name, options) +// Get provides a mock function with given fields: name, options +func (_m *Manager) Get(name string, options v1.GetOptions) (*corev1.Secret, error) { + ret := _m.Called(name, options) var r0 *corev1.Secret - if rf, ok := ret.Get(0).(func(context.Context, string, v1.GetOptions) *corev1.Secret); ok { - r0 = rf(ctx, name, options) + if rf, ok := ret.Get(0).(func(string, v1.GetOptions) *corev1.Secret); ok { + r0 = rf(name, options) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*corev1.Secret) @@ -31,8 +28,8 @@ func (_m *Manager) Get(ctx context.Context, name string, options v1.GetOptions) } var r1 error - if rf, ok := ret.Get(1).(func(context.Context, string, v1.GetOptions) error); ok { - r1 = rf(ctx, name, options) + if rf, ok := ret.Get(1).(func(string, v1.GetOptions) error); ok { + r1 = rf(name, options) } else { r1 = ret.Error(1) } diff --git a/components/connector/internal/secrets/mocks/Repository.go b/components/connector/internal/secrets/mocks/Repository.go index dd256c8baa..93f86b9f48 100644 --- a/components/connector/internal/secrets/mocks/Repository.go +++ b/components/connector/internal/secrets/mocks/Repository.go @@ -1,12 +1,9 @@ -// Code generated by mockery v1.0.0. DO NOT EDIT. +// Code generated by mockery v1.1.2. DO NOT EDIT. package mocks import ( - context "context" - apperrors "github.com/kyma-incubator/compass/components/connector/internal/apperrors" - mock "github.com/stretchr/testify/mock" types "k8s.io/apimachinery/pkg/types" @@ -17,13 +14,13 @@ type Repository struct { mock.Mock } -// Get provides a mock function with given fields: ctx, name -func (_m *Repository) Get(ctx context.Context, name types.NamespacedName) (map[string][]byte, apperrors.AppError) { - ret := _m.Called(ctx, name) +// Get provides a mock function with given fields: name +func (_m *Repository) Get(name types.NamespacedName) (map[string][]byte, apperrors.AppError) { + ret := _m.Called(name) var r0 map[string][]byte - if rf, ok := ret.Get(0).(func(context.Context, types.NamespacedName) map[string][]byte); ok { - r0 = rf(ctx, name) + if rf, ok := ret.Get(0).(func(types.NamespacedName) map[string][]byte); ok { + r0 = rf(name) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(map[string][]byte) @@ -31,8 +28,8 @@ func (_m *Repository) Get(ctx context.Context, name types.NamespacedName) (map[s } var r1 apperrors.AppError - if rf, ok := ret.Get(1).(func(context.Context, types.NamespacedName) apperrors.AppError); ok { - r1 = rf(ctx, name) + if rf, ok := ret.Get(1).(func(types.NamespacedName) apperrors.AppError); ok { + r1 = rf(name) } else { if ret.Get(1) != nil { r1 = ret.Get(1).(apperrors.AppError) diff --git a/components/connector/internal/secrets/repository.go b/components/connector/internal/secrets/repository.go index 9c8ea093bc..0fd0f89763 100755 --- a/components/connector/internal/secrets/repository.go +++ b/components/connector/internal/secrets/repository.go @@ -1,8 +1,6 @@ package secrets import ( - "context" - "github.com/kyma-incubator/compass/components/connector/internal/apperrors" v1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" @@ -14,12 +12,12 @@ type ManagerConstructor func(namespace string) Manager //go:generate mockery -name=Manager type Manager interface { - Get(ctx context.Context, name string, options metav1.GetOptions) (*v1.Secret, error) + Get(name string, options metav1.GetOptions) (*v1.Secret, error) } //go:generate mockery -name=Repository type Repository interface { - Get(ctx context.Context, name types.NamespacedName) (secretData map[string][]byte, appError apperrors.AppError) + Get(name types.NamespacedName) (secretData map[string][]byte, appError apperrors.AppError) } type repository struct { @@ -33,9 +31,9 @@ func NewRepository(secretsManagerConstructor ManagerConstructor) Repository { } } -func (r *repository) Get(ctx context.Context, secret types.NamespacedName) (secretData map[string][]byte, appError apperrors.AppError) { +func (r *repository) Get(secret types.NamespacedName) (secretData map[string][]byte, appError apperrors.AppError) { secretsManager := r.secretsManagerConstructor(secret.Namespace) - secretObj, err := secretsManager.Get(ctx, secret.Name, metav1.GetOptions{}) + secretObj, err := secretsManager.Get(secret.Name, metav1.GetOptions{}) if err != nil { if k8serrors.IsNotFound(err) { return nil, apperrors.NotFound("secret %s not found", secret) diff --git a/components/connector/internal/secrets/repository_test.go b/components/connector/internal/secrets/repository_test.go index b44e1f552a..1af56ddd3c 100755 --- a/components/connector/internal/secrets/repository_test.go +++ b/components/connector/internal/secrets/repository_test.go @@ -1,7 +1,6 @@ package secrets import ( - "context" "testing" "github.com/kyma-incubator/compass/components/connector/internal/apperrors" @@ -35,19 +34,17 @@ func TestRepository_Get(t *testing.T) { t.Run("should get secret", func(t *testing.T) { // given - ctx := context.TODO() - secretMap := make(map[string][]byte) secretMap["ca.crt"] = expectedCaCrt secretMap["ca.key"] = expectedCaKey secretsManager := &mocks.Manager{} - secretsManager.On("Get", ctx, appName, metav1.GetOptions{}).Return(&v1.Secret{Data: secretMap}, nil) + secretsManager.On("Get", appName, metav1.GetOptions{}).Return(&v1.Secret{Data: secretMap}, nil) repository := NewRepository(prepareManagerConstructor(secretsManager)) // when - secretData, err := repository.Get(ctx, namespacedName) + secretData, err := repository.Get(namespacedName) // then require.NoError(t, err) @@ -58,18 +55,16 @@ func TestRepository_Get(t *testing.T) { t.Run("should fail in case secret not found", func(t *testing.T) { // given - ctx := context.TODO() - k8sNotFoundError := &k8serrors.StatusError{ ErrStatus: metav1.Status{Reason: metav1.StatusReasonNotFound}, } secretsManager := &mocks.Manager{} - secretsManager.On("Get", ctx, appName, metav1.GetOptions{}).Return(nil, k8sNotFoundError) + secretsManager.On("Get", appName, metav1.GetOptions{}).Return(nil, k8sNotFoundError) repository := NewRepository(prepareManagerConstructor(secretsManager)) // when - secretData, err := repository.Get(ctx, namespacedName) + secretData, err := repository.Get(namespacedName) // then require.Error(t, err) @@ -79,15 +74,13 @@ func TestRepository_Get(t *testing.T) { t.Run("should fail if couldn't get secret", func(t *testing.T) { // given - ctx := context.TODO() - secretsManager := &mocks.Manager{} - secretsManager.On("Get", ctx, appName, metav1.GetOptions{}).Return(nil, &k8serrors.StatusError{}) + secretsManager.On("Get", appName, metav1.GetOptions{}).Return(nil, &k8serrors.StatusError{}) repository := NewRepository(prepareManagerConstructor(secretsManager)) // when - secretData, err := repository.Get(ctx, namespacedName) + secretData, err := repository.Get(namespacedName) // then require.Error(t, err) diff --git a/components/connector/pkg/graphql/clientset/clientset_test.go b/components/connector/pkg/graphql/clientset/clientset_test.go index ce76d6feda..a831f860d0 100644 --- a/components/connector/pkg/graphql/clientset/clientset_test.go +++ b/components/connector/pkg/graphql/clientset/clientset_test.go @@ -14,7 +14,6 @@ import ( func Test_Clientset(t *testing.T) { // given - ctx := context.TODO() var err error token := "mock-token" @@ -56,7 +55,7 @@ func Test_Clientset(t *testing.T) { // then require.NoError(t, err) require.True(t, revokeResponse) - revocationCM, err := k8sClientSet.CoreV1().ConfigMaps("default").Get(ctx, testConfigMapName, v1.GetOptions{}) + revocationCM, err := k8sClientSet.CoreV1().ConfigMaps("default").Get(testConfigMapName, v1.GetOptions{}) require.NoError(t, err) assert.Len(t, revocationCM.Data, 1) } diff --git a/components/director/cmd/director/main.go b/components/director/cmd/director/main.go index d13b1ab65a..02c10fc8c1 100644 --- a/components/director/cmd/director/main.go +++ b/components/director/cmd/director/main.go @@ -93,7 +93,8 @@ type config struct { TenantMappingEndpoint string `envconfig:"default=/tenant-mapping"` RuntimeMappingEndpoint string `envconfig:"default=/runtime-mapping"` AuthenticationMappingEndpoint string `envconfig:"default=/authn-mapping"` - OperationEndpoint string `envconfig:"default=/operations"` + OperationPath string `envconfig:"default=/operation"` + LastOperationPath string `envconfig:"default=/last_operation"` PlaygroundAPIEndpoint string `envconfig:"default=/graphql"` ConfigurationFile string ConfigurationFileReload time.Duration `envconfig:"default=1m"` @@ -249,9 +250,29 @@ func main() { return appRepo.GetByID(ctx, tenantID, resourceID) }, tenant.LoadFromContext) - operationsAPIRouter := mainRouter.PathPrefix(cfg.OperationEndpoint).Subrouter() + operationsAPIRouter := mainRouter.PathPrefix(cfg.LastOperationPath).Subrouter() operationsAPIRouter.Use(authMiddleware.Handler()) - operationsAPIRouter.HandleFunc("", operationHandler.ServeHTTP) + operationsAPIRouter.HandleFunc("/{resource_type}/{resource_id}", operationHandler.ServeHTTP) + + operationUpdaterHandler := operation.NewUpdateOperationHandler(transact, map[resource.Type]operation.ResourceUpdaterFunc{ + resource.Application: appUpdaterFunc(appRepo), + }, map[resource.Type]operation.ResourceDeleterFunc{ + resource.Application: func(ctx context.Context, id string) error { + return appRepo.DeleteGlobal(ctx, id) + }, + }) + + internalRouter := mux.NewRouter() + internalRouter.Use(correlation.AttachCorrelationIDToContext(), log.RequestLogger(), header.AttachHeadersToContext()) + internalOperationsAPIRouter := internalRouter.PathPrefix(cfg.OperationPath).Subrouter() + internalOperationsAPIRouter.HandleFunc("", operationUpdaterHandler.ServeHTTP) + + internalGQLHandler, err := PrepareInternalGraphQLServer(cfg, graphqlAPI.NewTokenResolver(transact, tokenService(cfg, cfgProvider, httpClient, pairingAdapters)), correlation.AttachCorrelationIDToContext(), log.RequestLogger()) + exitOnError(err, "Failed configuring internal graphQL handler") + + timeService := directorTime.NewService() + hydratorHandler, err := PrepareHydratorHandler(cfg, systemAuthSvc(), transact, timeService, correlation.AttachCorrelationIDToContext(), log.RequestLogger()) + exitOnError(err, "Failed configuring hydrator handler") logger.Infof("Registering readiness endpoint...") mainRouter.HandleFunc("/readyz", healthz.NewReadinessHandler()) @@ -265,33 +286,6 @@ func main() { metricsHandler := http.NewServeMux() metricsHandler.Handle("/metrics", promhttp.Handler()) - internalGQLHandler, err := PrepareInternalGraphQLServer(cfg, graphqlAPI.NewTokenResolver(transact, tokenService(cfg, cfgProvider, httpClient, pairingAdapters)), correlation.AttachCorrelationIDToContext(), log.RequestLogger()) - exitOnError(err, "Failed configuring internal graphQL handler") - - timeService := directorTime.NewService() - hydratorHandler, err := PrepareHydratorHandler(cfg, systemAuthSvc(), transact, timeService, correlation.AttachCorrelationIDToContext(), log.RequestLogger()) - exitOnError(err, "Failed configuring hydrator handler") - - operationUpdaterHandler := operation.NewUpdateOperationHandler(transact, map[resource.Type]operation.ResourceUpdaterFunc{ - resource.Application: func(ctx context.Context, id string, ready bool, error *string) error { - app, err := appRepo.GetGlobalByID(ctx, id) - if err != nil { - return err - } - app.Ready = ready - app.Error = error - return appRepo.Update(ctx, app) - }, - }, map[resource.Type]operation.ResourceDeleterFunc{ - resource.Application: func(ctx context.Context, id string) error { - return appRepo.DeleteGlobal(ctx, id) - }, - }) - internalRouter := mux.NewRouter() - internalRouter.Use(correlation.AttachCorrelationIDToContext(), log.RequestLogger(), header.AttachHeadersToContext()) - internalOperationsAPIRouter := internalRouter.PathPrefix(cfg.OperationEndpoint).Subrouter() - internalOperationsAPIRouter.HandleFunc("", operationUpdaterHandler.ServeHTTP) - runMetricsSrv, shutdownMetricsSrv := createServer(ctx, cfg.MetricsAddress, metricsHandler, "metrics", cfg.ServerTimeout) runMainSrv, shutdownMainSrv := createServer(ctx, cfg.Address, mainRouter, "main", cfg.ServerTimeout) runInternalGQLSrv, shutdownInternalGQLSrv := createServer(ctx, cfg.InternalGraphQLAddress, internalGQLHandler, "internal_graphql", cfg.ServerTimeout) @@ -613,7 +607,7 @@ func getAsyncDirective(ctx context.Context, cfg config, transact persistence.Tra scheduler, err := buildScheduler(ctx, cfg) exitOnError(err, "Error while creating operations scheduler") - return operation.NewDirective(transact, webhookService().ListAllApplicationWebhooks, resourceFetcherFunc, tenant.LoadFromContext, scheduler).HandleOperation + return operation.NewDirective(transact, webhookService().ListAllApplicationWebhooks, resourceFetcherFunc, appUpdaterFunc(appRepo), tenant.LoadFromContext, scheduler).HandleOperation } func buildScheduler(ctx context.Context, config config) (operation.Scheduler, error) { @@ -634,3 +628,19 @@ func buildScheduler(ctx context.Context, config config) (operation.Scheduler, er return k8s.NewScheduler(operationsK8sClient), nil } + +func appUpdaterFunc(appRepo application.ApplicationRepository) operation.ResourceUpdaterFunc { + return func(ctx context.Context, id string, ready bool, errorMsg *string, appStatusCondition model.ApplicationStatusCondition) error { + app, err := appRepo.GetGlobalByID(ctx, id) + if err != nil { + return err + } + app.Status = &model.ApplicationStatus{ + Condition: appStatusCondition, + Timestamp: time.Now(), + } + app.Ready = ready + app.Error = errorMsg + return appRepo.Update(ctx, app) + } +} diff --git a/components/director/go.mod b/components/director/go.mod index 3b930f7970..9da5bfbe1b 100644 --- a/components/director/go.mod +++ b/components/director/go.mod @@ -18,7 +18,7 @@ require ( github.com/gorilla/mux v1.8.0 github.com/hashicorp/go-multierror v1.1.0 github.com/jmoiron/sqlx v1.3.1 - github.com/kyma-incubator/compass/components/connector v0.0.0-20210113114817-9cd2eac13dc0 + github.com/kyma-incubator/compass/components/connector v0.0.0-20210311194945-173a509b57cc github.com/kyma-incubator/compass/components/operations-controller v0.0.0-20210301144857-4b0b2ea4c892 github.com/lestrrat-go/iter v1.0.0 github.com/lestrrat-go/jwx v1.1.4 @@ -35,7 +35,6 @@ require ( github.com/tidwall/gjson v1.6.8 github.com/tidwall/sjson v1.1.5 github.com/vektah/gqlparser v1.3.1 - github.com/vektra/mockery v1.1.2 // indirect github.com/vrischmann/envconfig v1.3.0 github.com/xeipuuv/gojsonschema v1.2.0 golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 // indirect @@ -43,8 +42,9 @@ require ( golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 golang.org/x/sys v0.0.0-20210303074136-134d130e1a04 // indirect golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba // indirect - k8s.io/api v0.17.3 - k8s.io/apimachinery v0.17.3 - k8s.io/client-go v0.17.3 - sigs.k8s.io/controller-runtime v0.5.0 + k8s.io/api v0.17.2 // DO NOT BUMP + k8s.io/apimachinery v0.17.2 // DO NOT BUMP + k8s.io/client-go v0.17.2 // DO NOT BUMP + k8s.io/kube-openapi v0.0.0-20200410163147-594e756bea31 // indirect + sigs.k8s.io/controller-runtime v0.5.0 // DO NOT BUMP ) diff --git a/components/director/go.sum b/components/director/go.sum index dc8b113f3c..1ac874f6b3 100644 --- a/components/director/go.sum +++ b/components/director/go.sum @@ -451,7 +451,10 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kyma-incubator/compass/components/connector v0.0.0-20210113114817-9cd2eac13dc0 h1:Dvmtufk/Q1HtHUVhEgM6ycLcXij7l3Aab6as5Ab0lYk= github.com/kyma-incubator/compass/components/connector v0.0.0-20210113114817-9cd2eac13dc0/go.mod h1:mYXUlc/WjYrdaza+1olGGPktEdkF8aE/Vg5oLV7FV4I= +github.com/kyma-incubator/compass/components/connector v0.0.0-20210311194945-173a509b57cc h1:KFUDj6CsGG2XjzYQUkJsLDocu7ngJOXnz4q8o8gltDY= +github.com/kyma-incubator/compass/components/connector v0.0.0-20210311194945-173a509b57cc/go.mod h1:LhzfXGVXwdray+f21KnrqYtjw2IR1ldKFNpHfWaBHbI= github.com/kyma-incubator/compass/components/director v0.0.0-20201215200050-802603cbf300/go.mod h1:MJiIuIF4dkynfgv06QNRodxXyNa4/ksXT03DSUcI3VA= +github.com/kyma-incubator/compass/components/director v0.0.0-20210222123648-c454983cf74b/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= github.com/kyma-incubator/compass/components/director v0.0.0-20210301143156-3b39f117e7bf/go.mod h1:hJ3bgWfwFhdnxZF7Gcok5Rm1zDT4bHtVGHDeXDBvTfg= github.com/kyma-incubator/compass/components/operations-controller v0.0.0-20210213091620-beb5492e9d8b/go.mod h1:201wjhJxyaSA4pVp33VKOp91oNC+PQR591haj1t7KhA= github.com/kyma-incubator/compass/components/operations-controller v0.0.0-20210301144857-4b0b2ea4c892 h1:JeRvOhywP1nVb7sMIvgRyeZRQouv76JVx+gXFfnXfhA= @@ -1171,15 +1174,18 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +k8s.io/api v0.17.2 h1:NF1UFXcKN7/OOv1uxdRz3qfra8AHsPav5M93hlV9+Dc= k8s.io/api v0.17.2/go.mod h1:BS9fjjLc4CMuqfSO8vgbHPKMt5+SF0ET6u/RVDihTo4= k8s.io/api v0.17.3 h1:XAm3PZp3wnEdzekNkcmj/9Y1zdmQYJ1I4GKSBBZ8aG0= k8s.io/api v0.17.3/go.mod h1:YZ0OTkuw7ipbe305fMpIdf3GLXZKRigjtZaV5gzC2J0= k8s.io/apiextensions-apiserver v0.17.2 h1:cP579D2hSZNuO/rZj9XFRzwJNYb41DbNANJb6Kolpss= k8s.io/apiextensions-apiserver v0.17.2/go.mod h1:4KdMpjkEjjDI2pPfBA15OscyNldHWdBCfsWMDWAmSTs= +k8s.io/apimachinery v0.17.2 h1:hwDQQFbdRlpnnsR64Asdi55GyCaIP/3WQpMmbNBeWr4= k8s.io/apimachinery v0.17.2/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= k8s.io/apimachinery v0.17.3 h1:f+uZV6rm4/tHE7xXgLyToprg6xWairaClGVkm2t8omg= k8s.io/apimachinery v0.17.3/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0g= k8s.io/apiserver v0.17.2/go.mod h1:lBmw/TtQdtxvrTk0e2cgtOxHizXI+d0mmGQURIHQZlo= +k8s.io/client-go v0.17.2 h1:ndIfkfXEGrNhLIgkr0+qhRguSD3u6DCmonepn1O6NYc= k8s.io/client-go v0.17.2/go.mod h1:QAzRgsa0C2xl4/eVpeVAZMvikCn8Nm81yqVx3Kk9XYI= k8s.io/client-go v0.17.3 h1:deUna1Ksx05XeESH6XGCyONNFfiQmDdqeqUvicvP6nU= k8s.io/client-go v0.17.3/go.mod h1:cLXlTMtWHkuK4tD360KpWz2gG2KtdWEr/OT02i3emRQ= diff --git a/components/director/internal/domain/application/converter.go b/components/director/internal/domain/application/converter.go index 93af5ea217..98e36257b4 100644 --- a/components/director/internal/domain/application/converter.go +++ b/components/director/internal/domain/application/converter.go @@ -93,7 +93,7 @@ func (c *converter) ToGraphQL(in *model.Application) *graphql.Application { } return &graphql.Application{ - Status: c.statusToGraphQL(in.Status), + Status: c.statusModelToGraphQL(in.Status), Name: in.Name, Description: in.Description, HealthCheckURL: in.HealthCheckURL, @@ -141,13 +141,18 @@ func (c *converter) CreateInputFromGraphQL(ctx context.Context, in graphql.Appli return model.ApplicationRegisterInput{}, errors.Wrap(err, "while converting Bundles") } + var statusCondition *model.ApplicationStatusCondition + if in.StatusCondition != nil { + condition := model.ApplicationStatusCondition(*in.StatusCondition) + statusCondition = &condition + } return model.ApplicationRegisterInput{ Name: in.Name, Description: in.Description, Labels: labels, HealthCheckURL: in.HealthCheckURL, IntegrationSystemID: in.IntegrationSystemID, - StatusCondition: c.statusConditionToModel(in.StatusCondition), + StatusCondition: statusCondition, ProviderName: in.ProviderName, Webhooks: webhooks, Bundles: bundles, @@ -155,12 +160,17 @@ func (c *converter) CreateInputFromGraphQL(ctx context.Context, in graphql.Appli } func (c *converter) UpdateInputFromGraphQL(in graphql.ApplicationUpdateInput) model.ApplicationUpdateInput { + var statusCondition *model.ApplicationStatusCondition + if in.StatusCondition != nil { + condition := model.ApplicationStatusCondition(*in.StatusCondition) + statusCondition = &condition + } return model.ApplicationUpdateInput{ Description: in.Description, HealthCheckURL: in.HealthCheckURL, IntegrationSystemID: in.IntegrationSystemID, ProviderName: in.ProviderName, - StatusCondition: c.statusConditionToModel(in.StatusCondition), + StatusCondition: statusCondition, } } @@ -193,7 +203,7 @@ func (c *converter) GraphQLToModel(obj *graphql.Application, tenantID string) *m Tenant: tenantID, Name: obj.Name, Description: obj.Description, - Status: c.statusToModel(obj.Status), + Status: c.statusGraphQLToModel(obj.Status), HealthCheckURL: obj.HealthCheckURL, IntegrationSystemID: obj.IntegrationSystemID, BaseEntity: &model.BaseEntity{ @@ -202,73 +212,28 @@ func (c *converter) GraphQLToModel(obj *graphql.Application, tenantID string) *m } } -func (c *converter) statusToGraphQL(in *model.ApplicationStatus) *graphql.ApplicationStatus { +func (c *converter) statusModelToGraphQL(in *model.ApplicationStatus) *graphql.ApplicationStatus { if in == nil { return &graphql.ApplicationStatus{Condition: graphql.ApplicationStatusConditionInitial} } - var condition graphql.ApplicationStatusCondition - - switch in.Condition { - case model.ApplicationStatusConditionInitial: - condition = graphql.ApplicationStatusConditionInitial - case model.ApplicationStatusConditionFailed: - condition = graphql.ApplicationStatusConditionFailed - case model.ApplicationStatusConditionConnected: - condition = graphql.ApplicationStatusConditionConnected - default: - condition = graphql.ApplicationStatusConditionInitial - } - return &graphql.ApplicationStatus{ - Condition: condition, + Condition: graphql.ApplicationStatusCondition(in.Condition), Timestamp: graphql.Timestamp(in.Timestamp), } } -func (c *converter) statusToModel(in *graphql.ApplicationStatus) *model.ApplicationStatus { +func (c *converter) statusGraphQLToModel(in *graphql.ApplicationStatus) *model.ApplicationStatus { if in == nil { return &model.ApplicationStatus{Condition: model.ApplicationStatusConditionInitial} } - var condition model.ApplicationStatusCondition - - switch in.Condition { - case graphql.ApplicationStatusConditionInitial: - condition = model.ApplicationStatusConditionInitial - case graphql.ApplicationStatusConditionFailed: - condition = model.ApplicationStatusConditionFailed - case graphql.ApplicationStatusConditionConnected: - condition = model.ApplicationStatusConditionConnected - default: - condition = model.ApplicationStatusConditionInitial - } return &model.ApplicationStatus{ - Condition: condition, + Condition: model.ApplicationStatusCondition(in.Condition), Timestamp: time.Time(in.Timestamp), } } -func (c *converter) statusConditionToModel(in *graphql.ApplicationStatusCondition) *model.ApplicationStatusCondition { - if in == nil { - return nil - } - - var condition model.ApplicationStatusCondition - switch *in { - case graphql.ApplicationStatusConditionConnected: - condition = model.ApplicationStatusConditionConnected - case graphql.ApplicationStatusConditionFailed: - condition = model.ApplicationStatusConditionFailed - case graphql.ApplicationStatusConditionInitial: - fallthrough - default: - condition = model.ApplicationStatusConditionInitial - } - - return &condition -} - func timePtrToTimestampPtr(time *time.Time) *graphql.Timestamp { if time == nil { return nil diff --git a/components/director/internal/model/application.go b/components/director/internal/model/application.go index 0c911e0ebb..0523ee8223 100644 --- a/components/director/internal/model/application.go +++ b/components/director/internal/model/application.go @@ -61,9 +61,18 @@ type ApplicationStatus struct { type ApplicationStatusCondition string const ( - ApplicationStatusConditionInitial ApplicationStatusCondition = "INITIAL" - ApplicationStatusConditionConnected ApplicationStatusCondition = "CONNECTED" - ApplicationStatusConditionFailed ApplicationStatusCondition = "FAILED" + ApplicationStatusConditionInitial ApplicationStatusCondition = "INITIAL" + ApplicationStatusConditionConnected ApplicationStatusCondition = "CONNECTED" + ApplicationStatusConditionFailed ApplicationStatusCondition = "FAILED" + ApplicationStatusConditionCreating ApplicationStatusCondition = "CREATING" + ApplicationStatusConditionCreateFailed ApplicationStatusCondition = "CREATE_FAILED" + ApplicationStatusConditionCreateSucceeded ApplicationStatusCondition = "CREATE_SUCCEEDED" + ApplicationStatusConditionUpdating ApplicationStatusCondition = "UPDATING" + ApplicationStatusConditionUpdateFailed ApplicationStatusCondition = "UPDATE_FAILED" + ApplicationStatusConditionUpdateSucceeded ApplicationStatusCondition = "UPDATE_SUCCEEDED" + ApplicationStatusConditionDeleting ApplicationStatusCondition = "DELETING" + ApplicationStatusConditionDeleteFailed ApplicationStatusCondition = "DELETE_FAILED" + ApplicationStatusConditionDeleteSucceeded ApplicationStatusCondition = "DELETE_SUCCEEDED" ) type ApplicationPage struct { diff --git a/components/director/pkg/apperrors/consts.go b/components/director/pkg/apperrors/consts.go index 3edde12a8a..a438e2e1c4 100644 --- a/components/director/pkg/apperrors/consts.go +++ b/components/director/pkg/apperrors/consts.go @@ -4,21 +4,22 @@ package apperrors type ErrorType int const ( - InternalError ErrorType = 10 - UnknownError ErrorType = 11 - NotFound ErrorType = 20 - NotUnique ErrorType = 21 - InvalidData ErrorType = 22 - InsufficientScopes ErrorType = 23 - TenantRequired ErrorType = 24 - TenantNotFound ErrorType = 25 - Unauthorized ErrorType = 26 - InvalidOperation ErrorType = 27 - OperationTimeout ErrorType = 28 - EmptyData ErrorType = 29 - InconsistentData ErrorType = 30 - NotUniqueName ErrorType = 31 - ConcurrentOperation ErrorType = 32 + InternalError ErrorType = 10 + UnknownError ErrorType = 11 + NotFound ErrorType = 20 + NotUnique ErrorType = 21 + InvalidData ErrorType = 22 + InsufficientScopes ErrorType = 23 + TenantRequired ErrorType = 24 + TenantNotFound ErrorType = 25 + Unauthorized ErrorType = 26 + InvalidOperation ErrorType = 27 + OperationTimeout ErrorType = 28 + EmptyData ErrorType = 29 + InconsistentData ErrorType = 30 + NotUniqueName ErrorType = 31 + ConcurrentOperation ErrorType = 32 + InvalidStatusCondition ErrorType = 33 ) const ( @@ -42,4 +43,5 @@ const ( InconsistentDataMsg = "Inconsistent or out-of-range data" NotUniqueNameMsg = "Object name is not unique" ConcurrentOperationMsg = "Concurrent operation" + InvalidStatusConditionMsg = "Invalid status condition" ) diff --git a/components/director/pkg/apperrors/errors.go b/components/director/pkg/apperrors/errors.go index 160a8c32ea..019a11acfd 100644 --- a/components/director/pkg/apperrors/errors.go +++ b/components/director/pkg/apperrors/errors.go @@ -284,6 +284,15 @@ func NewConcurrentOperationInProgressError(msg string) error { arguments: map[string]string{"reason": msg}, } } + +func NewInvalidStatusCondition(resourceType resource.Type) error { + return Error{ + errorCode: InvalidStatusCondition, + Message: InvalidStatusConditionMsg, + arguments: map[string]string{"object": string(resourceType)}, + } +} + func IsValueNotFoundInConfiguration(err error) bool { if customErr, ok := err.(Error); ok { return customErr.errorCode == NotFound && customErr.Message == valueNotFoundInConfigMsg @@ -336,6 +345,10 @@ func IsNewCheckViolationError(err error) bool { return ErrorCode(err) == InconsistentData } +func IsInvalidStatusCondition(err error) bool { + return ErrorCode(err) == InvalidStatusCondition +} + func sortMapKey(m map[string]string) []string { keys := make([]string, 0, len(m)) for k, _ := range m { diff --git a/components/director/pkg/apperrors/errors_test.go b/components/director/pkg/apperrors/errors_test.go index 157db0eb6d..44a93b906a 100644 --- a/components/director/pkg/apperrors/errors_test.go +++ b/components/director/pkg/apperrors/errors_test.go @@ -169,6 +169,12 @@ func TestErrors_Is(t *testing.T) { testFunc: apperrors.IsNotFoundError, expectedResult: true, }, + { + name: "IsInvalidStatusCondition", + input: apperrors.NewInvalidStatusCondition(resource.Application), + testFunc: apperrors.IsInvalidStatusCondition, + expectedResult: true, + }, } for _, testCase := range testCases { t.Run(testCase.name, func(t *testing.T) { @@ -239,6 +245,12 @@ func TestErrors_Is(t *testing.T) { testFunc: apperrors.IsNotFoundError, expectedResult: false, }, + { + name: "IsInvalidStatusCondition", + input: err, + testFunc: apperrors.IsInvalidStatusCondition, + expectedResult: false, + }, } for _, testCase := range testCases { t.Run(testCase.name, func(t *testing.T) { diff --git a/components/director/pkg/graphql/models_gen.go b/components/director/pkg/graphql/models_gen.go index dd0e77e314..bfc708f5d6 100644 --- a/components/director/pkg/graphql/models_gen.go +++ b/components/director/pkg/graphql/models_gen.go @@ -647,20 +647,38 @@ func (e APISpecType) MarshalGQL(w io.Writer) { type ApplicationStatusCondition string const ( - ApplicationStatusConditionInitial ApplicationStatusCondition = "INITIAL" - ApplicationStatusConditionConnected ApplicationStatusCondition = "CONNECTED" - ApplicationStatusConditionFailed ApplicationStatusCondition = "FAILED" + ApplicationStatusConditionInitial ApplicationStatusCondition = "INITIAL" + ApplicationStatusConditionConnected ApplicationStatusCondition = "CONNECTED" + ApplicationStatusConditionFailed ApplicationStatusCondition = "FAILED" + ApplicationStatusConditionCreating ApplicationStatusCondition = "CREATING" + ApplicationStatusConditionCreateFailed ApplicationStatusCondition = "CREATE_FAILED" + ApplicationStatusConditionCreateSucceeded ApplicationStatusCondition = "CREATE_SUCCEEDED" + ApplicationStatusConditionUpdating ApplicationStatusCondition = "UPDATING" + ApplicationStatusConditionUpdateFailed ApplicationStatusCondition = "UPDATE_FAILED" + ApplicationStatusConditionUpdateSucceeded ApplicationStatusCondition = "UPDATE_SUCCEEDED" + ApplicationStatusConditionDeleting ApplicationStatusCondition = "DELETING" + ApplicationStatusConditionDeleteFailed ApplicationStatusCondition = "DELETE_FAILED" + ApplicationStatusConditionDeleteSucceeded ApplicationStatusCondition = "DELETE_SUCCEEDED" ) var AllApplicationStatusCondition = []ApplicationStatusCondition{ ApplicationStatusConditionInitial, ApplicationStatusConditionConnected, ApplicationStatusConditionFailed, + ApplicationStatusConditionCreating, + ApplicationStatusConditionCreateFailed, + ApplicationStatusConditionCreateSucceeded, + ApplicationStatusConditionUpdating, + ApplicationStatusConditionUpdateFailed, + ApplicationStatusConditionUpdateSucceeded, + ApplicationStatusConditionDeleting, + ApplicationStatusConditionDeleteFailed, + ApplicationStatusConditionDeleteSucceeded, } func (e ApplicationStatusCondition) IsValid() bool { switch e { - case ApplicationStatusConditionInitial, ApplicationStatusConditionConnected, ApplicationStatusConditionFailed: + case ApplicationStatusConditionInitial, ApplicationStatusConditionConnected, ApplicationStatusConditionFailed, ApplicationStatusConditionCreating, ApplicationStatusConditionCreateFailed, ApplicationStatusConditionCreateSucceeded, ApplicationStatusConditionUpdating, ApplicationStatusConditionUpdateFailed, ApplicationStatusConditionUpdateSucceeded, ApplicationStatusConditionDeleting, ApplicationStatusConditionDeleteFailed, ApplicationStatusConditionDeleteSucceeded: return true } return false diff --git a/components/director/pkg/graphql/schema.graphql b/components/director/pkg/graphql/schema.graphql index ee2a5248cc..4924db3689 100644 --- a/components/director/pkg/graphql/schema.graphql +++ b/components/director/pkg/graphql/schema.graphql @@ -51,6 +51,15 @@ enum ApplicationStatusCondition { INITIAL CONNECTED FAILED + CREATING + CREATE_FAILED + CREATE_SUCCEEDED + UPDATING + UPDATE_FAILED + UPDATE_SUCCEEDED + DELETING + DELETE_FAILED + DELETE_SUCCEEDED } enum ApplicationTemplateAccessLevel { @@ -621,7 +630,6 @@ type APIDefinition { """ group: String version: Version - ready: Boolean! created_at: Timestamp updated_at: Timestamp deleted_at: Timestamp @@ -660,7 +668,6 @@ type Application { bundle(id: ID!): Bundle auths: [SystemAuth!] eventingConfiguration: ApplicationEventingConfiguration - ready: Boolean! createdAt: Timestamp updatedAt: Timestamp deletedAt: Timestamp @@ -740,7 +747,6 @@ type Bundle { apiDefinition(id: ID!): APIDefinition eventDefinition(id: ID!): EventDefinition document(id: ID!): Document - ready: Boolean! createdAt: Timestamp updatedAt: Timestamp deletedAt: Timestamp @@ -811,7 +817,6 @@ type Document { kind: String data: CLOB fetchRequest: FetchRequest - ready: Boolean! createdAt: Timestamp updatedAt: Timestamp deletedAt: Timestamp @@ -834,7 +839,6 @@ type EventDefinition { group: String spec: EventSpec version: Version - ready: Boolean! createdAt: Timestamp updatedAt: Timestamp deletedAt: Timestamp diff --git a/components/director/pkg/graphql/schema_gen.go b/components/director/pkg/graphql/schema_gen.go index a9cd623a4d..11723aeffc 100644 --- a/components/director/pkg/graphql/schema_gen.go +++ b/components/director/pkg/graphql/schema_gen.go @@ -69,7 +69,6 @@ type ComplexityRoot struct { Group func(childComplexity int) int ID func(childComplexity int) int Name func(childComplexity int) int - Ready func(childComplexity int) int Spec func(childComplexity int) int TargetURL func(childComplexity int) int UpdatedAt func(childComplexity int) int @@ -106,7 +105,6 @@ type ComplexityRoot struct { Labels func(childComplexity int, key *string) int Name func(childComplexity int) int ProviderName func(childComplexity int) int - Ready func(childComplexity int) int Status func(childComplexity int) int UpdatedAt func(childComplexity int) int Webhooks func(childComplexity int) int @@ -185,7 +183,6 @@ type ComplexityRoot struct { InstanceAuthRequestInputSchema func(childComplexity int) int InstanceAuths func(childComplexity int) int Name func(childComplexity int) int - Ready func(childComplexity int) int UpdatedAt func(childComplexity int) int } @@ -234,7 +231,6 @@ type ComplexityRoot struct { Format func(childComplexity int) int ID func(childComplexity int) int Kind func(childComplexity int) int - Ready func(childComplexity int) int Title func(childComplexity int) int UpdatedAt func(childComplexity int) int } @@ -253,7 +249,6 @@ type ComplexityRoot struct { Group func(childComplexity int) int ID func(childComplexity int) int Name func(childComplexity int) int - Ready func(childComplexity int) int Spec func(childComplexity int) int UpdatedAt func(childComplexity int) int Version func(childComplexity int) int @@ -726,13 +721,6 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.APIDefinition.Name(childComplexity), true - case "APIDefinition.ready": - if e.complexity.APIDefinition.Ready == nil { - break - } - - return e.complexity.APIDefinition.Ready(childComplexity), true - case "APIDefinition.spec": if e.complexity.APIDefinition.Spec == nil { break @@ -937,13 +925,6 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.Application.ProviderName(childComplexity), true - case "Application.ready": - if e.complexity.Application.Ready == nil { - break - } - - return e.complexity.Application.Ready(childComplexity), true - case "Application.status": if e.complexity.Application.Status == nil { break @@ -1315,13 +1296,6 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.Bundle.Name(childComplexity), true - case "Bundle.ready": - if e.complexity.Bundle.Ready == nil { - break - } - - return e.complexity.Bundle.Ready(childComplexity), true - case "Bundle.updatedAt": if e.complexity.Bundle.UpdatedAt == nil { break @@ -1532,13 +1506,6 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.Document.Kind(childComplexity), true - case "Document.ready": - if e.complexity.Document.Ready == nil { - break - } - - return e.complexity.Document.Ready(childComplexity), true - case "Document.title": if e.complexity.Document.Title == nil { break @@ -1623,13 +1590,6 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.EventDefinition.Name(childComplexity), true - case "EventDefinition.ready": - if e.complexity.EventDefinition.Ready == nil { - break - } - - return e.complexity.EventDefinition.Ready(childComplexity), true - case "EventDefinition.spec": if e.complexity.EventDefinition.Spec == nil { break @@ -3406,6 +3366,15 @@ enum ApplicationStatusCondition { INITIAL CONNECTED FAILED + CREATING + CREATE_FAILED + CREATE_SUCCEEDED + UPDATING + UPDATE_FAILED + UPDATE_SUCCEEDED + DELETING + DELETE_FAILED + DELETE_SUCCEEDED } enum ApplicationTemplateAccessLevel { @@ -3976,7 +3945,6 @@ type APIDefinition { """ group: String version: Version - ready: Boolean! created_at: Timestamp updated_at: Timestamp deleted_at: Timestamp @@ -4015,7 +3983,6 @@ type Application { bundle(id: ID!): Bundle auths: [SystemAuth!] eventingConfiguration: ApplicationEventingConfiguration - ready: Boolean! createdAt: Timestamp updatedAt: Timestamp deletedAt: Timestamp @@ -4095,7 +4062,6 @@ type Bundle { apiDefinition(id: ID!): APIDefinition eventDefinition(id: ID!): EventDefinition document(id: ID!): Document - ready: Boolean! createdAt: Timestamp updatedAt: Timestamp deletedAt: Timestamp @@ -4166,7 +4132,6 @@ type Document { kind: String data: CLOB fetchRequest: FetchRequest - ready: Boolean! createdAt: Timestamp updatedAt: Timestamp deletedAt: Timestamp @@ -4189,7 +4154,6 @@ type EventDefinition { group: String spec: EventSpec version: Version - ready: Boolean! createdAt: Timestamp updatedAt: Timestamp deletedAt: Timestamp @@ -6969,43 +6933,6 @@ func (ec *executionContext) _APIDefinition_version(ctx context.Context, field gr return ec.marshalOVersion2ᚖgithubᚗcomᚋkymaᚑincubatorᚋcompassᚋcomponentsᚋdirectorᚋpkgᚋgraphqlᚐVersion(ctx, field.Selections, res) } -func (ec *executionContext) _APIDefinition_ready(ctx context.Context, field graphql.CollectedField, obj *APIDefinition) (ret graphql.Marshaler) { - ctx = ec.Tracer.StartFieldExecution(ctx, field) - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - ec.Tracer.EndFieldExecution(ctx) - }() - rctx := &graphql.ResolverContext{ - Object: "APIDefinition", - Field: field, - Args: nil, - IsMethod: false, - } - ctx = graphql.WithResolverContext(ctx, rctx) - ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Ready, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !ec.HasError(rctx) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(bool) - rctx.Result = res - ctx = ec.Tracer.StartFieldChildExecution(ctx) - return ec.marshalNBoolean2bool(ctx, field.Selections, res) -} - func (ec *executionContext) _APIDefinition_created_at(ctx context.Context, field graphql.CollectedField, obj *APIDefinition) (ret graphql.Marshaler) { ctx = ec.Tracer.StartFieldExecution(ctx, field) defer func() { @@ -7938,43 +7865,6 @@ func (ec *executionContext) _Application_eventingConfiguration(ctx context.Conte return ec.marshalOApplicationEventingConfiguration2ᚖgithubᚗcomᚋkymaᚑincubatorᚋcompassᚋcomponentsᚋdirectorᚋpkgᚋgraphqlᚐApplicationEventingConfiguration(ctx, field.Selections, res) } -func (ec *executionContext) _Application_ready(ctx context.Context, field graphql.CollectedField, obj *Application) (ret graphql.Marshaler) { - ctx = ec.Tracer.StartFieldExecution(ctx, field) - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - ec.Tracer.EndFieldExecution(ctx) - }() - rctx := &graphql.ResolverContext{ - Object: "Application", - Field: field, - Args: nil, - IsMethod: false, - } - ctx = graphql.WithResolverContext(ctx, rctx) - ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Ready, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !ec.HasError(rctx) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(bool) - rctx.Result = res - ctx = ec.Tracer.StartFieldChildExecution(ctx) - return ec.marshalNBoolean2bool(ctx, field.Selections, res) -} - func (ec *executionContext) _Application_createdAt(ctx context.Context, field graphql.CollectedField, obj *Application) (ret graphql.Marshaler) { ctx = ec.Tracer.StartFieldExecution(ctx, field) defer func() { @@ -9660,43 +9550,6 @@ func (ec *executionContext) _Bundle_document(ctx context.Context, field graphql. return ec.marshalODocument2ᚖgithubᚗcomᚋkymaᚑincubatorᚋcompassᚋcomponentsᚋdirectorᚋpkgᚋgraphqlᚐDocument(ctx, field.Selections, res) } -func (ec *executionContext) _Bundle_ready(ctx context.Context, field graphql.CollectedField, obj *Bundle) (ret graphql.Marshaler) { - ctx = ec.Tracer.StartFieldExecution(ctx, field) - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - ec.Tracer.EndFieldExecution(ctx) - }() - rctx := &graphql.ResolverContext{ - Object: "Bundle", - Field: field, - Args: nil, - IsMethod: false, - } - ctx = graphql.WithResolverContext(ctx, rctx) - ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Ready, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !ec.HasError(rctx) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(bool) - rctx.Result = res - ctx = ec.Tracer.StartFieldChildExecution(ctx) - return ec.marshalNBoolean2bool(ctx, field.Selections, res) -} - func (ec *executionContext) _Bundle_createdAt(ctx context.Context, field graphql.CollectedField, obj *Bundle) (ret graphql.Marshaler) { ctx = ec.Tracer.StartFieldExecution(ctx, field) defer func() { @@ -10796,43 +10649,6 @@ func (ec *executionContext) _Document_fetchRequest(ctx context.Context, field gr return ec.marshalOFetchRequest2ᚖgithubᚗcomᚋkymaᚑincubatorᚋcompassᚋcomponentsᚋdirectorᚋpkgᚋgraphqlᚐFetchRequest(ctx, field.Selections, res) } -func (ec *executionContext) _Document_ready(ctx context.Context, field graphql.CollectedField, obj *Document) (ret graphql.Marshaler) { - ctx = ec.Tracer.StartFieldExecution(ctx, field) - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - ec.Tracer.EndFieldExecution(ctx) - }() - rctx := &graphql.ResolverContext{ - Object: "Document", - Field: field, - Args: nil, - IsMethod: false, - } - ctx = graphql.WithResolverContext(ctx, rctx) - ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Ready, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !ec.HasError(rctx) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(bool) - rctx.Result = res - ctx = ec.Tracer.StartFieldChildExecution(ctx) - return ec.marshalNBoolean2bool(ctx, field.Selections, res) -} - func (ec *executionContext) _Document_createdAt(ctx context.Context, field graphql.CollectedField, obj *Document) (ret graphql.Marshaler) { ctx = ec.Tracer.StartFieldExecution(ctx, field) defer func() { @@ -11290,43 +11106,6 @@ func (ec *executionContext) _EventDefinition_version(ctx context.Context, field return ec.marshalOVersion2ᚖgithubᚗcomᚋkymaᚑincubatorᚋcompassᚋcomponentsᚋdirectorᚋpkgᚋgraphqlᚐVersion(ctx, field.Selections, res) } -func (ec *executionContext) _EventDefinition_ready(ctx context.Context, field graphql.CollectedField, obj *EventDefinition) (ret graphql.Marshaler) { - ctx = ec.Tracer.StartFieldExecution(ctx, field) - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - ec.Tracer.EndFieldExecution(ctx) - }() - rctx := &graphql.ResolverContext{ - Object: "EventDefinition", - Field: field, - Args: nil, - IsMethod: false, - } - ctx = graphql.WithResolverContext(ctx, rctx) - ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Ready, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !ec.HasError(rctx) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(bool) - rctx.Result = res - ctx = ec.Tracer.StartFieldChildExecution(ctx) - return ec.marshalNBoolean2bool(ctx, field.Selections, res) -} - func (ec *executionContext) _EventDefinition_createdAt(ctx context.Context, field graphql.CollectedField, obj *EventDefinition) (ret graphql.Marshaler) { ctx = ec.Tracer.StartFieldExecution(ctx, field) defer func() { @@ -22633,11 +22412,6 @@ func (ec *executionContext) _APIDefinition(ctx context.Context, sel ast.Selectio out.Values[i] = ec._APIDefinition_group(ctx, field, obj) case "version": out.Values[i] = ec._APIDefinition_version(ctx, field, obj) - case "ready": - out.Values[i] = ec._APIDefinition_ready(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } case "created_at": out.Values[i] = ec._APIDefinition_created_at(ctx, field, obj) case "updated_at": @@ -22846,11 +22620,6 @@ func (ec *executionContext) _Application(ctx context.Context, sel ast.SelectionS res = ec._Application_eventingConfiguration(ctx, field, obj) return res }) - case "ready": - out.Values[i] = ec._Application_ready(ctx, field, obj) - if out.Values[i] == graphql.Null { - atomic.AddUint32(&invalids, 1) - } case "createdAt": out.Values[i] = ec._Application_createdAt(ctx, field, obj) case "updatedAt": @@ -23316,11 +23085,6 @@ func (ec *executionContext) _Bundle(ctx context.Context, sel ast.SelectionSet, o res = ec._Bundle_document(ctx, field, obj) return res }) - case "ready": - out.Values[i] = ec._Bundle_ready(ctx, field, obj) - if out.Values[i] == graphql.Null { - atomic.AddUint32(&invalids, 1) - } case "createdAt": out.Values[i] = ec._Bundle_createdAt(ctx, field, obj) case "updatedAt": @@ -23569,11 +23333,6 @@ func (ec *executionContext) _Document(ctx context.Context, sel ast.SelectionSet, res = ec._Document_fetchRequest(ctx, field, obj) return res }) - case "ready": - out.Values[i] = ec._Document_ready(ctx, field, obj) - if out.Values[i] == graphql.Null { - atomic.AddUint32(&invalids, 1) - } case "createdAt": out.Values[i] = ec._Document_createdAt(ctx, field, obj) case "updatedAt": @@ -23659,11 +23418,6 @@ func (ec *executionContext) _EventDefinition(ctx context.Context, sel ast.Select out.Values[i] = ec._EventDefinition_spec(ctx, field, obj) case "version": out.Values[i] = ec._EventDefinition_version(ctx, field, obj) - case "ready": - out.Values[i] = ec._EventDefinition_ready(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } case "createdAt": out.Values[i] = ec._EventDefinition_createdAt(ctx, field, obj) case "updatedAt": diff --git a/components/director/pkg/operation/api.go b/components/director/pkg/operation/api.go index deae294b0b..cbc2ead14e 100644 --- a/components/director/pkg/operation/api.go +++ b/components/director/pkg/operation/api.go @@ -22,6 +22,8 @@ import ( "fmt" "net/http" + "github.com/gorilla/mux" + "github.com/kyma-incubator/compass/components/director/internal/model" "github.com/kyma-incubator/compass/components/director/pkg/apperrors" @@ -67,11 +69,13 @@ func (h *handler) ServeHTTP(writer http.ResponseWriter, request *http.Request) { return } - queryParams := request.URL.Query() + routeVariables := mux.Vars(request) + resourceId := routeVariables[ResourceIDParam] + resourceType := routeVariables[ResourceTypeParam] op := &Operation{ - ResourceID: queryParams.Get(ResourceIDParam), - ResourceType: resource.Type(queryParams.Get(ResourceTypeParam)), + ResourceID: resourceId, + ResourceType: resource.Type(resourceType), } log.C(ctx).Infof("Executing Operation API with resourceType: %s and resourceID: %s", op.ResourceType, op.ResourceID) @@ -111,7 +115,7 @@ func (h *handler) ServeHTTP(writer http.ResponseWriter, request *http.Request) { return } - opResponse := prepareLastOperation(res) + opResponse := buildLastOperation(res) err = json.NewEncoder(writer).Encode(opResponse) if err != nil { @@ -119,7 +123,7 @@ func (h *handler) ServeHTTP(writer http.ResponseWriter, request *http.Request) { } } -func prepareLastOperation(resource model.Entity) *OperationResponse { +func buildLastOperation(resource model.Entity) *OperationResponse { opResponse := &OperationResponse{ Operation: &Operation{ ResourceID: resource.GetID(), @@ -128,21 +132,9 @@ func prepareLastOperation(resource model.Entity) *OperationResponse { Error: resource.GetError(), } - if !resource.GetDeletedAt().IsZero() { - opResponse.OperationType = OperationTypeDelete - } else if !resource.GetUpdatedAt().IsZero() { - opResponse.OperationType = OperationTypeUpdate - } else { - opResponse.OperationType = OperationTypeCreate - } - - if !resource.GetReady() { - opResponse.Status = OperationStatusInProgress - } else if resource.GetError() == nil { - opResponse.Status = OperationStatusSucceeded - } else { - opResponse.Status = OperationStatusFailed - } + opResponse.initializeOperationType(resource) + opResponse.initializeOperationStatus(resource) + opResponse.initializeCreationTime(resource) return opResponse } diff --git a/components/director/pkg/operation/api_test.go b/components/director/pkg/operation/api_test.go index 5d8a2e8214..5efacc83e8 100644 --- a/components/director/pkg/operation/api_test.go +++ b/components/director/pkg/operation/api_test.go @@ -21,14 +21,17 @@ import ( "encoding/json" "net/http" "net/http/httptest" + "path" "strings" "testing" "time" + "github.com/kyma-incubator/compass/components/director/internal/model" "github.com/kyma-incubator/compass/components/director/pkg/apperrors" + "github.com/gorilla/mux" + "github.com/kyma-incubator/compass/components/director/internal/domain/tenant" - "github.com/kyma-incubator/compass/components/director/internal/model" "github.com/kyma-incubator/compass/components/director/pkg/operation" "github.com/kyma-incubator/compass/components/director/pkg/persistence/txtest" "github.com/kyma-incubator/compass/components/director/pkg/resource" @@ -44,7 +47,7 @@ func TestServeHTTP(t *testing.T) { t.Run("when tenant is missing it should return internal server error", func(t *testing.T) { writer := httptest.NewRecorder() - req := fixEmptyRequest(t, context.Background()) + req := fixEmptyRequest(t, context.Background(), string(resource.Application), resourceID) handler := operation.NewHandler(nil, nil, func(ctx context.Context) (string, error) { return "", mockedError() @@ -59,7 +62,7 @@ func TestServeHTTP(t *testing.T) { ctx := tenant.SaveToContext(context.Background(), tenantID, tenantID) writer := httptest.NewRecorder() - req := fixEmptyRequest(t, ctx) + req := fixEmptyRequest(t, ctx, "", "") handler := operation.NewHandler(nil, nil, loadTenantFunc) handler.ServeHTTP(writer, req) @@ -72,12 +75,7 @@ func TestServeHTTP(t *testing.T) { ctx := tenant.SaveToContext(context.Background(), tenantID, tenantID) writer := httptest.NewRecorder() - req := fixEmptyRequest(t, ctx) - - queryValues := req.URL.Query() - queryValues.Add(operation.ResourceIDParam, "123") - - req.URL.RawQuery = queryValues.Encode() + req := fixEmptyRequest(t, ctx, string(resource.Application), "123") handler := operation.NewHandler(nil, nil, loadTenantFunc) handler.ServeHTTP(writer, req) @@ -90,7 +88,7 @@ func TestServeHTTP(t *testing.T) { ctx := tenant.SaveToContext(context.Background(), tenantID, tenantID) writer := httptest.NewRecorder() - req := fixEmptyRequest(t, ctx) + req := fixEmptyRequest(t, ctx, string(resource.Runtime), resourceID) queryValues := req.URL.Query() queryValues.Add(operation.ResourceTypeParam, "runtime") @@ -108,13 +106,7 @@ func TestServeHTTP(t *testing.T) { ctx := tenant.SaveToContext(context.Background(), tenantID, tenantID) writer := httptest.NewRecorder() - req := fixEmptyRequest(t, ctx) - - queryValues := req.URL.Query() - queryValues.Add(operation.ResourceIDParam, resourceID) - queryValues.Add(operation.ResourceTypeParam, string(resource.Application)) - - req.URL.RawQuery = queryValues.Encode() + req := fixEmptyRequest(t, ctx, string(resource.Application), resourceID) mockedTx, mockedTransactioner := txtest.NewTransactionContextGenerator(mockedError()).ThatFailsOnBegin() defer mockedTx.AssertExpectations(t) @@ -131,7 +123,7 @@ func TestServeHTTP(t *testing.T) { ctx := tenant.SaveToContext(context.Background(), tenantID, tenantID) writer := httptest.NewRecorder() - req := fixEmptyRequest(t, ctx) + req := fixEmptyRequest(t, ctx, string(resource.Application), resourceID) queryValues := req.URL.Query() queryValues.Add(operation.ResourceIDParam, resourceID) @@ -156,7 +148,7 @@ func TestServeHTTP(t *testing.T) { ctx := tenant.SaveToContext(context.Background(), tenantID, tenantID) writer := httptest.NewRecorder() - req := fixEmptyRequest(t, ctx) + req := fixEmptyRequest(t, ctx, string(resource.Application), resourceID) queryValues := req.URL.Query() queryValues.Add(operation.ResourceIDParam, resourceID) @@ -181,7 +173,7 @@ func TestServeHTTP(t *testing.T) { ctx := tenant.SaveToContext(context.Background(), tenantID, tenantID) writer := httptest.NewRecorder() - req := fixEmptyRequest(t, ctx) + req := fixEmptyRequest(t, ctx, string(resource.Application), resourceID) queryValues := req.URL.Query() queryValues.Add(operation.ResourceIDParam, resourceID) @@ -205,13 +197,7 @@ func TestServeHTTP(t *testing.T) { t.Run("when application is successfully fetched it should return a respective operation", func(t *testing.T) { ctx := tenant.SaveToContext(context.Background(), tenantID, tenantID) - req := fixEmptyRequest(t, ctx) - - queryValues := req.URL.Query() - queryValues.Add(operation.ResourceIDParam, resourceID) - queryValues.Add(operation.ResourceTypeParam, string(resource.Application)) - - req.URL.RawQuery = queryValues.Encode() + req := fixEmptyRequest(t, ctx, string(resource.Application), resourceID) mockedErr := mockedError().Error() now := time.Now() @@ -230,6 +216,7 @@ func TestServeHTTP(t *testing.T) { ResourceID: resourceID, ResourceType: resource.Application, OperationType: operation.OperationTypeCreate, + CreationTime: now, }, Status: operation.OperationStatusSucceeded, }, @@ -242,6 +229,7 @@ func TestServeHTTP(t *testing.T) { ResourceID: resourceID, ResourceType: resource.Application, OperationType: operation.OperationTypeUpdate, + CreationTime: now.Add(1 * time.Minute), }, Status: operation.OperationStatusSucceeded, }, @@ -254,6 +242,7 @@ func TestServeHTTP(t *testing.T) { ResourceID: resourceID, ResourceType: resource.Application, OperationType: operation.OperationTypeDelete, + CreationTime: now.Add(1 * time.Minute), }, Status: operation.OperationStatusSucceeded, }, @@ -266,6 +255,7 @@ func TestServeHTTP(t *testing.T) { ResourceID: resourceID, ResourceType: resource.Application, OperationType: operation.OperationTypeCreate, + CreationTime: now, }, Status: operation.OperationStatusInProgress, }, @@ -278,6 +268,7 @@ func TestServeHTTP(t *testing.T) { ResourceID: resourceID, ResourceType: resource.Application, OperationType: operation.OperationTypeUpdate, + CreationTime: now.Add(1 * time.Minute), }, Status: operation.OperationStatusInProgress, }, @@ -290,6 +281,7 @@ func TestServeHTTP(t *testing.T) { ResourceID: resourceID, ResourceType: resource.Application, OperationType: operation.OperationTypeDelete, + CreationTime: now.Add(1 * time.Minute), }, Status: operation.OperationStatusInProgress, }, @@ -302,6 +294,7 @@ func TestServeHTTP(t *testing.T) { ResourceID: resourceID, ResourceType: resource.Application, OperationType: operation.OperationTypeCreate, + CreationTime: now, }, Status: operation.OperationStatusFailed, Error: &mockedErr, @@ -315,6 +308,7 @@ func TestServeHTTP(t *testing.T) { ResourceID: resourceID, ResourceType: resource.Application, OperationType: operation.OperationTypeUpdate, + CreationTime: now.Add(1 * time.Minute), }, Status: operation.OperationStatusFailed, Error: &mockedErr, @@ -328,6 +322,7 @@ func TestServeHTTP(t *testing.T) { ResourceID: resourceID, ResourceType: resource.Application, OperationType: operation.OperationTypeDelete, + CreationTime: now.Add(1 * time.Minute), }, Status: operation.OperationStatusFailed, Error: &mockedErr, @@ -359,8 +354,11 @@ func TestServeHTTP(t *testing.T) { } -func fixEmptyRequest(t *testing.T, ctx context.Context) *http.Request { - req, err := http.NewRequestWithContext(ctx, "GET", "/", nil) +func fixEmptyRequest(t *testing.T, ctx context.Context, resourceType string, resourceId string) *http.Request { + endpointPath := path.Join("/", resourceType, resourceId) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpointPath, nil) + vars := map[string]string{"resource_type": resourceType, "resource_id": resourceId} + req = mux.SetURLVars(req, vars) require.NoError(t, err) return req diff --git a/components/director/pkg/operation/directive.go b/components/director/pkg/operation/directive.go index 498f7040af..142f88a223 100644 --- a/components/director/pkg/operation/directive.go +++ b/components/director/pkg/operation/directive.go @@ -23,6 +23,8 @@ import ( "math" "net/http" + "github.com/kyma-incubator/compass/components/director/pkg/resource" + "github.com/kyma-incubator/compass/components/director/pkg/webhook" "github.com/kyma-incubator/compass/components/director/pkg/header" @@ -47,18 +49,20 @@ type WebhookFetcherFunc func(ctx context.Context, resourceID string) ([]*model.W type directive struct { transact persistence.Transactioner webhookFetcherFunc WebhookFetcherFunc - tenantLoaderFunc TenantLoaderFunc resourceFetcherFunc ResourceFetcherFunc + resourceUpdaterFunc ResourceUpdaterFunc + tenantLoaderFunc TenantLoaderFunc scheduler Scheduler } // NewDirective creates a new handler struct responsible for the Async directive business logic -func NewDirective(transact persistence.Transactioner, webhookFetcherFunc WebhookFetcherFunc, resourceFetcherFunc ResourceFetcherFunc, tenantLoaderFunc TenantLoaderFunc, scheduler Scheduler) *directive { +func NewDirective(transact persistence.Transactioner, webhookFetcherFunc WebhookFetcherFunc, resourceFetcherFunc ResourceFetcherFunc, resourceUpdaterFunc ResourceUpdaterFunc, tenantLoaderFunc TenantLoaderFunc, scheduler Scheduler) *directive { return &directive{ transact: transact, webhookFetcherFunc: webhookFetcherFunc, - tenantLoaderFunc: tenantLoaderFunc, resourceFetcherFunc: resourceFetcherFunc, + resourceUpdaterFunc: resourceUpdaterFunc, + tenantLoaderFunc: tenantLoaderFunc, scheduler: scheduler, } } @@ -119,6 +123,17 @@ func (d *directive) HandleOperation(ctx context.Context, _ interface{}, next gql return nil, apperrors.NewInternalError("Failed to process operation") } + appConditionStatus, err := determineApplicationInProgressStatus(operationType) + if err != nil { + log.C(ctx).WithError(err).Error("While determining the application status condition") + return nil, err + } + + if err := d.resourceUpdaterFunc(ctx, entity.GetID(), false, nil, *appConditionStatus); err != nil { + log.C(ctx).WithError(err).Errorf("While updating resource %s with id %s and status condition %v", entity.GetType(), entity.GetID(), appConditionStatus) + return nil, apperrors.NewInternalError("Unable to update resource %s with id %s", entity.GetType(), entity.GetID()) + } + operation.ResourceID = entity.GetID() operation.ResourceType = entity.GetType() @@ -292,3 +307,19 @@ func executeSyncOperation(ctx context.Context, next gqlgen.Resolver, tx persiste func isErrored(app model.Entity) bool { return (app.GetError() == nil || *app.GetError() == "") } + +func determineApplicationInProgressStatus(opType graphql.OperationType) (*model.ApplicationStatusCondition, error) { + var appStatusCondition model.ApplicationStatusCondition + switch opType { + case graphql.OperationTypeCreate: + appStatusCondition = model.ApplicationStatusConditionCreating + case graphql.OperationTypeUpdate: + appStatusCondition = model.ApplicationStatusConditionUpdating + case graphql.OperationTypeDelete: + appStatusCondition = model.ApplicationStatusConditionDeleting + default: + return nil, apperrors.NewInvalidStatusCondition(resource.Application) + } + + return &appStatusCondition, nil +} diff --git a/components/director/pkg/operation/directive_test.go b/components/director/pkg/operation/directive_test.go index 8581b6d10b..4ca61ec5c4 100644 --- a/components/director/pkg/operation/directive_test.go +++ b/components/director/pkg/operation/directive_test.go @@ -25,24 +25,22 @@ import ( "testing" "time" - "github.com/kyma-incubator/compass/components/director/pkg/webhook" + "github.com/kyma-incubator/compass/components/director/pkg/apperrors" + "github.com/kyma-incubator/compass/components/director/pkg/resource" + gqlgen "github.com/99designs/gqlgen/graphql" "github.com/kyma-incubator/compass/components/director/pkg/header" + tx_automock "github.com/kyma-incubator/compass/components/director/pkg/persistence/automock" + "github.com/kyma-incubator/compass/components/director/pkg/persistence/txtest" + "github.com/kyma-incubator/compass/components/director/pkg/webhook" + "github.com/vektah/gqlparser/ast" "github.com/kyma-incubator/compass/components/director/internal/model" - "github.com/kyma-incubator/compass/components/director/pkg/apperrors" "github.com/kyma-incubator/compass/components/director/pkg/graphql" "github.com/kyma-incubator/compass/components/director/pkg/operation" "github.com/kyma-incubator/compass/components/director/pkg/operation/automock" - "github.com/kyma-incubator/compass/components/director/pkg/resource" - - gqlgen "github.com/99designs/gqlgen/graphql" - - tx_automock "github.com/kyma-incubator/compass/components/director/pkg/persistence/automock" - "github.com/kyma-incubator/compass/components/director/pkg/persistence/txtest" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" - "github.com/vektah/gqlparser/ast" ) const ( @@ -76,7 +74,7 @@ func TestHandleOperation(t *testing.T) { } ctx = gqlgen.WithResolverContext(ctx, rCtx) - directive := operation.NewDirective(nil, nil, nil, nil, nil) + directive := operation.NewDirective(nil, nil, nil, nil, nil, nil) // WHEN _, err := directive.HandleOperation(ctx, nil, nil, graphql.OperationTypeCreate, &whTypeApplicationRegister, &resourceIdField) @@ -100,7 +98,7 @@ func TestHandleOperation(t *testing.T) { defer mockedTx.AssertExpectations(t) defer mockedTransactioner.AssertExpectations(t) - directive := operation.NewDirective(mockedTransactioner, nil, nil, nil, nil) + directive := operation.NewDirective(mockedTransactioner, nil, nil, nil, nil, nil) // WHEN res, err := directive.HandleOperation(ctx, nil, nil, graphql.OperationTypeCreate, &whTypeApplicationRegister, &resourceIdField) @@ -125,7 +123,7 @@ func TestHandleOperation(t *testing.T) { defer mockedTx.AssertExpectations(t) defer mockedTransactioner.AssertExpectations(t) - directive := operation.NewDirective(mockedTransactioner, nil, nil, nil, nil) + directive := operation.NewDirective(mockedTransactioner, nil, nil, nil, nil, nil) dummyResolver := &dummyResolver{} @@ -153,7 +151,7 @@ func TestHandleOperation(t *testing.T) { defer mockedTx.AssertExpectations(t) defer mockedTransactioner.AssertExpectations(t) - directive := operation.NewDirective(mockedTransactioner, nil, nil, nil, nil) + directive := operation.NewDirective(mockedTransactioner, nil, nil, nil, nil, nil) dummyResolver := &dummyResolver{} @@ -181,7 +179,7 @@ func TestHandleOperation(t *testing.T) { defer mockedTx.AssertExpectations(t) defer mockedTransactioner.AssertExpectations(t) - directive := operation.NewDirective(mockedTransactioner, nil, nil, nil, nil) + directive := operation.NewDirective(mockedTransactioner, nil, nil, nil, nil, nil) dummyResolver := &dummyResolver{} @@ -213,7 +211,7 @@ func TestHandleOperation(t *testing.T) { defer mockedTx.AssertExpectations(t) defer mockedTransactioner.AssertExpectations(t) - directive := operation.NewDirective(mockedTransactioner, nil, nil, nil, nil) + directive := operation.NewDirective(mockedTransactioner, nil, nil, nil, nil, nil) dummyResolver := &dummyResolver{} @@ -248,7 +246,7 @@ func TestHandleOperation(t *testing.T) { defer mockedTx.AssertExpectations(t) defer mockedTransactioner.AssertExpectations(t) - directive := operation.NewDirective(mockedTransactioner, nil, nil, nil, nil) + directive := operation.NewDirective(mockedTransactioner, nil, nil, nil, nil, nil) dummyResolver := &dummyResolver{} @@ -285,7 +283,7 @@ func TestHandleOperation(t *testing.T) { directive := operation.NewDirective(mockedTransactioner, func(_ context.Context, _ string) ([]*model.Webhook, error) { return nil, mockedError() - }, nil, nil, nil) + }, nil, nil, nil, nil) dummyResolver := &dummyResolver{} @@ -320,7 +318,7 @@ func TestHandleOperation(t *testing.T) { defer mockedTx.AssertExpectations(t) defer mockedTransactioner.AssertExpectations(t) - directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, nil, func(_ context.Context) (string, error) { + directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, nil, mockedEmptyResourceUpdaterFunc, func(_ context.Context) (string, error) { return "", mockedError() }, nil) @@ -357,7 +355,7 @@ func TestHandleOperation(t *testing.T) { defer mockedTx.AssertExpectations(t) defer mockedTransactioner.AssertExpectations(t) - directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, nil, mockedTenantLoaderFunc, nil) + directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, nil, mockedEmptyResourceUpdaterFunc, mockedTenantLoaderFunc, nil) dummyResolver := &dummyResolver{} @@ -392,7 +390,7 @@ func TestHandleOperation(t *testing.T) { defer mockedTx.AssertExpectations(t) defer mockedTransactioner.AssertExpectations(t) - directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, nil, mockedTenantLoaderFunc, nil) + directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, nil, mockedEmptyResourceUpdaterFunc, mockedTenantLoaderFunc, nil) dummyResolver := &dummyResolver{} @@ -429,7 +427,7 @@ func TestHandleOperation(t *testing.T) { directive := operation.NewDirective(mockedTransactioner, func(_ context.Context, _ string) ([]*model.Webhook, error) { return nil, mockedError() - }, nil, mockedTenantLoaderFunc, nil) + }, nil, mockedEmptyResourceUpdaterFunc, mockedTenantLoaderFunc, nil) dummyResolver := &dummyResolver{} @@ -463,7 +461,7 @@ func TestHandleOperation(t *testing.T) { directive := operation.NewDirective(mockedTransactioner, func(_ context.Context, _ string) ([]*model.Webhook, error) { return nil, nil - }, nil, mockedTenantLoaderFunc, nil) + }, nil, mockedEmptyResourceUpdaterFunc, mockedTenantLoaderFunc, nil) dummyResolver := &dummyResolver{} @@ -501,7 +499,7 @@ func TestHandleOperation(t *testing.T) { {ID: webhookID2, Type: model.WebhookTypeRegisterApplication}, {ID: webhookID3, Type: model.WebhookTypeRegisterApplication}, }, nil - }, nil, mockedTenantLoaderFunc, nil) + }, nil, mockedEmptyResourceUpdaterFunc, mockedTenantLoaderFunc, nil) dummyResolver := &dummyResolver{} @@ -537,7 +535,7 @@ func TestHandleOperation(t *testing.T) { mockedScheduler.On("Schedule", mock.Anything, mock.Anything).Return("", mockedError()) defer mockedScheduler.AssertExpectations(t) - directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, nil, mockedTenantLoaderFunc, mockedScheduler) + directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, nil, mockedEmptyResourceUpdaterFunc, mockedTenantLoaderFunc, mockedScheduler) dummyResolver := &dummyResolver{} @@ -578,7 +576,7 @@ func TestHandleOperation(t *testing.T) { mockedScheduler.On("Schedule", mock.Anything, mock.Anything).Return(testID, nil) defer mockedScheduler.AssertExpectations(t) - directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, nil, mockedTenantLoaderFunc, mockedScheduler) + directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, nil, mockedEmptyResourceUpdaterFunc, mockedTenantLoaderFunc, mockedScheduler) dummyResolver := &dummyResolver{} @@ -618,7 +616,7 @@ func TestHandleOperation(t *testing.T) { defer mockedTransactioner.AssertExpectations(t) dummyResolver := &dummyResolver{} scheduler := &operation.DisabledScheduler{} - directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, nil, mockedTenantLoaderFunc, scheduler) + directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, nil, mockedEmptyResourceUpdaterFunc, mockedTenantLoaderFunc, scheduler) // WHEN _, err := directive.HandleOperation(ctx, nil, dummyResolver.SuccessResolve, operationType, nil, nil) @@ -661,7 +659,7 @@ func TestHandleOperation(t *testing.T) { mockedScheduler := &automock.Scheduler{} defer mockedScheduler.AssertExpectations(t) - directive := operation.NewDirective(mockedTransactioner, errorWebhooksResponse, nil, mockedTenantLoaderFunc, mockedScheduler) + directive := operation.NewDirective(mockedTransactioner, errorWebhooksResponse, nil, mockedEmptyResourceUpdaterFunc, mockedTenantLoaderFunc, mockedScheduler) // WHEN _, err := directive.HandleOperation(ctx, nil, dummyResolver.SuccessResolve, operationType, &whTypeApplicationRegister, nil) @@ -738,7 +736,7 @@ func TestHandleOperation(t *testing.T) { t.Run(testCase.Name, func(t *testing.T) { directive := operation.NewDirective(mockedTransactioner, func(_ context.Context, _ string) ([]*model.Webhook, error) { return testCase.Webhooks, nil - }, nil, mockedTenantLoaderFunc, mockedScheduler) + }, nil, mockedEmptyResourceUpdaterFunc, mockedTenantLoaderFunc, mockedScheduler) dummyResolver := &dummyResolver{} @@ -757,7 +755,7 @@ func TestHandleOperation(t *testing.T) { op := (*operations)[0] require.Equal(t, operationID, op.OperationID) - require.Equal(t, operation.OperationType(operationType), op.OperationType) + require.Equal(t, operationType, op.OperationType) require.Equal(t, operationCategory, op.OperationCategory) headers := make(map[string]string, 0) @@ -781,6 +779,309 @@ func TestHandleOperation(t *testing.T) { }) } }) + + t.Run("when mutation is in ASYNC mode, there is operation in context and resource updater func fails should return error", func(t *testing.T) { + // GIVEN + ctx := context.Background() + operationMode := graphql.OperationModeAsync + rCtx := &gqlgen.ResolverContext{ + Object: "RegisterApplication", + Field: gqlgen.CollectedField{ + Field: &ast.Field{ + Name: "registerApplication", + }, + }, + Args: map[string]interface{}{operation.ModeParam: &operationMode}, + IsMethod: false, + } + ctx = gqlgen.WithResolverContext(ctx, rCtx) + + mockedTx, mockedTransactioner := txtest.NewTransactionContextGenerator(nil).ThatDoesntExpectCommit() + defer mockedTx.AssertExpectations(t) + defer mockedTransactioner.AssertExpectations(t) + + directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, nil, mockedResourceUpdaterFuncWithError, mockedTenantLoaderFunc, nil) + + dummyResolver := &dummyResolver{} + + // WHEN + res, err := directive.HandleOperation(ctx, nil, dummyResolver.SuccessResolve, graphql.OperationTypeCreate, &whTypeApplicationRegister, nil) + // THEN + require.Error(t, err) + require.Contains(t, err.Error(), "Unable to update resource application with id") + require.Empty(t, res) + require.Equal(t, graphql.OperationModeAsync, dummyResolver.finalCtx.Value(operation.OpModeKey)) + + opsFromCtx := dummyResolver.finalCtx.Value(operation.OpCtxKey) + assertNoOperationsInCtx(t, opsFromCtx) + }) + + t.Run("when mutation is in ASYNC mode, there is operation in context and resource updater func is executed with CREATE operation type should finish successfully and update application status to CREATING", func(t *testing.T) { + // GIVEN + ctx := context.Background() + operationMode := graphql.OperationModeAsync + operationCategory := "registerApplication" + rCtx := &gqlgen.ResolverContext{ + Object: "RegisterApplication", + Field: gqlgen.CollectedField{ + Field: &ast.Field{ + Name: operationCategory, + }, + }, + Args: map[string]interface{}{operation.ModeParam: &operationMode, resourceIdField: resourceID}, + IsMethod: false, + } + + ctx = gqlgen.WithResolverContext(ctx, rCtx) + ctx = context.WithValue(ctx, header.ContextKey, mockedHeaders) + + mockedScheduler := &automock.Scheduler{} + mockedScheduler.On("Schedule", mock.Anything, mock.Anything).Return(operationID, nil) + defer mockedScheduler.AssertExpectations(t) + + mockedTx, mockedTransactioner := txtest.NewTransactionContextGenerator(nil).ThatSucceeds() + defer mockedTx.AssertExpectations(t) + defer mockedTransactioner.AssertExpectations(t) + + directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, mockedResourceFetcherFunc, func(ctx context.Context, id string, ready bool, errorMsg *string, appStatusCondition model.ApplicationStatusCondition) error { + require.NotNil(t, ctx) + require.Equal(t, resourceID, id) + require.Equal(t, false, ready) + require.Nil(t, errorMsg) + require.Equal(t, model.ApplicationStatusConditionCreating, appStatusCondition) + return nil + }, mockedTenantLoaderFunc, mockedScheduler) + + dummyResolver := &dummyResolver{} + + // WHEN + res, err := directive.HandleOperation(ctx, nil, dummyResolver.SuccessResolve, graphql.OperationTypeCreate, &whTypeApplicationRegister, &resourceIdField) + + // THEN + require.NoError(t, err) + require.Equal(t, mockedNextResponse(), res) + require.Equal(t, graphql.OperationModeAsync, dummyResolver.finalCtx.Value(operation.OpModeKey)) + + opsFromCtx := dummyResolver.finalCtx.Value(operation.OpCtxKey) + operations, ok := opsFromCtx.(*[]*operation.Operation) + require.True(t, ok) + require.Len(t, *operations, 1) + + op := (*operations)[0] + require.Equal(t, operationID, op.OperationID) + require.Equal(t, operation.OperationTypeCreate, op.OperationType) + require.Equal(t, operationCategory, op.OperationCategory) + + headers := make(map[string]string, 0) + for key, value := range mockedHeaders { + headers[key] = value[0] + } + + expectedRequestObject := &webhook.RequestObject{ + Application: mockedNextResponse().(webhook.Resource), + TenantID: tenantID, + Headers: headers, + } + + expectedObj, err := json.Marshal(expectedRequestObject) + require.NoError(t, err) + + require.Equal(t, string(expectedObj), op.RequestObject) + + require.Len(t, op.WebhookIDs, 1) + require.Equal(t, webhookID1, op.WebhookIDs[0]) + }) + + t.Run("when mutation is in ASYNC mode, there is operation in context and resource updater func is executed with UPDATE operation type should finish successfully and update application status to UPDATING", func(t *testing.T) { + // GIVEN + ctx := context.Background() + operationMode := graphql.OperationModeAsync + operationCategory := "registerApplication" + rCtx := &gqlgen.ResolverContext{ + Object: "RegisterApplication", + Field: gqlgen.CollectedField{ + Field: &ast.Field{ + Name: operationCategory, + }, + }, + Args: map[string]interface{}{operation.ModeParam: &operationMode, resourceIdField: resourceID}, + IsMethod: false, + } + + ctx = gqlgen.WithResolverContext(ctx, rCtx) + ctx = context.WithValue(ctx, header.ContextKey, mockedHeaders) + + mockedScheduler := &automock.Scheduler{} + mockedScheduler.On("Schedule", mock.Anything, mock.Anything).Return(operationID, nil) + defer mockedScheduler.AssertExpectations(t) + + mockedTx, mockedTransactioner := txtest.NewTransactionContextGenerator(nil).ThatSucceeds() + defer mockedTx.AssertExpectations(t) + defer mockedTransactioner.AssertExpectations(t) + + directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, mockedResourceFetcherFunc, func(ctx context.Context, id string, ready bool, errorMsg *string, appStatusCondition model.ApplicationStatusCondition) error { + require.NotNil(t, ctx) + require.Equal(t, resourceID, id) + require.Equal(t, false, ready) + require.Nil(t, errorMsg) + require.Equal(t, model.ApplicationStatusConditionUpdating, appStatusCondition) + return nil + }, mockedTenantLoaderFunc, mockedScheduler) + + dummyResolver := &dummyResolver{} + + // WHEN + res, err := directive.HandleOperation(ctx, nil, dummyResolver.SuccessResolve, graphql.OperationTypeUpdate, &whTypeApplicationRegister, &resourceIdField) + + // THEN + require.NoError(t, err) + require.Equal(t, mockedNextResponse(), res) + require.Equal(t, graphql.OperationModeAsync, dummyResolver.finalCtx.Value(operation.OpModeKey)) + + opsFromCtx := dummyResolver.finalCtx.Value(operation.OpCtxKey) + operations, ok := opsFromCtx.(*[]*operation.Operation) + require.True(t, ok) + require.Len(t, *operations, 1) + + op := (*operations)[0] + require.Equal(t, operationID, op.OperationID) + require.Equal(t, operation.OperationTypeUpdate, op.OperationType) + require.Equal(t, operationCategory, op.OperationCategory) + + headers := make(map[string]string, 0) + for key, value := range mockedHeaders { + headers[key] = value[0] + } + + expectedRequestObject := &webhook.RequestObject{ + Application: mockedNextResponse().(webhook.Resource), + TenantID: tenantID, + Headers: headers, + } + + expectedObj, err := json.Marshal(expectedRequestObject) + require.NoError(t, err) + + require.Equal(t, string(expectedObj), op.RequestObject) + + require.Len(t, op.WebhookIDs, 1) + require.Equal(t, webhookID1, op.WebhookIDs[0]) + }) + + t.Run("when mutation is in ASYNC mode, there is operation in context and resource updater func is executed with DELETE operation type should finish successfully and update application status to DELETING", func(t *testing.T) { + // GIVEN + ctx := context.Background() + operationMode := graphql.OperationModeAsync + operationCategory := "registerApplication" + rCtx := &gqlgen.ResolverContext{ + Object: "RegisterApplication", + Field: gqlgen.CollectedField{ + Field: &ast.Field{ + Name: operationCategory, + }, + }, + Args: map[string]interface{}{operation.ModeParam: &operationMode, resourceIdField: resourceID}, + IsMethod: false, + } + + ctx = gqlgen.WithResolverContext(ctx, rCtx) + ctx = context.WithValue(ctx, header.ContextKey, mockedHeaders) + + mockedScheduler := &automock.Scheduler{} + mockedScheduler.On("Schedule", mock.Anything, mock.Anything).Return(operationID, nil) + defer mockedScheduler.AssertExpectations(t) + + mockedTx, mockedTransactioner := txtest.NewTransactionContextGenerator(nil).ThatSucceeds() + defer mockedTx.AssertExpectations(t) + defer mockedTransactioner.AssertExpectations(t) + + directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, mockedResourceFetcherFunc, func(ctx context.Context, id string, ready bool, errorMsg *string, appStatusCondition model.ApplicationStatusCondition) error { + require.NotNil(t, ctx) + require.Equal(t, resourceID, id) + require.Equal(t, false, ready) + require.Nil(t, errorMsg) + require.Equal(t, model.ApplicationStatusConditionDeleting, appStatusCondition) + return nil + }, mockedTenantLoaderFunc, mockedScheduler) + + dummyResolver := &dummyResolver{} + + // WHEN + res, err := directive.HandleOperation(ctx, nil, dummyResolver.SuccessResolve, graphql.OperationTypeDelete, &whTypeApplicationRegister, &resourceIdField) + + // THEN + require.NoError(t, err) + require.Equal(t, mockedNextResponse(), res) + require.Equal(t, graphql.OperationModeAsync, dummyResolver.finalCtx.Value(operation.OpModeKey)) + + opsFromCtx := dummyResolver.finalCtx.Value(operation.OpCtxKey) + operations, ok := opsFromCtx.(*[]*operation.Operation) + require.True(t, ok) + require.Len(t, *operations, 1) + + op := (*operations)[0] + require.Equal(t, operationID, op.OperationID) + require.Equal(t, operation.OperationTypeDelete, op.OperationType) + require.Equal(t, operationCategory, op.OperationCategory) + + headers := make(map[string]string, 0) + for key, value := range mockedHeaders { + headers[key] = value[0] + } + + expectedRequestObject := &webhook.RequestObject{ + Application: mockedNextResponse().(webhook.Resource), + TenantID: tenantID, + Headers: headers, + } + + expectedObj, err := json.Marshal(expectedRequestObject) + require.NoError(t, err) + + require.Equal(t, string(expectedObj), op.RequestObject) + + require.Len(t, op.WebhookIDs, 1) + require.Equal(t, webhookID1, op.WebhookIDs[0]) + }) + + t.Run("when mutation is in ASYNC mode, there is operation in context and resource updater func is executed with invalid operation type should return error", func(t *testing.T) { + // GIVEN + ctx := context.Background() + operationMode := graphql.OperationModeAsync + operationCategory := "registerApplication" + rCtx := &gqlgen.ResolverContext{ + Object: "RegisterApplication", + Field: gqlgen.CollectedField{ + Field: &ast.Field{ + Name: operationCategory, + }, + }, + Args: map[string]interface{}{operation.ModeParam: &operationMode, resourceIdField: resourceID}, + IsMethod: false, + } + + ctx = gqlgen.WithResolverContext(ctx, rCtx) + + mockedTx, mockedTransactioner := txtest.NewTransactionContextGenerator(nil).ThatDoesntExpectCommit() + defer mockedTx.AssertExpectations(t) + defer mockedTransactioner.AssertExpectations(t) + + directive := operation.NewDirective(mockedTransactioner, mockedWebhooksResponse, mockedResourceFetcherFunc, mockedEmptyResourceUpdaterFunc, mockedTenantLoaderFunc, nil) + + dummyResolver := &dummyResolver{} + + // WHEN + res, err := directive.HandleOperation(ctx, nil, dummyResolver.SuccessResolve, "invalid", &whTypeApplicationRegister, &resourceIdField) + + // THEN + require.Error(t, err) + require.Contains(t, err.Error(), "Invalid status condition") + require.Nil(t, res) + require.Equal(t, graphql.OperationModeAsync, dummyResolver.finalCtx.Value(operation.OpModeKey)) + + opsFromCtx := dummyResolver.finalCtx.Value(operation.OpCtxKey) + assertNoOperationsInCtx(t, opsFromCtx) + }) } func TestHandleOperation_ConcurrencyCheck(t *testing.T) { @@ -913,17 +1214,9 @@ func TestHandleOperation_ConcurrencyCheck(t *testing.T) { transactionFunc: func() (*tx_automock.PersistenceTx, *tx_automock.Transactioner) { return txtest.NewTransactionContextGenerator(nil).ThatSucceeds() }, - tenantLoaderFunc: tenantLoaderWithOptionalErr(nil), - resourceFetcherFunc: func(ctx context.Context, tenant, id string) (model.Entity, error) { - return &model.Application{ - BaseEntity: &model.BaseEntity{ - ID: resourceID, - Ready: true, - CreatedAt: timeToTimePtr(time.Now()), - }, - }, nil - }, - resolverFunc: (&dummyResolver{}).SuccessResolve, + tenantLoaderFunc: tenantLoaderWithOptionalErr(nil), + resourceFetcherFunc: mockedResourceFetcherFunc, + resolverFunc: (&dummyResolver{}).SuccessResolve, validationFunc: func(t *testing.T, res interface{}, err error) { require.NoError(t, err) require.Equal(t, mockedNextResponse(), res) @@ -958,7 +1251,7 @@ func TestHandleOperation_ConcurrencyCheck(t *testing.T) { directive := operation.NewDirective(mockedTransactioner, func(ctx context.Context, resourceID string) ([]*model.Webhook, error) { return nil, nil - }, test.resourceFetcherFunc, test.tenantLoaderFunc, test.scheduler) + }, test.resourceFetcherFunc, mockedEmptyResourceUpdaterFunc, test.tenantLoaderFunc, test.scheduler) // WHEN res, err := directive.HandleOperation(ctx, nil, test.resolverFunc, graphql.OperationTypeDelete, nil, &resourceIdField) @@ -987,7 +1280,7 @@ func TestHandleOperation_ConcurrencyCheck(t *testing.T) { defer mockedTx.AssertExpectations(t) defer mockedTransactioner.AssertExpectations(t) - directive := operation.NewDirective(mockedTransactioner, nil, nil, nil, nil) + directive := operation.NewDirective(mockedTransactioner, nil, nil, nil, nil, nil) // WHEN _, err := directive.HandleOperation(ctx, nil, nil, graphql.OperationTypeDelete, &whTypeApplicationUnregister, nil) @@ -1031,10 +1324,28 @@ func mockedWebhooksResponse(_ context.Context, _ string) ([]*model.Webhook, erro }, nil } +func mockedResourceFetcherFunc(context.Context, string, string) (model.Entity, error) { + return &model.Application{ + BaseEntity: &model.BaseEntity{ + ID: resourceID, + Ready: true, + CreatedAt: timeToTimePtr(time.Now()), + }, + }, nil +} + func mockedTenantLoaderFunc(_ context.Context) (string, error) { return tenantID, nil } +func mockedResourceUpdaterFuncWithError(context.Context, string, bool, *string, model.ApplicationStatusCondition) error { + return mockedError() +} + +func mockedEmptyResourceUpdaterFunc(context.Context, string, bool, *string, model.ApplicationStatusCondition) error { + return nil +} + func mockedError() error { return errors.New("mocked error") } diff --git a/components/director/pkg/operation/middleware.go b/components/director/pkg/operation/middleware.go index b5aa3da1e3..3e464e88b3 100644 --- a/components/director/pkg/operation/middleware.go +++ b/components/director/pkg/operation/middleware.go @@ -49,7 +49,7 @@ func (m *middleware) ExtensionHandler(ctx context.Context, next func(ctx context locations := make([]string, 0) for _, operation := range operations { - operationURL := fmt.Sprintf("%s/operations?%s=%s&%s=%s", m.directorURL, ResourceIDParam, operation.ResourceID, ResourceTypeParam, operation.ResourceType) + operationURL := fmt.Sprintf("%s/%s/%s", m.directorURL, operation.ResourceType, operation.ResourceID) locations = append(locations, operationURL) } diff --git a/components/director/pkg/operation/middleware_test.go b/components/director/pkg/operation/middleware_test.go index 14b01415c2..800a73fa9d 100644 --- a/components/director/pkg/operation/middleware_test.go +++ b/components/director/pkg/operation/middleware_test.go @@ -218,7 +218,7 @@ func (d *dummyMiddlewareResolver) SuccessResolve(ctx context.Context) []byte { } func operationURL(op *operation.Operation, directorURL string) string { - return fmt.Sprintf("%s/operations?%s=%s&%s=%s", directorURL, operation.ResourceIDParam, op.ResourceID, operation.ResourceTypeParam, op.ResourceType) + return fmt.Sprintf("%s/%s/%s", directorURL, op.ResourceType, op.ResourceID) } func gqlResultItem(resultName string) string { diff --git a/components/director/pkg/operation/operation.go b/components/director/pkg/operation/operation.go index 4bf3241db0..8e024061c9 100644 --- a/components/director/pkg/operation/operation.go +++ b/components/director/pkg/operation/operation.go @@ -18,6 +18,9 @@ package operation import ( "context" + "time" + + "github.com/kyma-incubator/compass/components/director/internal/model" validation "github.com/go-ozzo/ozzo-validation" "github.com/go-ozzo/ozzo-validation/is" @@ -66,6 +69,7 @@ type Operation struct { OperationCategory string `json:"operation_category,omitempty"` ResourceID string `json:"resource_id,omitempty"` ResourceType resource.Type `json:"resource_type,omitempty"` + CreationTime time.Time `json:"creation_time,omitempty"` CorrelationID string `json:"correlation_id,omitempty"` WebhookIDs []string `json:"webhook_ids,omitempty"` RequestObject string `json:"request_object,omitempty"` @@ -119,3 +123,35 @@ func ModeFromCtx(ctx context.Context) graphql.OperationMode { return graphql.OperationModeSync } + +func (opResponse *OperationResponse) initializeOperationType(resource model.Entity) { + if !resource.GetDeletedAt().IsZero() { + opResponse.OperationType = OperationTypeDelete + } else if !resource.GetUpdatedAt().IsZero() { + opResponse.OperationType = OperationTypeUpdate + } else { + opResponse.OperationType = OperationTypeCreate + } +} + +func (opResponse *OperationResponse) initializeOperationStatus(resource model.Entity) { + if !resource.GetReady() { + opResponse.Status = OperationStatusInProgress + } else if resource.GetError() == nil { + opResponse.Status = OperationStatusSucceeded + } else { + opResponse.Status = OperationStatusFailed + } +} + +func (opResponse *OperationResponse) initializeCreationTime(resource model.Entity) { + createdAt, updatedAt, deletedAt := resource.GetCreatedAt(), resource.GetUpdatedAt(), resource.GetDeletedAt() + + if deletedAt.After(createdAt) && deletedAt.After(updatedAt) { + opResponse.CreationTime = deletedAt + } else if updatedAt.After(createdAt) { + opResponse.CreationTime = updatedAt + } else { + opResponse.CreationTime = createdAt + } +} diff --git a/components/director/pkg/operation/update_operation_handler.go b/components/director/pkg/operation/update_operation_handler.go index 98340a406d..a6f87a4f82 100644 --- a/components/director/pkg/operation/update_operation_handler.go +++ b/components/director/pkg/operation/update_operation_handler.go @@ -22,6 +22,10 @@ import ( "io/ioutil" "net/http" + "github.com/kyma-incubator/compass/components/director/pkg/str" + + "github.com/kyma-incubator/compass/components/director/internal/model" + "github.com/kyma-incubator/compass/components/director/pkg/apperrors" "github.com/kyma-incubator/compass/components/director/pkg/persistence" @@ -43,7 +47,7 @@ type OperationRequest struct { } // ResourceUpdaterFunc defines a function which updates a particular resource ready and error status -type ResourceUpdaterFunc func(ctx context.Context, id string, ready bool, errorMsg *string) error +type ResourceUpdaterFunc func(ctx context.Context, id string, ready bool, errorMsg *string, appStatusCondition model.ApplicationStatusCondition) error // ResourceFetcherFunc defines a function which deletes a particular resource by ID type ResourceDeleterFunc func(ctx context.Context, id string) error @@ -113,11 +117,13 @@ func (h *updateOperationHandler) ServeHTTP(writer http.ResponseWriter, request * return } + appConditionStatus := determineApplicationFinalStatus(operation.OperationType, opError) + switch operation.OperationType { case OperationTypeCreate: fallthrough case OperationTypeUpdate: - if err := resourceUpdaterFunc(ctx, operation.ResourceID, true, opError); err != nil { + if err := resourceUpdaterFunc(ctx, operation.ResourceID, true, opError, appConditionStatus); err != nil { log.C(ctx).WithError(err).Errorf("While updating resource %s with id %s", operation.ResourceType, operation.ResourceID) apperrors.WriteAppError(ctx, writer, apperrors.NewInternalError("Unable to update resource %s with id %s", operation.ResourceType, operation.ResourceID), http.StatusInternalServerError) return @@ -125,7 +131,7 @@ func (h *updateOperationHandler) ServeHTTP(writer http.ResponseWriter, request * case OperationTypeDelete: resourceDeleterFunc := h.resourceDeleterFuncs[operation.ResourceType] if operation.Error != "" { - if err := resourceUpdaterFunc(ctx, operation.ResourceID, true, opError); err != nil { + if err := resourceUpdaterFunc(ctx, operation.ResourceID, true, opError, appConditionStatus); err != nil { log.C(ctx).WithError(err).Errorf("While updating resource %s with id %s", operation.ResourceType, operation.ResourceID) apperrors.WriteAppError(ctx, writer, apperrors.NewInternalError("Unable to update resource %s with id %s", operation.ResourceType, operation.ResourceID), http.StatusInternalServerError) return @@ -182,3 +188,26 @@ func stringifiedJsonError(errorMsg string) (*string, error) { stringifiedErr := string(bytesErr) return &stringifiedErr, nil } + +func determineApplicationFinalStatus(opType OperationType, opError *string) model.ApplicationStatusCondition { + appConditionStatus := model.ApplicationStatusConditionInitial + switch opType { + case OperationTypeCreate: + appConditionStatus = model.ApplicationStatusConditionCreateSucceeded + if opError != nil || str.PtrStrToStr(opError) != "" { + appConditionStatus = model.ApplicationStatusConditionCreateFailed + } + case OperationTypeUpdate: + appConditionStatus = model.ApplicationStatusConditionUpdateSucceeded + if opError != nil || str.PtrStrToStr(opError) != "" { + appConditionStatus = model.ApplicationStatusConditionUpdateFailed + } + case OperationTypeDelete: + appConditionStatus = model.ApplicationStatusConditionDeleteSucceeded + if opError != nil || str.PtrStrToStr(opError) != "" { + appConditionStatus = model.ApplicationStatusConditionDeleteFailed + } + } + + return appConditionStatus +} diff --git a/components/director/pkg/operation/update_operation_handler_test.go b/components/director/pkg/operation/update_operation_handler_test.go index ff33bc4865..ff29f34e10 100644 --- a/components/director/pkg/operation/update_operation_handler_test.go +++ b/components/director/pkg/operation/update_operation_handler_test.go @@ -25,6 +25,8 @@ import ( "net/http/httptest" "testing" + "github.com/kyma-incubator/compass/components/director/internal/model" + "github.com/stretchr/testify/require" "github.com/kyma-incubator/compass/components/director/pkg/operation" @@ -79,7 +81,7 @@ func TestUpdateOperationHandler(t *testing.T) { defer mockedTransactioner.AssertExpectations(t) handler := operation.NewUpdateOperationHandler(mockedTransactioner, map[resource.Type]operation.ResourceUpdaterFunc{ - resource.Application: func(ctx context.Context, id string, ready bool, errorMsg *string) error { + resource.Application: func(ctx context.Context, id string, ready bool, errorMsg *string, appConditionStatus model.ApplicationStatusCondition) error { return nil }, }, nil) @@ -98,7 +100,7 @@ func TestUpdateOperationHandler(t *testing.T) { defer mockedTransactioner.AssertExpectations(t) handler := operation.NewUpdateOperationHandler(mockedTransactioner, map[resource.Type]operation.ResourceUpdaterFunc{ - resource.Application: func(ctx context.Context, id string, ready bool, errorMsg *string) error { + resource.Application: func(ctx context.Context, id string, ready bool, errorMsg *string, appConditionStatus model.ApplicationStatusCondition) error { return nil }, }, nil) @@ -117,7 +119,7 @@ func TestUpdateOperationHandler(t *testing.T) { defer mockedTransactioner.AssertExpectations(t) handler := operation.NewUpdateOperationHandler(mockedTransactioner, map[resource.Type]operation.ResourceUpdaterFunc{ - resource.Application: func(ctx context.Context, id string, ready bool, errorMsg *string) error { + resource.Application: func(ctx context.Context, id string, ready bool, errorMsg *string, appConditionStatus model.ApplicationStatusCondition) error { return errors.New("failed to update") }, }, nil) @@ -150,46 +152,52 @@ func TestUpdateOperationHandler(t *testing.T) { t.Run("when operation has finished", func(t *testing.T) { type testCase struct { - Name string - OperationType operation.OperationType - ExpectedError string - Ready bool - UpdateCalled int - DeleteCalled int + Name string + OperationType operation.OperationType + ExpectedError string + Ready bool + AppConditionStatus model.ApplicationStatusCondition + UpdateCalled int + DeleteCalled int } cases := []testCase{ { - Name: "CREATE with error", - OperationType: operation.OperationTypeCreate, - ExpectedError: "operation failed", - Ready: true, - UpdateCalled: 1, + Name: "CREATE with error", + OperationType: operation.OperationTypeCreate, + ExpectedError: "operation failed", + Ready: true, + AppConditionStatus: model.ApplicationStatusConditionCreateFailed, + UpdateCalled: 1, }, { - Name: "CREATE with NO error", - OperationType: operation.OperationTypeCreate, - Ready: true, - UpdateCalled: 1, + Name: "CREATE with NO error", + OperationType: operation.OperationTypeCreate, + Ready: true, + AppConditionStatus: model.ApplicationStatusConditionCreateSucceeded, + UpdateCalled: 1, }, { - Name: "UPDATE with error", - OperationType: operation.OperationTypeUpdate, - ExpectedError: "operation UPDATE failed", - Ready: true, - UpdateCalled: 1, + Name: "UPDATE with error", + OperationType: operation.OperationTypeUpdate, + ExpectedError: "operation UPDATE failed", + Ready: true, + AppConditionStatus: model.ApplicationStatusConditionUpdateFailed, + UpdateCalled: 1, }, { - Name: "UPDATE with NO error", - OperationType: operation.OperationTypeUpdate, - Ready: true, - UpdateCalled: 1, + Name: "UPDATE with NO error", + OperationType: operation.OperationTypeUpdate, + Ready: true, + AppConditionStatus: model.ApplicationStatusConditionUpdateSucceeded, + UpdateCalled: 1, }, { - Name: "DELETE with error", - OperationType: operation.OperationTypeDelete, - ExpectedError: "operation DELETE failed", - Ready: true, - UpdateCalled: 1, + Name: "DELETE with error", + OperationType: operation.OperationTypeDelete, + ExpectedError: "operation DELETE failed", + Ready: true, + AppConditionStatus: model.ApplicationStatusConditionDeleteFailed, + UpdateCalled: 1, }, { Name: "DELETE with NO error", @@ -211,9 +219,10 @@ func TestUpdateOperationHandler(t *testing.T) { updateCalled := 0 deleteCalled := 0 handler := operation.NewUpdateOperationHandler(mockedTransactioner, map[resource.Type]operation.ResourceUpdaterFunc{ - resource.Application: func(ctx context.Context, id string, ready bool, errorMsg *string) error { + resource.Application: func(ctx context.Context, id string, ready bool, errorMsg *string, appConditionStatus model.ApplicationStatusCondition) error { require.Equal(t, resourceID, id) require.Equal(t, testCase.Ready, ready) + require.Equal(t, testCase.AppConditionStatus, appConditionStatus) if expectedErrorMsg == "" { require.Nil(t, errorMsg) } else { diff --git a/components/director/pkg/str/strings.go b/components/director/pkg/str/strings.go index 4f1e1c4818..21c57ace92 100644 --- a/components/director/pkg/str/strings.go +++ b/components/director/pkg/str/strings.go @@ -54,3 +54,10 @@ func PrefixStrings(in []string, prefix string) []string { func Title(s string) string { return strings.Title(strings.ToLower(s)) } + +func PtrStrToStr(s *string) string { + if s == nil { + return "" + } + return *s +} diff --git a/components/operations-controller/go.sum b/components/operations-controller/go.sum index 5b09a83a81..d0b89cb7c0 100644 --- a/components/operations-controller/go.sum +++ b/components/operations-controller/go.sum @@ -445,78 +445,9 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kyma-incubator/compass v1.2.0 h1:HNF/sUNCcZKfTztGx5Rmnssytlnkmo9FzO2SDC6j1Ps= -github.com/kyma-incubator/compass/components/director v0.0.0-20210211193843-fc35afac8c55 h1:725OI0XQ16tG0/Du/QhAur6UAZV1LhmvOc256Zk+7BY= -github.com/kyma-incubator/compass/components/director v0.0.0-20210211193843-fc35afac8c55/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210215163040-bf34a18315ef h1:knn3aGCZhWXZlMv7cIgVw30nj+dsdwe0LsJhfJA0Ck8= -github.com/kyma-incubator/compass/components/director v0.0.0-20210215163040-bf34a18315ef/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210216185717-b539fec3afce/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210216195113-0f23362ec238 h1:h7S7tQkTT4hOjpmBxm2/f+raypW9zXGaoW3uVI31zXk= -github.com/kyma-incubator/compass/components/director v0.0.0-20210216195113-0f23362ec238/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210218213445-ac00abe99fdf h1:46I5ApboC7o4BA1Ahr7T+AEqQ8qT8TPLAKtG/8Qv0Tw= -github.com/kyma-incubator/compass/components/director v0.0.0-20210218213445-ac00abe99fdf/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210218235843-2181c2b44c92/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210219000551-ac447a84759e/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210219205106-815ebd841c55/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210219221741-8d8b487fc15a h1:bzKmzbFItKQBrvG8y8LzhT92VkMWDw2Q223MDB2QOoo= -github.com/kyma-incubator/compass/components/director v0.0.0-20210219221741-8d8b487fc15a/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210223102734-eec5f02b3002 h1:Q9lExxTVGRWIjGF6+Qm4f9hEuMBIZQS+r53HBBkABFY= -github.com/kyma-incubator/compass/components/director v0.0.0-20210223102734-eec5f02b3002/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210224182057-7e1f297f476e h1:QCWy9EJYEQ+EYNGxs/AURo3zKkrti/HJQdE05AJNnCM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210224182057-7e1f297f476e/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210226012137-cc67531aad37 h1:BhhPnpcTMOS6fhqAHz5di1AUC5+PZzlzMvgCJ5JmV4Q= -github.com/kyma-incubator/compass/components/director v0.0.0-20210226012137-cc67531aad37/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210226201234-1f2c3aa54b57 h1:OUF8j5X6eVIuHZGPvIFq0XsAHw5nQvZCLoDgzT9A7WU= -github.com/kyma-incubator/compass/components/director v0.0.0-20210226201234-1f2c3aa54b57/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210226224453-ae476f10722f h1:yeHOIXZPLxEve0rTfYDMsuqZfF68vpniCTGDVPpSGEE= -github.com/kyma-incubator/compass/components/director v0.0.0-20210226224453-ae476f10722f/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210227204502-359b41d07384 h1:QwwJMrYUvYV7wf786Oi+1DAt8rpOUL1R5cVLQo3Qjcg= -github.com/kyma-incubator/compass/components/director v0.0.0-20210227204502-359b41d07384/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210228173944-d9a3b126d7bd h1:zpqEW8ekiqJ1R+27vGCWQJwHXYKJn+YJNlRglSYffwo= -github.com/kyma-incubator/compass/components/director v0.0.0-20210228173944-d9a3b126d7bd/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= github.com/kyma-incubator/compass/components/director v0.0.0-20210301143156-3b39f117e7bf h1:tv7EJzPYCN5EivRhEvUQcUnk3o8iyhNsD/vdsiv7AtY= github.com/kyma-incubator/compass/components/director v0.0.0-20210301143156-3b39f117e7bf/go.mod h1:hJ3bgWfwFhdnxZF7Gcok5Rm1zDT4bHtVGHDeXDBvTfg= github.com/kyma-incubator/compass/components/operations-controller v0.0.0-20210213091620-beb5492e9d8b/go.mod h1:201wjhJxyaSA4pVp33VKOp91oNC+PQR591haj1t7KhA= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210212095009-51eff7d5c546 h1:UIBhhQnr78D6Je6ypLZkA/HQEuR2gCkdDX2/VBxAW0k= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210212095009-51eff7d5c546/go.mod h1:DPPdBNOkur2nk3BBkTqqFhS6tkcXLgGybTui1/yA2NM= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210215163343-ece06e94d3e4 h1:mvUu0JtexzTZcS8qe+O8/qmX/KhZX70Xx5+HF0sFhjM= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210215163343-ece06e94d3e4/go.mod h1:Vd6sJzEvBaeVqo5d/OS7jpMGukBFzG0MHvgwvHSN6oE= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210216190005-7c9faad763ec h1:DBYs9mU0JId+WBEZRc2kLY4Uk+fxS1LqrbbtGcryYFQ= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210216190005-7c9faad763ec/go.mod h1:NcygLWQAJGCKXXXksqKP7b5jCokMdQnqdH0oorbTh7Y= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210216195228-f2c108d93c69 h1:0sQj44YJuRguQWIKRGXNqe9ipIi2MSDYYfAP9ldYTvI= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210216195228-f2c108d93c69/go.mod h1:LPAfN4bDmAuTdTFYYkLwYApT8ckJoy7BoBwHtNRn/G0= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210218213549-2183b7cc48c4 h1:olS/WjtGTSxXJfaa4RazUmCEOompN1NOJBYmxy1qPR4= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210218213549-2183b7cc48c4/go.mod h1:tmbUMXAGwITqDk1vFifkl5NynvObAdwqVyyAfXjp5iU= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210219000020-dc177fc47caf h1:XFQwNqyUwd3+PIeuJhvdgkbn4wEamJTP1lI5HRCxHHs= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210219000020-dc177fc47caf/go.mod h1:3U1MFOdlWHkKK3nXEb7uoT7Gq8HNk1fe7Jkr+/7iHP4= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210219000750-a0c030134e3b h1:2iQjJft2353kXHhghr7+MYckjMWgyanGYneG1SVIF+M= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210219000750-a0c030134e3b/go.mod h1:NKTpWcM5KU8tCympGwgo5xGMDCdMqZXhNgRBs8Tijs0= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210219205217-5cf20dfb6722 h1:DZqeeIf8iY63wZkjYh7QWDZM+dKfsuITPOwb0SHxDFM= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210219205217-5cf20dfb6722/go.mod h1:r9PpywaE4lQ4fAQKyI0XIzn1eq5P/1TBHCi1zR7SNZM= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210219221827-77395273cdd5 h1:0Zg1BkdeipSfz1IH2WL91XDDi1njgNRIuDdEvMX61t8= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210219221827-77395273cdd5/go.mod h1:nL0fgQlRZTa3L4ag35KbB8q1d/IHZ6nMMorYX4oGQlg= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210223102858-d58ed558301d h1:SX6wOQ8pQANMwvlFTZxnB8GCzadeYLjxkYDRXpq2dOI= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210223102858-d58ed558301d/go.mod h1:iMwELAdpX+d01zaJdJgUg8SS55ExqIS98JQXdQvEMs8= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210223161454-fe6212d816c6 h1:l9x4djLtbu5qv+9/t/XjW4Gsd3akfezexKH1khTAGYE= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210223161454-fe6212d816c6/go.mod h1:iMwELAdpX+d01zaJdJgUg8SS55ExqIS98JQXdQvEMs8= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210224182300-5fcca86dd2d0 h1:pMVbC9F7kf8v+5C0h7ZHNWj5p6htiQ5eRYHOEGupxtE= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210224182300-5fcca86dd2d0/go.mod h1:jW+CRBxikkn/nTN0ZNPvtEsuODVSGI2Sy+GJeg+t1f4= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210224182910-2f64821e6a46 h1:cHInyo9HqF8sKJj6qrK4D0W0Pc1whARyDTmdiHxpDug= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210224182910-2f64821e6a46/go.mod h1:jW+CRBxikkn/nTN0ZNPvtEsuODVSGI2Sy+GJeg+t1f4= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210226012225-860e8d345c4c h1:nqHiDX8MfvLLGhDIzZyIwTP8PVLh44HAc1eR9M8/ZdU= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210226012225-860e8d345c4c/go.mod h1:ijKUUZJQsY9q9zTjugMtZrUnAECcNEqOILXfICAWcnE= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210226201405-5a82841b49e7 h1:uKUhT9ARmL583+LtcvQjDj8efe4Vf6Hdmupmek3bqIY= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210226201405-5a82841b49e7/go.mod h1:4Hl1IyzHOrBeoXX6aBVge0OqPJV5S/YfRs51j3MHoHY= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210226224624-37f13cce8a23 h1:tJkuIu9HrvvlN/K5LiuiG12N0wtRAcBoklnsbA93HAQ= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210226224624-37f13cce8a23/go.mod h1:fK3HyzlG7eryYX+wp4Ava3zw9GQPvRReKsvUwwAC/70= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210227204555-55f9f4a28499 h1:hyaFLmFd1zntS1U43nMFTg/b1/vdVeb9XBd+MoSMlF0= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210227204555-55f9f4a28499/go.mod h1:CnmBR1GAJ4dR0QtwZEroMiM4lHNFkUe0Zg/yhgaj1OM= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210227233606-bdfac0c0c3ed h1:g7MLgvtLiy/HFTIYpMnNP4JCiRpxrfRmy2NjiNw9GjE= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210227233606-bdfac0c0c3ed/go.mod h1:CnmBR1GAJ4dR0QtwZEroMiM4lHNFkUe0Zg/yhgaj1OM= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210228174935-39481dccaaf3 h1:KsFQJmNJkC2fgft8vui5MZgAnjTFfpgYHi1PplLmb7g= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210228174935-39481dccaaf3/go.mod h1:ADIOCz/BND336k5RYasOl2QDAR/NTBAxsB/uOuoqoMc= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210301144805-1544f7017bea h1:9yMa5+MlEpih45YKuvn+66rNJz22UfywpdAUVLQPCOk= -github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210301144805-1544f7017bea/go.mod h1:K1miIQTocreo5NaWZ/QpP3nYZqojQ6G3sf/NTZfa6dk= github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210301181003-c1c76083a015 h1:r9ma0mEZ8SaXbDMurZoj/jbmbA49eWzy0so4D7BLF+k= github.com/kyma-incubator/compass/components/system-broker v0.0.0-20210301181003-c1c76083a015/go.mod h1:K1miIQTocreo5NaWZ/QpP3nYZqojQ6G3sf/NTZfa6dk= github.com/lestrrat-go/jwx v0.9.2/go.mod h1:iEoxlYfZjvoGpuWwxUz+eR5e6KTJGsaRcy/YNA/UnBk= diff --git a/components/operations-controller/internal/director/client.go b/components/operations-controller/internal/director/client.go index 4928048f01..0cd868243c 100644 --- a/components/operations-controller/internal/director/client.go +++ b/components/operations-controller/internal/director/client.go @@ -32,8 +32,9 @@ import ( // client implements the DirectorClient interface type client struct { types.ApplicationLister - httpClient *http.Client - directorURL string + httpClient *http.Client + directorURL string + operationEndpoint string } type Request struct { @@ -44,7 +45,7 @@ type Request struct { } // NewClient constructs a default implementation of the Client interface -func NewClient(directorURL string, cfg *graphqlbroker.Config, httpClient *http.Client) (*client, error) { +func NewClient(operationEndpoint string, cfg *graphqlbroker.Config, httpClient *http.Client) (*client, error) { graphqlClient, err := graphqlbroker.PrepareGqlClientWithHttpClient(cfg, httpClient) if err != nil { return nil, err @@ -53,7 +54,7 @@ func NewClient(directorURL string, cfg *graphqlbroker.Config, httpClient *http.C return &client{ ApplicationLister: graphqlClient, httpClient: httpClient, - directorURL: directorURL, + operationEndpoint: operationEndpoint, }, nil } @@ -64,7 +65,7 @@ func (c *client) UpdateOperation(ctx context.Context, request *Request) error { return err } - req, err := http.NewRequestWithContext(ctx, http.MethodPut, c.directorURL+"/operations", bytes.NewBuffer(body)) + req, err := http.NewRequestWithContext(ctx, http.MethodPut, c.operationEndpoint, bytes.NewBuffer(body)) if err != nil { return err } diff --git a/components/operations-controller/internal/director/config.go b/components/operations-controller/internal/director/config.go index 6fc99ad1bd..8201af8c44 100644 --- a/components/operations-controller/internal/director/config.go +++ b/components/operations-controller/internal/director/config.go @@ -20,19 +20,19 @@ import "github.com/pkg/errors" // Settings type to be loaded from the environment type Config struct { - InternalAddress string `mapstructure:"internal_address" description:"the internal address of the Director component"` + OperationEndpoint string `mapstructure:"operation_endpoint" description:"the operation endpoint of the Director component"` } // DefaultSettings returns the default values for configuring the System Broker func DefaultConfig() *Config { return &Config{ - InternalAddress: "http://localhost:3002", + OperationEndpoint: "http://localhost:3002/operation", } } // Validate ensures that the director config properties have valid values func (c *Config) Validate() error { - if len(c.InternalAddress) == 0 { + if len(c.OperationEndpoint) == 0 { return errors.New("validate director settings: missing internal address") } return nil diff --git a/components/operations-controller/internal/director/config_test.go b/components/operations-controller/internal/director/config_test.go index d79896fbd7..02782b1651 100644 --- a/components/operations-controller/internal/director/config_test.go +++ b/components/operations-controller/internal/director/config_test.go @@ -30,19 +30,19 @@ func TestConfig_Validate(t *testing.T) { ExpectValid bool }{ { - Msg: "Internal Address is not set should be invalid", + Msg: "Operation endpoint is not set should be invalid", ConfigProvider: func() *director.Config { config := director.DefaultConfig() - config.InternalAddress = "" + config.OperationEndpoint = "" return config }, ExpectValid: false, }, { - Msg: "Actual Internal Address set should be valid", + Msg: "Actual operation endpoint set should be valid", ConfigProvider: func() *director.Config { config := director.DefaultConfig() - config.InternalAddress = "http://127.0.0.1:3002" + config.OperationEndpoint = "http://127.0.0.1:3002/operation" return config }, ExpectValid: true, diff --git a/components/operations-controller/main.go b/components/operations-controller/main.go index e081a7dc03..6563fb8f86 100644 --- a/components/operations-controller/main.go +++ b/components/operations-controller/main.go @@ -97,7 +97,7 @@ func main() { httpClient, err := prepareHttpClient(cfg.HttpClient) fatalOnError(err) - directorClient, err := director.NewClient(cfg.Director.InternalAddress, cfg.GraphQLClient, httpClient) + directorClient, err := director.NewClient(cfg.Director.OperationEndpoint, cfg.GraphQLClient, httpClient) fatalOnError(err) controller := controllers.NewOperationReconciler(cfg.Webhook, diff --git a/components/schema-migrator/migrations/director/20210311160954_alter_application_status_condition.down.sql b/components/schema-migrator/migrations/director/20210311160954_alter_application_status_condition.down.sql new file mode 100644 index 0000000000..8d175656f8 --- /dev/null +++ b/components/schema-migrator/migrations/director/20210311160954_alter_application_status_condition.down.sql @@ -0,0 +1,23 @@ +BEGIN; + +ALTER TABLE applications + ALTER COLUMN status_condition DROP DEFAULT; + +ALTER TYPE application_status_condition RENAME TO application_status_condition_old; +CREATE TYPE application_status_condition AS ENUM ( + 'INITIAL', + 'CONNECTED', + 'FAILED' +); + +ALTER TABLE applications + ALTER COLUMN status_condition TYPE application_status_condition + USING status_condition::text::application_status_condition; + +ALTER TABLE applications + ALTER COLUMN status_condition + SET DEFAULT 'INITIAL' ::application_status_condition; + +DROP TYPE application_status_condition_old; + +COMMIT; diff --git a/components/schema-migrator/migrations/director/20210311160954_alter_application_status_condition.up.sql b/components/schema-migrator/migrations/director/20210311160954_alter_application_status_condition.up.sql new file mode 100644 index 0000000000..8732d73c42 --- /dev/null +++ b/components/schema-migrator/migrations/director/20210311160954_alter_application_status_condition.up.sql @@ -0,0 +1,32 @@ +BEGIN; + +ALTER TABLE applications + ALTER COLUMN status_condition DROP DEFAULT; + +ALTER TYPE application_status_condition RENAME TO application_status_condition_old; +CREATE TYPE application_status_condition AS ENUM ( + 'INITIAL', + 'CONNECTED', + 'FAILED', + 'CREATING', + 'CREATE_FAILED', + 'CREATE_SUCCEEDED', + 'UPDATING', + 'UPDATE_FAILED', + 'UPDATE_SUCCEEDED', + 'DELETING', + 'DELETE_FAILED', + 'DELETE_SUCCEEDED' +); + +ALTER TABLE applications + ALTER COLUMN status_condition TYPE application_status_condition + USING status_condition::text::application_status_condition; + +ALTER TABLE applications + ALTER COLUMN status_condition + SET DEFAULT 'INITIAL' ::application_status_condition; + +DROP TYPE application_status_condition_old; + +COMMIT; diff --git a/tests/director/external-services-mock-integration/async_api_delete_test.go b/tests/director/external-services-mock-integration/async_api_delete_test.go index b3d8b84e96..e4f19d17ad 100644 --- a/tests/director/external-services-mock-integration/async_api_delete_test.go +++ b/tests/director/external-services-mock-integration/async_api_delete_test.go @@ -51,6 +51,7 @@ func TestAsyncAPIDeleteApplicationWithAppWebhook(t *testing.T) { app := graphql.ApplicationExt{} err = tc.RunOperationWithCustomTenant(ctx, dexGraphQLClient, testConfig.DefaultTenant, registerRequest, &app) require.NoError(t, err) + require.Equal(t, app.Status.Condition, graphql.ApplicationStatusConditionInitial) require.Len(t, app.Webhooks, 1) nearCreationTime := time.Now().Add(-1 * time.Second) @@ -99,6 +100,7 @@ func TestAsyncAPIDeleteApplicationWithAppTemplateWebhook(t *testing.T) { app := graphql.ApplicationExt{} err = tc.RunOperationWithCustomTenant(ctx, dexGraphQLClient, testConfig.DefaultTenant, registerAppRequest, &app) require.NoError(t, err) + require.Equal(t, app.Status.Condition, graphql.ApplicationStatusConditionInitial) nearCreationTime := time.Now().Add(-1 * time.Second) defer deleteApplicationOnExit(t, ctx, dexGraphQLClient, app.ID, testConfig.DefaultTenant) @@ -146,6 +148,7 @@ func TestAsyncAPIDeleteApplicationPrioritizationWithBothAppTemplateAndAppWebhook app := graphql.ApplicationExt{} err = tc.RunOperationWithCustomTenant(ctx, dexGraphQLClient, testConfig.DefaultTenant, registerAppRequest, &app) require.NoError(t, err) + require.Equal(t, app.Status.Condition, graphql.ApplicationStatusConditionInitial) require.Len(t, app.Webhooks, 1) nearCreationTime := time.Now().Add(-1 * time.Second) @@ -197,7 +200,7 @@ func triggerAsyncDeletion(t *testing.T, ctx context.Context, app graphql.Applica t.Log("Verify the application status in director is 'ready:false'") deletedApp := getApplication(t, ctx, gqlClient, testConfig.DefaultTenant, app.ID) require.NoError(t, err) - require.False(t, deletedApp.Ready, "Application is not in status ready:false") + require.Equal(t, deletedApp.Status.Condition, graphql.ApplicationStatusConditionDeleting) require.Empty(t, deletedApp.Error, "Application Error is not empty") t.Log("Verify DeletedAt in director is set and is in expected range") diff --git a/tests/director/external-services-mock-integration/fixtures_request.go b/tests/director/external-services-mock-integration/fixtures_request.go index 6d1783beab..084ba6f7c9 100644 --- a/tests/director/external-services-mock-integration/fixtures_request.go +++ b/tests/director/external-services-mock-integration/fixtures_request.go @@ -101,7 +101,7 @@ func fixApplicationRequest(id string) *gcli.Request { result: application(id: "%s") { id name - ready + status {condition timestamp} deletedAt error } diff --git a/tests/director/go.mod b/tests/director/go.mod index 86abfee19c..8eb11a6ad2 100644 --- a/tests/director/go.mod +++ b/tests/director/go.mod @@ -6,7 +6,7 @@ require ( github.com/avast/retry-go v3.0.0+incompatible github.com/form3tech-oss/jwt-go v3.2.2+incompatible github.com/google/uuid v1.2.0 - github.com/kyma-incubator/compass/components/director v0.0.0-20210310183132-43347dbc76d5 + github.com/kyma-incubator/compass/components/director v0.0.0-20210311182403-143400a6811c github.com/kyma-incubator/compass/components/external-services-mock v0.0.0-20210309084252-cb1359ea9c14 github.com/kyma-incubator/compass/components/gateway v0.0.0-20210203135116-086a057e4d3c github.com/kyma-incubator/compass/components/operations-controller v0.0.0-20210304094417-deb791b48d6a @@ -17,6 +17,6 @@ require ( github.com/vrischmann/envconfig v1.3.0 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 k8s.io/apimachinery v0.17.3 - k8s.io/client-go v0.17.2 + k8s.io/client-go v0.17.3 k8s.io/utils v0.0.0-20201110183641-67b214c5f920 // indirect ) diff --git a/tests/director/go.sum b/tests/director/go.sum index 1348c72d1c..d7a3e4b596 100644 --- a/tests/director/go.sum +++ b/tests/director/go.sum @@ -3,6 +3,7 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= @@ -255,6 +256,7 @@ github.com/go-ozzo/ozzo-validation v3.6.0+incompatible h1:msy24VGS42fKO9K1vLz82/ github.com/go-ozzo/ozzo-validation v3.6.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/goccy/go-json v0.4.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= @@ -308,6 +310,7 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= @@ -328,6 +331,7 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -443,24 +447,16 @@ github.com/kr/text v0.0.0-20160504234017-7cafcd837844/go.mod h1:sjUstKUATFIcff4q github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kyma-incubator/compass/components/connector v0.0.0-20210113114817-9cd2eac13dc0/go.mod h1:mYXUlc/WjYrdaza+1olGGPktEdkF8aE/Vg5oLV7FV4I= github.com/kyma-incubator/compass/components/director v0.0.0-20201109133626-4876e6d3caae/go.mod h1:x7sMU+n72bd2nufOpfi3tjjRhSsey1eVsu8RBuETxCg= +github.com/kyma-incubator/compass/components/director v0.0.0-20201215200050-802603cbf300/go.mod h1:MJiIuIF4dkynfgv06QNRodxXyNa4/ksXT03DSUcI3VA= github.com/kyma-incubator/compass/components/director v0.0.0-20210301143156-3b39f117e7bf/go.mod h1:hJ3bgWfwFhdnxZF7Gcok5Rm1zDT4bHtVGHDeXDBvTfg= -github.com/kyma-incubator/compass/components/director v0.0.0-20210304120518-45b00bff0ac0 h1:gze4ETFAzRlhG1wc03KCWiCOPL46SrtwkwZKPnAnenk= -github.com/kyma-incubator/compass/components/director v0.0.0-20210304120518-45b00bff0ac0/go.mod h1:ebSZJ5BEdqq8a2NEYtc9M8U2pwBcJX46PPQxAOhp74w= -github.com/kyma-incubator/compass/components/director v0.0.0-20210304180146-8ebee1d105ad h1:tYZ4UrllNtYwYk86gt/xiJmp4nX4lgDIsc9PBWv8EJ8= -github.com/kyma-incubator/compass/components/director v0.0.0-20210304180146-8ebee1d105ad/go.mod h1:ebSZJ5BEdqq8a2NEYtc9M8U2pwBcJX46PPQxAOhp74w= -github.com/kyma-incubator/compass/components/director v0.0.0-20210309182540-3f2ba371a0a6 h1:KCWBAkbndU07aEQVCdMd9HpruBSincUxGNAVs7oYLW4= -github.com/kyma-incubator/compass/components/director v0.0.0-20210309182540-3f2ba371a0a6/go.mod h1:JE8Qw51hjTeqCQBV+p84tlji0N6shQ9cMU2kcNWq6j0= -github.com/kyma-incubator/compass/components/director v0.0.0-20210309184807-e3fd20f70c29 h1:h9V+v2Bt6kCNSnMkiCGVYvDhiHRM0cyuJhmHmomJZvA= -github.com/kyma-incubator/compass/components/director v0.0.0-20210309184807-e3fd20f70c29/go.mod h1:JE8Qw51hjTeqCQBV+p84tlji0N6shQ9cMU2kcNWq6j0= github.com/kyma-incubator/compass/components/director v0.0.0-20210310183132-43347dbc76d5 h1:Wmaab/zxDaqFebCC+57uFq+NKoyfXgLzYqB3kOFkG64= github.com/kyma-incubator/compass/components/director v0.0.0-20210310183132-43347dbc76d5/go.mod h1:L+87rObS2Z1YS3HP60N6EfbODFlJd0bNJCDYJZX8BNM= -github.com/kyma-incubator/compass/components/external-services-mock v0.0.0-20210304120518-45b00bff0ac0 h1:cYO1hWq2Xd1V6mjSWGYvY4UuRNmJ2Qitx0MKCLH3bwU= -github.com/kyma-incubator/compass/components/external-services-mock v0.0.0-20210304120518-45b00bff0ac0/go.mod h1:yPZNKM/6iawnHkyyl/BrLQT4YqEnZ9KXxf/JOsYu4FQ= -github.com/kyma-incubator/compass/components/external-services-mock v0.0.0-20210304130807-d0d5075bbca0 h1:jDI0bzhUOtLXOZHRTdV9sP+0SZwI5s1L93wd6kFy28k= -github.com/kyma-incubator/compass/components/external-services-mock v0.0.0-20210304130807-d0d5075bbca0/go.mod h1:yPZNKM/6iawnHkyyl/BrLQT4YqEnZ9KXxf/JOsYu4FQ= -github.com/kyma-incubator/compass/components/external-services-mock v0.0.0-20210305150713-2817870bb301 h1:2dmiBEOf6Bwc9M9wS7RZgN8DVf/DUda57+bsIYTQEv0= -github.com/kyma-incubator/compass/components/external-services-mock v0.0.0-20210305150713-2817870bb301/go.mod h1:yPZNKM/6iawnHkyyl/BrLQT4YqEnZ9KXxf/JOsYu4FQ= +github.com/kyma-incubator/compass/components/director v0.0.0-20210311165953-ac30fe7874bd h1:BCye/LfBdgarZRRyFJQuJKRTTrelg2v5IsFXZVXYzus= +github.com/kyma-incubator/compass/components/director v0.0.0-20210311165953-ac30fe7874bd/go.mod h1:+7Bbi5ZF0fGYvTqxzs9E2ZBP6P6A23SJE7TJXHszwkc= +github.com/kyma-incubator/compass/components/director v0.0.0-20210311182403-143400a6811c h1:hcFnaMeyb/TeeXUb8AysbjThnP+fHb4aVb88dIjHwrw= +github.com/kyma-incubator/compass/components/director v0.0.0-20210311182403-143400a6811c/go.mod h1:qy5RKhy35OxyoNFL5iQhNJMUz+OVURqgR5OeBKaRuzg= github.com/kyma-incubator/compass/components/external-services-mock v0.0.0-20210309084252-cb1359ea9c14 h1:gEtd9g2Yp5548gzdPcrD7I1yiq4sq0z1/WtwzWgoDu8= github.com/kyma-incubator/compass/components/external-services-mock v0.0.0-20210309084252-cb1359ea9c14/go.mod h1:yPZNKM/6iawnHkyyl/BrLQT4YqEnZ9KXxf/JOsYu4FQ= github.com/kyma-incubator/compass/components/gateway v0.0.0-20210203135116-086a057e4d3c h1:dUihP0o7rgfq3i5ZY1CegLNrQlszKHx0dR+BagSNPYs= @@ -490,6 +486,7 @@ github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0U github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/machinebox/graphql v0.2.3-0.20181106130121-3a9253180225 h1:guHWmqIKr4G+gQ4uYU5vcZjsUhhklRA2uOcGVfcfqis= github.com/machinebox/graphql v0.2.3-0.20181106130121-3a9253180225/go.mod h1:F+kbVMHuwrQ5tYgU9JXlnskM8nOaFxCAEolaQybkjWA= +github.com/magefile/mage v1.10.0 h1:3HiXzCUY12kh9bIuyXShaVe529fJfyqoVM42o/uom2g= github.com/magefile/mage v1.10.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -511,6 +508,7 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.9.0 h1:pDRiWfl+++eC2FEFRy6jXmQlvp4Yh3z1MJKg4UeYM/4= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/maxbrunsfeld/counterfeiter/v6 v6.2.3/go.mod h1:1ftk08SazyElaaNvmqAfZWGwJzshjCfBXDLoQtPAMNk= @@ -590,6 +588,7 @@ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnh github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pborman/uuid v0.0.0-20180906182336-adf5a7427709/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pborman/uuid v1.2.1/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= @@ -969,6 +968,7 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1181,6 +1181,7 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.17.2 h1:NF1UFXcKN7/OOv1uxdRz3qfra8AHsPav5M93hlV9+Dc= k8s.io/api v0.17.2/go.mod h1:BS9fjjLc4CMuqfSO8vgbHPKMt5+SF0ET6u/RVDihTo4= +k8s.io/api v0.17.3/go.mod h1:YZ0OTkuw7ipbe305fMpIdf3GLXZKRigjtZaV5gzC2J0= k8s.io/apiextensions-apiserver v0.17.2/go.mod h1:4KdMpjkEjjDI2pPfBA15OscyNldHWdBCfsWMDWAmSTs= k8s.io/apimachinery v0.17.2/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= k8s.io/apimachinery v0.17.3 h1:f+uZV6rm4/tHE7xXgLyToprg6xWairaClGVkm2t8omg= @@ -1188,6 +1189,7 @@ k8s.io/apimachinery v0.17.3/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0 k8s.io/apiserver v0.17.2/go.mod h1:lBmw/TtQdtxvrTk0e2cgtOxHizXI+d0mmGQURIHQZlo= k8s.io/client-go v0.17.2 h1:ndIfkfXEGrNhLIgkr0+qhRguSD3u6DCmonepn1O6NYc= k8s.io/client-go v0.17.2/go.mod h1:QAzRgsa0C2xl4/eVpeVAZMvikCn8Nm81yqVx3Kk9XYI= +k8s.io/client-go v0.17.3/go.mod h1:cLXlTMtWHkuK4tD360KpWz2gG2KtdWEr/OT02i3emRQ= k8s.io/code-generator v0.17.2/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= k8s.io/component-base v0.17.2/go.mod h1:zMPW3g5aH7cHJpKYQ/ZsGMcgbsA/VyhEugF3QT1awLs= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= @@ -1198,6 +1200,7 @@ k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= +k8s.io/kube-openapi v0.0.0-20200410163147-594e756bea31/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= diff --git a/tests/system-broker/go.mod b/tests/system-broker/go.mod index 16600c6dc4..b649e930c9 100644 --- a/tests/system-broker/go.mod +++ b/tests/system-broker/go.mod @@ -8,7 +8,6 @@ require ( github.com/kyma-incubator/compass/tests/connector-tests v0.0.0-20210111103459-2ce2dc25a7de github.com/kyma-incubator/compass/tests/director v0.0.0-20210218095009-932966ab291b github.com/machinebox/graphql v0.2.3-0.20181106130121-3a9253180225 - github.com/pivotal-cf/brokerapi/v7 v7.5.0 // indirect github.com/pkg/errors v0.9.1 github.com/sirupsen/logrus v1.7.0 github.com/stretchr/testify v1.7.0 diff --git a/tests/system-broker/go.sum b/tests/system-broker/go.sum index ede526c288..5e268df79d 100644 --- a/tests/system-broker/go.sum +++ b/tests/system-broker/go.sum @@ -31,28 +31,17 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -code.cloudfoundry.org/lager v1.1.1-0.20191008172124-a9afc05ee5be h1:rnGRgbKlOPKbI9N/PscJ78Ug5Iw+o1kE7aDW01V+0FM= -code.cloudfoundry.org/lager v1.1.1-0.20191008172124-a9afc05ee5be/go.mod h1:O2sS7gKP3HM2iemG+EnwvyNQK7pTSC6Foi4QiMp9sSk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/99designs/gqlgen v0.9.3/go.mod h1:HrrG7ic9EgLPsULxsZh/Ti+p0HNWgR3XRuvnD0pb5KY= github.com/99designs/gqlgen v0.10.1 h1:1BgB6XKGTHq7uH4G1/PYyKe2Kz7/vw3AlvMZlD3TEEY= github.com/99designs/gqlgen v0.10.1/go.mod h1:IviubpnyI4gbBcj8IcxSSc/Q/+af5riwCmJmwF0uaPE= -github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= -github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= -github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= @@ -66,9 +55,7 @@ github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZC github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= @@ -93,14 +80,11 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 h1:zV3ejI06GQ59hwDQAvmK1qxOQGB3WuVTRoY0okPTAv0= github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef h1:46PFijGLmAjMPwCCCo7Jf0W6f9slllCkkv7vyc1yOSg= github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/avast/retry-go v2.4.3+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY= -github.com/avast/retry-go v2.5.0+incompatible h1:8SaFqliw34WeeaPs+GEtMMkiwEsC2S6+YyqnLqI55Ks= -github.com/avast/retry-go v2.5.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY= github.com/avast/retry-go v3.0.0+incompatible h1:4SOWQ7Qs+oroOTQOYnAHqelpCO0biHSxpiH9JdtuBj0= github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= @@ -110,10 +94,6 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 h1:y4B3+GPxKlrigF1ha5FFErxK+sr6sWxQovRMzwMhejo= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -140,20 +120,18 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/trifles v0.0.0-20190318185328-a8d75aae118c h1:TUuUh0Xgj97tLMNtWtNvI9mIV6isjEb9lBMNv+77IGM= github.com/dgryski/trifles v0.0.0-20190318185328-a8d75aae118c/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= +github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48 h1:fRzb/w+pyskVMQ+UbP35JkH8yB7MYb4q/qhBarqZE6g= github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= github.com/dlmiddlecote/sqlstats v1.0.0/go.mod h1:wnid52FfRm1P/Z/81xQ4pd8ayRzL9o7UWkyCNegbAQg= github.com/dlmiddlecote/sqlstats v1.0.1/go.mod h1:wnid52FfRm1P/Z/81xQ4pd8ayRzL9o7UWkyCNegbAQg= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/drewolson/testflight v1.0.0 h1:jgA0pHcFIPnXoBmyFzrdoR2ka4UvReMDsjYc7Jcvl80= -github.com/drewolson/testflight v1.0.0/go.mod h1:t9oKuuEohRGLb80SWX+uxJHuhX98B7HnojqtW+Ryq30= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -162,14 +140,11 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= @@ -184,19 +159,10 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= -github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-ozzo/ozzo-validation v3.6.0+incompatible h1:msy24VGS42fKO9K1vLz82/GeYW1cILu7Nuuj1N3BBkE= github.com/go-ozzo/ozzo-validation v3.6.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= @@ -249,8 +215,8 @@ github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= @@ -268,19 +234,15 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.5 h1:kxhtnfFVi+rYdOALN0B3k9UT86zVJKfBimRaciULW4I= -github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= -github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= @@ -343,7 +305,6 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -367,13 +328,9 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.0.0-20160823170715-cfb55aafdaf3/go.mod h1:Bvhd+E3laJ0AVkG0c9rmtZcnhV0HQ3+c3YxxqTvc/gA= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -github.com/kr/text v0.0.0-20160504234017-7cafcd837844/go.mod h1:sjUstKUATFIcff4qlB53Kml0wQPtJVc/3fWrmuUmcfA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= @@ -381,23 +338,11 @@ github.com/kyma-incubator/compass/components/connector v0.0.0-20201219152541-d77 github.com/kyma-incubator/compass/components/connector v0.0.0-20201219152541-d77ebc00ac2d/go.mod h1:LYN0nhdmTdQI0Efz+yBnbmlhNTuhoQDlgQVg8zGUhcI= github.com/kyma-incubator/compass/components/director v0.0.0-20201215200050-802603cbf300 h1:Dri/QiNTF4OgsK8NObPqqqayPVBYChNggGDFS+a0E6I= github.com/kyma-incubator/compass/components/director v0.0.0-20201215200050-802603cbf300/go.mod h1:MJiIuIF4dkynfgv06QNRodxXyNa4/ksXT03DSUcI3VA= -github.com/kyma-incubator/compass/components/director v0.0.0-20210107130916-b97cabae65e4 h1:V3yvAxNst9GfC6R3kDuUzAzZUZVaO4tf8S9P4O6gn2k= -github.com/kyma-incubator/compass/components/director v0.0.0-20210107130916-b97cabae65e4/go.mod h1:z6Bcsa61ZcanHB3zfMWuGcfex4irMjwdUWydGg5eqPM= -github.com/kyma-incubator/compass/components/director v0.0.0-20210122101643-6161f35d8d3b h1:8XSwnUJFd6vYfO0UM8d0/WLbdqHLRnis/rEbGbduveU= -github.com/kyma-incubator/compass/components/director v0.0.0-20210122101643-6161f35d8d3b/go.mod h1:+hSIRqWC55+nGlpbm9/J6W+SJ4BAAz7j36Ii8NAa4Zo= -github.com/kyma-incubator/compass/components/director v0.0.0-20210217135916-96c764b34f76 h1:1rWKZk3w7s+qgQED9aoSSmk2C5RyrGCTaeMgkrQl2Mw= -github.com/kyma-incubator/compass/components/director v0.0.0-20210217135916-96c764b34f76/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= github.com/kyma-incubator/compass/components/director v0.0.0-20210218094621-346bfcbcf1f3 h1:MG002DdL/dW/+pCCMgELaYRlxXh8+0PuQj/GNODBTj8= github.com/kyma-incubator/compass/components/director v0.0.0-20210218094621-346bfcbcf1f3/go.mod h1:OB4+ZBUsOWPL8Y6FXIjyaTHFGUHW1UUFVWwNGz0pLRM= github.com/kyma-incubator/compass/components/gateway v0.0.0-20200429083609-7d80a85180c6/go.mod h1:VJR6u6CONemX/0CsndsUPis8cY7jfkMk8TUH27m2jj8= github.com/kyma-incubator/compass/tests/connector-tests v0.0.0-20210111103459-2ce2dc25a7de h1:FWHG98/FQq2iyCMi/rX6MmgofAg9MDi+BgXeDIle/es= github.com/kyma-incubator/compass/tests/connector-tests v0.0.0-20210111103459-2ce2dc25a7de/go.mod h1:21W727Yew17uyoQ/M2nSddn88mryN45naz8jlmvQSX4= -github.com/kyma-incubator/compass/tests/director v0.0.0-20210111131231-96d45aba64e1 h1:hPKL4E2MACXNAENuaKcwlbpod0kkA0NKuCN92oqlHNM= -github.com/kyma-incubator/compass/tests/director v0.0.0-20210111131231-96d45aba64e1/go.mod h1:faU1xXM9iepSllb1PwAcFaJhFbkC1coeNfAcAp4vJdQ= -github.com/kyma-incubator/compass/tests/director v0.0.0-20210217135916-96c764b34f76 h1:Xdeed3ZejpqpbDc0T3TG81KYl5BZWRYjQ6AGf90bs80= -github.com/kyma-incubator/compass/tests/director v0.0.0-20210217135916-96c764b34f76/go.mod h1:J3/G78xIQJ2lFwYkigCsBP3htgjwJ40iecFvfRsud9A= -github.com/kyma-incubator/compass/tests/director v0.0.0-20210218061519-312509335379 h1:5npHCmbJADEk9QR3gJC2q9dYxkBI04komPDzmHjri4k= -github.com/kyma-incubator/compass/tests/director v0.0.0-20210218061519-312509335379/go.mod h1:J3/G78xIQJ2lFwYkigCsBP3htgjwJ40iecFvfRsud9A= github.com/kyma-incubator/compass/tests/director v0.0.0-20210218095009-932966ab291b h1:Ioj356vs6NjW58i/aNFg2P9cpQDsbsm5lY1wQs5YD70= github.com/kyma-incubator/compass/tests/director v0.0.0-20210218095009-932966ab291b/go.mod h1:+qIx5uJhAE06WJw5nSOFiXSh721GMCLA54Cto4G3384= github.com/lestrrat-go/jwx v0.9.0/go.mod h1:iEoxlYfZjvoGpuWwxUz+eR5e6KTJGsaRcy/YNA/UnBk= @@ -411,8 +356,6 @@ github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0Q github.com/machinebox/graphql v0.2.3-0.20181106130121-3a9253180225 h1:guHWmqIKr4G+gQ4uYU5vcZjsUhhklRA2uOcGVfcfqis= github.com/machinebox/graphql v0.2.3-0.20181106130121-3a9253180225/go.mod h1:F+kbVMHuwrQ5tYgU9JXlnskM8nOaFxCAEolaQybkjWA= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/matryer/is v1.3.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= @@ -422,7 +365,6 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/maxbrunsfeld/counterfeiter/v6 v6.2.3/go.mod h1:1ftk08SazyElaaNvmqAfZWGwJzshjCfBXDLoQtPAMNk= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= @@ -457,8 +399,6 @@ github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= @@ -468,20 +408,10 @@ github.com/onrik/logrus v0.8.0/go.mod h1:qfe9NeZVAJfIxviw3cYkZo3kvBtLoPRJriAO8zl github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.1 h1:jMU0WaQrP0a/YAEq8eJmJKjBoMs+pClEr1vDMlM/Do4= -github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.10.4 h1:NiTx7EEvBzu9sFOD1zORteLSt3o8gnlvZZwSE9TnY9U= -github.com/onsi/gomega v1.10.4/go.mod h1:g/HbgYopi++010VEqkFgJHKC09uJiW9UkXvMUuKHUCQ= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= @@ -495,15 +425,11 @@ github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIw github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/pborman/uuid v0.0.0-20180906182336-adf5a7427709 h1:zNBQb37RGLmJybyMcs983HfUfpkw9OTFD9tbBfAViHE= -github.com/pborman/uuid v0.0.0-20180906182336-adf5a7427709/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pivotal-cf/brokerapi/v7 v7.5.0 h1:l7kAjlTL4bGIkl2m4dljc1xqgQYbU+4BjJskfkUn6Vc= -github.com/pivotal-cf/brokerapi/v7 v7.5.0/go.mod h1:+z5BKkzLViNax5Q8S3Z6e6dkDpAJl4ZJIu9mP1fhyZM= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -548,8 +474,6 @@ github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= -github.com/sclevine/spec v1.4.0/go.mod h1:LvpgJaFyvQzRvc1kaDs0bulYwzC70PbiYjC4QnFHkOM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= @@ -578,6 +502,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.3.0 h1:NGXK3lHquSN08v5vWalVI/L8XU9hdzE/G6xsrze47As= github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= @@ -590,12 +515,12 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/tidwall/gjson v1.6.0/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= -github.com/tidwall/gjson v1.6.4 h1:JKsCsJqRVFz8eYCsQ5E/ANRbK6CanAtA9IUvGsXklyo= -github.com/tidwall/gjson v1.6.4/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0= github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= +github.com/tidwall/gjson v1.6.8 h1:CTmXMClGYPAmln7652e69B7OLXfTi5ABcPPwjIWUv7w= github.com/tidwall/gjson v1.6.8/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc= github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= +github.com/tidwall/match v1.0.3 h1:FQUVvBImDutD8wJLN6c5eMzWtjgONK9MwIBCOrUJKeE= github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.0.1/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= @@ -648,7 +573,6 @@ golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -656,7 +580,6 @@ golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 h1:vEg9joUBmeBcK9iSJftGNf golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -690,7 +613,6 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -711,7 +633,6 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -725,15 +646,11 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -768,17 +685,12 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -796,18 +708,14 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -825,7 +733,6 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190921001708-c4c64cad1fd0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -844,7 +751,6 @@ golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190515012406-7d7faa4812bd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -869,10 +775,8 @@ golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200301222351-066e0c02454c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200323144430-8dcfad9e016e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -887,6 +791,7 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= @@ -1012,46 +917,30 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.17.2/go.mod h1:BS9fjjLc4CMuqfSO8vgbHPKMt5+SF0ET6u/RVDihTo4= k8s.io/api v0.17.3 h1:XAm3PZp3wnEdzekNkcmj/9Y1zdmQYJ1I4GKSBBZ8aG0= k8s.io/api v0.17.3/go.mod h1:YZ0OTkuw7ipbe305fMpIdf3GLXZKRigjtZaV5gzC2J0= -k8s.io/api v0.20.2 h1:y/HR22XDZY3pniu9hIFDLpUCPq2w5eQ6aV/VFQ7uJMw= -k8s.io/api v0.20.2/go.mod h1:d7n6Ehyzx+S+cE3VhTGfVNNqtGc/oL9DCdYYahlurV8= k8s.io/apimachinery v0.17.2/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= k8s.io/apimachinery v0.17.3 h1:f+uZV6rm4/tHE7xXgLyToprg6xWairaClGVkm2t8omg= k8s.io/apimachinery v0.17.3/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0g= -k8s.io/apimachinery v0.20.2 h1:hFx6Sbt1oG0n6DZ+g4bFt5f6BoMkOjKWsQFu077M3Vg= -k8s.io/apimachinery v0.20.2/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/client-go v0.17.2/go.mod h1:QAzRgsa0C2xl4/eVpeVAZMvikCn8Nm81yqVx3Kk9XYI= k8s.io/client-go v0.17.3 h1:deUna1Ksx05XeESH6XGCyONNFfiQmDdqeqUvicvP6nU= k8s.io/client-go v0.17.3/go.mod h1:cLXlTMtWHkuK4tD360KpWz2gG2KtdWEr/OT02i3emRQ= -k8s.io/client-go v0.20.2 h1:uuf+iIAbfnCSw8IGAv/Rg0giM+2bOzHLOsbbrwrdhNQ= -k8s.io/client-go v0.20.2/go.mod h1:kH5brqWqp7HDxUFKoEgiI4v8G1xzbe9giaCenUWJzgE= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.4.0 h1:7+X0fUguPyrKEC4WjH8iGDg3laWgMo5tMnRTIGTTxGQ= -k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= k8s.io/kube-openapi v0.0.0-20200410163147-594e756bea31/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= -sigs.k8s.io/structured-merge-diff/v4 v4.0.2 h1:YHQV7Dajm86OuqnIR6zAelnDWBRjo+YhYV9PmGrh1s8= -sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sourcegraph.com/sourcegraph/appdash v0.0.0-20180110180208-2cc67fd64755/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k=