project-controller

module
v0.0.0-...-512564d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 1, 2026 License: Apache-2.0

README

project-controller

Allow users to manage projects and development streams in Konflux

  • A Project is used to describe a major piece of software that can be worked on by multiple teams over an extended period of time. A project may contain one or more development streams.
  • A ProjectDevelopmentStream indicates an independent stream of development. A ProjectDevelopmentStream can contain one or more Applications each containing one or more Components.
  • Starting a new development stream involves creating a large amount of Application and Component resources. This controller helps to streamline that by allowing to create a ProjectDevelopmentStreamTemplate resource that specifies the resources to be created and allows for using variables to customize them. Using a template, many similar development streams can be created quickly.
flowchart TD
    P(Project) -->|owns| PDST
    subgraph PDST[ProjectDevelopmentStreamTemplate]
        AT([Application template])
        CT([Component template])
    end
    P(Project) -->|owns| PDS(ProjectDevelopmentStream)
    PDS -->|owns| A(Application)
    A -->|owns| C(Component)
    PDS -..->|references| PDST
    AT -..->|generates| A
    CT -..->|generates| C

Using this controller

Create a project
apiVersion: projctl.konflux.dev/v1beta1
kind: Project
metadata:
  name: my-project
spec:
  displayName: "My cool project"
  description: |
    Description of my project.
Create a ProjectDevelopmentStreamTemplate

You can use the Go text/template syntax to place template variable values into various resource attributes as well as variable default values. Also note the use of the custom hyphenize template function to create a value suitable for use in resource names.

apiVersion: projctl.konflux.dev/v1beta1
kind: ProjectDevelopmentStreamTemplate
metadata:
  name: my-project-template
spec:
  project: my-project
  variables:
  - name: version
    description: A version number for a new development stream
  - name: versionName
    description: A K8s-compliant name for the version
    defaultValue: "{{hyphenize .version}}"

  resources:
  - apiVersion: appstudio.redhat.com/v1alpha1
    kind: Application
    metadata:
      name: "cool-app-{{.versionName}}"
    spec:
      displayName: "Cool App {{.version}}"

  - apiVersion: appstudio.redhat.com/v1alpha1
    kind: Component
    metadata:
      name: "cool-comp1-{{.versionName}}"
    spec:
      application: "cool-app-{{.versionName}}"
      componentName: "cool-comp1-{{.versionName}}"
      source:
        git:
          context: "."
          dockerfileUrl: "Dockerfile"
          revision: "{{.version}}"
          uri: git@github.com:example/comp1.git

  - apiVersion: appstudio.redhat.com/v1alpha1
    kind: Component
    metadata:
      name: "cool-comp2-{{.versionName}}"
    spec:
      application: "cool-app-{{.versionName}}"
      componentName: "cool-comp2-{{.versionName}}"
      source:
        git:
          context: "."
          dockerfileUrl: "Dockerfile"
          revision: "{{.version}}"
          uri: git@github.com:example/comp2.git
Create one or more ProjectDevelopmentStream resources

ProjectDevelopmentStream resources may include an optional template section that references a ProjectDevelopmentStreamTemplate resource. That causes the resources defined by the template resource to be created. If the template defines any variables that lack default values, the values need to be provided using a values section. Values may optionally also be provided for variables that do include default values.

apiVersion: projctl.konflux.dev/v1beta1
kind: ProjectDevelopmentStream
metadata:
  name: my-project-1-0-0
spec:
  project: my-project
  template:
    name: my-project-template
    values:
    - name: version
      value: "1.0.0"

By defining multiple ProjectDevelopmentStream resources that refer to the same template, we may quickly create development streams and the resources needed for them.

apiVersion: projctl.konflux.dev/v1beta1
kind: ProjectDevelopmentStream
metadata:
  name: my-project-2-0-0
spec:
  project: my-project
  template:
    name: my-project-template
    values:
    - name: version
      value: "2.0.0"
What do we get

Given the resources above, we end up with two Application resources, where each owns two Component resource so that each two components are using different branches of the git@github.com:example/comp1.git and git@github.com:example/comp2.git repositories respectively. The branch names are identical to the version numbers in this example. More complex relationships may be defined using the template syntax.

Known limitations

The following limitations exist in the current controller implementation and are likely to be resolved in the future.

  • If a resource created by a template is modified, the configuration is not aligned back with the template unless either:
    • The controller gets restarted
    • The ProjectDevelopmentStream, ProjectDevelopmentStreamTemplate or the Project resources that generated the resource are modified
  • A ProjectDevelopmentStream that isn't referring a template may be modified to refer to a template. Similarly, the template ProjectDevelopmentStream is referring to may be changed. In both those cases, resources owned by the ProjectDevelopmentStream but not defined by the new template do not get deleted.

Troubleshooting

  • When a ProjectDevelopmentStream that refers to a ProjectDevelopmentStreamTemplate is created or modified, and the resources defined by the template fail to be created, the issues with the template application process may be seen by inspecting the Events associated with the ProjectDevelopmentStream object. The events can be seen by running the kubectl describe or oc describe commands on the ProjectDevelopmentStream resource.

Directories

Path Synopsis
api
v1beta1
Package v1beta1 contains API Schema definitions for the projctl v1beta1 API group +kubebuilder:object:generate=true +groupName=projctl.konflux.dev
Package v1beta1 contains API Schema definitions for the projctl v1beta1 API group +kubebuilder:object:generate=true +groupName=projctl.konflux.dev
internal
pkg
test

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL