Skip to content

Commit c994428

Browse files
mbiagettigbartolini
authored andcommitted
feat: support required extensions
Signed-off-by: Matteo <matteo.biagetti@enterprisedb.com>
1 parent 19c6738 commit c994428

File tree

8 files changed

+69
-19
lines changed

8 files changed

+69
-19
lines changed

dagger/maintenance/main.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,10 @@ func (m *Maintenance) GetTargets(
136136
// Generates Chainsaw's testing external values in YAML format
137137
func (m *Maintenance) GenerateTestingValues(
138138
ctx context.Context,
139+
// The source directory containing the extension folders. Defaults to the current directory
140+
// +ignore=["dagger", ".github"]
141+
// +defaultPath="/"
142+
source *dagger.Directory,
139143
// Path to the target extension directory
140144
target *dagger.Directory,
141145
// URL reference to the extension image to test [REPOSITORY[:TAG]]
@@ -174,18 +178,23 @@ func (m *Maintenance) GenerateTestingValues(
174178
targetExtensionImage)
175179
}
176180

181+
extensions, generateExtErr := generateTestingValuesExtensions(
182+
ctx,
183+
source,
184+
metadata,
185+
targetExtensionImage,
186+
)
187+
if generateExtErr != nil {
188+
return nil, generateExtErr
189+
}
177190
// Build values.yaml content
178191
values := map[string]any{
179192
"name": metadata.Name,
180193
"sql_name": metadata.SQLName,
181-
"image_name": metadata.ImageName,
182194
"shared_preload_libraries": metadata.SharedPreloadLibraries,
183-
"extension_control_path": metadata.ExtensionControlPath,
184-
"dynamic_library_path": metadata.DynamicLibraryPath,
185-
"ld_library_path": metadata.LdLibraryPath,
186-
"extension_image": targetExtensionImage,
187195
"pg_image": pgImage,
188196
"version": version,
197+
"extensions": extensions,
189198
}
190199
valuesYaml, err := yaml.Marshal(values)
191200
if err != nil {

dagger/maintenance/parse.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type extensionMetadata struct {
2828
DynamicLibraryPath []string `hcl:"dynamic_library_path" cty:"dynamic_library_path"`
2929
LdLibraryPath []string `hcl:"ld_library_path" cty:"ld_library_path"`
3030
AutoUpdateOsLibs bool `hcl:"auto_update_os_libs" cty:"auto_update_os_libs"`
31+
RequiredExtensions []string `hcl:"required_extensions" cty:"required_extensions"`
3132
Versions versionMap `hcl:"versions" cty:"versions"`
3233
Remain hcl.Body `hcl:",remain"`
3334
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package main
2+
3+
import (
4+
"context"
5+
6+
"dagger/maintenance/internal/dagger"
7+
)
8+
9+
func generateTestingValuesExtensions(ctx context.Context, source *dagger.Directory, metadata *extensionMetadata, extensionImage string) ([]map[string]any, error) {
10+
var out []map[string]any
11+
configuration, err := generateExtensionConfiguration(metadata, extensionImage)
12+
if err != nil {
13+
return nil, err
14+
}
15+
out = append(out, configuration)
16+
for _, deps := range metadata.RequiredExtensions {
17+
depsMetadata, parseErr := parseExtensionMetadata(ctx, source.Directory(deps))
18+
if parseErr != nil {
19+
return nil, parseErr
20+
}
21+
depsConfiguration, extErr := generateExtensionConfiguration(depsMetadata, "")
22+
if extErr != nil {
23+
return nil, extErr
24+
}
25+
out = append(out, depsConfiguration)
26+
27+
}
28+
return out, nil
29+
}
30+
31+
func generateExtensionConfiguration(metadata *extensionMetadata, extensionImage string) (map[string]any, error) {
32+
targetExtensionImage := extensionImage
33+
if targetExtensionImage == "" {
34+
var err error
35+
targetExtensionImage, err = getDefaultExtensionImage(metadata)
36+
if err != nil {
37+
return nil, err
38+
}
39+
}
40+
return map[string]any{
41+
"name": metadata.Name,
42+
"image": map[string]string{
43+
"reference": targetExtensionImage,
44+
},
45+
"extension_control_path": metadata.ExtensionControlPath,
46+
"dynamic_library_path": metadata.DynamicLibraryPath,
47+
"ld_library_path": metadata.LdLibraryPath,
48+
}, nil
49+
}

pgaudit/metadata.hcl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ metadata = {
77
dynamic_library_path = []
88
ld_library_path = []
99
auto_update_os_libs = false
10+
required_extensions = []
1011

1112
versions = {
1213
bookworm = {

pgvector/metadata.hcl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ metadata = {
77
dynamic_library_path = []
88
ld_library_path = []
99
auto_update_os_libs = false
10+
required_extensions = []
1011

1112
versions = {
1213
bookworm = {

postgis/metadata.hcl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ metadata = {
77
dynamic_library_path = []
88
ld_library_path = ["/system"]
99
auto_update_os_libs = true
10+
required_extensions = []
1011

1112
versions = {
1213
bookworm = {

postgis/test/cluster.yaml

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,4 @@ spec:
1111

1212
postgresql:
1313
shared_preload_libraries: ($values.shared_preload_libraries)
14-
extensions:
15-
- name: ($values.name)
16-
image:
17-
reference: ($values.extension_image)
18-
extension_control_path: ($values.extension_control_path)
19-
dynamic_library_path: ($values.dynamic_library_path)
20-
ld_library_path: ($values.ld_library_path)
14+
extensions: ($values.extensions)

test/cluster.yaml

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,4 @@ spec:
1111

1212
postgresql:
1313
shared_preload_libraries: ($values.shared_preload_libraries)
14-
extensions:
15-
- name: ($values.name)
16-
image:
17-
reference: ($values.extension_image)
18-
extension_control_path: ($values.extension_control_path)
19-
dynamic_library_path: ($values.dynamic_library_path)
20-
ld_library_path: ($values.ld_library_path)
14+
extensions: ($values.extensions)

0 commit comments

Comments
 (0)