Skip to content

Commit ab3d77e

Browse files
authored
feat: allow to specify a default DT parent project (#796)
1 parent 31109f1 commit ab3d77e

File tree

5 files changed

+26
-2
lines changed

5 files changed

+26
-2
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ not present in the cluster anymore are removed from the configured targets (exce
125125
| `dtrack-ca-cert-file` | `false` | `""` | CA-Certificate filepath when using mTLS to connect to dtrack |
126126
| `dtrack-client-cert-file` | `true` when `dtrack-ca-cert-file` is provided | `""` | Client-Certificate filepath when using mTLS to connect to dtrack |
127127
| `dtrack-client-key-file` | `true` when `dtrack-ca-cert-file` is provided | `""` | Client-Key filepath when using mTLS to connect to dtrack |
128+
| `dtrack-default-parent-project` | `false` | `""` | The default parent project UUID that should be used. This is overwritten in case a parent project annotation is set and found |
128129
| `dtrack-parent-project-annotation-key` | `false` | `""` | Kubernetes pod annotation key to set parent project automatically, e.g. "my.pod.annotation" |
129130
| `dtrack-project-name-annotation-key` | `false` | `""` | Kubernetes pod annotation key to set custom dtrack project name automatically, e.g. "my.pod.annotation" |
130131
| `kubernetes-cluster-id` | `false` | `"default"` | Kubernetes Cluster ID (to be used in Dependency-Track or Job-Images) |

internal/config.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ type Config struct {
2626
DtrackCaCertFile string `yaml:"dtrackCaCertFile" env:"SBOM_DTRACK_CA_CERT_FILE" flag:"dtrack-ca-cert-file"`
2727
DtrackClientCertFile string `yaml:"dtrackClientCertFile" env:"SBOM_DTRACK_CLIENT_CERT_FILE" flag:"dtrack-client-cert-file"`
2828
DtrackClientKeyFile string `yaml:"dtrackClientKeyFile" env:"SBOM_DTRACK_CLIENT_KEY_FILE" flag:"dtrack-client-key-file"`
29+
DtrackDefaultParentProject string `yaml:"dtrackDefaultParentProject" env:"SBOM_DTRACK_DEFAULT_PARENT_PROJECT" flag:"dtrack-default-parent-project"`
2930
DtrackParentProjectAnnotationKey string `yaml:"dtrackParentProjectAnnotationKey" env:"SBOM_DTRACK_PARENT_PROJECT_ANNOTATION_KEY" flag:"dtrack-parent-project-annotation-key"`
3031
DtrackProjectNameAnnotationKey string `yaml:"dtrackProjectNameAnnotationKey" env:"SBOM_DTRACK_PROJECT_NAME_ANNOTATION_KEY" flag:"dtrack-project-name-annotation-key"`
3132
KubernetesClusterId string `yaml:"kubernetesClusterId" env:"SBOM_KUBERNETES_CLUSTER_ID" flag:"kubernetes-cluster-id"`
@@ -66,6 +67,7 @@ var (
6667
ConfigKeyDependencyTrackCaCertFile = "dtrack-ca-cert-file"
6768
ConfigKeyDependencyTrackClientCertFile = "dtrack-client-cert-file"
6869
ConfigKeyDependencyTrackClientKeyFile = "dtrack-client-key-file"
70+
ConfigKeyDefaultParentProject = "dtrack-default-parent-project"
6971
ConfigKeyDependencyTrackDtrackParentProjectAnnotationKey = "dtrack-parent-project-annotation-key"
7072
ConfigKeyDependencyTrackDtrackProjectNameAnnotationKey = "dtrack-project-name-annotation-key"
7173
ConfigKeyKubernetesClusterId = "kubernetes-cluster-id"

internal/processor/processor.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,8 @@ func initTargets(k8s *kubernetes.KubeClient) []target.Target {
141141
clientCertFile := internal.OperatorConfig.DtrackClientCertFile
142142
clientKeyFile := internal.OperatorConfig.DtrackClientKeyFile
143143
k8sClusterId := internal.OperatorConfig.KubernetesClusterId
144-
t := dtrack.NewDependencyTrackTarget(baseUrl, apiKey, podLabelTagMatcher, caCertFile, clientCertFile, clientKeyFile, k8sClusterId, parentProjectAnnotationKey, projectNameAnnotationKey)
144+
defaultParentProject := internal.OperatorConfig.DtrackDefaultParentProject
145+
t := dtrack.NewDependencyTrackTarget(baseUrl, apiKey, podLabelTagMatcher, caCertFile, clientCertFile, clientKeyFile, k8sClusterId, defaultParentProject, parentProjectAnnotationKey, projectNameAnnotationKey)
145146
err = t.ValidateConfig()
146147
targets = append(targets, t)
147148
} else if ta == "oci" {

internal/target/dtrack/dtrack_target.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,16 @@ type DependencyTrackTarget struct {
2222
baseUrl string
2323
apiKey string
2424
podLabelTagMatcher string
25+
defaultParentProject string
2526
parentProjectAnnotationKey string
2627
projectNameAnnotationKey string
2728
caCertFile string
2829
clientCertFile string
2930
clientKeyFile string
3031
k8sClusterId string
3132
imageProjectMap map[string]uuid.UUID
33+
34+
defaultParentProjectParsed *uuid.UUID
3235
}
3336

3437
const (
@@ -38,7 +41,7 @@ const (
3841
podNamespaceTagKey = "namespace"
3942
)
4043

41-
func NewDependencyTrackTarget(baseUrl, apiKey, podLabelTagMatcher, caCertFile, clientCertFile, clientKeyFile, k8sClusterId string, parentProjectAnnotationKey string, projectNameAnnotationKey string) *DependencyTrackTarget {
44+
func NewDependencyTrackTarget(baseUrl, apiKey, podLabelTagMatcher, caCertFile, clientCertFile, clientKeyFile, k8sClusterId string, defaultParentProject string, parentProjectAnnotationKey string, projectNameAnnotationKey string) *DependencyTrackTarget {
4245
return &DependencyTrackTarget{
4346
baseUrl: baseUrl,
4447
apiKey: apiKey,
@@ -47,6 +50,7 @@ func NewDependencyTrackTarget(baseUrl, apiKey, podLabelTagMatcher, caCertFile, c
4750
clientCertFile: clientCertFile,
4851
clientKeyFile: clientKeyFile,
4952
k8sClusterId: k8sClusterId,
53+
defaultParentProject: defaultParentProject,
5054
parentProjectAnnotationKey: parentProjectAnnotationKey,
5155
projectNameAnnotationKey: projectNameAnnotationKey,
5256
}
@@ -76,6 +80,17 @@ func (g *DependencyTrackTarget) ValidateConfig() error {
7680
)
7781
}
7882
}
83+
if g.defaultParentProject != "" {
84+
uuid, err := uuid.Parse(g.defaultParentProject)
85+
if err != nil {
86+
return fmt.Errorf(
87+
"default parent project is not a valid UUID",
88+
)
89+
}
90+
g.defaultParentProjectParsed = &uuid
91+
} else {
92+
g.defaultParentProjectParsed = nil
93+
}
7994

8095
return nil
8196
}
@@ -221,6 +236,10 @@ func (g *DependencyTrackTarget) ProcessSbom(ctx *target.TargetContext) error {
221236
}
222237
}
223238

239+
if project.ParentRef == nil && g.defaultParentProjectParsed != nil {
240+
project.ParentRef = &dtrack.ParentRef{UUID: *g.defaultParentProjectParsed}
241+
}
242+
224243
_, err = client.Project.Update(context.Background(), project)
225244
if err != nil {
226245
logrus.WithError(err).Errorf("Could not update project")

main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ func newRootCmd() *cobra.Command {
8080
rootCmd.PersistentFlags().String(internal.ConfigKeyDependencyTrackBaseUrl, "", "Dependency-Track base URL, e.g. 'https://dtrack.example.com'")
8181
rootCmd.PersistentFlags().String(internal.ConfigKeyDependencyTrackApiKey, "", "Dependency-Track API key")
8282
rootCmd.PersistentFlags().String(internal.ConfigKeyDependencyTrackLabelTagMatcher, "", "Dependency-Track Pod-Label-Tag matcher regex")
83+
rootCmd.PersistentFlags().String(internal.ConfigKeyDefaultParentProject, "", "Dependency-Track: Dependency-Track: Default parent project UUID")
8384
rootCmd.PersistentFlags().String(internal.ConfigKeyDependencyTrackDtrackParentProjectAnnotationKey, "", "Dependency-Track: kubernetes annotation-key for setting parent project")
8485
rootCmd.PersistentFlags().String(internal.ConfigKeyDependencyTrackDtrackProjectNameAnnotationKey, "", "Dependency-Track: kubernetes annotation-key for setting custom project name")
8586
rootCmd.PersistentFlags().String(internal.ConfigKeyKubernetesClusterId, "default", "Kubernetes Cluster ID")

0 commit comments

Comments
 (0)