func init() { // Check if v1 is in the list of supported API versions. if !registered.IsRegisteredAPIVersion("v1") { return } // Register the API. addKnownTypes() addConversionFuncs() addDefaultingFuncs() }
// 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 version, kind, err := runtime.UnstructuredJSONScheme.DataVersionAndKind(data) if err != nil { return nil, fmt.Errorf("unable to get type info from %q: %v", source, err) } if ok := registered.IsRegisteredAPIVersion(version); !ok { return nil, fmt.Errorf("API version %q in %q isn't supported, only supports API versions %q", version, source, registered.RegisteredVersions) } if kind == "" { return nil, fmt.Errorf("kind not set in %q", source) } mapping, err := m.RESTMapping(kind, 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 }
// Complete collects information required to run Convert command from command line. func (o *ConvertOptions) Complete(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) (err error) { o.outputVersion = cmdutil.OutputVersion(cmd, latest.GroupOrDie("").Version) if !registered.IsRegisteredAPIVersion(o.outputVersion) { cmdutil.UsageError(cmd, "'%s' is not a registered version.", o.outputVersion) } // build the builder mapper, typer := f.Object() if o.local { fmt.Fprintln(out, "running in local mode...") o.builder = resource.NewBuilder(mapper, typer, f.NilClientMapperForCommand()) } else { o.builder = resource.NewBuilder(mapper, typer, f.ClientMapperForCommand()) schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"), cmdutil.GetFlagString(cmd, "schema-cache-dir")) if err != nil { return err } o.builder = o.builder.Schema(schema) } cmdNamespace, _, err := f.DefaultNamespace() if err != nil { return err } o.builder = o.builder.NamespaceParam(cmdNamespace). ContinueOnError(). FilenameParam(false, o.filenames...). Flatten() // build the printer o.out = out outputFormat := cmdutil.GetFlagString(cmd, "output") templateFile := cmdutil.GetFlagString(cmd, "template") if len(outputFormat) == 0 { if len(templateFile) == 0 { outputFormat = "yaml" } else { outputFormat = "template" } } o.printer, _, err = kubectl.GetPrinter(outputFormat, templateFile) if err != nil { return err } return nil }
func (c *clientSwaggerSchema) ValidateBytes(data []byte) error { version, kind, err := runtime.UnstructuredJSONScheme.DataVersionAndKind(data) if err != nil { return err } if ok := registered.IsRegisteredAPIVersion(version); !ok { return fmt.Errorf("API version %q isn't supported, only supports API versions %q", version, registered.RegisteredVersions) } resource, _ := meta.KindToResource(kind, false) group, err := c.mapper.GroupForResource(resource) if err != nil { return fmt.Errorf("could not find api group for %s: %v", kind, err) } if group == "extensions" { if c.c.ExtensionsClient == nil { return errors.New("unable to validate: no experimental client") } return getSchemaAndValidate(c.c.ExtensionsClient.RESTClient, data, "apis/", version, c.cacheDir) } return getSchemaAndValidate(c.c.RESTClient, data, "api", version, c.cacheDir) }