InstanceAndFloatingIPDNSForNova


 * Launchpad Entry: NovaSpec:public-and-private-dns
 * Created:
 * Contributors: Ryan Lane, Andrew Bogott

Summary
Add functionality to nova to automatically manage DNS entries for instances, and DNS entries associated with floating IPs, with a driver based system to handle different DNS servers.

Release Note
Users will be able to specify drivers for public and private DNS to associate DNS entries with instances and floating IP addresses.

Rationale
Nova already automates a number of work intensive activities. Managing DNS is just one more step in that direction.

Design
Nova configuration will provide the following options:


 * floating_ip_dns_manager
 * instance_dns_manager
 * instance_dns_domain

On instance creation, nova will add DNS entries for the instance name and id, using the instance DNS driver and domain. On instance deletion, nova will remove the DNS entries.

When a user adds a DNS entry for a specified domain to a floating IP, nova will add a DNS entry using the floating DNS driver. Users can get a list of available DNS domains via an API call. When a floating IP is deallocated, its DNS entry will automatically be deleted.

Users can create new domains or delete existing ones. When a private domain is created it can be assigned to an availability zone. Public domains may be assigned to a project in order to limit which users can create entries in those domains.

Implementation
Instance DNS will be added as an optional step for instance management. Floating DNS will be added as an API extension.

All DNS drivers must be useable for both instance and floating DNS. Drivers will expose the following functions:


 * get_domains
 * create_entry(name, address, type, dnsdomain)
 * delete_entry(name, dnsdomain)
 * rename_entry(oldname, newname, dnsdomain)
 * modify_address(name, address, dnsdomain)
 * get_entries_by_address(address, dnsdomain)
 * get_entries_by_name(name, dnsdomain)
 * create_domain(fqdomain)
 * delete_domain(fqdomain)

The floating DNS API extension will expose the above functionality, as well as the ability to assign domains to availability zones or projects. The DNS driver won't know nova-specific information (e.g. availability zone and project); that information will be stored in the nova database.