func (c *Fake) ServerAPIVersions() (*unversioned.APIVersions, error) { action := ActionImpl{} action.Verb = "get" action.Resource = "apiversions" c.Invokes(action, nil) gvStrings := []string{} for _, gv := range registered.EnabledVersions() { gvStrings = append(gvStrings, gv.String()) } return &unversioned.APIVersions{Versions: gvStrings}, nil }
// InfoForData creates an Info object for the given data. An error is returned // if any of the decoding or client lookup steps fail. Name and namespace will be // set into Info if the mapping's MetadataAccessor can retrieve them. func (m *Mapper) InfoForData(data []byte, source string) (*Info, error) { json, err := yaml.ToJSON(data) if err != nil { return nil, fmt.Errorf("unable to parse %q: %v", source, err) } data = json gvk, err := runtime.UnstructuredJSONScheme.DataKind(data) if err != nil { return nil, fmt.Errorf("unable to get type info from %q: %v", source, err) } if ok := registered.IsEnabledVersion(gvk.GroupVersion()); !ok { return nil, fmt.Errorf("API version %q in %q isn't supported, only supports API versions %q", gvk.GroupVersion().String(), source, registered.EnabledVersions()) } if gvk.Kind == "" { return nil, fmt.Errorf("kind not set in %q", source) } mapping, err := m.RESTMapping(gvk.GroupKind(), gvk.Version) if err != nil { return nil, fmt.Errorf("unable to recognize %q: %v", source, err) } obj, err := mapping.Codec.Decode(data) if err != nil { return nil, fmt.Errorf("unable to load %q: %v", source, err) } client, err := m.ClientForMapping(mapping) if err != nil { return nil, fmt.Errorf("unable to connect to a server to handle %q: %v", mapping.Resource, err) } name, _ := mapping.MetadataAccessor.Name(obj) namespace, _ := mapping.MetadataAccessor.Namespace(obj) resourceVersion, _ := mapping.MetadataAccessor.ResourceVersion(obj) var versionedObject interface{} if vo, _, err := api.Scheme.Raw().DecodeToVersionedObject(data); err == nil { versionedObject = vo } return &Info{ Mapping: mapping, Client: client, Namespace: namespace, Name: name, Source: source, VersionedObject: versionedObject, Object: obj, ResourceVersion: resourceVersion, }, nil }
func (c *clientSwaggerSchema) ValidateBytes(data []byte) error { gvk, err := runtime.UnstructuredJSONScheme.DataKind(data) if err != nil { return err } if ok := registered.IsEnabledVersion(gvk.GroupVersion()); !ok { return fmt.Errorf("API version %q isn't supported, only supports API versions %q", gvk.GroupVersion().String(), registered.EnabledVersions()) } if gvk.Group == extensions.GroupName { if c.c.ExtensionsClient == nil { return errors.New("unable to validate: no experimental client") } return getSchemaAndValidate(c.c.ExtensionsClient.RESTClient, data, "apis/", gvk.GroupVersion().String(), c.cacheDir) } return getSchemaAndValidate(c.c.RESTClient, data, "api", gvk.GroupVersion().String(), c.cacheDir) }
// ClientConfigForVersion returns the correct config for a server func (c *ClientCache) ClientConfigForVersion(version *unversioned.GroupVersion) (*client.Config, error) { if c.defaultConfig == nil { config, err := c.loader.ClientConfig() if err != nil { return nil, err } c.defaultConfig = config if c.matchVersion { if err := client.MatchesServerVersion(c.defaultClient, config); err != nil { return nil, err } } } if version != nil { if config, ok := c.configs[*version]; ok { return config, nil } } // TODO: have a better config copy method config := *c.defaultConfig // TODO these fall out when we finish the refactor var preferredGV *unversioned.GroupVersion if version != nil { versionCopy := *version preferredGV = &versionCopy } negotiatedVersion, err := client.NegotiateVersion(c.defaultClient, &config, preferredGV, registered.EnabledVersions()) if err != nil { return nil, err } config.GroupVersion = negotiatedVersion client.SetKubernetesDefaults(&config) if version != nil { c.configs[*version] = &config } // `version` does not necessarily equal `config.Version`. However, we know that we call this method again with // `config.Version`, we should get the the config we've just built. configCopy := config c.configs[*config.GroupVersion] = &configCopy return &config, nil }