From 07e3cca6d0e2821a880259e01177a0a1c91a60a7 Mon Sep 17 00:00:00 2001 From: Elijah Oyekunle Date: Tue, 28 Jan 2020 10:49:02 +0100 Subject: [PATCH 1/5] update existing import-restrictions files --- cmd/kubeadm/.import-restrictions | 95 ------ .../providers/.import-restrictions | 13 - pkg/controller/.import-restrictions | 303 ------------------ pkg/printers/.import-restrictions | 15 +- .../internalversion/.import-restrictions | 9 +- 5 files changed, 10 insertions(+), 425 deletions(-) diff --git a/cmd/kubeadm/.import-restrictions b/cmd/kubeadm/.import-restrictions index 867f5932c6bc..95bc81f92efd 100644 --- a/cmd/kubeadm/.import-restrictions +++ b/cmd/kubeadm/.import-restrictions @@ -36,101 +36,6 @@ "k8s.io/kubernetes/cmd/kubeadm" ] }, - { - "SelectorRegexp": "k8s[.]io/utils", - "AllowedPrefixes": [ - "k8s.io/utils/exec", - "k8s.io/utils/integer", - "k8s.io/utils/path", - "k8s.io/utils/pointer", - "k8s.io/utils/net", - "k8s.io/utils/trace" - ] - }, - { - "SelectorRegexp": "github[.]com", - "AllowedPrefixes": [ - "github.com/beorn7/perks/quantile", - "github.com/blang/semver", - "github.com/coredns/corefile-migration/migration", - "github.com/coreos/etcd/auth/authpb", - "github.com/coreos/etcd/clientv3", - "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes", - "github.com/coreos/etcd/etcdserver/etcdserverpb", - "github.com/coreos/etcd/mvcc/mvccpb", - "github.com/coreos/etcd/pkg/tlsutil", - "github.com/coreos/etcd/pkg/transport", - "github.com/davecgh/go-spew/spew", - "github.com/docker/distribution/reference", - "github.com/godbus/dbus", - "github.com/gogo/protobuf/proto", - "github.com/gogo/protobuf/sortkeys", - "github.com/golang/groupcache/lru", - "github.com/golang/protobuf/proto", - "github.com/golang/protobuf/ptypes", - "github.com/googleapis/gnostic/compiler", - "github.com/googleapis/gnostic/extensions", - "github.com/googleapis/gnostic/OpenAPIv2", - "github.com/google/btree", - "github.com/google/gofuzz", - "github.com/gregjones/httpcache", - "github.com/hashicorp/golang-lru", - "github.com/imdario/mergo", - "github.com/json-iterator/go", - "github.com/MakeNowJust/heredoc", - "github.com/matttproud/golang_protobuf_extensions/pbutil", - "github.com/caddyserver/caddy/caddyfile", - "github.com/modern-go/concurrent", - "github.com/modern-go/reflect2", - "github.com/opencontainers/go-digest", - "github.com/opencontainers/image-spec/specs-go", - "github.com/peterbourgon/diskv", - "github.com/pkg/errors", - "github.com/pmezard/go-difflib/difflib", - "github.com/prometheus/client_golang/prometheus", - "github.com/prometheus/client_model/go", - "github.com/prometheus/common/expfmt", - "github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg", - "github.com/prometheus/common/model", - "github.com/prometheus/procfs", - "github.com/PuerkitoBio/purell", - "github.com/PuerkitoBio/urlesc", - "github.com/lithammer/dedent", - "github.com/russross/blackfriday", - "github.com/shurcooL/sanitized_anchor_name", - "github.com/spf13/cobra", - "github.com/spf13/pflag", - "github.com/vishvananda/netlink" - ] - }, - { - "SelectorRegexp": "golang[.]org", - "AllowedPrefixes": [ - "golang.org/x/crypto/ed25519", - "golang.org/x/crypto/ssh/terminal", - "golang.org/x/net/context", - "golang.org/x/net/http2", - "golang.org/x/net/idna", - "golang.org/x/net/internal/timeseries", - "golang.org/x/net/lex/httplex", - "golang.org/x/net/proxy", - "golang.org/x/net/trace", - "golang.org/x/oauth2", - "golang.org/x/sys/unix", - "golang.org/x/text/cases", - "golang.org/x/text/internal", - "golang.org/x/text/language", - "golang.org/x/text/runes", - "golang.org/x/text/secure/bidirule", - "golang.org/x/text/secure/precis", - "golang.org/x/text/transform", - "golang.org/x/text/unicode/bidi", - "golang.org/x/text/unicode/norm", - "golang.org/x/text/width", - "golang.org/x/time/rate", - "google.golang.org/grpc" - ] - }, { "SelectorRegexp": "gopkg[.]in", "AllowedPrefixes": [ diff --git a/pkg/cloudprovider/providers/.import-restrictions b/pkg/cloudprovider/providers/.import-restrictions index 1f266d036f8e..611ddf966d94 100644 --- a/pkg/cloudprovider/providers/.import-restrictions +++ b/pkg/cloudprovider/providers/.import-restrictions @@ -1,18 +1,5 @@ { "Rules": [ - { - "SelectorRegexp": "k8s[.]io/utils", - "AllowedPrefixes": [ - "k8s.io/utils/exec", - "k8s.io/utils/io", - "k8s.io/utils/keymutex", - "k8s.io/utils/mount", - "k8s.io/utils/net", - "k8s.io/utils/nsenter", - "k8s.io/utils/path", - "k8s.io/utils/strings" - ] - }, { "SelectorRegexp": "k8s[.]io/kubernetes", "AllowedPrefixes": [ diff --git a/pkg/controller/.import-restrictions b/pkg/controller/.import-restrictions index 06305c5c73ea..67a6a8c068de 100644 --- a/pkg/controller/.import-restrictions +++ b/pkg/controller/.import-restrictions @@ -11,309 +11,6 @@ "ForbiddenPrefixes": [ "k8s.io/kubernetes/pkg/client/unversioned/testclient" ] - }, - { - "SelectorRegexp": "k8s[.]io/(api/|apimachinery/|apiextensions-apiserver/|apiserver/)", - "AllowedPrefixes": [ - "k8s.io/api/apps/v1", - "k8s.io/api/apps/v1beta1", - "k8s.io/api/authentication/v1", - "k8s.io/api/authorization/v1beta1", - "k8s.io/api/autoscaling/v1", - "k8s.io/api/autoscaling/v2beta1", - "k8s.io/api/autoscaling/v2beta2", - "k8s.io/api/batch/v1", - "k8s.io/api/batch/v1beta1", - "k8s.io/api/certificates/v1beta1", - "k8s.io/api/core/v1", - "k8s.io/api/coordination/v1", - "k8s.io/api/discovery/v1beta1", - "k8s.io/api/extensions/v1beta1", - "k8s.io/api/policy/v1beta1", - "k8s.io/api/rbac/v1", - "k8s.io/api/storage/v1", - "k8s.io/apimachinery/pkg/api/equality", - "k8s.io/apimachinery/pkg/api/errors", - "k8s.io/apimachinery/pkg/api/meta", - "k8s.io/apimachinery/pkg/api/resource", - "k8s.io/apimachinery/pkg/apis/meta/v1", - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", - "k8s.io/apimachinery/pkg/conversion", - "k8s.io/apimachinery/pkg/fields", - "k8s.io/apimachinery/pkg/labels", - "k8s.io/apimachinery/pkg/runtime", - "k8s.io/apimachinery/pkg/runtime/schema", - "k8s.io/apimachinery/pkg/runtime/serializer", - "k8s.io/apimachinery/pkg/types", - "k8s.io/apimachinery/pkg/util/clock", - "k8s.io/apimachinery/pkg/util/diff", - "k8s.io/apimachinery/pkg/util/errors", - "k8s.io/apimachinery/pkg/util/intstr", - "k8s.io/apimachinery/pkg/util/json", - "k8s.io/apimachinery/pkg/util/rand", - "k8s.io/apimachinery/pkg/util/runtime", - "k8s.io/apimachinery/pkg/util/sets", - "k8s.io/apimachinery/pkg/util/strategicpatch", - "k8s.io/apimachinery/pkg/util/uuid", - "k8s.io/apimachinery/pkg/util/wait", - "k8s.io/apimachinery/pkg/util/version", - "k8s.io/apimachinery/pkg/watch", - "k8s.io/apiserver/pkg/authentication/serviceaccount", - "k8s.io/apiserver/pkg/storage/names", - "k8s.io/apiserver/pkg/util/feature", - "k8s.io/apiextensions-apiserver/pkg/features", - "k8s.io/apimachinery/pkg/api/validation", - "k8s.io/apimachinery/pkg/apis/meta/internalversion", - "k8s.io/apimachinery/pkg/selection", - "k8s.io/apimachinery/pkg/util/validation", - "k8s.io/apimachinery/pkg/util/validation/field", - "k8s.io/apiserver/pkg/authentication/authenticator", - "k8s.io/apiserver/pkg/authentication/user", - "k8s.io/apiserver/pkg/features", - "k8s.io/apiserver/pkg/registry/generic", - "k8s.io/apimachinery/pkg/version", - "k8s.io/api/imagepolicy/v1alpha1", - "k8s.io/apiserver/pkg/admission", - "k8s.io/apiserver/pkg/server/dynamiccertificates", - "k8s.io/apiserver/pkg/storage", - "k8s.io/api/batch/v2alpha1", - "k8s.io/apiserver/pkg/registry/rest", - "k8s.io/api/scheduling/v1alpha1", - "k8s.io/api/admissionregistration/v1", - "k8s.io/api/admissionregistration/v1beta1", - "k8s.io/api/authorization/v1", - "k8s.io/api/settings/v1alpha1", - "k8s.io/api/admission/v1beta1", - "k8s.io/api/admission/v1", - "k8s.io/api/networking/v1", - "k8s.io/component-base/config", - "k8s.io/component-base/config/v1alpha1", - "k8s.io/api/scheduling/v1" - ] - }, - { - "SelectorRegexp": "github[.]com/", - "AllowedPrefixes": [ - "github.com/cloudflare/cfssl/config", - "github.com/cloudflare/cfssl/helpers", - "github.com/cloudflare/cfssl/signer", - "github.com/cloudflare/cfssl/signer/local", - "github.com/davecgh/go-spew/spew", - "github.com/docker/distribution/reference", - "github.com/evanphx/json-patch", - "github.com/golang/groupcache/lru", - "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud", - "github.com/google/gofuzz", - "github.com/prometheus/client_golang/prometheus", - "github.com/robfig/cron", - "github.com/spf13/pflag", - "github.com/stretchr/testify/assert", - "github.com/stretchr/testify/mock", - "github.com/stretchr/testify/require", - "github.com/google/gofuzz", - "github.com/golang/protobuf/ptypes/wrappers", - "github.com/golang/protobuf/proto", - "github.com/container-storage-interface/spec/lib/go/csi" - ] - }, - { - "SelectorRegexp": "k8s[.]io/client-go/", - "AllowedPrefixes": [ - "k8s.io/client-go/util/keyutil", - "k8s.io/client-go/discovery", - "k8s.io/client-go/dynamic", - "k8s.io/client-go/informers", - "k8s.io/client-go/informers/apps/v1", - "k8s.io/client-go/informers/apps/v1beta1", - "k8s.io/client-go/informers/autoscaling/v1", - "k8s.io/client-go/informers/batch/v1", - "k8s.io/client-go/informers/certificates/v1beta1", - "k8s.io/client-go/informers/core/v1", - "k8s.io/client-go/informers/extensions/v1beta1", - "k8s.io/client-go/informers/policy/v1beta1", - "k8s.io/client-go/informers/rbac/v1", - "k8s.io/client-go/informers/storage/v1", - "k8s.io/client-go/kubernetes", - "k8s.io/client-go/kubernetes/fake", - "k8s.io/client-go/kubernetes/scheme", - "k8s.io/client-go/kubernetes/typed/apps/v1", - "k8s.io/client-go/kubernetes/typed/authentication/v1", - "k8s.io/client-go/kubernetes/typed/autoscaling/v1", - "k8s.io/client-go/kubernetes/typed/certificates/v1beta1", - "k8s.io/client-go/kubernetes/typed/core/v1", - "k8s.io/client-go/kubernetes/typed/policy/v1beta1", - "k8s.io/client-go/kubernetes/typed/rbac/v1", - "k8s.io/client-go/listers/apps/v1", - "k8s.io/client-go/listers/apps/v1beta1", - "k8s.io/client-go/listers/autoscaling/v1", - "k8s.io/client-go/listers/batch/v1", - "k8s.io/client-go/listers/certificates/v1beta1", - "k8s.io/client-go/listers/coordination/v1", - "k8s.io/client-go/listers/core/v1", - "k8s.io/client-go/listers/discovery/v1alpha1", - "k8s.io/client-go/listers/discovery/v1beta1", - "k8s.io/client-go/listers/coordination/v1", - "k8s.io/client-go/listers/extensions/v1beta1", - "k8s.io/client-go/listers/policy/v1beta1", - "k8s.io/client-go/listers/rbac/v1", - "k8s.io/client-go/listers/storage/v1", - "k8s.io/client-go/metadata", - "k8s.io/client-go/pkg/version", - "k8s.io/client-go/rest", - "k8s.io/client-go/scale", - "k8s.io/client-go/testing", - "k8s.io/client-go/tools/cache", - "k8s.io/client-go/tools/leaderelection/resourcelock", - "k8s.io/client-go/tools/pager", - "k8s.io/client-go/tools/record", - "k8s.io/client-go/tools/reference", - "k8s.io/client-go/tools/watch", - "k8s.io/client-go/transport", - "k8s.io/client-go/util/cert", - "k8s.io/client-go/util/flowcontrol", - "k8s.io/client-go/util/retry", - "k8s.io/client-go/util/testing", - "k8s.io/client-go/util/workqueue" - ] - }, - { - "SelectorRegexp": "k8s[.]io/kubernetes/pkg", - "AllowedPrefixes": [ - "k8s.io/kubernetes/pkg/api/legacyscheme", - "k8s.io/kubernetes/pkg/api/v1/endpoints", - "k8s.io/kubernetes/pkg/api/v1/node", - "k8s.io/kubernetes/pkg/api/v1/pod", - "k8s.io/kubernetes/pkg/apis/apps/v1", - "k8s.io/kubernetes/pkg/apis/autoscaling", - "k8s.io/kubernetes/pkg/apis/certificates/v1beta1", - "k8s.io/kubernetes/pkg/apis/core", - "k8s.io/kubernetes/pkg/apis/core/helper", - "k8s.io/kubernetes/pkg/apis/core/install", - "k8s.io/kubernetes/pkg/apis/core/v1", - "k8s.io/kubernetes/pkg/apis/core/v1/helper", - "k8s.io/kubernetes/pkg/apis/core/validation", - "k8s.io/kubernetes/pkg/apis/discovery", - "k8s.io/kubernetes/pkg/apis/discovery/validation", - "k8s.io/kubernetes/pkg/cloudprovider", - "k8s.io/kubernetes/pkg/cloudprovider/providers/gce", - "k8s.io/kubernetes/pkg/controller", - "k8s.io/kubernetes/pkg/controller/apis/config", - "k8s.io/kubernetes/pkg/controller/apis/config/v1alpha1", - "k8s.io/kubernetes/pkg/controller/certificates", - "k8s.io/kubernetes/pkg/controller/daemon", - "k8s.io/kubernetes/pkg/controller/daemon/util", - "k8s.io/kubernetes/pkg/controller/deployment", - "k8s.io/kubernetes/pkg/controller/deployment/util", - "k8s.io/kubernetes/pkg/controller/garbagecollector", - "k8s.io/kubernetes/pkg/controller/garbagecollector/metaonly", - "k8s.io/kubernetes/pkg/controller/history", - "k8s.io/kubernetes/pkg/controller/job", - "k8s.io/kubernetes/pkg/controller/namespace", - "k8s.io/kubernetes/pkg/controller/namespace/deletion", - "k8s.io/kubernetes/pkg/controller/nodeipam", - "k8s.io/kubernetes/pkg/controller/nodeipam/ipam", - "k8s.io/kubernetes/pkg/controller/nodeipam/ipam/cidrset", - "k8s.io/kubernetes/pkg/controller/nodeipam/ipam/sync", - "k8s.io/kubernetes/pkg/controller/nodelifecycle", - "k8s.io/kubernetes/pkg/controller/nodelifecycle/scheduler", - "k8s.io/kubernetes/pkg/controller/podautoscaler", - "k8s.io/kubernetes/pkg/controller/podautoscaler/metrics", - "k8s.io/kubernetes/pkg/controller/replicaset", - "k8s.io/kubernetes/pkg/controller/util/node", - "k8s.io/kubernetes/pkg/controller/volume/attachdetach", - "k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache", - "k8s.io/kubernetes/pkg/controller/volume/attachdetach/metrics", - "k8s.io/kubernetes/pkg/controller/volume/attachdetach/populator", - "k8s.io/kubernetes/pkg/controller/volume/attachdetach/reconciler", - "k8s.io/kubernetes/pkg/controller/volume/attachdetach/statusupdater", - "k8s.io/kubernetes/pkg/controller/volume/attachdetach/util", - "k8s.io/kubernetes/pkg/controller/volume/events", - "k8s.io/kubernetes/pkg/controller/volume/expand", - "k8s.io/kubernetes/pkg/controller/volume/expand/cache", - "k8s.io/kubernetes/pkg/controller/volume/persistentvolume", - "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/metrics", - "k8s.io/kubernetes/pkg/features", - "k8s.io/kubernetes/pkg/kubectl/scheme", - "k8s.io/kubernetes/pkg/kubelet/apis", - "k8s.io/kubernetes/pkg/kubelet/events", - "k8s.io/kubernetes/pkg/kubelet/types", - "k8s.io/kubernetes/pkg/kubelet/util/format", - "k8s.io/kubernetes/pkg/quota", - "k8s.io/kubernetes/pkg/registry/core/secret", - "k8s.io/kubernetes/pkg/scheduler/framework/plugins/helper", - "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1", - "k8s.io/kubernetes/pkg/scheduler/nodeinfo", - "k8s.io/kubernetes/pkg/serviceaccount", - "k8s.io/kubernetes/pkg/util/goroutinemap", - "k8s.io/kubernetes/pkg/util/goroutinemap/exponentialbackoff", - "k8s.io/kubernetes/pkg/util/hash", - "k8s.io/kubernetes/pkg/util/labels", - "k8s.io/kubernetes/pkg/util/node", - "k8s.io/kubernetes/pkg/util/slice", - "k8s.io/kubernetes/pkg/util/taints", - "k8s.io/kubernetes/pkg/volume", - "k8s.io/kubernetes/pkg/volume/util", - "k8s.io/kubernetes/pkg/volume/util/operationexecutor", - "k8s.io/kubernetes/pkg/volume/util/recyclerclient", - "k8s.io/kubernetes/pkg/volume/util/subpath", - "k8s.io/kubernetes/pkg/volume/util/types", - "k8s.io/kubernetes/pkg/volume/util/volumepathhandler", - "k8s.io/kubernetes/pkg/api/service", - "k8s.io/kubernetes/pkg/apis/scheduling", - "k8s.io/kubernetes/pkg/capabilities", - "k8s.io/kubernetes/pkg/master/ports", - "k8s.io/kubernetes/pkg/scheduler/api", - "k8s.io/kubernetes/pkg/scheduler/util", - "k8s.io/kubernetes/pkg/scheduler/listers", - "k8s.io/kubernetes/pkg/security/apparmor", - "k8s.io/kubernetes/pkg/util/parsers", - "k8s.io/kubernetes/pkg/fieldpath", - "k8s.io/kubernetes/pkg/scheduler/volumebinder", - "k8s.io/kubernetes/pkg/util/resizefs", - "k8s.io/kubernetes/pkg/apis/apps", - "k8s.io/kubernetes/pkg/scheduler/metrics" - ] - }, - { - "SelectorRegexp": "k8s[.]io/(metrics/|utils/|heapster/|kube-controller-manager/)", - "AllowedPrefixes": [ - "k8s.io/heapster/metrics/api/v1/types", - "k8s.io/kube-controller-manager/config/v1alpha1", - "k8s.io/metrics/pkg/apis/custom_metrics/v1beta2", - "k8s.io/metrics/pkg/apis/external_metrics/v1beta1", - "k8s.io/metrics/pkg/apis/metrics/v1alpha1", - "k8s.io/metrics/pkg/apis/metrics/v1beta1", - "k8s.io/metrics/pkg/client/clientset/versioned/scheme", - "k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1beta1", - "k8s.io/metrics/pkg/client/custom_metrics", - "k8s.io/metrics/pkg/client/external_metrics", - "k8s.io/utils/exec", - "k8s.io/utils/integer", - "k8s.io/utils/io", - "k8s.io/utils/mount", - "k8s.io/utils/net", - "k8s.io/utils/nsenter", - "k8s.io/utils/path", - "k8s.io/utils/pointer", - "k8s.io/utils/strings" - ] - }, - { - "SelectorRegexp": "golang[.]org/", - "AllowedPrefixes": [ - "golang.org/x/time/rate", - "golang.org/x/sys/unix", - "golang.org/x/oauth2", - "golang.org/x/net/context", - "google.golang.org/api/compute/v1", - "google.golang.org/api/googleapi", - "google.golang.org/api/compute/v0.alpha", - "google.golang.org/api/container/v1", - "google.golang.org/api/compute/v0.beta", - "google.golang.org/api/tpu/v1", - "golang.org/x/net/context", - "google.golang.org/grpc" - ] } ] } diff --git a/pkg/printers/.import-restrictions b/pkg/printers/.import-restrictions index 5ec789450231..7c3e43275d0e 100644 --- a/pkg/printers/.import-restrictions +++ b/pkg/printers/.import-restrictions @@ -1,10 +1,5 @@ -{ - "Rules": [ - { - "SelectorRegexp": "k8s[.]io/kubernetes/pkg/(api$|apis/)", - "ForbiddenPrefixes": [ - "k8s.io/kubernetes/pkg/printers" - ] - } - ] -} +rules: + # Discourage import of k8s.io/kubernetes/pkg/{api|apis} + - selectorRegexp: "k8s[.]io/kubernetes/pkg/(api$|apis/)" + forbiddenPrefixes: + - "" diff --git a/pkg/printers/internalversion/.import-restrictions b/pkg/printers/internalversion/.import-restrictions index ce172cfbd9d5..a93b60f96f31 100644 --- a/pkg/printers/internalversion/.import-restrictions +++ b/pkg/printers/internalversion/.import-restrictions @@ -1,4 +1,5 @@ -{ - "Rules": [ - ] -} +rules: + # Allow imports of k8s.io/kubernetes/pkg/{api|apis} + - selectorRegexp: "k8s[.]io/kubernetes/pkg/(api$|apis/)" + allowedPrefixes: + - "" From db19fc942737601e9f8ea845ef86923225b67e1b Mon Sep 17 00:00:00 2001 From: Elijah Oyekunle Date: Tue, 28 Jan 2020 10:49:55 +0100 Subject: [PATCH 2/5] add import-restrictions to apiextensions-apiserver/pkg/apis,v1 and v1beta1 --- .../pkg/apis/.import-restrictions | 9 +++++++++ .../pkg/apis/apiextensions/v1/.import-restrictions | 5 +++++ .../pkg/apis/apiextensions/v1beta1/.import-restrictions | 5 +++++ 3 files changed, 19 insertions(+) create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/.import-restrictions create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/.import-restrictions create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/.import-restrictions diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/.import-restrictions b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/.import-restrictions new file mode 100644 index 000000000000..788c11253171 --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/.import-restrictions @@ -0,0 +1,9 @@ +inverseRules: + # Allow Internal packages only in apiextensions-apiserver itself, discourage use elsewhere. + - selectorRegexp: k8s[.]io/apiextensions-apiserver + allowedPrefixes: + - '' + # Forbid use of this package in other k8s.io packages. + - selectorRegexp: k8s[.]io + forbiddenPrefixes: + - '' diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/.import-restrictions b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/.import-restrictions new file mode 100644 index 000000000000..7408dd121249 --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/.import-restrictions @@ -0,0 +1,5 @@ +inverseRules: + # Allow use of this package in all k8s.io packages. + - selectorRegexp: k8s[.]io + allowedPrefixes: + - '' diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/.import-restrictions b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/.import-restrictions new file mode 100644 index 000000000000..7408dd121249 --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/.import-restrictions @@ -0,0 +1,5 @@ +inverseRules: + # Allow use of this package in all k8s.io packages. + - selectorRegexp: k8s[.]io + allowedPrefixes: + - '' From 558f6aab56c0e983741d7df6eb8ffc79a19a8672 Mon Sep 17 00:00:00 2001 From: Elijah Oyekunle Date: Tue, 28 Jan 2020 10:51:17 +0100 Subject: [PATCH 3/5] add staging directories to import-boss verify script --- hack/verify-generated-protobuf.sh | 2 +- hack/verify-import-boss.sh | 9 ++++++++- .../src/k8s.io/code-generator/cmd/import-boss/main.go | 6 ------ 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/hack/verify-generated-protobuf.sh b/hack/verify-generated-protobuf.sh index 76185f8c8dcf..e9a90a74b8d5 100755 --- a/hack/verify-generated-protobuf.sh +++ b/hack/verify-generated-protobuf.sh @@ -54,7 +54,7 @@ for APIROOT in ${APIROOTS}; do TMP_APIROOT="${_tmp}/${APIROOT}" echo "diffing ${APIROOT} against freshly generated protobuf" ret=0 - diff -Naupr -I 'Auto generated by' -x 'zz_generated.*' -x '.github' "${KUBE_ROOT}/${APIROOT}" "${TMP_APIROOT}" || ret=$? + diff -Naupr -I 'Auto generated by' -x 'zz_generated.*' -x '.github' -x '.import-restrictions' "${KUBE_ROOT}/${APIROOT}" "${TMP_APIROOT}" || ret=$? cp -a "${TMP_APIROOT}"/* "${KUBE_ROOT}/${APIROOT}/" if [[ $ret -eq 0 ]]; then echo "${APIROOT} up to date." diff --git a/hack/verify-import-boss.sh b/hack/verify-import-boss.sh index e159916fd20d..bafb9d71e4d7 100755 --- a/hack/verify-import-boss.sh +++ b/hack/verify-import-boss.sh @@ -30,4 +30,11 @@ kube::golang::setup_env make -C "${KUBE_ROOT}" WHAT=vendor/k8s.io/code-generator/cmd/import-boss -$(kube::util::find-binary "import-boss") --verify-only "$@" +packages=("k8s.io/kubernetes/pkg/..." "k8s.io/kubernetes/cmd/..." "k8s.io/kubernetes/plugin/..." "k8s.io/kubernetes/test/e2e/framework/...") +for d in staging/src/k8s.io/*/; do + if [ -d "$d" ]; then + packages+=("./vendor/${d#"staging/src/"}...") + fi +done + +$(kube::util::find-binary "import-boss") --verify-only "$@" --input-dirs "$(IFS=, ; echo "${packages[*]}")" diff --git a/staging/src/k8s.io/code-generator/cmd/import-boss/main.go b/staging/src/k8s.io/code-generator/cmd/import-boss/main.go index e08f3e73036a..9d73eb480b56 100644 --- a/staging/src/k8s.io/code-generator/cmd/import-boss/main.go +++ b/staging/src/k8s.io/code-generator/cmd/import-boss/main.go @@ -77,12 +77,6 @@ func main() { // Override defaults. arguments.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), util.BoilerplatePath()) - arguments.InputDirs = []string{ - "k8s.io/kubernetes/pkg/...", - "k8s.io/kubernetes/cmd/...", - "k8s.io/kubernetes/plugin/...", - "k8s.io/kubernetes/test/e2e/framework/...", - } pflag.CommandLine.BoolVar(&arguments.IncludeTestFiles, "include-test-files", false, "If true, include *_test.go files.") if err := arguments.Execute( From cece51b9b0b8322401f17f0650af864b9867f12e Mon Sep 17 00:00:00 2001 From: Elijah Oyekunle Date: Tue, 28 Jan 2020 10:51:37 +0100 Subject: [PATCH 4/5] bump gengo version --- go.mod | 4 +- go.sum | 4 +- .../src/k8s.io/apiextensions-apiserver/go.sum | 5 +- staging/src/k8s.io/code-generator/go.mod | 3 +- staging/src/k8s.io/code-generator/go.sum | 7 +- staging/src/k8s.io/kube-aggregator/go.sum | 5 +- staging/src/k8s.io/kubectl/go.sum | 2 +- staging/src/k8s.io/metrics/go.sum | 5 +- staging/src/k8s.io/node-api/go.sum | 5 +- staging/src/k8s.io/sample-apiserver/go.sum | 5 +- staging/src/k8s.io/sample-controller/go.sum | 5 +- vendor/k8s.io/gengo/args/args.go | 5 +- .../defaulter-gen/generators/defaulter.go | 6 +- .../examples/import-boss/generators/BUILD | 1 + .../import-boss/generators/import_restrict.go | 215 ++++++++++++++---- vendor/k8s.io/gengo/generator/BUILD | 1 + .../k8s.io/gengo/generator/default_package.go | 7 +- vendor/k8s.io/gengo/generator/execute.go | 12 +- vendor/k8s.io/gengo/generator/generator.go | 53 ++++- .../k8s.io/gengo/generator/import_tracker.go | 6 + .../gengo/generator/transitive_closure.go | 65 ++++++ vendor/k8s.io/gengo/namer/order.go | 3 + vendor/k8s.io/gengo/parser/parse.go | 34 ++- vendor/k8s.io/gengo/types/types.go | 27 +++ vendor/modules.txt | 2 +- 25 files changed, 394 insertions(+), 93 deletions(-) create mode 100644 vendor/k8s.io/gengo/generator/transitive_closure.go diff --git a/go.mod b/go.mod index b9bba013353a..89e1e388190c 100644 --- a/go.mod +++ b/go.mod @@ -148,7 +148,7 @@ require ( k8s.io/component-base v0.0.0 k8s.io/cri-api v0.0.0 k8s.io/csi-translation-lib v0.0.0 - k8s.io/gengo v0.0.0-20190822140433-26a664648505 + k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 k8s.io/heapster v1.2.0-beta.1 k8s.io/klog v1.0.0 k8s.io/kube-aggregator v0.0.0 @@ -544,7 +544,7 @@ replace ( k8s.io/component-base => ./staging/src/k8s.io/component-base k8s.io/cri-api => ./staging/src/k8s.io/cri-api k8s.io/csi-translation-lib => ./staging/src/k8s.io/csi-translation-lib - k8s.io/gengo => k8s.io/gengo v0.0.0-20190822140433-26a664648505 + k8s.io/gengo => k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 k8s.io/heapster => k8s.io/heapster v1.2.0-beta.1 k8s.io/klog => k8s.io/klog v1.0.0 k8s.io/kube-aggregator => ./staging/src/k8s.io/kube-aggregator diff --git a/go.sum b/go.sum index 49e7ef328daa..c09ba9929b59 100644 --- a/go.sum +++ b/go.sum @@ -590,8 +590,8 @@ gotest.tools/gotestsum v0.3.5/go.mod h1:Mnf3e5FUzXbkCfynWBGOwLssY7gTQgCHObK9tMpA grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.1-2019.2.2 h1:TEgegKbBqByGUb1Coo1pc2qIdf2xw6v0mYyLSYtyopE= honnef.co/go/tools v0.0.1-2019.2.2/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -k8s.io/gengo v0.0.0-20190822140433-26a664648505 h1:ZY6yclUKVbZ+SdWnkfY+Je5vrMpKOxmGeKRbsXVmqYM= -k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 h1:RPscN6KhmG54S33L+lr3GS+oD1jmchIU0ll519K6FA4= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/heapster v1.2.0-beta.1 h1:lUsE/AHOMHpi3MLlBEkaU8Esxm5QhdyCrv1o7ot0s84= k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= diff --git a/staging/src/k8s.io/apiextensions-apiserver/go.sum b/staging/src/k8s.io/apiextensions-apiserver/go.sum index 9d6f587d3b77..505ba40ef945 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/go.sum +++ b/staging/src/k8s.io/apiextensions-apiserver/go.sum @@ -446,10 +446,9 @@ gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6 h1:4s3/R4+OYYYUKptXPhZKjQ04WJ6EhQQVFdjOFvCazDk= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20190822140433-26a664648505 h1:ZY6yclUKVbZ+SdWnkfY+Je5vrMpKOxmGeKRbsXVmqYM= -k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 h1:RPscN6KhmG54S33L+lr3GS+oD1jmchIU0ll519K6FA4= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/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= diff --git a/staging/src/k8s.io/code-generator/go.mod b/staging/src/k8s.io/code-generator/go.mod index da30338c3b39..3581795c804c 100644 --- a/staging/src/k8s.io/code-generator/go.mod +++ b/staging/src/k8s.io/code-generator/go.mod @@ -9,6 +9,7 @@ require ( github.com/go-openapi/jsonreference v0.19.3 // indirect github.com/go-openapi/spec v0.19.3 // indirect github.com/gogo/protobuf v1.3.1 + github.com/google/go-cmp v0.3.0 // indirect github.com/json-iterator/go v1.1.8 // indirect github.com/mailru/easyjson v0.7.0 // indirect github.com/spf13/pflag v1.0.5 @@ -16,7 +17,7 @@ require ( golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 // indirect golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72 // indirect gopkg.in/yaml.v2 v2.2.8 // indirect - k8s.io/gengo v0.0.0-20190822140433-26a664648505 + k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 k8s.io/klog v1.0.0 k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c ) diff --git a/staging/src/k8s.io/code-generator/go.sum b/staging/src/k8s.io/code-generator/go.sum index 2f3214cf2af9..29abd1b4db12 100644 --- a/staging/src/k8s.io/code-generator/go.sum +++ b/staging/src/k8s.io/code-generator/go.sum @@ -34,6 +34,8 @@ github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -100,12 +102,13 @@ gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6 h1:4s3/R4+OYYYUKptXPhZKjQ04WJ6EhQQVFdjOFvCazDk= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20190822140433-26a664648505 h1:ZY6yclUKVbZ+SdWnkfY+Je5vrMpKOxmGeKRbsXVmqYM= -k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 h1:RPscN6KhmG54S33L+lr3GS+oD1jmchIU0ll519K6FA4= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/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/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c h1:/KUFqjjqAcY4Us6luF5RDNZ16KJtb49HfR3ZHB9qYXM= k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= +sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= diff --git a/staging/src/k8s.io/kube-aggregator/go.sum b/staging/src/k8s.io/kube-aggregator/go.sum index 568dd0ba95e2..8de731420375 100644 --- a/staging/src/k8s.io/kube-aggregator/go.sum +++ b/staging/src/k8s.io/kube-aggregator/go.sum @@ -376,10 +376,9 @@ gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6 h1:4s3/R4+OYYYUKptXPhZKjQ04WJ6EhQQVFdjOFvCazDk= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20190822140433-26a664648505 h1:ZY6yclUKVbZ+SdWnkfY+Je5vrMpKOxmGeKRbsXVmqYM= -k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 h1:RPscN6KhmG54S33L+lr3GS+oD1jmchIU0ll519K6FA4= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/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= diff --git a/staging/src/k8s.io/kubectl/go.sum b/staging/src/k8s.io/kubectl/go.sum index 048e5e63ae60..dbb49921864c 100644 --- a/staging/src/k8s.io/kubectl/go.sum +++ b/staging/src/k8s.io/kubectl/go.sum @@ -311,7 +311,7 @@ gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/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= diff --git a/staging/src/k8s.io/metrics/go.sum b/staging/src/k8s.io/metrics/go.sum index 55cfe3f4b0a3..ba9725dfea64 100644 --- a/staging/src/k8s.io/metrics/go.sum +++ b/staging/src/k8s.io/metrics/go.sum @@ -198,10 +198,9 @@ gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6 h1:4s3/R4+OYYYUKptXPhZKjQ04WJ6EhQQVFdjOFvCazDk= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20190822140433-26a664648505 h1:ZY6yclUKVbZ+SdWnkfY+Je5vrMpKOxmGeKRbsXVmqYM= -k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 h1:RPscN6KhmG54S33L+lr3GS+oD1jmchIU0ll519K6FA4= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/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= diff --git a/staging/src/k8s.io/node-api/go.sum b/staging/src/k8s.io/node-api/go.sum index 1ba717be7acc..0f7c4cad045e 100644 --- a/staging/src/k8s.io/node-api/go.sum +++ b/staging/src/k8s.io/node-api/go.sum @@ -202,10 +202,9 @@ gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6 h1:4s3/R4+OYYYUKptXPhZKjQ04WJ6EhQQVFdjOFvCazDk= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20190822140433-26a664648505 h1:ZY6yclUKVbZ+SdWnkfY+Je5vrMpKOxmGeKRbsXVmqYM= -k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 h1:RPscN6KhmG54S33L+lr3GS+oD1jmchIU0ll519K6FA4= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/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= diff --git a/staging/src/k8s.io/sample-apiserver/go.sum b/staging/src/k8s.io/sample-apiserver/go.sum index b80a0dbec3b1..7d08868ecfc5 100644 --- a/staging/src/k8s.io/sample-apiserver/go.sum +++ b/staging/src/k8s.io/sample-apiserver/go.sum @@ -373,10 +373,9 @@ gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6 h1:4s3/R4+OYYYUKptXPhZKjQ04WJ6EhQQVFdjOFvCazDk= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20190822140433-26a664648505 h1:ZY6yclUKVbZ+SdWnkfY+Je5vrMpKOxmGeKRbsXVmqYM= -k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 h1:RPscN6KhmG54S33L+lr3GS+oD1jmchIU0ll519K6FA4= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/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= diff --git a/staging/src/k8s.io/sample-controller/go.sum b/staging/src/k8s.io/sample-controller/go.sum index 9322c843e780..f985f454e473 100644 --- a/staging/src/k8s.io/sample-controller/go.sum +++ b/staging/src/k8s.io/sample-controller/go.sum @@ -203,10 +203,9 @@ gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6 h1:4s3/R4+OYYYUKptXPhZKjQ04WJ6EhQQVFdjOFvCazDk= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20190822140433-26a664648505 h1:ZY6yclUKVbZ+SdWnkfY+Je5vrMpKOxmGeKRbsXVmqYM= -k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 h1:RPscN6KhmG54S33L+lr3GS+oD1jmchIU0ll519K6FA4= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/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= diff --git a/vendor/k8s.io/gengo/args/args.go b/vendor/k8s.io/gengo/args/args.go index 7401098c5f85..49cc76dac9f5 100644 --- a/vendor/k8s.io/gengo/args/args.go +++ b/vendor/k8s.io/gengo/args/args.go @@ -112,7 +112,7 @@ func (g *GeneratorArgs) LoadGoBoilerplate() ([]byte, error) { if err != nil { return nil, err } - b = bytes.Replace(b, []byte("YEAR"), []byte(strconv.Itoa(time.Now().Year())), -1) + b = bytes.Replace(b, []byte("YEAR"), []byte(strconv.Itoa(time.Now().UTC().Year())), -1) if g.GeneratedByCommentTemplate != "" { if len(b) != 0 { @@ -159,6 +159,9 @@ func (g *GeneratorArgs) InputIncludes(p *types.Package) bool { if strings.HasSuffix(d, "...") { d = strings.TrimSuffix(d, "...") } + if strings.HasPrefix(d, "./vendor/") { + d = strings.TrimPrefix(d, "./vendor/") + } if strings.HasPrefix(p.Path, d) { return true } diff --git a/vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go b/vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go index 7e3bc6b4b12c..9ee7b79f5048 100644 --- a/vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go +++ b/vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go @@ -248,7 +248,11 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat shouldCreateObjectDefaulterFn := func(t *types.Type) bool { if defaults, ok := existingDefaulters[t]; ok && defaults.object != nil { // A default generator is defined - klog.V(5).Infof(" an object defaulter already exists as %s", defaults.base.Name) + baseTypeName := "" + if defaults.base != nil { + baseTypeName = defaults.base.Name.String() + } + klog.V(5).Infof(" an object defaulter already exists as %s", baseTypeName) return false } // opt-out diff --git a/vendor/k8s.io/gengo/examples/import-boss/generators/BUILD b/vendor/k8s.io/gengo/examples/import-boss/generators/BUILD index 366922bed10e..80de680e0d7c 100644 --- a/vendor/k8s.io/gengo/examples/import-boss/generators/BUILD +++ b/vendor/k8s.io/gengo/examples/import-boss/generators/BUILD @@ -12,6 +12,7 @@ go_library( "//vendor/k8s.io/gengo/namer:go_default_library", "//vendor/k8s.io/gengo/types:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/sigs.k8s.io/yaml:go_default_library", ], ) diff --git a/vendor/k8s.io/gengo/examples/import-boss/generators/import_restrict.go b/vendor/k8s.io/gengo/examples/import-boss/generators/import_restrict.go index ea5716b6ce96..308bb6b8d283 100644 --- a/vendor/k8s.io/gengo/examples/import-boss/generators/import_restrict.go +++ b/vendor/k8s.io/gengo/examples/import-boss/generators/import_restrict.go @@ -33,11 +33,13 @@ import ( "k8s.io/gengo/generator" "k8s.io/gengo/namer" "k8s.io/gengo/types" + "sigs.k8s.io/yaml" "k8s.io/klog" ) const ( + goModFile = "go.mod" importBossFileType = "import-boss" ) @@ -58,7 +60,7 @@ func DefaultNameSystem() string { func Packages(c *generator.Context, arguments *args.GeneratorArgs) generator.Packages { pkgs := generator.Packages{} c.FileTypes = map[string]generator.FileType{ - importBossFileType: importRuleFile{}, + importBossFileType: importRuleFile{c}, } for _, p := range c.Universe { @@ -70,6 +72,7 @@ func Packages(c *generator.Context, arguments *args.GeneratorArgs) generator.Pac pkgs = append(pkgs, &generator.DefaultPackage{ PackageName: p.Name, PackagePath: p.Path, + Source: p.SourcePath, // GeneratorFunc returns a list of generators. Each generator makes a // single file. GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { @@ -96,10 +99,19 @@ type Rule struct { ForbiddenPrefixes []string } +type InverseRule struct { + Rule + // True if the rule is to be applied to transitive imports. + Transitive bool +} + type fileFormat struct { CurrentImports []string - Rules []Rule + Rules []Rule + InverseRules []InverseRule + + path string } func readFile(path string) (*fileFormat, error) { @@ -109,10 +121,11 @@ func readFile(path string) (*fileFormat, error) { } var current fileFormat - err = json.Unmarshal(currentBytes, ¤t) + err = yaml.Unmarshal(currentBytes, ¤t) if err != nil { return nil, fmt.Errorf("couldn't unmarshal %v: %v", path, err) } + current.path = path return ¤t, nil } @@ -131,10 +144,12 @@ func writeFile(path string, ff *fileFormat) error { } // This does the actual checking, since it knows the literal destination file. -type importRuleFile struct{} +type importRuleFile struct { + context *generator.Context +} -func (importRuleFile) AssembleFile(f *generator.File, path string) error { - return nil +func (irf importRuleFile) AssembleFile(f *generator.File, path string) error { + return irf.VerifyFile(f, path) } // TODO: make a flag to enable this, or expose this information in some other way. @@ -169,62 +184,99 @@ func removeLastDir(path string) (newPath, removedDir string) { return filepath.Join(filepath.Dir(dir), file), filepath.Base(dir) } -// Keep going up a directory until we find an .import-restrictions file. -func recursiveRead(path string) (*fileFormat, string, error) { +// isGoModRoot checks if a directory is the root directory for a package +// by checking for the existence of a 'go.mod' file in that directory. +func isGoModRoot(path string) bool { + _, err := os.Stat(filepath.Join(filepath.Dir(path), goModFile)) + return err == nil +} + +// recursiveRead collects all '.import-restriction' files, between the current directory, +// and the package root when Go modules are enabled, or $GOPATH/src when they are not. +func recursiveRead(path string) ([]*fileFormat, error) { + restrictionFiles := make([]*fileFormat, 0) + for { if _, err := os.Stat(path); err == nil { - ff, err := readFile(path) - return ff, path, err + rules, err := readFile(path) + if err != nil { + return nil, err + } + + restrictionFiles = append(restrictionFiles, rules) } nextPath, removedDir := removeLastDir(path) - if nextPath == path || removedDir == "src" { + if nextPath == path || isGoModRoot(path) || removedDir == "src" { break } + path = nextPath } - return nil, "", nil + + return restrictionFiles, nil } -func (importRuleFile) VerifyFile(f *generator.File, path string) error { - rules, actualPath, err := recursiveRead(path) +func (irf importRuleFile) VerifyFile(f *generator.File, path string) error { + restrictionFiles, err := recursiveRead(filepath.Join(f.PackageSourcePath, f.Name)) if err != nil { return fmt.Errorf("error finding rules file: %v", err) } - if rules == nil { - // No restrictions on this directory. - return nil + if err := irf.verifyRules(restrictionFiles, f); err != nil { + return err + } + + return irf.verifyInverseRules(restrictionFiles, f) +} + +func (irf importRuleFile) verifyRules(restrictionFiles []*fileFormat, f *generator.File) error { + selectors := make([][]*regexp.Regexp, len(restrictionFiles)) + for i, restrictionFile := range restrictionFiles { + for _, r := range restrictionFile.Rules { + re, err := regexp.Compile(r.SelectorRegexp) + if err != nil { + return fmt.Errorf("regexp `%s` in file %q doesn't compile: %v", r.SelectorRegexp, restrictionFile.path, err) + } + + selectors[i] = append(selectors[i], re) + } } forbiddenImports := map[string]string{} allowedMismatchedImports := []string{} - for _, r := range rules.Rules { - re, err := regexp.Compile(r.SelectorRegexp) - if err != nil { - return fmt.Errorf("regexp `%s` in file %q doesn't compile: %v", r.SelectorRegexp, actualPath, err) - } - for v := range f.Imports { - klog.V(4).Infof("Checking %v matches %v: %v\n", r.SelectorRegexp, v, re.MatchString(v)) - if !re.MatchString(v) { - continue - } - for _, forbidden := range r.ForbiddenPrefixes { - klog.V(4).Infof("Checking %v against %v\n", v, forbidden) - if strings.HasPrefix(v, forbidden) { - forbiddenImports[v] = forbidden + + for v := range f.Imports { + explicitlyAllowed := false + + NextRestrictionFiles: + for i, rules := range restrictionFiles { + for j, r := range rules.Rules { + matching := selectors[i][j].MatchString(v) + klog.V(5).Infof("Checking %v matches %v: %v\n", r.SelectorRegexp, v, matching) + if !matching { + continue } - } - found := false - for _, allowed := range r.AllowedPrefixes { - klog.V(4).Infof("Checking %v against %v\n", v, allowed) - if strings.HasPrefix(v, allowed) { - found = true - break + for _, forbidden := range r.ForbiddenPrefixes { + klog.V(4).Infof("Checking %v against %v\n", v, forbidden) + if strings.HasPrefix(v, forbidden) { + forbiddenImports[v] = forbidden + } + } + for _, allowed := range r.AllowedPrefixes { + klog.V(4).Infof("Checking %v against %v\n", v, allowed) + if strings.HasPrefix(v, allowed) { + explicitlyAllowed = true + break + } + } + + if !explicitlyAllowed { + allowedMismatchedImports = append(allowedMismatchedImports, v) + } else { + klog.V(2).Infof("%v importing %v allowed by %v\n", f.PackagePath, v, restrictionFiles[i].path) + break NextRestrictionFiles } - } - if !found { - allowedMismatchedImports = append(allowedMismatchedImports, v) } } } @@ -243,8 +295,85 @@ func (importRuleFile) VerifyFile(f *generator.File, path string) error { } return errors.New(errorBuilder.String()) } - if len(rules.Rules) > 0 { - klog.V(2).Infof("%v passes rules found in %v\n", path, actualPath) + + return nil +} + +// verifyInverseRules checks that all packages that import a package are allowed to import it. +func (irf importRuleFile) verifyInverseRules(restrictionFiles []*fileFormat, f *generator.File) error { + // compile all Selector regex in all restriction files + selectors := make([][]*regexp.Regexp, len(restrictionFiles)) + for i, restrictionFile := range restrictionFiles { + for _, r := range restrictionFile.InverseRules { + re, err := regexp.Compile(r.SelectorRegexp) + if err != nil { + return fmt.Errorf("regexp `%s` in file %q doesn't compile: %v", r.SelectorRegexp, restrictionFile.path, err) + } + + selectors[i] = append(selectors[i], re) + } + } + + directImport := map[string]bool{} + for _, imp := range irf.context.IncomingImports()[f.PackagePath] { + directImport[imp] = true + } + + forbiddenImports := map[string]string{} + allowedMismatchedImports := []string{} + + for _, v := range irf.context.TransitiveIncomingImports()[f.PackagePath] { + explicitlyAllowed := false + + NextRestrictionFiles: + for i, rules := range restrictionFiles { + for j, r := range rules.InverseRules { + if !r.Transitive && !directImport[v] { + continue + } + + re := selectors[i][j] + matching := re.MatchString(v) + klog.V(4).Infof("Checking %v matches %v (importing %v: %v\n", r.SelectorRegexp, v, f.PackagePath, matching) + if !matching { + continue + } + for _, forbidden := range r.ForbiddenPrefixes { + klog.V(4).Infof("Checking %v against %v\n", v, forbidden) + if strings.HasPrefix(v, forbidden) { + forbiddenImports[v] = forbidden + } + } + for _, allowed := range r.AllowedPrefixes { + klog.V(4).Infof("Checking %v against %v\n", v, allowed) + if strings.HasPrefix(v, allowed) { + explicitlyAllowed = true + break + } + } + if !explicitlyAllowed { + allowedMismatchedImports = append(allowedMismatchedImports, v) + } else { + klog.V(2).Infof("%v importing %v allowed by %v\n", v, f.PackagePath, restrictionFiles[i].path) + break NextRestrictionFiles + } + } + } + } + + if len(forbiddenImports) > 0 || len(allowedMismatchedImports) > 0 { + var errorBuilder strings.Builder + for i, f := range forbiddenImports { + fmt.Fprintf(&errorBuilder, "(inverse): import %v has forbidden prefix %v\n", i, f) + } + if len(allowedMismatchedImports) > 0 { + sort.Sort(sort.StringSlice(allowedMismatchedImports)) + fmt.Fprintf(&errorBuilder, "(inverse): the following imports did not match any allowed prefix:\n") + for _, i := range allowedMismatchedImports { + fmt.Fprintf(&errorBuilder, " %v\n", i) + } + } + return errors.New(errorBuilder.String()) } return nil diff --git a/vendor/k8s.io/gengo/generator/BUILD b/vendor/k8s.io/gengo/generator/BUILD index ff8429163226..e0f17df11a83 100644 --- a/vendor/k8s.io/gengo/generator/BUILD +++ b/vendor/k8s.io/gengo/generator/BUILD @@ -11,6 +11,7 @@ go_library( "generator.go", "import_tracker.go", "snippet_writer.go", + "transitive_closure.go", ], importmap = "k8s.io/kubernetes/vendor/k8s.io/gengo/generator", importpath = "k8s.io/gengo/generator", diff --git a/vendor/k8s.io/gengo/generator/default_package.go b/vendor/k8s.io/gengo/generator/default_package.go index 11517fc6ae81..dcf0883235dd 100644 --- a/vendor/k8s.io/gengo/generator/default_package.go +++ b/vendor/k8s.io/gengo/generator/default_package.go @@ -26,6 +26,8 @@ type DefaultPackage struct { PackageName string // Import path of the package, and the location on disk of the package. PackagePath string + // The location of the package on disk. + Source string // Emitted at the top of every file. HeaderText []byte @@ -43,8 +45,9 @@ type DefaultPackage struct { FilterFunc func(*Context, *types.Type) bool } -func (d *DefaultPackage) Name() string { return d.PackageName } -func (d *DefaultPackage) Path() string { return d.PackagePath } +func (d *DefaultPackage) Name() string { return d.PackageName } +func (d *DefaultPackage) Path() string { return d.PackagePath } +func (d *DefaultPackage) SourcePath() string { return d.Source } func (d *DefaultPackage) Filter(c *Context, t *types.Type) bool { if d.FilterFunc != nil { diff --git a/vendor/k8s.io/gengo/generator/execute.go b/vendor/k8s.io/gengo/generator/execute.go index b5f5aaeb4431..d1b12258c7ea 100644 --- a/vendor/k8s.io/gengo/generator/execute.go +++ b/vendor/k8s.io/gengo/generator/execute.go @@ -233,11 +233,13 @@ func (c *Context) ExecutePackage(outDir string, p Package) error { if f == nil { // This is the first generator to reference this file, so start it. f = &File{ - Name: g.Filename(), - FileType: fileType, - PackageName: p.Name(), - Header: p.Header(g.Filename()), - Imports: map[string]struct{}{}, + Name: g.Filename(), + FileType: fileType, + PackageName: p.Name(), + PackagePath: p.Path(), + PackageSourcePath: p.SourcePath(), + Header: p.Header(g.Filename()), + Imports: map[string]struct{}{}, } files[f.Name] = f } else { diff --git a/vendor/k8s.io/gengo/generator/generator.go b/vendor/k8s.io/gengo/generator/generator.go index 05a3f65fe87c..4b48f503cf09 100644 --- a/vendor/k8s.io/gengo/generator/generator.go +++ b/vendor/k8s.io/gengo/generator/generator.go @@ -31,6 +31,8 @@ type Package interface { Name() string // Path returns the package import path. Path() string + // SourcePath returns the location of the package on disk. + SourcePath() string // Filter should return true if this package cares about this type. // Otherwise, this type will be omitted from the type ordering for @@ -50,14 +52,16 @@ type Package interface { } type File struct { - Name string - FileType string - PackageName string - Header []byte - Imports map[string]struct{} - Vars bytes.Buffer - Consts bytes.Buffer - Body bytes.Buffer + Name string + FileType string + PackageName string + Header []byte + PackagePath string + PackageSourcePath string + Imports map[string]struct{} + Vars bytes.Buffer + Consts bytes.Buffer + Body bytes.Buffer } type FileType interface { @@ -156,6 +160,12 @@ type Context struct { // All the types, in case you want to look up something. Universe types.Universe + // Incoming imports, i.e. packages importing the given package. + incomingImports map[string][]string + + // Incoming transitive imports, i.e. the transitive closure of IncomingImports + incomingTransitiveImports map[string][]string + // All the user-specified packages. This is after recursive expansion. Inputs []string @@ -203,11 +213,36 @@ func NewContext(b *parser.Builder, nameSystems namer.NameSystems, canonicalOrder return c, nil } +// IncomingImports returns the incoming imports for each package. The map is lazily computed. +func (ctxt *Context) IncomingImports() map[string][]string { + if ctxt.incomingImports == nil { + incoming := map[string][]string{} + for _, pkg := range ctxt.Universe { + for imp := range pkg.Imports { + incoming[imp] = append(incoming[imp], pkg.Path) + } + } + ctxt.incomingImports = incoming + } + return ctxt.incomingImports +} + +// TransitiveIncomingImports returns the transitive closure of the incoming imports for each package. +// The map is lazily computed. +func (ctxt *Context) TransitiveIncomingImports() map[string][]string { + if ctxt.incomingTransitiveImports == nil { + ctxt.incomingTransitiveImports = transitiveClosure(ctxt.IncomingImports()) + } + return ctxt.incomingTransitiveImports +} + // AddDir adds a Go package to the context. The specified path must be a single // go package import path. GOPATH, GOROOT, and the location of your go binary // (`which go`) will all be searched, in the normal Go fashion. // Deprecated. Please use AddDirectory. func (ctxt *Context) AddDir(path string) error { + ctxt.incomingImports = nil + ctxt.incomingTransitiveImports = nil return ctxt.builder.AddDirTo(path, &ctxt.Universe) } @@ -215,5 +250,7 @@ func (ctxt *Context) AddDir(path string) error { // single go package import path. GOPATH, GOROOT, and the location of your go // binary (`which go`) will all be searched, in the normal Go fashion. func (ctxt *Context) AddDirectory(path string) (*types.Package, error) { + ctxt.incomingImports = nil + ctxt.incomingTransitiveImports = nil return ctxt.builder.AddDirectoryTo(path, &ctxt.Universe) } diff --git a/vendor/k8s.io/gengo/generator/import_tracker.go b/vendor/k8s.io/gengo/generator/import_tracker.go index 5d058410ac62..5d87de4ff00c 100644 --- a/vendor/k8s.io/gengo/generator/import_tracker.go +++ b/vendor/k8s.io/gengo/generator/import_tracker.go @@ -17,6 +17,7 @@ limitations under the License. package generator import ( + "go/token" "strings" "k8s.io/klog" @@ -58,6 +59,11 @@ func golangTrackerLocalName(tracker namer.ImportTracker, t types.Name) string { // This name collides with some other package continue } + + // If the import name is a Go keyword, prefix with an underscore. + if token.Lookup(name).IsKeyword() { + name = "_" + name + } return name } panic("can't find import for " + path) diff --git a/vendor/k8s.io/gengo/generator/transitive_closure.go b/vendor/k8s.io/gengo/generator/transitive_closure.go new file mode 100644 index 000000000000..385a49fce312 --- /dev/null +++ b/vendor/k8s.io/gengo/generator/transitive_closure.go @@ -0,0 +1,65 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package generator + +import "sort" + +type edge struct { + from string + to string +} + +func transitiveClosure(in map[string][]string) map[string][]string { + adj := make(map[edge]bool) + imports := make(map[string]struct{}) + for from, tos := range in { + for _, to := range tos { + adj[edge{from, to}] = true + imports[to] = struct{}{} + } + } + + // Warshal's algorithm + for k := range in { + for i := range in { + if !adj[edge{i, k}] { + continue + } + for j := range imports { + if adj[edge{i, j}] { + continue + } + if adj[edge{k, j}] { + adj[edge{i, j}] = true + } + } + } + } + + out := make(map[string][]string, len(in)) + for i := range in { + for j := range imports { + if adj[edge{i, j}] { + out[i] = append(out[i], j) + } + } + + sort.Strings(out[i]) + } + + return out +} diff --git a/vendor/k8s.io/gengo/namer/order.go b/vendor/k8s.io/gengo/namer/order.go index f86282b9b115..fd89be9b0837 100644 --- a/vendor/k8s.io/gengo/namer/order.go +++ b/vendor/k8s.io/gengo/namer/order.go @@ -43,6 +43,9 @@ func (o *Orderer) OrderUniverse(u types.Universe) []*types.Type { for _, v := range p.Variables { list.types = append(list.types, v) } + for _, v := range p.Constants { + list.types = append(list.types, v) + } } sort.Sort(list) return list.types diff --git a/vendor/k8s.io/gengo/parser/parse.go b/vendor/k8s.io/gengo/parser/parse.go index 6a3d53b256c3..2bceaee478dc 100644 --- a/vendor/k8s.io/gengo/parser/parse.go +++ b/vendor/k8s.io/gengo/parser/parse.go @@ -227,12 +227,16 @@ func (b *Builder) AddDirRecursive(dir string) error { klog.Warningf("Ignoring directory %v: %v", dir, err) } - // filepath.Walk includes the root dir, but we already did that, so we'll - // remove that prefix and rebuild a package import path. - prefix := b.buildPackages[dir].Dir + // filepath.Walk does not follow symlinks. We therefore evaluate symlinks and use that with + // filepath.Walk. + realPath, err := filepath.EvalSymlinks(b.buildPackages[dir].Dir) + if err != nil { + return err + } + fn := func(filePath string, info os.FileInfo, err error) error { if info != nil && info.IsDir() { - rel := filepath.ToSlash(strings.TrimPrefix(filePath, prefix)) + rel := filepath.ToSlash(strings.TrimPrefix(filePath, realPath)) if rel != "" { // Make a pkg path. pkg := path.Join(string(canonicalizeImportPath(b.buildPackages[dir].ImportPath)), rel) @@ -245,7 +249,7 @@ func (b *Builder) AddDirRecursive(dir string) error { } return nil } - if err := filepath.Walk(b.buildPackages[dir].Dir, fn); err != nil { + if err := filepath.Walk(realPath, fn); err != nil { return err } return nil @@ -544,6 +548,10 @@ func (b *Builder) findTypesIn(pkgPath importPathString, u *types.Universe) error if ok && !tv.IsField() { b.addVariable(*u, nil, tv) } + tconst, ok := obj.(*tc.Const) + if ok { + b.addConstant(*u, nil, tconst) + } } importedPkgs := []string{} @@ -774,7 +782,10 @@ func (b *Builder) walkType(u types.Universe, useName *types.Name, in tc.Type) *t if out.Methods == nil { out.Methods = map[string]*types.Type{} } - out.Methods[t.Method(i).Name()] = b.walkType(u, nil, t.Method(i).Type()) + method := t.Method(i) + mt := b.walkType(u, nil, method.Type()) + mt.CommentLines = splitLines(b.priorCommentLines(method.Pos(), 1).Text()) + out.Methods[method.Name()] = mt } } return out @@ -811,6 +822,17 @@ func (b *Builder) addVariable(u types.Universe, useName *types.Name, in *tc.Var) return out } +func (b *Builder) addConstant(u types.Universe, useName *types.Name, in *tc.Const) *types.Type { + name := tcVarNameToName(in.String()) + if useName != nil { + name = *useName + } + out := u.Constant(name) + out.Kind = types.DeclarationOf + out.Underlying = b.walkType(u, nil, in.Type()) + return out +} + // canonicalizeImportPath takes an import path and returns the actual package. // It doesn't support nested vendoring. func canonicalizeImportPath(importPath string) importPathString { diff --git a/vendor/k8s.io/gengo/types/types.go b/vendor/k8s.io/gengo/types/types.go index ec25248e7e5c..78357bcce1b4 100644 --- a/vendor/k8s.io/gengo/types/types.go +++ b/vendor/k8s.io/gengo/types/types.go @@ -135,6 +135,10 @@ type Package struct { // package name). Variables map[string]*Type + // Global constants within this package, indexed by their name (*not* including + // package name). + Constants map[string]*Type + // Packages imported by this package, indexed by (canonicalized) // package path. Imports map[string]*Package @@ -193,6 +197,20 @@ func (p *Package) Variable(varName string) *Type { return t } +// Constant gets the given constant Type in this Package. If the constant is +// not already defined, this will add it. If a constant is added, it's the caller's +// responsibility to finish construction of the constant by setting Underlying +// to the correct type. +func (p *Package) Constant(constName string) *Type { + if t, ok := p.Constants[constName]; ok { + return t + } + t := &Type{Name: Name{Package: p.Path, Name: constName}} + t.Kind = DeclarationOf + p.Constants[constName] = t + return t +} + // HasImport returns true if p imports packageName. Package names include the // package directory. func (p *Package) HasImport(packageName string) bool { @@ -229,6 +247,14 @@ func (u Universe) Variable(n Name) *Type { return u.Package(n.Package).Variable(n.Name) } +// Constant returns the canonical constant for the given fully-qualified name. +// If a non-existing constant is requested, this will create (a marker for) it. +// If a marker is created, it's the caller's responsibility to finish +// construction of the constant by setting Underlying to the correct type. +func (u Universe) Constant(n Name) *Type { + return u.Package(n.Package).Constant(n.Name) +} + // AddImports registers import lines for packageName. May be called multiple times. // You are responsible for canonicalizing all package paths. func (u Universe) AddImports(packagePath string, importPaths ...string) { @@ -251,6 +277,7 @@ func (u Universe) Package(packagePath string) *Package { Types: map[string]*Type{}, Functions: map[string]*Type{}, Variables: map[string]*Type{}, + Constants: map[string]*Type{}, Imports: map[string]*Package{}, } u[packagePath] = p diff --git a/vendor/modules.txt b/vendor/modules.txt index c384557e79e0..887d8ca13828 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1690,7 +1690,7 @@ k8s.io/cri-api/pkg/apis/testing # k8s.io/csi-translation-lib v0.0.0 => ./staging/src/k8s.io/csi-translation-lib k8s.io/csi-translation-lib k8s.io/csi-translation-lib/plugins -# k8s.io/gengo v0.0.0-20190822140433-26a664648505 => k8s.io/gengo v0.0.0-20190822140433-26a664648505 +# k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 => k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 k8s.io/gengo/args k8s.io/gengo/examples/deepcopy-gen/generators k8s.io/gengo/examples/defaulter-gen/generators From bae4ff565fce831f7ee2fc9bc23cc2886a07a37a Mon Sep 17 00:00:00 2001 From: Elijah Oyekunle Date: Tue, 28 Jan 2020 14:11:12 +0100 Subject: [PATCH 5/5] fix apiextensions reference in controller/clusterauthenticationtrust --- pkg/master/controller/clusterauthenticationtrust/BUILD | 1 - .../cluster_authentication_trust_controller.go | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/pkg/master/controller/clusterauthenticationtrust/BUILD b/pkg/master/controller/clusterauthenticationtrust/BUILD index 91324d2a2351..ee7fbe893fe2 100644 --- a/pkg/master/controller/clusterauthenticationtrust/BUILD +++ b/pkg/master/controller/clusterauthenticationtrust/BUILD @@ -7,7 +7,6 @@ go_library( visibility = ["//visibility:public"], deps = [ "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/pkg/master/controller/clusterauthenticationtrust/cluster_authentication_trust_controller.go b/pkg/master/controller/clusterauthenticationtrust/cluster_authentication_trust_controller.go index 3d0cf616270a..03904f67c1c9 100644 --- a/pkg/master/controller/clusterauthenticationtrust/cluster_authentication_trust_controller.go +++ b/pkg/master/controller/clusterauthenticationtrust/cluster_authentication_trust_controller.go @@ -27,7 +27,6 @@ import ( "time" corev1 "k8s.io/api/core/v1" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" "k8s.io/apimachinery/pkg/api/equality" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -109,7 +108,7 @@ func NewClusterAuthenticationTrustController(requiredAuthenticationData ClusterA return cast.Name == configMapName } if tombstone, ok := obj.(cache.DeletedFinalStateUnknown); ok { - if cast, ok := tombstone.Obj.(*apiextensions.CustomResourceDefinition); ok { + if cast, ok := tombstone.Obj.(*corev1.ConfigMap); ok { return cast.Name == configMapName } }