throw ApiException("Domain '"+zonename+"' already exists");
// validate 'kind' is set
- stringFromJson(document, "kind");
+ DomainInfo::DomainKind zonekind = DomainInfo::stringToKind(stringFromJson(document, "kind"));
const Value &nameservers = document["nameservers"];
- if (!nameservers.IsArray())
+ if (!nameservers.IsArray() && zonekind != DomainInfo::Slave)
throw ApiException("Nameservers list must be given (but can be empty if NS records are supplied)");
string soa_edit_api_kind;
}
// create NS records if nameservers are given
- for (SizeType i = 0; i < nameservers.Size(); ++i) {
- if (!nameservers[i].IsString())
- throw ApiException("Nameservers must be strings");
- rr.content = nameservers[i].GetString();
- rr.qtype = "NS";
- new_records.push_back(rr);
+ if (nameservers.IsArray()) {
+ for (SizeType i = 0; i < nameservers.Size(); ++i) {
+ if (!nameservers[i].IsString())
+ throw ApiException("Nameservers must be strings");
+ rr.content = nameservers[i].GetString();
+ rr.qtype = "NS";
+ new_records.push_back(rr);
+ }
}
// no going back after this
'nameservers': ['ns1.example.com', 'ns2.example.com']
}
for k, v in kwargs.items():
- payload[k] = v
+ if v is None:
+ del payload[k]
+ else:
+ payload[k] = v
print payload
r = self.session.post(
self.url("/servers/localhost/zones"),
headers={'content-type': 'application/json'})
self.assertEquals(r.status_code, 422)
+ def test_create_slave_zone(self):
+ # Test that nameservers can be absent for slave zones.
+ payload, data = self.create_zone(kind='Slave', nameservers=None, masters=['127.0.0.2'])
+ for k in ('name', 'masters', 'kind'):
+ self.assertIn(k, data)
+ self.assertEquals(data[k], payload[k])
+
def test_get_zone_with_symbols(self):
payload, data = self.create_zone(name='foo/bar.'+unique_zone_name())
name = payload['name']