@@ -30,49 +30,49 @@ class EGICloudConnector(CloudConnector):
30
30
DYDNS_URL = "https://nsupdate.fedcloud.eu"
31
31
DEFAULT_TIMEOUT = 10
32
32
33
- def _get_domains (self , token ):
33
+ @staticmethod
34
+ def _get_domains (token ):
34
35
"""
35
36
List the domains available in the DyDNS service
36
37
"""
37
- url = f'{ self .DYDNS_URL } /nic/domains'
38
- resp = requests .get (url , headers = {'Authorization' : f'Bearer { token } ' }, timeout = self .DEFAULT_TIMEOUT )
38
+ url = f'{ EGICloudConnector .DYDNS_URL } /nic/domains'
39
+ resp = requests .get (url , headers = {'Authorization' : f'Bearer { token } ' },
40
+ timeout = EGICloudConnector .DEFAULT_TIMEOUT )
39
41
if resp .status_code != 200 :
40
- self .log_error (f"Error getting domains: { resp .text } " )
41
- return None
42
+ return None , resp .text
42
43
output = resp .json ()
43
44
if output .get ("status" ) != "ok" :
44
- self .log_error (f"Error getting domains: { output .get ('message' , 'Unknown error' )} " )
45
- return None
45
+ return None , output .get ('message' , 'Unknown error' )
46
46
domains = []
47
47
for domain in output .get ("private" , []) + output .get ("public" , []):
48
48
if domain .get ("available" ):
49
49
domains .append (domain ["name" ])
50
- return domains
50
+ return domains , ""
51
51
52
- def _get_host (self , hostname , domain , token ):
52
+ @staticmethod
53
+ def _get_host (hostname , domain , token ):
53
54
"""
54
55
Look for a host registered in the DyDNS service
55
56
"""
56
57
if hostname == "*" :
57
58
parts = domain .split ("." )
58
59
domain = "." .join (parts [1 :])
59
60
hostname = parts [0 ]
60
- url = f'{ self .DYDNS_URL } /nic/hosts?domain={ domain } '
61
- resp = requests .get (url , headers = {'Authorization' : f'Bearer { token } ' }, timeout = self .DEFAULT_TIMEOUT )
61
+ url = f'{ EGICloudConnector .DYDNS_URL } /nic/hosts?domain={ domain } '
62
+ resp = requests .get (url , headers = {'Authorization' : f'Bearer { token } ' },
63
+ timeout = EGICloudConnector .DEFAULT_TIMEOUT )
62
64
if resp .status_code != 200 :
63
- self .log_error (f"Error getting host { hostname } .{ domain } : { resp .text } " )
64
- return None
65
+ return None , resp .text
65
66
66
67
output = resp .json ()
67
68
if output .get ("status" ) != "ok" :
68
- self .log_error (f"Error getting host { hostname } .{ domain } : { output .get ('message' , 'Unknown error' )} " )
69
- return None
69
+ return None , output .get ('message' , 'Unknown error' )
70
70
71
71
for host in output .get ("hosts" , []):
72
72
if host .get ("name" ) == hostname :
73
- return host
73
+ return host , ""
74
74
75
- return None
75
+ return None , ""
76
76
77
77
def add_dns_entry (self , hostname , domain , ip , auth_data , extra_args = None ):
78
78
"""
@@ -85,7 +85,9 @@ def add_dns_entry(self, hostname, domain, ip, auth_data, extra_args=None):
85
85
self .log_debug (f"Registering DNS entry { hostname } .{ domain } with DyDNS oauth token" )
86
86
token = im_auth [0 ].get ("token" )
87
87
# Check if the host already exists
88
- host = self ._get_host (hostname , domain , token )
88
+ host , error = EGICloudConnector ._get_host (hostname , domain , token )
89
+ if error :
90
+ self .log_error (f"Error getting host { hostname } .{ domain } : { error } " )
89
91
if host :
90
92
self .log_debug (f"DNS entry { hostname } .{ domain } already exists" )
91
93
if ip in [host .get ("ipv4" ), host .get ("ipv6" )]:
@@ -94,9 +96,10 @@ def add_dns_entry(self, hostname, domain, ip, auth_data, extra_args=None):
94
96
else :
95
97
commennt = 'IM created DNS entry'
96
98
if hostname == "*" :
97
- url = f'{ self .DYDNS_URL } /nic/register?fqdn={ domain } &comment={ commennt } &wildcard=true'
99
+ url = (f'{ EGICloudConnector .DYDNS_URL } /nic/register?fqdn=' +
100
+ f'{ domain } &comment={ commennt } &wildcard=true' )
98
101
else :
99
- url = f'{ self .DYDNS_URL } /nic/register?fqdn={ hostname } .{ domain } &comment={ commennt } '
102
+ url = f'{ EGICloudConnector .DYDNS_URL } /nic/register?fqdn={ hostname } .{ domain } &comment={ commennt } '
100
103
resp = requests .get (url , headers = {'Authorization' : f'Bearer { token } ' }, timeout = self .DEFAULT_TIMEOUT )
101
104
if resp .status_code != 200 :
102
105
self .log_error (f"Error registering DNS entry { hostname } .{ domain } : { resp .text } " )
@@ -126,8 +129,8 @@ def add_dns_entry(self, hostname, domain, ip, auth_data, extra_args=None):
126
129
fqdn = f'{ hostname } .{ domain } '
127
130
if hostname == "*" :
128
131
fqdn = domain
129
- url = f'{ self .DYDNS_URL } /nic/update?hostname={ fqdn } &myip={ ip } '
130
- resp = requests .get (url , headers = headers , timeout = self .DEFAULT_TIMEOUT )
132
+ url = f'{ EGICloudConnector .DYDNS_URL } /nic/update?hostname={ fqdn } &myip={ ip } '
133
+ resp = requests .get (url , headers = headers , timeout = EGICloudConnector .DEFAULT_TIMEOUT )
131
134
if resp .status_code != 200 :
132
135
self .log_error (f"Error updating DNS entry { hostname } .{ domain } : { resp .text } " )
133
136
return False
@@ -146,21 +149,26 @@ def del_dns_entry(self, hostname, domain, ip, auth_data, extra_args=None):
146
149
self .log_debug (f"Deleting DNS entry { hostname } .{ domain } with DyDNS oauth token" )
147
150
token = im_auth [0 ].get ("token" )
148
151
149
- domains = self ._get_domains (token )
152
+ domains , error = EGICloudConnector ._get_domains (token )
153
+ if error :
154
+ self .log_error (f"Error getting domains: { error } " )
150
155
if domain not in domains :
151
156
self .log_debug (f"Domain { domain } not found in DyDNS service" )
152
157
return False
153
158
154
- host = self ._get_host (hostname , domain , token )
159
+ host , error = EGICloudConnector ._get_host (hostname , domain , token )
160
+ if error :
161
+ self .log_error (f"Error getting host { hostname } .{ domain } : { error } " )
155
162
if not host :
156
163
self .log_debug (f"DNS entry { hostname } .{ domain } does not exist. Do not need to delete." )
157
164
return True
158
165
159
166
if hostname == "*" :
160
- url = f'{ self .DYDNS_URL } /nic/unregister?fqdn={ domain } '
167
+ url = f'{ EGICloudConnector .DYDNS_URL } /nic/unregister?fqdn={ domain } '
161
168
else :
162
- url = f'{ self .DYDNS_URL } /nic/unregister?fqdn={ hostname } .{ domain } '
163
- resp = requests .get (url , headers = {'Authorization' : f'Bearer { token } ' }, timeout = self .DEFAULT_TIMEOUT )
169
+ url = f'{ EGICloudConnector .DYDNS_URL } /nic/unregister?fqdn={ hostname } .{ domain } '
170
+ resp = requests .get (url , headers = {'Authorization' : f'Bearer { token } ' },
171
+ timeout = EGICloudConnector .DEFAULT_TIMEOUT )
164
172
if resp .status_code != 200 :
165
173
self .log_error (f"Error deleting DNS entry { hostname } .{ domain } : { resp .text } " )
166
174
return False
0 commit comments