diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/.gitignore b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/.gitignore deleted file mode 100644 index 8413701a52df..000000000000 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.swp -*.swo -/bazel-* diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/.travis.yml b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/.travis.yml deleted file mode 100644 index a49ffb30faa7..000000000000 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: go -go: -- 1.8 -script: -- make build -- make test diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/Makefile b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/Makefile index d4ae15ef3a7c..0d7f0a0f27ab 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/Makefile +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/Makefile @@ -26,7 +26,7 @@ integration-tests: ./integration-tests.sh image: - docker build -t docker.io/gofed/cluster-capacity . + docker build -t cluster-capacity . clean: rm -f cluster-capacity genpod hypercc diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/OWNERS b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/OWNERS index 12baa0cc965d..4bbdd34d6e28 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/OWNERS +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/OWNERS @@ -1,8 +1,8 @@ -reviewers: - - ingvagabund - - aveshagarwal - - hodovska approvers: - - ingvagabund - - aveshagarwal - - hodovska \ No newline at end of file +- ingvagabund +- aveshagarwal +- hodovska +reviewers: +- ingvagabund +- aveshagarwal +- hodovska diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/cmd/cluster-capacity/app/options/options.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/cmd/cluster-capacity/app/options/options.go index 702e9cf73b9e..19ad5c36d16c 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/cmd/cluster-capacity/app/options/options.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/cmd/cluster-capacity/app/options/options.go @@ -26,42 +26,42 @@ import ( "github.com/spf13/pflag" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/yaml" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/api/validation" - clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - schedopt "k8s.io/kubernetes/plugin/cmd/kube-scheduler/app/options" + clientset "k8s.io/client-go/kubernetes" + api "k8s.io/kubernetes/pkg/apis/core" + apiv1 "k8s.io/kubernetes/pkg/apis/core/v1" + "k8s.io/kubernetes/pkg/apis/core/validation" + schedapp "k8s.io/kubernetes/plugin/cmd/kube-scheduler/app" + "k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider" "github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store" "github.com/kubernetes-incubator/cluster-capacity/pkg/utils" ) type ClusterCapacityConfig struct { - Schedulers []*schedopt.SchedulerServer + //Schedulers []*schedapp.SchedulerServer Pod *v1.Pod KubeClient clientset.Interface Options *ClusterCapacityOptions - DefaultScheduler *schedopt.SchedulerServer + DefaultScheduler *schedapp.SchedulerServer ResourceStore store.ResourceStore } type ClusterCapacityOptions struct { - Kubeconfig string - SchedulerConfigFile []string + Kubeconfig string + //SchedulerConfigFile []string DefaultSchedulerConfigFile string MaxLimit int Verbose bool PodSpecFile string OutputFormat string - ResourceSpaceMode string + //ResourceSpaceMode string } func NewClusterCapacityConfig(opt *ClusterCapacityOptions) *ClusterCapacityConfig { return &ClusterCapacityConfig{ - Schedulers: make([]*schedopt.SchedulerServer, 0), - Options: opt, - DefaultScheduler: schedopt.NewSchedulerServer(), + Options: opt, } } @@ -83,8 +83,27 @@ func (s *ClusterCapacityOptions) AddFlags(fs *pflag.FlagSet) { fs.StringVarP(&s.OutputFormat, "output", "o", s.OutputFormat, "Output format. One of: json|yaml (Note: output is not versioned or guaranteed to be stable across releases).") } -func parseSchedulerConfig(path string) (*schedopt.SchedulerServer, error) { - newScheduler := schedopt.NewSchedulerServer() +func (s *ClusterCapacityConfig) parseSchedulerConfig(path string) (*schedapp.SchedulerServer, error) { + soptions, err := schedapp.NewOptions() + if err != nil { + return nil, err + } + + err = soptions.ReallyApplyDefaults() + if err != nil { + return nil, err + } + + soptions.ConfigFile = path + + err = soptions.Complete() + if err != nil { + return nil, err + } + + ksConfig := soptions.GetConfig() + ksConfig.ClientConnection.KubeConfigFile = s.Options.Kubeconfig + if len(path) > 0 { filename, _ := filepath.Abs(path) config, err := os.Open(filename) @@ -93,29 +112,42 @@ func parseSchedulerConfig(path string) (*schedopt.SchedulerServer, error) { } decoder := yaml.NewYAMLOrJSONDecoder(config, 4096) - decoder.Decode(&(newScheduler.KubeSchedulerConfiguration)) + decoder.Decode(ksConfig) } + + var master string + master, err = utils.GetMasterFromKubeConfig(s.Options.Kubeconfig) + if err != nil { + return nil, err + } + + // TODO(avesh): need to check if this works correctly + algorithmprovider.ApplyFeatureGates() + + var newScheduler *schedapp.SchedulerServer + newScheduler, err = schedapp.NewSchedulerServer(ksConfig, master) + if err != nil { + return nil, err + } + + newScheduler.SchedulerName = "cluster-capacity" return newScheduler, nil } -func (s *ClusterCapacityConfig) ParseAdditionalSchedulerConfigs() error { +// TODO (avesh): disable until support for multiple schedulers is implemented. +/*func (s *ClusterCapacityConfig) ParseAdditionalSchedulerConfigs() error { for _, config := range s.Options.SchedulerConfigFile { if config == "default-scheduler.yaml" { continue } - newScheduler, err := parseSchedulerConfig(config) + newScheduler, err := s.parseSchedulerConfig(config) if err != nil { return err } - newScheduler.Master, err = utils.GetMasterFromKubeConfig(s.Options.Kubeconfig) - if err != nil { - return err - } - newScheduler.Kubeconfig = s.Options.Kubeconfig s.Schedulers = append(s.Schedulers, newScheduler) } return nil -} +}*/ func (s *ClusterCapacityConfig) ParseAPISpec() error { var spec io.Reader @@ -149,6 +181,11 @@ func (s *ClusterCapacityConfig) ParseAPISpec() error { versionedPod.ObjectMeta.Namespace = "default" } + // set pod's scheduler name to cluster-capacity + if versionedPod.Spec.SchedulerName == "" { + versionedPod.Spec.SchedulerName = s.DefaultScheduler.SchedulerName + } + // hardcoded from kube api defaults and validation // TODO: rewrite when object validation gets more available for non kubectl approaches in kube if versionedPod.Spec.DNSPolicy == "" { @@ -166,7 +203,7 @@ func (s *ClusterCapacityConfig) ParseAPISpec() error { // TODO: client side validation seems like a long term problem for this command. internalPod := &api.Pod{} - if err := v1.Convert_v1_Pod_To_api_Pod(versionedPod, internalPod, nil); err != nil { + if err := apiv1.Convert_v1_Pod_To_core_Pod(versionedPod, internalPod, nil); err != nil { return fmt.Errorf("unable to convert to internal version: %#v", err) } @@ -184,7 +221,7 @@ func (s *ClusterCapacityConfig) ParseAPISpec() error { func (s *ClusterCapacityConfig) SetDefaultScheduler() error { var err error - s.DefaultScheduler, err = parseSchedulerConfig(s.Options.DefaultSchedulerConfigFile) + s.DefaultScheduler, err = s.parseSchedulerConfig(s.Options.DefaultSchedulerConfigFile) if err != nil { return fmt.Errorf("Error in opening default scheduler config file: %v", err) } diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/cmd/cluster-capacity/app/server.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/cmd/cluster-capacity/app/server.go index 8284350ef390..793aa8d2abce 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/cmd/cluster-capacity/app/server.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/cmd/cluster-capacity/app/server.go @@ -23,9 +23,9 @@ import ( "github.com/renstrom/dedent" "github.com/spf13/cobra" + clientset "k8s.io/client-go/kubernetes" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" - clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" _ "k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider" "github.com/kubernetes-incubator/cluster-capacity/cmd/cluster-capacity/app/options" @@ -81,18 +81,21 @@ func Validate(opt *options.ClusterCapacityOptions) error { func Run(opt *options.ClusterCapacityOptions) error { conf := options.NewClusterCapacityConfig(opt) - err := conf.ParseAPISpec() - if err != nil { - return fmt.Errorf("Failed to parse pod spec file: %v ", err) - } - err = conf.SetDefaultScheduler() + err := conf.SetDefaultScheduler() if err != nil { return fmt.Errorf("Failed to set default scheduler config: %v ", err) } - err = conf.ParseAdditionalSchedulerConfigs() + + // TODO (avesh): Enable when support for multiple schedulers is implemented. + /*err = conf.ParseAdditionalSchedulerConfigs() if err != nil { return fmt.Errorf("Failed to parse config file: %v ", err) + }*/ + + err = conf.ParseAPISpec() + if err != nil { + return fmt.Errorf("Failed to parse pod spec file: %v ", err) } var cfg *restclient.Config @@ -136,11 +139,12 @@ func runSimulator(s *options.ClusterCapacityConfig, syncWithClient bool) (*frame return nil, err } - for i := 0; i < len(s.Schedulers); i++ { + // TODO (avesh): Enable when support for multiple schedulers is implemented. + /*for i := 0; i < len(s.Schedulers); i++ { if err = cc.AddScheduler(s.Schedulers[i]); err != nil { return nil, err } - } + }*/ if syncWithClient { err = cc.SyncWithClient(s.KubeClient) diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/cmd/genpod/app/server.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/cmd/genpod/app/server.go index f4b52dfa47f0..e3425ce5cb5f 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/cmd/genpod/app/server.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/cmd/genpod/app/server.go @@ -23,9 +23,9 @@ import ( "github.com/spf13/cobra" + clientset "k8s.io/client-go/kubernetes" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" - "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" _ "k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider" "github.com/kubernetes-incubator/cluster-capacity/cmd/genpod/app/options" diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/code-of-conduct.md b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/code-of-conduct.md new file mode 100644 index 000000000000..0d15c00cf325 --- /dev/null +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/code-of-conduct.md @@ -0,0 +1,3 @@ +# Kubernetes Community Code of Conduct + +Please refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/community/code-of-conduct.md) diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/glide.lock b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/glide.lock index 83c9673d97b2..15373c62ed0f 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/glide.lock +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/glide.lock @@ -1,8 +1,13 @@ -hash: 6e4b64ed2fd2b3b49420ce706b08040c494d485f6f1a4c9b6e33d902d490713d -updated: 2017-07-25T17:12:30.795613092-04:00 +hash: b9b97feef41ce4e4be417bcc883bb250aeda640c7c44893705e880b310dafdc2 +updated: 2018-01-07T13:18:53.389243409-05:00 imports: +- name: cloud.google.com/go + version: 3b1ae45394a234c385be014e9a488f2bb6eef821 + subpackages: + - compute/metadata + - internal - name: github.com/aws/aws-sdk-go - version: 63ce630574a5ec05ecd8e8de5cea16332a5a684d + version: 760741802ad40f49ae9fc4a69ef6706d2527d62e subpackages: - aws - aws/awserr @@ -20,6 +25,7 @@ imports: - aws/request - aws/session - aws/signer/v4 + - internal/shareddefaults - private/protocol - private/protocol/ec2query - private/protocol/json/jsonutil @@ -27,78 +33,105 @@ imports: - private/protocol/query - private/protocol/query/queryutil - private/protocol/rest - - private/protocol/restxml - private/protocol/xml/xmlutil - - private/waiter - service/autoscaling - service/ec2 - service/ecr - service/elb - - service/route53 + - service/elbv2 + - service/kms - service/sts +- name: github.com/Azure/go-ansiterm + version: 19f72df4d05d31cbe1c56bfc8045c96babff6c7e + subpackages: + - winterm +- name: github.com/Azure/go-autorest + version: e14a70c556c8e0db173358d1a903dca345a8e75e + subpackages: + - autorest + - autorest/adal + - autorest/azure + - autorest/date - name: github.com/beorn7/perks version: 3ac7bf7a47d159a033b107610db8a1b6575507a4 subpackages: - quantile - name: github.com/davecgh/go-spew - version: 5215b55f46b2b919f50a1df0eaa5886afe4e3b3d + version: 782f4967f2dc4564575ca782fe2d04090b5faca8 subpackages: - spew - name: github.com/dgrijalva/jwt-go version: 01aeca54ebda6e0fbfafd0a524d234159c05ec20 - name: github.com/docker/distribution - version: cd27f179f2c10c5d300e6d09025b538c475b0d51 + version: edc3ab29cdff8694dd6feb85cfeb4b5f1b38ed9c subpackages: - - digest + - digestset - reference -- name: github.com/docker/engine-api - version: dea108d3aa0c67d7162a3fd8aa65f38a430019fd +- name: github.com/docker/docker + version: 4f3616fb1c112e206b88cb7a9922bf49067a7756 subpackages: + - api + - api/types + - api/types/blkiodev + - api/types/container + - api/types/events + - api/types/filters + - api/types/image + - api/types/mount + - api/types/network + - api/types/registry + - api/types/strslice + - api/types/swarm + - api/types/swarm/runtime + - api/types/time + - api/types/versions + - api/types/volume - client - - client/transport - - client/transport/cancellable - - types - - types/blkiodev - - types/container - - types/filters - - types/network - - types/reference - - types/registry - - types/strslice - - types/time - - types/versions + - pkg/ioutils + - pkg/jsonlog + - pkg/jsonmessage + - pkg/longpath + - pkg/mount + - pkg/stdcopy + - pkg/symlink + - pkg/system + - pkg/term + - pkg/term/windows + - pkg/tlsconfig - name: github.com/docker/go-connections - version: f549a9393d05688dff0992ef3efd8bbe6c628aeb + version: 3ede32e2033de7505e6500d6c868c2b9ed9f169d subpackages: - nat - sockets - tlsconfig - name: github.com/docker/go-units - version: e30f1e79f3cd72542f2026ceec18d3bd67ab859c + version: 9e638d38cf6977a37a8ea0078f3ee75a7cdb2dd1 +- name: github.com/docker/spdystream + version: 449fdfce4d962303d702fec724ef0ad181c92528 + subpackages: + - spdy - name: github.com/emicklei/go-restful version: ff4f55a206334ef123e4f79bbf348980da81ca46 subpackages: - log -- name: github.com/emicklei/go-restful-swagger12 - version: dcef7f55730566d41eae5db10e7d6981829720f6 +- name: github.com/evanphx/json-patch + version: 944e07253867aacae43c04b2e6a239005443f33a - name: github.com/exponent-io/jsonpath version: d6023ce2651d8eafb5c75bb0c7167536102ec9f5 +- name: github.com/fatih/camelcase + version: f6a740d52f961c60348ebb109adde9f4635d7540 - name: github.com/ghodss/yaml version: 73d445a93680fa1a78ae23a5839bad48f32ba1ee - name: github.com/go-ini/ini - version: 2e44421e256d82ebbf3d4d4fcabe8930b905eff3 -- name: github.com/go-openapi/analysis - version: b44dc874b601d9e4e2f6e19140e794ba24bead3b + version: 300e940a926eb277d3901b20bdfcc54928ad3642 - name: github.com/go-openapi/jsonpointer version: 46af16f9f7b149af66e5d1bd010e3574dc06de98 - name: github.com/go-openapi/jsonreference version: 13c6e3589ad90f49bd3e3bbe2c2cb3d7a4142272 -- name: github.com/go-openapi/loads - version: 18441dfa706d924a39a030ee2c3b1d8d81917b38 - name: github.com/go-openapi/spec - version: 6aced65f8501fe1217321abf0749d354824ba2ff + version: 7abd5745472fff5eb3685386d5fb8bf38683154d - name: github.com/go-openapi/swag - version: 1d0bd113de87027671077d3c71eb3ac5d7dbba72 + version: f3f9494671f93fcff853e3c6e9e948b3eb71e590 - name: github.com/gogo/protobuf version: c0656edd0d9eab7c66d1eb0c568f9039345796f7 subpackages: @@ -111,11 +144,38 @@ imports: subpackages: - lru - name: github.com/golang/protobuf - version: 4bd1920723d7b7c925de087aa32e2187708897f7 + version: 1643683e1b54a9e88ad26d98f81400c8c9d9f4f9 subpackages: + - jsonpb - proto + - ptypes + - ptypes/any + - ptypes/duration + - ptypes/struct + - ptypes/timestamp +- name: github.com/google/btree + version: 7d79101e329e5a3adf994758c578dab82b90c017 - name: github.com/google/gofuzz version: 44d81051d367757e1c7c6a5a86423ece9afcf63c +- name: github.com/googleapis/gnostic + version: 0c5108395e2debce0d731cf0287ddf7242066aba + subpackages: + - OpenAPIv2 + - compiler + - extensions +- name: github.com/gophercloud/gophercloud + version: 8183543f90d1aef267a5ecc209f2e0715b355acb + subpackages: + - openstack + - openstack/identity/v2/tenants + - openstack/identity/v2/tokens + - openstack/identity/v3/tokens + - openstack/utils + - pagination +- name: github.com/gregjones/httpcache + version: 787624de3eb7bd915c329cba748687a3b22666a6 + subpackages: + - diskcache - name: github.com/hashicorp/golang-lru version: a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4 subpackages: @@ -127,24 +187,40 @@ imports: - name: github.com/inconshreveable/mousetrap version: 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75 - name: github.com/jmespath/go-jmespath - version: 3433f3ea46d9f8019119e7dd41274e112a2359a9 + version: 0b12d6b521d83fc7f755e7cfc1b1fbdd35a01a74 +- name: github.com/json-iterator/go + version: 36b14963da70d11297d313183d7e6388c8510e1e - name: github.com/juju/ratelimit version: 5b9ff866471762aa2ab2dced63c9fb6f53921342 - name: github.com/mailru/easyjson - version: d5b7844b561a7bc640052f1b935f7b800330d7e0 + version: 2f5df55504ebc322e4d52d34df6a1f5b503bf26d subpackages: - buffer - jlexer - jwriter +- name: github.com/MakeNowJust/heredoc + version: bb23615498cded5e105af4ce27de75b089cbe851 - name: github.com/matttproud/golang_protobuf_extensions version: fc2b8d3a73c4867e51861bbdd5ae3c1f0869dd6a subpackages: - pbutil +- name: github.com/mitchellh/go-wordwrap + version: ad45545899c7b13c020ea92b2072220eefad42b8 +- name: github.com/opencontainers/go-digest + version: a6d0ee40d4207ea02364bd3b9e8e77b9159ba1eb +- name: github.com/opencontainers/image-spec + version: 372ad780f63454fbbbbcc7cf80e5b90245c13e13 + subpackages: + - specs-go + - specs-go/v1 +- name: github.com/pborman/uuid + version: ca53cad383cad2479bbba7f7a1a05797ec1386e4 +- name: github.com/peterbourgon/diskv + version: 5f041e8faa004a95c88a202771f4cc3e991971e6 - name: github.com/prometheus/client_golang version: e7e903064f5e9eb5da98208bae10b475d4db0f8c subpackages: - prometheus - - prometheus/promhttp - name: github.com/prometheus/client_model version: fa8ad6fec33561be4280a8f0514318c79d7f6cb6 subpackages: @@ -165,36 +241,57 @@ imports: version: 5bd2802263f21d8788851d5305584c82a5c75d7e - name: github.com/renstrom/dedent version: 020d11c3b9c0c7a3c2efcc8e5cf5b9ef7bcea21f +- name: github.com/russross/blackfriday + version: 300106c228d52c8941d4b3de6054a6062a86dda3 +- name: github.com/shurcooL/sanitized_anchor_name + version: 10ef21a441db47d8b13ebcc5fd2310f636973c77 +- name: github.com/sirupsen/logrus + version: 89742aefa4b206dcf400792f3bd35b542998eb3b - name: github.com/spf13/cobra version: f62e98d28ab7ad31d707ba837a966378465c7b57 - name: github.com/spf13/pflag version: 9ff6c6923cfffbcd502984b8e0c80539a94968b7 -- name: github.com/ugorji/go - version: ded73eae5db7e7a0ef6f55aace87a2873c5d2b74 - subpackages: - - codec - name: golang.org/x/crypto - version: d172538b2cfce0c13cee31e647d0367aa8cd2486 + version: 81e90905daefcd6fd217b62423c0908922eadb30 subpackages: - ssh/terminal - name: golang.org/x/net - version: f2499483f923065a842d38eb4c7f1927e6fc6e6d + version: 1c05540f6879653db88113bc4a2b70aec4bd491f subpackages: - context - context/ctxhttp + - html + - html/atom - http2 - http2/hpack - idna + - internal/timeseries - lex/httplex + - trace + - websocket +- name: golang.org/x/oauth2 + version: a6bd8cefa1811bd24b86f8902872e4e8225f74c4 + subpackages: + - google + - internal + - jws + - jwt - name: golang.org/x/sys - version: 8f0908ab3b2457e2e15403d3697c9ef5cb4b57a9 + version: 95c6576299259db960f6c5b9b69ea52422860fce subpackages: - unix + - windows - name: golang.org/x/text - version: 2910a502d2bf9e43193af9d68ca516529614eed3 + version: b19bf474d317b857955b12035d2c5acb57ce8b01 subpackages: - cases + - encoding + - encoding/internal + - encoding/internal/identifier + - encoding/unicode + - internal - internal/tag + - internal/utf8internal - language - runes - secure/bidirule @@ -203,42 +300,102 @@ imports: - unicode/bidi - unicode/norm - width +- name: google.golang.org/appengine + version: 12d5545dc1cfa6047a286d5e853841b6471f4c19 + subpackages: + - internal + - internal/app_identity + - internal/base + - internal/datastore + - internal/log + - internal/modules + - internal/remote_api + - internal/urlfetch + - urlfetch - name: gopkg.in/gcfg.v1 - version: 083575c3955c85df16fe9590cceab64d03f5eb6e + version: 27e4946190b4a327b539185f2b5b1f7c84730728 subpackages: - scanner - token - types - name: gopkg.in/inf.v0 version: 3887ee99ecf07df5b447e9b00d9c0b2adaa9f3e4 +- name: gopkg.in/warnings.v0 + version: 8a331561fe74dadba6edfc59f3be66c22c3b065d - name: gopkg.in/yaml.v2 version: 53feefa2559fb8dfa8d81baad31be332c97d6c77 - name: k8s.io/api - version: e24ed681f56165befbea50a24f7e9f1c079ac366 + version: af4bc157c3a209798fc897f6d4aaaaeb6c2e0d6a subpackages: + - admission/v1beta1 + - admissionregistration/v1alpha1 + - admissionregistration/v1beta1 + - apps/v1 + - apps/v1beta1 + - apps/v1beta2 + - authentication/v1 + - authentication/v1beta1 + - authorization/v1 + - authorization/v1beta1 + - autoscaling/v1 + - autoscaling/v2beta1 + - batch/v1 + - batch/v1beta1 + - batch/v2alpha1 + - certificates/v1beta1 - core/v1 + - events/v1beta1 + - extensions/v1beta1 + - imagepolicy/v1alpha1 + - networking/v1 + - policy/v1beta1 + - rbac/v1 + - rbac/v1alpha1 + - rbac/v1beta1 + - scheduling/v1alpha1 + - settings/v1alpha1 + - storage/v1 + - storage/v1alpha1 + - storage/v1beta1 +- name: k8s.io/apiextensions-apiserver + version: 98ecf7bbd60f9f11a72000e4f05203f542136219 + subpackages: + - pkg/apis/apiextensions + - pkg/apis/apiextensions/v1beta1 + - pkg/client/clientset/clientset + - pkg/client/clientset/clientset/fake + - pkg/client/clientset/clientset/scheme + - pkg/client/clientset/clientset/typed/apiextensions/v1beta1 + - pkg/client/clientset/clientset/typed/apiextensions/v1beta1/fake + - pkg/client/informers/externalversions + - pkg/client/informers/externalversions/apiextensions + - pkg/client/informers/externalversions/apiextensions/v1beta1 + - pkg/client/informers/externalversions/internalinterfaces + - pkg/client/listers/apiextensions/v1beta1 + - pkg/features - name: k8s.io/apimachinery - version: abe34e4f5b4413c282a83011892cbeea5b32223b + version: 180eddb345a5be3a157cea1c624700ad5bd27b8f subpackages: - pkg/api/equality - pkg/api/errors - pkg/api/meta - pkg/api/resource - pkg/api/testing + - pkg/api/testing/fuzzer - pkg/api/validation - pkg/apimachinery - pkg/apimachinery/announced - pkg/apimachinery/registered + - pkg/apis/meta/fuzzer + - pkg/apis/meta/internalversion - pkg/apis/meta/v1 - pkg/apis/meta/v1/unstructured - pkg/apis/meta/v1/validation - pkg/apis/meta/v1alpha1 - pkg/conversion - pkg/conversion/queryparams - - pkg/conversion/unstructured - pkg/fields - pkg/labels - - pkg/openapi - pkg/runtime - pkg/runtime/schema - pkg/runtime/serializer @@ -254,14 +411,18 @@ imports: - pkg/util/diff - pkg/util/errors - pkg/util/framer + - pkg/util/httpstream + - pkg/util/httpstream/spdy - pkg/util/intstr - pkg/util/json - pkg/util/mergepatch - pkg/util/net - pkg/util/rand + - pkg/util/remotecommand - pkg/util/runtime - pkg/util/sets - pkg/util/strategicpatch + - pkg/util/uuid - pkg/util/validation - pkg/util/validation/field - pkg/util/wait @@ -269,14 +430,13 @@ imports: - pkg/version - pkg/watch - third_party/forked/golang/json + - third_party/forked/golang/netutil - third_party/forked/golang/reflect - name: k8s.io/apiserver - version: ab57ed5a72c3b67058f665d660e23bae18339fc2 + version: 91e14f394e4796abf5a994a349a222e7081d86b6 subpackages: - pkg/admission - - pkg/apis/apiserver - - pkg/apis/apiserver/install - - pkg/apis/apiserver/v1alpha1 + - pkg/apis/audit - pkg/authentication/authenticator - pkg/authentication/serviceaccount - pkg/authentication/user @@ -284,121 +444,181 @@ imports: - pkg/features - pkg/server/healthz - pkg/util/feature + - pkg/util/flag - pkg/util/trace - name: k8s.io/client-go - version: e356aa2e77ab4a5914c216c12ba14cce25a25ab0 + version: 78700dec6369ba22221b72770783300f143df150 subpackages: - discovery - discovery/fake + - dynamic + - informers + - informers/admissionregistration + - informers/admissionregistration/v1alpha1 + - informers/admissionregistration/v1beta1 + - informers/apps + - informers/apps/v1 + - informers/apps/v1beta1 + - informers/apps/v1beta2 + - informers/autoscaling + - informers/autoscaling/v1 + - informers/autoscaling/v2beta1 + - informers/batch + - informers/batch/v1 + - informers/batch/v1beta1 + - informers/batch/v2alpha1 + - informers/certificates + - informers/certificates/v1beta1 + - informers/core + - informers/core/v1 + - informers/events + - informers/events/v1beta1 + - informers/extensions + - informers/extensions/v1beta1 + - informers/internalinterfaces + - informers/networking + - informers/networking/v1 + - informers/policy + - informers/policy/v1beta1 + - informers/rbac + - informers/rbac/v1 + - informers/rbac/v1alpha1 + - informers/rbac/v1beta1 + - informers/scheduling + - informers/scheduling/v1alpha1 + - informers/settings + - informers/settings/v1alpha1 + - informers/storage + - informers/storage/v1 + - informers/storage/v1alpha1 + - informers/storage/v1beta1 - kubernetes - kubernetes/scheme - kubernetes/typed/admissionregistration/v1alpha1 + - kubernetes/typed/admissionregistration/v1beta1 + - kubernetes/typed/apps/v1 - kubernetes/typed/apps/v1beta1 + - kubernetes/typed/apps/v1beta2 - kubernetes/typed/authentication/v1 - kubernetes/typed/authentication/v1beta1 - kubernetes/typed/authorization/v1 - kubernetes/typed/authorization/v1beta1 - kubernetes/typed/autoscaling/v1 - - kubernetes/typed/autoscaling/v2alpha1 + - kubernetes/typed/autoscaling/v2beta1 - kubernetes/typed/batch/v1 + - kubernetes/typed/batch/v1beta1 - kubernetes/typed/batch/v2alpha1 - kubernetes/typed/certificates/v1beta1 - kubernetes/typed/core/v1 + - kubernetes/typed/events/v1beta1 - kubernetes/typed/extensions/v1beta1 - kubernetes/typed/networking/v1 - kubernetes/typed/policy/v1beta1 + - kubernetes/typed/rbac/v1 - kubernetes/typed/rbac/v1alpha1 - kubernetes/typed/rbac/v1beta1 + - kubernetes/typed/scheduling/v1alpha1 - kubernetes/typed/settings/v1alpha1 - kubernetes/typed/storage/v1 + - kubernetes/typed/storage/v1alpha1 - kubernetes/typed/storage/v1beta1 - - pkg/api - - pkg/api/v1 - - pkg/api/v1/ref - - pkg/apis/admissionregistration - - pkg/apis/admissionregistration/v1alpha1 - - pkg/apis/apps - - pkg/apis/apps/v1beta1 - - pkg/apis/authentication - - pkg/apis/authentication/v1 - - pkg/apis/authentication/v1beta1 - - pkg/apis/authorization - - pkg/apis/authorization/v1 - - pkg/apis/authorization/v1beta1 - - pkg/apis/autoscaling - - pkg/apis/autoscaling/v1 - - pkg/apis/autoscaling/v2alpha1 - - pkg/apis/batch - - pkg/apis/batch/v1 - - pkg/apis/batch/v2alpha1 - - pkg/apis/certificates - - pkg/apis/certificates/v1beta1 - - pkg/apis/extensions - - pkg/apis/extensions/v1beta1 - - pkg/apis/networking - - pkg/apis/networking/v1 - - pkg/apis/policy - - pkg/apis/policy/v1beta1 - - pkg/apis/rbac - - pkg/apis/rbac/v1alpha1 - - pkg/apis/rbac/v1beta1 - - pkg/apis/settings - - pkg/apis/settings/v1alpha1 - - pkg/apis/storage - - pkg/apis/storage/v1 - - pkg/apis/storage/v1beta1 - - pkg/util - - pkg/util/parsers + - listers/admissionregistration/v1alpha1 + - listers/admissionregistration/v1beta1 + - listers/apps/v1 + - listers/apps/v1beta1 + - listers/apps/v1beta2 + - listers/autoscaling/v1 + - listers/autoscaling/v2beta1 + - listers/batch/v1 + - listers/batch/v1beta1 + - listers/batch/v2alpha1 + - listers/certificates/v1beta1 + - listers/core/v1 + - listers/events/v1beta1 + - listers/extensions/v1beta1 + - listers/networking/v1 + - listers/policy/v1beta1 + - listers/rbac/v1 + - listers/rbac/v1alpha1 + - listers/rbac/v1beta1 + - listers/scheduling/v1alpha1 + - listers/settings/v1alpha1 + - listers/storage/v1 + - listers/storage/v1alpha1 + - listers/storage/v1beta1 - pkg/version + - plugin/pkg/client/auth + - plugin/pkg/client/auth/azure + - plugin/pkg/client/auth/gcp + - plugin/pkg/client/auth/oidc + - plugin/pkg/client/auth/openstack - rest - rest/watch - testing + - third_party/forked/golang/template - tools/auth - tools/cache - tools/clientcmd - tools/clientcmd/api - tools/clientcmd/api/latest - tools/clientcmd/api/v1 + - tools/leaderelection + - tools/leaderelection/resourcelock - tools/metrics + - tools/pager - tools/record + - tools/reference + - tools/remotecommand - transport + - transport/spdy + - util/buffer - util/cert + - util/exec - util/flowcontrol - util/homedir - util/integer + - util/jsonpath + - util/retry - util/workqueue +- name: k8s.io/kube-openapi + version: 39a7bf85c140f972372c2a0d1ee40adbf0c8bfe1 + subpackages: + - pkg/builder + - pkg/common + - pkg/handler + - pkg/util + - pkg/util/proto + - pkg/util/proto/validation - name: k8s.io/kubernetes - version: ebb8d6e0fadfc95f3d64ccecc36c8ed2ac9224ef + version: 925c127ec6b946659ad0fd596fa959be43f0cc05 subpackages: - cmd/kubeadm/app/apis/kubeadm - cmd/kubeadm/app/apis/kubeadm/fuzzer - - federation/apis/federation - - federation/apis/federation/install - - federation/apis/federation/v1beta1 - pkg/api - - pkg/api/helper - - pkg/api/install + - pkg/api/events + - pkg/api/legacyscheme + - pkg/api/pod + - pkg/api/ref + - pkg/api/resource - pkg/api/service - pkg/api/testapi - pkg/api/testing - pkg/api/unversioned - - pkg/api/util - pkg/api/v1 - - pkg/api/v1/helper - - pkg/api/v1/helper/qos - pkg/api/v1/pod - - pkg/api/v1/ref - pkg/api/v1/service - pkg/api/validation - - pkg/apis/admission - - pkg/apis/admission/install - - pkg/apis/admission/v1alpha1 - pkg/apis/admissionregistration + - pkg/apis/admissionregistration/fuzzer - pkg/apis/admissionregistration/install - pkg/apis/admissionregistration/v1alpha1 + - pkg/apis/admissionregistration/v1beta1 - pkg/apis/apps + - pkg/apis/apps/fuzzer - pkg/apis/apps/install + - pkg/apis/apps/v1 - pkg/apis/apps/v1beta1 + - pkg/apis/apps/v1beta2 - pkg/apis/authentication - pkg/apis/authentication/install - pkg/apis/authentication/v1 @@ -408,163 +628,154 @@ imports: - pkg/apis/authorization/v1 - pkg/apis/authorization/v1beta1 - pkg/apis/autoscaling + - pkg/apis/autoscaling/fuzzer - pkg/apis/autoscaling/install - pkg/apis/autoscaling/v1 - - pkg/apis/autoscaling/v2alpha1 + - pkg/apis/autoscaling/v2beta1 - pkg/apis/batch + - pkg/apis/batch/fuzzer - pkg/apis/batch/install - pkg/apis/batch/v1 + - pkg/apis/batch/v1beta1 - pkg/apis/batch/v2alpha1 - pkg/apis/certificates + - pkg/apis/certificates/fuzzer - pkg/apis/certificates/install - pkg/apis/certificates/v1beta1 - pkg/apis/componentconfig - pkg/apis/componentconfig/install - pkg/apis/componentconfig/v1alpha1 + - pkg/apis/core + - pkg/apis/core/fuzzer + - pkg/apis/core/helper + - pkg/apis/core/helper/qos + - pkg/apis/core/install + - pkg/apis/core/pods + - pkg/apis/core/v1 + - pkg/apis/core/v1/helper + - pkg/apis/core/v1/helper/qos + - pkg/apis/core/validation + - pkg/apis/events + - pkg/apis/events/install + - pkg/apis/events/v1beta1 - pkg/apis/extensions + - pkg/apis/extensions/fuzzer - pkg/apis/extensions/install - pkg/apis/extensions/v1beta1 - - pkg/apis/imagepolicy - - pkg/apis/imagepolicy/install - - pkg/apis/imagepolicy/v1alpha1 - pkg/apis/networking + - pkg/apis/networking/fuzzer - pkg/apis/networking/install - pkg/apis/networking/v1 - pkg/apis/policy + - pkg/apis/policy/fuzzer - pkg/apis/policy/install - pkg/apis/policy/v1beta1 - pkg/apis/rbac + - pkg/apis/rbac/fuzzer - pkg/apis/rbac/install + - pkg/apis/rbac/v1 - pkg/apis/rbac/v1alpha1 - pkg/apis/rbac/v1beta1 + - pkg/apis/scheduling + - pkg/apis/scheduling/install + - pkg/apis/scheduling/v1alpha1 - pkg/apis/settings - pkg/apis/settings/install - pkg/apis/settings/v1alpha1 - pkg/apis/storage + - pkg/apis/storage/fuzzer - pkg/apis/storage/install + - pkg/apis/storage/util - pkg/apis/storage/v1 + - pkg/apis/storage/v1alpha1 - pkg/apis/storage/v1beta1 - pkg/capabilities - - pkg/client/clientset_generated/clientset - - pkg/client/clientset_generated/clientset/fake - - pkg/client/clientset_generated/clientset/scheme - - pkg/client/clientset_generated/clientset/typed/admissionregistration/v1alpha1 - - pkg/client/clientset_generated/clientset/typed/admissionregistration/v1alpha1/fake - - pkg/client/clientset_generated/clientset/typed/apps/v1beta1 - - pkg/client/clientset_generated/clientset/typed/apps/v1beta1/fake - - pkg/client/clientset_generated/clientset/typed/authentication/v1 - - pkg/client/clientset_generated/clientset/typed/authentication/v1/fake - - pkg/client/clientset_generated/clientset/typed/authentication/v1beta1 - - pkg/client/clientset_generated/clientset/typed/authentication/v1beta1/fake - - pkg/client/clientset_generated/clientset/typed/authorization/v1 - - pkg/client/clientset_generated/clientset/typed/authorization/v1/fake - - pkg/client/clientset_generated/clientset/typed/authorization/v1beta1 - - pkg/client/clientset_generated/clientset/typed/authorization/v1beta1/fake - - pkg/client/clientset_generated/clientset/typed/autoscaling/v1 - - pkg/client/clientset_generated/clientset/typed/autoscaling/v1/fake - - pkg/client/clientset_generated/clientset/typed/autoscaling/v2alpha1 - - pkg/client/clientset_generated/clientset/typed/autoscaling/v2alpha1/fake - - pkg/client/clientset_generated/clientset/typed/batch/v1 - - pkg/client/clientset_generated/clientset/typed/batch/v1/fake - - pkg/client/clientset_generated/clientset/typed/batch/v2alpha1 - - pkg/client/clientset_generated/clientset/typed/batch/v2alpha1/fake - - pkg/client/clientset_generated/clientset/typed/certificates/v1beta1 - - pkg/client/clientset_generated/clientset/typed/certificates/v1beta1/fake - - pkg/client/clientset_generated/clientset/typed/core/v1 - - pkg/client/clientset_generated/clientset/typed/core/v1/fake - - pkg/client/clientset_generated/clientset/typed/extensions/v1beta1 - - pkg/client/clientset_generated/clientset/typed/extensions/v1beta1/fake - - pkg/client/clientset_generated/clientset/typed/networking/v1 - - pkg/client/clientset_generated/clientset/typed/networking/v1/fake - - pkg/client/clientset_generated/clientset/typed/policy/v1beta1 - - pkg/client/clientset_generated/clientset/typed/policy/v1beta1/fake - - pkg/client/clientset_generated/clientset/typed/rbac/v1alpha1 - - pkg/client/clientset_generated/clientset/typed/rbac/v1alpha1/fake - - pkg/client/clientset_generated/clientset/typed/rbac/v1beta1 - - pkg/client/clientset_generated/clientset/typed/rbac/v1beta1/fake - - pkg/client/clientset_generated/clientset/typed/settings/v1alpha1 - - pkg/client/clientset_generated/clientset/typed/settings/v1alpha1/fake - - pkg/client/clientset_generated/clientset/typed/storage/v1 - - pkg/client/clientset_generated/clientset/typed/storage/v1/fake - - pkg/client/clientset_generated/clientset/typed/storage/v1beta1 - - pkg/client/clientset_generated/clientset/typed/storage/v1beta1/fake - pkg/client/clientset_generated/internalclientset + - pkg/client/clientset_generated/internalclientset/scheme + - pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion + - pkg/client/clientset_generated/internalclientset/typed/apps/internalversion + - pkg/client/clientset_generated/internalclientset/typed/authentication/internalversion + - pkg/client/clientset_generated/internalclientset/typed/authorization/internalversion + - pkg/client/clientset_generated/internalclientset/typed/autoscaling/internalversion + - pkg/client/clientset_generated/internalclientset/typed/batch/internalversion + - pkg/client/clientset_generated/internalclientset/typed/certificates/internalversion + - pkg/client/clientset_generated/internalclientset/typed/core/internalversion + - pkg/client/clientset_generated/internalclientset/typed/events/internalversion + - pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion - pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned - - pkg/client/informers/informers_generated/externalversions - - pkg/client/informers/informers_generated/externalversions/admissionregistration - - pkg/client/informers/informers_generated/externalversions/admissionregistration/v1alpha1 - - pkg/client/informers/informers_generated/externalversions/apps - - pkg/client/informers/informers_generated/externalversions/apps/v1beta1 - - pkg/client/informers/informers_generated/externalversions/autoscaling - - pkg/client/informers/informers_generated/externalversions/autoscaling/v1 - - pkg/client/informers/informers_generated/externalversions/autoscaling/v2alpha1 - - pkg/client/informers/informers_generated/externalversions/batch - - pkg/client/informers/informers_generated/externalversions/batch/v1 - - pkg/client/informers/informers_generated/externalversions/batch/v2alpha1 - - pkg/client/informers/informers_generated/externalversions/certificates - - pkg/client/informers/informers_generated/externalversions/certificates/v1beta1 - - pkg/client/informers/informers_generated/externalversions/core - - pkg/client/informers/informers_generated/externalversions/core/v1 - - pkg/client/informers/informers_generated/externalversions/extensions - - pkg/client/informers/informers_generated/externalversions/extensions/v1beta1 - - pkg/client/informers/informers_generated/externalversions/internalinterfaces - - pkg/client/informers/informers_generated/externalversions/networking - - pkg/client/informers/informers_generated/externalversions/networking/v1 - - pkg/client/informers/informers_generated/externalversions/policy - - pkg/client/informers/informers_generated/externalversions/policy/v1beta1 - - pkg/client/informers/informers_generated/externalversions/rbac - - pkg/client/informers/informers_generated/externalversions/rbac/v1alpha1 - - pkg/client/informers/informers_generated/externalversions/rbac/v1beta1 - - pkg/client/informers/informers_generated/externalversions/settings - - pkg/client/informers/informers_generated/externalversions/settings/v1alpha1 - - pkg/client/informers/informers_generated/externalversions/storage - - pkg/client/informers/informers_generated/externalversions/storage/v1 - - pkg/client/informers/informers_generated/externalversions/storage/v1beta1 + - pkg/client/clientset_generated/internalclientset/typed/networking/internalversion + - pkg/client/clientset_generated/internalclientset/typed/policy/internalversion + - pkg/client/clientset_generated/internalclientset/typed/rbac/internalversion + - pkg/client/clientset_generated/internalclientset/typed/scheduling/internalversion + - pkg/client/clientset_generated/internalclientset/typed/settings/internalversion + - pkg/client/clientset_generated/internalclientset/typed/storage/internalversion - pkg/client/informers/informers_generated/internalversion - - pkg/client/leaderelection - - pkg/client/leaderelection/resourcelock - - pkg/client/listers/admissionregistration/v1alpha1 - - pkg/client/listers/apps/v1beta1 - - pkg/client/listers/autoscaling/v1 - - pkg/client/listers/autoscaling/v2alpha1 - - pkg/client/listers/batch/v1 - - pkg/client/listers/batch/v2alpha1 - - pkg/client/listers/certificates/v1beta1 - - pkg/client/listers/core/v1 - - pkg/client/listers/extensions/v1beta1 - - pkg/client/listers/networking/v1 - - pkg/client/listers/policy/v1beta1 - - pkg/client/listers/rbac/v1alpha1 - - pkg/client/listers/rbac/v1beta1 - - pkg/client/listers/settings/v1alpha1 - - pkg/client/listers/storage/v1 - - pkg/client/listers/storage/v1beta1 - - pkg/client/retry + - pkg/client/leaderelectionconfig + - pkg/client/unversioned - pkg/cloudprovider - pkg/cloudprovider/providers/aws - pkg/controller + - pkg/controller/daemon + - pkg/controller/daemon/util + - pkg/controller/deployment/util + - pkg/controller/history + - pkg/controller/statefulset + - pkg/controller/volume/events + - pkg/controller/volume/persistentvolume - pkg/credentialprovider - pkg/credentialprovider/aws - pkg/features + - pkg/fieldpath - pkg/fields - pkg/kubeapiserver/authorizer + - pkg/kubectl + - pkg/kubectl/apps + - pkg/kubectl/categories + - pkg/kubectl/cmd/templates + - pkg/kubectl/cmd/util + - pkg/kubectl/cmd/util/openapi + - pkg/kubectl/cmd/util/openapi/validation + - pkg/kubectl/plugins + - pkg/kubectl/resource + - pkg/kubectl/scheme + - pkg/kubectl/util + - pkg/kubectl/util/hash + - pkg/kubectl/util/slice + - pkg/kubectl/util/term + - pkg/kubectl/validation - pkg/kubelet/apis + - pkg/kubelet/apis/kubeletconfig + - pkg/kubelet/apis/kubeletconfig/v1alpha1 - pkg/kubelet/qos - pkg/kubelet/types - pkg/master/ports + - pkg/printers + - pkg/printers/internalversion + - pkg/proxy/apis/kubeproxyconfig + - pkg/proxy/apis/kubeproxyconfig/v1alpha1 + - pkg/registry/rbac/validation - pkg/security/apparmor - pkg/serviceaccount - - pkg/util - pkg/util/configz - - pkg/util/exec + - pkg/util/file + - pkg/util/goroutinemap + - pkg/util/goroutinemap/exponentialbackoff - pkg/util/hash + - pkg/util/interrupt - pkg/util/io + - pkg/util/labels + - pkg/util/metrics - pkg/util/mount - pkg/util/net/sets - pkg/util/node + - pkg/util/nsenter - pkg/util/parsers + - pkg/util/pointer + - pkg/util/slice + - pkg/util/taints - pkg/util/yaml - pkg/version + - pkg/version/verflag - pkg/volume - pkg/volume/util - pkg/watch @@ -586,12 +797,15 @@ imports: - plugin/pkg/scheduler/metrics - plugin/pkg/scheduler/schedulercache - plugin/pkg/scheduler/util -- name: k8s.io/metrics - version: 8efbc8e22d00b9c600afec5f1c14073fd2412fce - subpackages: - - pkg/apis/metrics - - pkg/apis/metrics/v1alpha1 - - pkg/client/clientset_generated/clientset - - pkg/client/clientset_generated/clientset/scheme - - pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1 + - plugin/pkg/scheduler/volumebinder +- name: k8s.io/utils + version: aedf551cdb8b0119df3a19c65fde413a13b34997 + subpackages: + - clock + - exec + - exec/testing +- name: vbom.ml/util + version: db5cfe13f5cc80a4990d98e2e1b0707a4d1a5394 + subpackages: + - sortorder testImports: [] diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/glide.yaml b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/glide.yaml index 66bc9bcca0ba..5b692d1a6393 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/glide.yaml +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/glide.yaml @@ -6,20 +6,24 @@ import: - package: github.com/spf13/cobra - package: github.com/spf13/pflag - package: k8s.io/client-go - version: e356aa2e77ab4a5914c216c12ba14cce25a25ab0 # kube 1.7.0 + version: 78700dec6369ba22221b72770783300f143df150 # tags: v6.0.0 and kubernetes-1.9.0 subpackages: - tools/clientcmd - tools/cache - tools/record - rest - util/flowcontrol +- package: k8s.io/api + version: af4bc157c3a209798fc897f6d4aaaaeb6c2e0d6a # tag: kubernetes-1.9.0 - package: k8s.io/apiserver - version: ab57ed5a72c3b67058f665d660e23bae18339fc2 + version: 91e14f394e4796abf5a994a349a222e7081d86b6 # tag: kubernetes-1.9.0 subpackages: - pkg/admission - pkg/endpoints/request +- package: k8s.io/apiextensions-apiserver + version: kubernetes-1.9.0 - package: k8s.io/apimachinery - version: abe34e4f5b4413c282a83011892cbeea5b32223b # kube 1.7.0 + version: 180eddb345a5be3a157cea1c624700ad5bd27b8f # tag: kubernetes-1.9.0 subpackages: - pkg/runtime - pkg/api/meta @@ -32,7 +36,7 @@ import: - pkg/types - pkg/conversion - package: k8s.io/kubernetes - version: ebb8d6e0fadfc95f3d64ccecc36c8ed2ac9224ef # kube 1.7.0 + version: v1.9.0 subpackages: - pkg/api - pkg/api/testapi diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/patches/server_patch.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/patches/server_patch.go new file mode 100644 index 000000000000..f32037e1a15e --- /dev/null +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/patches/server_patch.go @@ -0,0 +1,14 @@ +package app + +import ( + "k8s.io/kubernetes/pkg/apis/componentconfig" +) + +func (o *Options) GetConfig() *componentconfig.KubeSchedulerConfiguration { + return o.config +} + +func (o *Options) ReallyApplyDefaults() (err error) { + o.config, err = o.ApplyDefaults(o.config) + return err +} diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/api/api.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/api/api.go index 181a2be88644..bb4f3615cd03 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/api/api.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/api/api.go @@ -19,8 +19,8 @@ package api import ( "fmt" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/kubernetes/pkg/api/v1" ) type ResourceType string diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/client/nspod.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/client/nspod.go index d4c7495cda8c..7f781667c020 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/client/nspod.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/client/nspod.go @@ -19,11 +19,11 @@ package client import ( "fmt" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" - "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" + clientset "k8s.io/client-go/kubernetes" ) // Retrieve a namespace pod constructed from the namespace limitations. diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/report.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/report.go index 5d822392b6dc..60e1bbf99714 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/report.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/report.go @@ -24,12 +24,11 @@ import ( "time" "github.com/ghodss/yaml" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" - "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/labels" "k8s.io/kubernetes/pkg/api/unversioned" - "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/api/v1/helper" + "k8s.io/kubernetes/pkg/apis/core/v1/helper" ) type ClusterCapacityReview struct { @@ -79,8 +78,8 @@ type FailReasonSummary struct { } type Resources struct { - PrimaryResources v1.ResourceList - OpaqueIntResources map[v1.ResourceName]int64 + PrimaryResources v1.ResourceList + ScalarResources map[v1.ResourceName]int64 } type Requirements struct { @@ -127,12 +126,12 @@ func getResourceRequest(pod *v1.Pod) *Resources { rQuantity.Add(*(result.PrimaryResources.NvidiaGPU())) result.PrimaryResources[v1.ResourceNvidiaGPU] = rQuantity default: - if helper.IsOpaqueIntResourceName(rName) { + if helper.IsScalarResourceName(rName) { // Lazily allocate this map only if required. - if result.OpaqueIntResources == nil { - result.OpaqueIntResources = map[v1.ResourceName]int64{} + if result.ScalarResources == nil { + result.ScalarResources = map[v1.ResourceName]int64{} } - result.OpaqueIntResources[rName] += rQuantity.Value() + result.ScalarResources[rName] += rQuantity.Value() } } } @@ -173,20 +172,6 @@ func parsePodsReview(templatePods []*v1.Pod, status Status) []*ClusterCapacityRe return result } - /*slicedMessage = strings.Split(slicedMessage[1][31:], `, `) - allReasons := make([]FailReasonSummary, 0) - for _, nodeReason := range slicedMessage { - leftParenthesis := strings.LastIndex(nodeReason, `(`) - - reason := nodeReason[:leftParenthesis-1] - replicas, _ := strconv.Atoi(nodeReason[leftParenthesis+1 : len(nodeReason)-1]) - allReasons = append(allReasons, FailReasonSummary{ - Reason: reason, - Count: replicas, - }) - } - - result[(len(status.Pods)-1)%templatesCount].FailSummary = allReasons*/ return result } @@ -204,9 +189,8 @@ func getPodsRequirements(pods []*v1.Pod) []*Requirements { } func deepCopyPods(in []*v1.Pod, out []v1.Pod) { - cloner := conversion.NewCloner() for i, pod := range in { - v1.DeepCopy_v1_Pod(pod, &out[i], cloner) + out[i] = *pod.DeepCopy() } } @@ -253,8 +237,8 @@ func clusterCapacityReviewPrettyPrint(r *ClusterCapacityReview, verbose bool) { if !req.Resources.PrimaryResources.NvidiaGPU().IsZero() { fmt.Printf("\t- NvidiaGPU: %v\n", req.Resources.PrimaryResources.NvidiaGPU().String()) } - if req.Resources.OpaqueIntResources != nil { - fmt.Printf("\t- OpaqueIntResources: %v\n", req.Resources.OpaqueIntResources) + if req.Resources.ScalarResources != nil { + fmt.Printf("\t- ScalarResources: %v\n", req.Resources.ScalarResources) } if req.NodeSelectors != nil { diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/restclient/external/restclient.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/restclient/external/restclient.go index c76d121317cc..e5d69227b5d3 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/restclient/external/restclient.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/restclient/external/restclient.go @@ -27,6 +27,7 @@ import ( "strings" "sync" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" @@ -35,8 +36,7 @@ import ( "k8s.io/apimachinery/pkg/watch" restclient "k8s.io/client-go/rest" "k8s.io/client-go/util/flowcontrol" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/api/legacyscheme" ccapi "github.com/kubernetes-incubator/cluster-capacity/pkg/api" "github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store" @@ -66,6 +66,7 @@ func (o *ObjectFieldsAccessor) Get(field string) (value string) { // transform fields .spec.nodeName, .status.phase // TODO(jchaloup): very hacky, find a way to actually access fields by its json alias equivalent field = strings.Replace(field, "spec", "Spec", -1) + field = strings.Replace(field, "schedulerName", "SchedulerName", -1) field = strings.Replace(field, "status", "Status", -1) field = strings.Replace(field, "nodeName", "NodeName", -1) field = strings.Replace(field, "phase", "Phase", -1) @@ -314,7 +315,7 @@ func (c *RESTClient) createReadCloser(resource ccapi.ResourceType, obj runtime.O } gv := v1.SchemeGroupVersion - encoder := api.Codecs.EncoderForVersion(info.Serializer, gv) + encoder := legacyscheme.Codecs.EncoderForVersion(info.Serializer, gv) nopCloser := ioutil.NopCloser(bytes.NewReader([]byte(runtime.EncodeOrDie(encoder, obj)))) return &nopCloser, nil } @@ -545,7 +546,7 @@ func (c *RESTClient) Do(req *http.Request) (*http.Response, error) { func NewRESTClient(resourceStore store.ResourceStore, name string) *RESTClient { client := &RESTClient{ - NegotiatedSerializer: api.Codecs, + NegotiatedSerializer: legacyscheme.Codecs, resourceStore: resourceStore, watcherReadGetters: make(map[ccapi.ResourceType]map[string][]*ewatch.WatchBuffer), name: name, diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/restclient/external/restclient_test.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/restclient/external/restclient_test.go index 98e462f68a39..11f8977a6d85 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/restclient/external/restclient_test.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/restclient/external/restclient_test.go @@ -22,13 +22,14 @@ import ( "strings" "testing" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/tools/cache" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/api/legacyscheme" + _ "k8s.io/kubernetes/pkg/apis/core/install" ccapi "github.com/kubernetes-incubator/cluster-capacity/pkg/api" "github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store" @@ -106,7 +107,7 @@ func newTestListRestClient() *RESTClient { } client := &RESTClient{ - NegotiatedSerializer: api.Codecs, + NegotiatedSerializer: legacyscheme.Codecs, resourceStore: resourceStore, } diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/restclient/external/watch_test.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/restclient/external/watch_test.go index 3df520cdf5a4..770d12ab4cc4 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/restclient/external/watch_test.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/restclient/external/watch_test.go @@ -22,11 +22,11 @@ import ( "testing" "time" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/tools/cache" - "k8s.io/kubernetes/pkg/api/v1" ccapi "github.com/kubernetes-incubator/cluster-capacity/pkg/api" "github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store" diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/simulator.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/simulator.go index 85ce02f605e2..fd78dd8ed9f7 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/simulator.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/simulator.go @@ -18,24 +18,32 @@ package framework import ( "fmt" + "io/ioutil" + "os" "sync" "time" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" + utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/client-go/informers" + storageinformers "k8s.io/client-go/informers/storage/v1" + externalclientset "k8s.io/client-go/kubernetes" + "k8s.io/client-go/kubernetes/fake" "k8s.io/client-go/tools/cache" - "k8s.io/kubernetes/pkg/api/v1" - externalclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" - einformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions" + "k8s.io/kubernetes/pkg/apis/componentconfig" + //"k8s.io/kubernetes/pkg/controller" + "k8s.io/kubernetes/pkg/features" sapps "k8s.io/kubernetes/plugin/cmd/kube-scheduler/app" - soptions "k8s.io/kubernetes/plugin/cmd/kube-scheduler/app/options" "k8s.io/kubernetes/plugin/pkg/scheduler" + schedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api" + latestschedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api/latest" "k8s.io/kubernetes/plugin/pkg/scheduler/core" + "k8s.io/kubernetes/plugin/pkg/scheduler/factory" // register algorithm providers _ "k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider" @@ -58,18 +66,14 @@ type ClusterCapacity struct { // emulation strategy strategy strategy.Strategy - // fake kube client externalkubeclient *externalclientset.Clientset - informerFactory einformers.SharedInformerFactory - - // fake rest clients - coreRestClient *external.RESTClient + informerFactory informers.SharedInformerFactory // schedulers - schedulers map[string]*scheduler.Scheduler - schedulerConfigs map[string]*scheduler.Config - defaultScheduler string + schedulers map[string]*scheduler.Scheduler + schedulerConfigs map[string]*scheduler.Config + defaultSchedulerName string // pod to schedule simulatedPod *v1.Pod @@ -202,7 +206,6 @@ func (c *ClusterCapacity) Close() { close(name.StopEverything) } - c.coreRestClient.Close() close(c.informerStopCh) c.closed = true } @@ -225,12 +228,8 @@ func (c *ClusterCapacity) Update(pod *v1.Pod, podCondition *v1.PodCondition, sch } func (c *ClusterCapacity) nextPod() error { - cloner := conversion.NewCloner() pod := v1.Pod{} - if err := v1.DeepCopy_v1_Pod(c.simulatedPod, &pod, cloner); err != nil { - return err - } - + pod = *c.simulatedPod.DeepCopy() // reset any node designation set pod.Spec.NodeName = "" // use simulated pod name with an index to construct the name @@ -242,7 +241,7 @@ func (c *ClusterCapacity) nextPod() error { } // Stores the scheduler name - pod.ObjectMeta.Annotations[podProvisioner] = c.defaultScheduler + pod.ObjectMeta.Annotations[podProvisioner] = c.defaultSchedulerName c.simulated++ c.lastSimulatedPod = &pod @@ -251,7 +250,10 @@ func (c *ClusterCapacity) nextPod() error { } func (c *ClusterCapacity) Run() error { + // Start all informers. c.informerFactory.Start(c.informerStopCh) + c.informerFactory.WaitForCacheSync(c.informerStopCh) + // TODO(jchaloup): remove all pods that are not scheduled yet for _, scheduler := range c.schedulers { scheduler.Run() @@ -285,31 +287,15 @@ func (b *localBinderPodConditionUpdater) Update(pod *v1.Pod, podCondition *v1.Po return b.C.Update(pod, podCondition, b.SchedulerName) } -func (c *ClusterCapacity) createScheduler(s *soptions.SchedulerServer) (*scheduler.Scheduler, error) { - // TODO improve this - if c.informerFactory == nil { - c.informerFactory = einformers.NewSharedInformerFactory(c.externalkubeclient, 0) - } - - fakeClient := fake.NewSimpleClientset() - fakeInformerFactory := einformers.NewSharedInformerFactory(fakeClient, 0) - - scheduler, err := sapps.CreateScheduler(s, - c.externalkubeclient, - c.informerFactory.Core().V1().Nodes(), - c.informerFactory.Core().V1().Pods(), - c.informerFactory.Core().V1().PersistentVolumes(), - c.informerFactory.Core().V1().PersistentVolumeClaims(), - fakeInformerFactory.Core().V1().ReplicationControllers(), - fakeInformerFactory.Extensions().V1beta1().ReplicaSets(), - fakeInformerFactory.Apps().V1beta1().StatefulSets(), - c.informerFactory.Core().V1().Services(), - record.NewRecorder(10)) +func (c *ClusterCapacity) createScheduler(s *sapps.SchedulerServer) (*scheduler.Scheduler, error) { + c.informerFactory = s.InformerFactory + s.Recorder = record.NewRecorder(10) + schedulerConfig, err := SchedulerConfigLocal(s) if err != nil { - return nil, fmt.Errorf("error creating scheduler: %v", err) + return nil, err } - schedulerConfig := scheduler.Config() + // Replace the binder with simulator pod counter lbpcu := &localBinderPodConditionUpdater{ SchedulerName: s.SchedulerName, @@ -326,10 +312,14 @@ func (c *ClusterCapacity) createScheduler(s *soptions.SchedulerServer) (*schedul } } schedulerConfig.Error = wrappedErrorFn + // Create the scheduler. + scheduler := scheduler.NewFromConfig(schedulerConfig) + return scheduler, nil } -func (c *ClusterCapacity) AddScheduler(s *soptions.SchedulerServer) error { +// TODO(avesh): enable when support for multiple schedulers is added. +/*func (c *ClusterCapacity) AddScheduler(s *sapps.SchedulerServer) error { scheduler, err := c.createScheduler(s) if err != nil { return err @@ -338,12 +328,12 @@ func (c *ClusterCapacity) AddScheduler(s *soptions.SchedulerServer) error { c.schedulers[s.SchedulerName] = scheduler c.schedulerConfigs[s.SchedulerName] = scheduler.Config() return nil -} +}*/ // Create new cluster capacity analysis // The analysis is completely independent of apiserver so no need // for kubeconfig nor for apiserver url -func New(s *soptions.SchedulerServer, simulatedPod *v1.Pod, maxPods int) (*ClusterCapacity, error) { +func New(schedServer *sapps.SchedulerServer, simulatedPod *v1.Pod, maxPods int) (*ClusterCapacity, error) { resourceStore := store.NewResourceStore() restClient := external.NewRESTClient(resourceStore, "core") @@ -354,7 +344,6 @@ func New(s *soptions.SchedulerServer, simulatedPod *v1.Pod, maxPods int) (*Clust simulatedPod: simulatedPod, simulated: 0, maxSimulated: maxPods, - coreRestClient: restClient, } for _, resource := range resourceStore.Resources() { @@ -375,18 +364,108 @@ func New(s *soptions.SchedulerServer, simulatedPod *v1.Pod, maxPods int) (*Clust }) } + // Replace InformerFactory + schedServer.InformerFactory = informers.NewSharedInformerFactory(cc.externalkubeclient, 0) + schedServer.Client = cc.externalkubeclient + cc.schedulers = make(map[string]*scheduler.Scheduler) cc.schedulerConfigs = make(map[string]*scheduler.Config) - scheduler, err := cc.createScheduler(s) + scheduler, err := cc.createScheduler(schedServer) if err != nil { return nil, err } - cc.schedulers[s.SchedulerName] = scheduler - cc.schedulerConfigs[s.SchedulerName] = scheduler.Config() - cc.defaultScheduler = s.SchedulerName + cc.schedulers[schedServer.SchedulerName] = scheduler + cc.schedulerConfigs[schedServer.SchedulerName] = scheduler.Config() + cc.defaultSchedulerName = schedServer.SchedulerName cc.stop = make(chan struct{}) cc.informerStopCh = make(chan struct{}) return cc, nil } + +// SchedulerConfig creates the scheduler configuration. +func SchedulerConfigLocal(s *sapps.SchedulerServer) (*scheduler.Config, error) { + var storageClassInformer storageinformers.StorageClassInformer + if utilfeature.DefaultFeatureGate.Enabled(features.VolumeScheduling) { + storageClassInformer = s.InformerFactory.Storage().V1().StorageClasses() + } + + fakeClient := fake.NewSimpleClientset() + fakeInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) + + // Set up the configurator which can create schedulers from configs. + configurator := factory.NewConfigFactory( + s.SchedulerName, + s.Client, + s.InformerFactory.Core().V1().Nodes(), + s.InformerFactory.Core().V1().Pods(), + s.InformerFactory.Core().V1().PersistentVolumes(), + s.InformerFactory.Core().V1().PersistentVolumeClaims(), + fakeInformerFactory.Core().V1().ReplicationControllers(), + fakeInformerFactory.Extensions().V1beta1().ReplicaSets(), + fakeInformerFactory.Apps().V1beta1().StatefulSets(), + s.InformerFactory.Core().V1().Services(), + fakeInformerFactory.Policy().V1beta1().PodDisruptionBudgets(), + storageClassInformer, + s.HardPodAffinitySymmetricWeight, + utilfeature.DefaultFeatureGate.Enabled(features.EnableEquivalenceClassCache), + ) + + source := s.AlgorithmSource + var config *scheduler.Config + switch { + case source.Provider != nil: + // Create the config from a named algorithm provider. + sc, err := configurator.CreateFromProvider(*source.Provider) + if err != nil { + return nil, fmt.Errorf("couldn't create scheduler using provider %q: %v", *source.Provider, err) + } + config = sc + case source.Policy != nil: + // Create the config from a user specified policy source. + policy := &schedulerapi.Policy{} + switch { + case source.Policy.File != nil: + // Use a policy serialized in a file. + policyFile := source.Policy.File.Path + _, err := os.Stat(policyFile) + if err != nil { + return nil, fmt.Errorf("missing policy config file %s", policyFile) + } + data, err := ioutil.ReadFile(policyFile) + if err != nil { + return nil, fmt.Errorf("couldn't read policy config: %v", err) + } + err = runtime.DecodeInto(latestschedulerapi.Codec, []byte(data), policy) + if err != nil { + return nil, fmt.Errorf("invalid policy: %v", err) + } + case source.Policy.ConfigMap != nil: + // Use a policy serialized in a config map value. + policyRef := source.Policy.ConfigMap + policyConfigMap, err := s.Client.CoreV1().ConfigMaps(policyRef.Namespace).Get(policyRef.Name, metav1.GetOptions{}) + if err != nil { + return nil, fmt.Errorf("couldn't get policy config map %s/%s: %v", policyRef.Namespace, policyRef.Name, err) + } + data, found := policyConfigMap.Data[componentconfig.SchedulerPolicyConfigMapKey] + if !found { + return nil, fmt.Errorf("missing policy config map value at key %q", componentconfig.SchedulerPolicyConfigMapKey) + } + err = runtime.DecodeInto(latestschedulerapi.Codec, []byte(data), policy) + if err != nil { + return nil, fmt.Errorf("invalid policy: %v", err) + } + } + sc, err := configurator.CreateFromConfig(*policy) + if err != nil { + return nil, fmt.Errorf("couldn't create scheduler from policy: %v", err) + } + config = sc + default: + return nil, fmt.Errorf("unsupported algorithm source: %v", source) + } + // Additional tweaks to the config produced by the configurator. + config.Recorder = s.Recorder + return config, nil +} diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/simulator_test.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/simulator_test.go index 4c649208bfcb..24142cfb71da 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/simulator_test.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/simulator_test.go @@ -21,15 +21,13 @@ import ( goruntime "runtime" "testing" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" apitesting "k8s.io/kubernetes/pkg/api/testing" - "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apis/componentconfig" - kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" "k8s.io/kubernetes/pkg/version" - soptions "k8s.io/kubernetes/plugin/cmd/kube-scheduler/app/options" - "k8s.io/kubernetes/plugin/pkg/scheduler/factory" + sapps "k8s.io/kubernetes/plugin/cmd/kube-scheduler/app" "github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store" ) @@ -192,16 +190,11 @@ func TestPrediction(t *testing.T) { // 2. create predictor // - create simple configuration file for scheduler (use the default values or from systemd env file if reasonable) - cc, err := New(&soptions.SchedulerServer{ - KubeSchedulerConfiguration: componentconfig.KubeSchedulerConfiguration{ - SchedulerName: v1.DefaultSchedulerName, - HardPodAffinitySymmetricWeight: v1.DefaultHardPodAffinitySymmetricWeight, - FailureDomains: kubeletapis.DefaultFailureDomains, - AlgorithmProvider: factory.DefaultProvider, - }, - Master: "http://localhost:8080", - Kubeconfig: "/etc/kubernetes/kubeconfig", - }, + soptions, _ := sapps.NewOptions() + ksConfig := new(componentconfig.KubeSchedulerConfiguration) + ksConfig, _ = soptions.ApplyDefaults(ksConfig) + schedServer, _ := sapps.NewSchedulerServer(ksConfig, "http://localhost:8080") + cc, err := New(schedServer, simulatedPod, 6, ) diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store/fake.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store/fake.go index 420b449780c6..bd950d7d55cf 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store/fake.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store/fake.go @@ -20,9 +20,9 @@ import ( "fmt" "reflect" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/tools/cache" - "k8s.io/kubernetes/pkg/api/v1" ccapi "github.com/kubernetes-incubator/cluster-capacity/pkg/api" ) diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store/store.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store/store.go index 09f290fb9b48..78f44d2c2582 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store/store.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store/store.go @@ -21,8 +21,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" + clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/cache" - clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" ccapi "github.com/kubernetes-incubator/cluster-capacity/pkg/api" ) @@ -202,7 +202,7 @@ func NewResourceReflectors(client clientset.Interface, stopCh <-chan struct{}) * rs := NewResourceStore() for _, resource := range rs.Resources() { listWatcher := cache.NewListWatchFromClient(client.Core().RESTClient(), resource.String(), metav1.NamespaceAll, fields.ParseSelectorOrDie("")) - cache.NewReflector(listWatcher, resource.ObjectType(), rs.resourceToCache[resource], 0).RunUntil(stopCh) + cache.NewReflector(listWatcher, resource.ObjectType(), rs.resourceToCache[resource], 0).Run(stopCh) } return rs } diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/strategy/strategy.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/strategy/strategy.go index 7f003819461a..24e6fbd7778b 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/strategy/strategy.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/strategy/strategy.go @@ -19,8 +19,8 @@ package strategy import ( "fmt" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache" "github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store" diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/strategy/strategy_test.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/strategy/strategy_test.go index 74031b8340a1..0f3023103c6a 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/strategy/strategy_test.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/strategy/strategy_test.go @@ -22,10 +22,10 @@ import ( goruntime "runtime" "testing" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" apitesting "k8s.io/kubernetes/pkg/api/testing" - "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/version" "github.com/kubernetes-incubator/cluster-capacity/pkg/framework/store" diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/watch/watch.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/watch/watch.go index a4cb66a50475..5a70f947acda 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/watch/watch.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/framework/watch/watch.go @@ -24,10 +24,10 @@ import ( "sync" "time" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/api/legacyscheme" ccapi "github.com/kubernetes-incubator/cluster-capacity/pkg/api" ) @@ -94,13 +94,13 @@ func (c *WatchBuffer) EmitWatchEvent(eType watch.EventType, object runtime.Objec // Object: object, //} - info, ok := runtime.SerializerInfoForMediaType(api.Codecs.SupportedMediaTypes(), runtime.ContentTypeJSON) + info, ok := runtime.SerializerInfoForMediaType(legacyscheme.Codecs.SupportedMediaTypes(), runtime.ContentTypeJSON) if !ok { return fmt.Errorf("serializer for %s not registered", runtime.ContentTypeJSON) } gv := v1.SchemeGroupVersion - encoder := api.Codecs.EncoderForVersion(info.Serializer, gv) + encoder := legacyscheme.Codecs.EncoderForVersion(info.Serializer, gv) obj_str := runtime.EncodeOrDie(encoder, object) obj_str = strings.Replace(obj_str, "\n", "", -1) diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/test/util.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/test/util.go index 8a60e0ab5998..7d63caec016f 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/test/util.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/test/util.go @@ -17,10 +17,10 @@ limitations under the License. package test import ( + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" apitesting "k8s.io/kubernetes/pkg/api/testing" - "k8s.io/kubernetes/pkg/api/v1" ) func NodeExample(name string) v1.Node { @@ -73,7 +73,7 @@ func PersistentVolumeExample(name string) v1.PersistentVolume { v1.ResourceName(v1.ResourceStorage): resource.MustParse("10G"), }, PersistentVolumeSource: v1.PersistentVolumeSource{ - HostPath: &v1.HostPathVolumeSource{Path: "/foo"}, + //HostPath: &v1.HostPathVolumeSource{Path: "/foo"}, }, PersistentVolumeReclaimPolicy: "Retain", }, diff --git a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/utils/utils.go b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/utils/utils.go index 173d9c4937ce..6029ea4493b0 100644 --- a/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/utils/utils.go +++ b/cmd/cluster-capacity/go/src/github.com/kubernetes-incubator/cluster-capacity/pkg/utils/utils.go @@ -19,11 +19,11 @@ package utils import ( "fmt" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/tools/clientcmd" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/api/legacyscheme" _ "k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider" ) @@ -38,12 +38,12 @@ func PrintPod(pod *v1.Pod, format string) error { contentType = "application/yaml" } - info, ok := runtime.SerializerInfoForMediaType(api.Codecs.SupportedMediaTypes(), contentType) + info, ok := runtime.SerializerInfoForMediaType(legacyscheme.Codecs.SupportedMediaTypes(), contentType) if !ok { return fmt.Errorf("serializer for %s not registered", contentType) } gvr := schema.GroupVersionResource{Group: "", Version: "v1", Resource: "pods"} - encoder := api.Codecs.EncoderForVersion(info.Serializer, gvr.GroupVersion()) + encoder := legacyscheme.Codecs.EncoderForVersion(info.Serializer, gvr.GroupVersion()) stream, err := runtime.Encode(encoder, pod) if err != nil {