Devfile Library
About
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.
Usage
The function documentation can be accessed via pkg.go.dev.
- To parse a devfile, visit pkg/devfile/parse.go
// 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(devfileLocation)
// 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 pkg/devfile/generator/generators.go
// 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)
Updating Library Schema
Run updateApi.sh
can update to use latest github.com/devfile/api
and update the schema saved under pkg/devfile/parser/data
The script also accepts version number as an argument to update devfile schema for a specific devfile version.
For example, run the following command will update devfile schema for 2.0.0
./updateApi.sh 2.0.0
Running the script with no arguments will default to update the latest devfile version
Projects using devfile/library
The following projects are consuming this library as a Golang dependency
In the future, Workspace Operator will be the next consumer of devfile/library.
Issues
Issues are tracked in the devfile/api repo with the label area/library
Releases
For devfile/library releases, please check the release page.