The Devfile Parser library is a Golang module that:
- parses the devfile.yaml as specified by the api & schema.
- writes to the devfile.yaml with the updated data.
- generates Kubernetes objects for the various devfile resources.
- defines util functions for the devfile.
The function documentation can be accessed via pkg.go.dev.
-
To parse a devfile, visit parse.go source file
// ParserArgs is the struct to pass into parser functions which contains required info for parsing devfile. parserArgs := parser.ParserArgs{ Path: path, FlattenedDevfile: &flattenedDevfile, RegistryURLs: registryURLs, DefaultNamespace: defaultNamespace, Context: context, K8sClient: client, } // Parses the devfile and validates the devfile data // if top-level variables are not substituted successfully, the warnings can be logged by parsing variableWarning devfile, variableWarning, err := devfilePkg.ParseDevfileAndValidate(parserArgs)
-
To get specific content from devfile
// To get all the components from the devfile components, err := devfile.Data.GetComponents(DevfileOptions{}) // To get all the components from the devfile with attributes tagged - tool: console-import // & import: {strategy: Dockerfile} components, err := devfile.Data.GetComponents(DevfileOptions{ Filter: map[string]interface{}{ "tool": "console-import", "import": map[string]interface{}{ "strategy": "Dockerfile", }, }, }) // To get all the volume components components, err := devfile.Data.GetComponents(DevfileOptions{ ComponentOptions: ComponentOptions{ ComponentType: v1.VolumeComponentType, }, }) // To get all the exec commands that belong to the build group commands, err := devfile.Data.GetCommands(DevfileOptions{ CommandOptions: CommandOptions{ CommandType: v1.ExecCommandType, CommandGroupKind: v1.BuildCommandGroupKind, }, })
-
To get the Kubernetes objects from the devfile, visit generators.go source file
// To get a slice of Kubernetes containers of type corev1.Container from the devfile component containers containers, err := generator.GetContainers(devfile) // To generate a Kubernetes deployment of type v1.Deployment deployParams := generator.DeploymentParams{ TypeMeta: generator.GetTypeMeta(deploymentKind, deploymentAPIVersion), ObjectMeta: generator.GetObjectMeta(name, namespace, labels, annotations), InitContainers: initContainers, Containers: containers, Volumes: volumes, PodSelectorLabels: labels, } deployment := generator.GetDeployment(deployParams)
-
To update devfile content
// To update an existing component in devfile object err := devfile.Data.UpdateComponent(v1.Component{ Name: "component1", ComponentUnion: v1.ComponentUnion{ Container: &v1.ContainerComponent{ Container: v1.Container{ Image: "image1", }, }, }, }) // To add a new component to devfile object err := devfile.Data.AddComponents([]v1.Component{ { Name: "component2", ComponentUnion: v1.ComponentUnion{ Container: &v1.ContainerComponent{ Container: v1.Container{ Image: "image2", }, }, }, }, }) // To delete a component from the devfile object err := devfile.Data.DeleteComponent(componentName)
-
To write to a devfile, visit writer.go source file
// If the devfile object has been created with devfile path already set, can simply call WriteYamlDevfile to writes the devfile err := devfile.WriteYamlDevfile() // To write to a devfile from scratch // create a new DevfileData with a specific devfile version devfileData, err := data.NewDevfileData(devfileVersion) // set schema version devfileData.SetSchemaVersion(devfileVersion) // add devfile content use library APIs devfileData.AddComponents([]v1.Component{...}) devfileData.AddCommands([]v1.Commands{...}) ...... // create a new DevfileCtx ctx := devfileCtx.NewDevfileCtx(devfilePath) err = ctx.SetAbsPath() // create devfile object with the new DevfileCtx and DevfileData devfile := parser.DevfileObj{ Ctx: ctx, Data: devfileData, } // write to the devfile on disk err = devfile.WriteYamlDevfile()
The following projects are consuming this library as a Golang dependency
To run unit tests and api tests. Visit library tests to find out more information on tests
make test
Issues are tracked in the devfile/api repo with the label area/library
For devfile/library releases, please check the release page.