@Override public void deleteDnsRecords(@Nonnull DNSRecord... dnsRecords) throws CloudException, InternalException { APITrace.begin(provider, "DNS.deleteDnsRecords"); try { ProviderContext ctx = provider.getContext(); if (ctx == null) { logger.error("No context exists for this request"); throw new InternalException("No context exists for this request"); } for (DNSRecord record : dnsRecords) { NovaMethod method = new NovaMethod(provider); List<String> ids = lookupRecord(record); for (String id : ids) { method.deleteResource( SERVICE, RESOURCE, record.getProviderZoneId() + "/records/" + id, null); } } } finally { APITrace.end(); } }
private @Nonnull List<String> lookupRecord(DNSRecord record) throws CloudException, InternalException { APITrace.begin(provider, "DNS.lookupRecord"); try { ProviderContext ctx = provider.getContext(); if (ctx == null) { logger.error("No context exists for this request"); throw new InternalException("No context exists for this request"); } NovaMethod method = new NovaMethod(provider); JSONObject response = method.getResource(SERVICE, RESOURCE, record.getProviderZoneId() + "/records", false); if (response == null) { return null; } ArrayList<String> ids = new ArrayList<String>(); try { if (response.has("records")) { JSONArray list = response.getJSONArray("records"); for (int i = 0; i < list.length(); i++) { JSONObject item = list.getJSONObject(i); if (item != null) { String n = (item.has("name") ? item.getString("name") : null); String id = (item.has("id") ? item.getString("id") : null); if (n == null || id == null) { continue; } if (record.getName().equals(n) || record.getName().equals(n + ".")) { ids.add(id); } } } } } catch (JSONException e) { logger.error("lookupRecord(): JSON error parsing response: " + e.getMessage()); e.printStackTrace(); throw new CloudException( CloudErrorType.COMMUNICATION, 200, "invalidResponse", "JSON error parsing " + response); } return ids; } finally { APITrace.end(); } }