@@ -19,19 +19,15 @@ package client
19
19
20
20
import (
21
21
"context"
22
- "net"
23
- "net/http"
24
- "os"
25
- "time"
26
22
27
23
"github.com/gophercloud/gophercloud/v2"
28
24
"github.com/gophercloud/gophercloud/v2/openstack"
25
+ "github.com/gophercloud/gophercloud/v2/openstack/config"
26
+ "github.com/gophercloud/gophercloud/v2/openstack/config/clouds"
29
27
"github.com/gophercloud/gophercloud/v2/openstack/dns/v2/recordsets"
30
28
"github.com/gophercloud/gophercloud/v2/openstack/dns/v2/zones"
31
29
"github.com/gophercloud/gophercloud/v2/pagination"
32
30
log "github.com/sirupsen/logrus"
33
-
34
- "sigs.k8s.io/external-dns/pkg/tlsutils"
35
31
)
36
32
37
33
// interface between provider and OpenStack DNS API
@@ -66,81 +62,26 @@ func NewDesignateClient() (DesignateClientInterface, error) {
66
62
return & designateClient {serviceClient }, nil
67
63
}
68
64
69
- // copies environment variables to new names without overwriting existing values
70
- func remapEnv (mapping map [string ]string ) {
71
- for k , v := range mapping {
72
- currentVal := os .Getenv (k )
73
- newVal := os .Getenv (v )
74
- if currentVal == "" && newVal != "" {
75
- os .Setenv (k , newVal )
76
- }
77
- }
78
- }
79
-
80
- // returns OpenStack Keystone authentication settings by obtaining values from standard environment variables.
81
- // also fixes incompatibilities between gophercloud implementation and *-stackrc files that can be downloaded
82
- // from OpenStack dashboard in latest versions
83
- func getAuthSettings () (gophercloud.AuthOptions , error ) {
84
- remapEnv (map [string ]string {
85
- "OS_TENANT_NAME" : "OS_PROJECT_NAME" ,
86
- "OS_TENANT_ID" : "OS_PROJECT_ID" ,
87
- "OS_DOMAIN_NAME" : "OS_USER_DOMAIN_NAME" ,
88
- "OS_DOMAIN_ID" : "OS_USER_DOMAIN_ID" ,
89
- })
90
-
91
- opts , err := openstack .AuthOptionsFromEnv ()
92
- if err != nil {
93
- return gophercloud.AuthOptions {}, err
94
- }
95
- opts .AllowReauth = true
96
- return opts , nil
97
- }
98
-
99
65
// authenticate in OpenStack and obtain Designate service endpoint
100
66
func createDesignateServiceClient () (* gophercloud.ServiceClient , error ) {
101
- opts , err := getAuthSettings ()
102
- if err != nil {
103
- return nil , err
104
- }
105
- log .Infof ("Using OpenStack Keystone at %s" , opts .IdentityEndpoint )
106
- authProvider , err := openstack .NewClient (opts .IdentityEndpoint )
107
- if err != nil {
108
- return nil , err
109
- }
67
+ ctx := context .Background ()
110
68
111
- tlsConfig , err := tlsutils . CreateTLSConfig ( "OPENSTACK" )
69
+ authOptions , endpointOptions , tlsConfig , err := clouds . Parse ( )
112
70
if err != nil {
113
71
return nil , err
114
72
}
115
73
116
- transport := & http.Transport {
117
- Proxy : http .ProxyFromEnvironment ,
118
- DialContext : (& net.Dialer {
119
- Timeout : 30 * time .Second ,
120
- KeepAlive : 30 * time .Second ,
121
- }).DialContext ,
122
- MaxIdleConns : 100 ,
123
- IdleConnTimeout : 90 * time .Second ,
124
- TLSHandshakeTimeout : 10 * time .Second ,
125
- ExpectContinueTimeout : 1 * time .Second ,
126
- TLSClientConfig : tlsConfig ,
127
- }
128
- authProvider .HTTPClient .Transport = transport
129
-
130
- ctx := context .Background ()
131
- if err = openstack .Authenticate (ctx , authProvider , opts ); err != nil {
74
+ providerClient , err := config .NewProviderClient (ctx , authOptions , config .WithTLSConfig (tlsConfig ))
75
+ if err != nil {
132
76
return nil , err
133
77
}
78
+ log .Infof ("Using OpenStack Keystone at %s" , providerClient .IdentityEndpoint )
134
79
135
- eo := gophercloud.EndpointOpts {
136
- Region : os .Getenv ("OS_REGION_NAME" ),
137
- }
138
-
139
- client , err := openstack .NewDNSV2 (authProvider , eo )
80
+ client , err := openstack .NewDNSV2 (providerClient , endpointOptions )
140
81
if err != nil {
141
82
return nil , err
142
83
}
143
- log .Infof ("Found OpenStack Designate service at %s" , client .Endpoint )
84
+ log .Infof ("Found OpenStack Designate (DNS) service at %s" , client .Endpoint )
144
85
return client , nil
145
86
}
146
87
0 commit comments