Skip to content

Commit 0c132c0

Browse files
(chore): allow cross projects access
Signed-off-by: D072950 <abhijith.ravindra@sap.com>
1 parent 1195183 commit 0c132c0

4 files changed

Lines changed: 17 additions & 8 deletions

File tree

cmd/webhook/main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ const (
2222

2323
func main() {
2424
var domainFilters []string
25+
var allProjects bool
2526
pflag.StringArrayVar(&domainFilters, "domain-filter", []string{}, "List of domains to work on (can be specified multiple times)")
27+
pflag.BoolVar(&allProjects, "all-projects", false, "Manage all zones and recordsets regardless of the project the service user resides in")
2628
pflag.Parse()
2729

2830
log.SetLevel(log.DebugLevel)
@@ -61,7 +63,7 @@ func main() {
6163
}()
6264

6365
epf := endpoint.NewDomainFilter(domainFilters)
64-
dp, err := provider.NewDesignateProvider(*epf, false)
66+
dp, err := provider.NewDesignateProvider(*epf, allProjects, false)
6567
if err != nil {
6668
log.Fatalf("NewDesignateProvider: %v", err)
6769
metrics.OpenstackConnectionMetric.Set(0)

internal/designate/client/client.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,24 @@ type DesignateClientInterface interface {
5151
DeleteRecordSet(ctx context.Context, zoneID, recordSetID string) error
5252
}
5353

54+
const allProjectsHeader = "X-Auth-All-Projects"
55+
5456
// implementation of the DesignateClientInterface
5557
type designateClient struct {
5658
serviceClient *gophercloud.ServiceClient
5759
}
5860

5961
// factory function for the DesignateClientInterface
60-
func NewDesignateClient() (DesignateClientInterface, error) {
62+
func NewDesignateClient(allProjects bool) (DesignateClientInterface, error) {
6163
serviceClient, err := createDesignateServiceClient()
6264
if err != nil {
6365
return nil, err
6466
}
67+
if allProjects {
68+
serviceClient.MoreHeaders = map[string]string{
69+
allProjectsHeader: "true",
70+
}
71+
}
6572
return &designateClient{serviceClient}, nil
6673
}
6774

internal/designate/provider/provider.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ import (
2929
"sigs.k8s.io/external-dns/endpoint"
3030
"sigs.k8s.io/external-dns/plan"
3131
"sigs.k8s.io/external-dns/provider"
32-
)
3332

34-
import "external-dns-openstack-webhook/internal/designate/client"
33+
"external-dns-openstack-webhook/internal/designate/client"
34+
)
3535

3636
const (
3737
// ID of the RecordSet from which endpoint was created
@@ -56,8 +56,8 @@ type designateProvider struct {
5656
}
5757

5858
// NewDesignateProvider is a factory function for OpenStack designate providers
59-
func NewDesignateProvider(domainFilter endpoint.DomainFilter, dryRun bool) (provider.Provider, error) {
60-
client, err := client.NewDesignateClient()
59+
func NewDesignateProvider(domainFilter endpoint.DomainFilter, allProjects, dryRun bool) (provider.Provider, error) {
60+
client, err := client.NewDesignateClient(allProjects)
6161
if err != nil {
6262
return nil, err
6363
}
@@ -116,7 +116,7 @@ func getHostZoneID(hostname string, managedZones map[string]string) string {
116116
resultID := ""
117117

118118
for zoneID, zoneName := range managedZones {
119-
if !strings.HasSuffix(hostname, "." + zoneName) && hostname != zoneName {
119+
if !strings.HasSuffix(hostname, "."+zoneName) && hostname != zoneName {
120120
continue
121121
}
122122
ln := len(zoneName)

internal/designate/provider/provider_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ clouds:
262262
os.Setenv("OS_CLOUD", "unittest")
263263
os.Setenv("OS_CACERT", tmpfile.Name())
264264

265-
if _, err := NewDesignateProvider(endpoint.DomainFilter{}, true); err != nil {
265+
if _, err := NewDesignateProvider(endpoint.DomainFilter{}, false, true); err != nil {
266266
t.Fatalf("Failed to initialize Designate provider: %s", err)
267267
}
268268
}

0 commit comments

Comments
 (0)