[Openstack] [designate] Associate dynamically project name as domain
Hayes, Graham
graham.hayes at hp.com
Mon Jul 27 17:35:39 UTC 2015
Hi Jaime,
What you want to do should be possible, but will require some custom
code to investigate.
See inline for a few suggestions.
On 27/07/15 16:32, Jaime Fernández wrote:
> I would like to register DNS records with the following format:
> <name>.<interface>.<projectName>.<baseDomain>
> to avoid collision between IP addresses for the same host but on
> different interfaces, and to reserve a domain per project. However, it's
> not an easy task.
In keystone you can set up notifications (like nova), so when a project
(or tenant) is created / deleted you can get a similar event.
(http://docs.openstack.org/developer/keystone/event_notifications.html)
It does not look like it gives back out the project name though - you
might need to call the keystone API to get it.
You could use this to trigger a Designate domain create / delete, using
the "X-Auth-Sudo-Project-ID" Header to impersonate the project (which
would make the new project the owner of the domain)
There may be issues with users creating a domain that is a subdomain of
another designate managed domain (e.g. <baseDomain>).
If you do not need to have Designate manage this domain you could set
<baseDomain> to be a tld (blocking all users from creating this domain
in designate).
With the v2 client bindings there is also "zone transfer requests"
which allows domains to be moved between tenants / projects.
If you need the <baseDomain> to be managed as part of Designate you
could do the following:
Create Domain (in Admin Project)
|
V
Create a Zone Transfer Request (in Admin Project)
|
V
Accept the Zone Transfer Request (in newly created project,
using the X-Auth-Sudo-Project-ID header)
It is a bit long winded, but should work.
> The notifications received by designate-sink report the tenant-id (but
> not project name) apart from other valuable information to register a
> virtual machine.
>
> After reading nova (see
> https://github.com/openstack/designate/blob/master/designate/notification_handler/nova.py)
> and neutron handlers, these handlers register the IP addresses as
> "managed" records, associating the resource_id (i.e. host instance_id).
> It simplifies the process of removing the records when the host is removed.
>
> I would like to register (via designate-api) a domain per project (or
> tenant) using the project name, and to assign the tenant_id when
> registering the domain. When a host is created, designate-sink receives
> a notification with its tenant_id, and we could search the domain by
> tenant_id in order to register the host record. However, I'm afraid that
> these "managed" attributes are not available via REST API (only by
> Python API).
You can edit managed records with the "edit_managed_records" URL
parameter, or the "X-Designate-Edit-Managed-Records" HTTP Header
(http://docs.openstack.org/developer/designate/rest.html#http-headers)
The newer versions of the client support this as a flag as well.
Unfortunately this will not allow you to set the managed_* fields, just
edit the record data.
> It would be nice to have the possibility to register or access these
> managed attributes via REST API. Otherwise, I don't know how to proceed
> with registered hosts. I don't think it's feasible to request for
> reinstalling these virtual hosts. I would prefer to register manually,
> via designate-api, those hosts that were already registered but with the
> "managed" attribute "resource_id" so that when designate-sink receives
> the notification about VM destruction, it is capable to unregister the
> host entry searching by its resource_id.
As a one off, starter you could write a script that uses the internal
RPCAPI to create these, but that could prove problematic to maintain,
and could end up being a significant amount of work.
> Do you have any suggestion about how to proceed to configure a subdomain
> for each project?
I hope this helps!
- Graham
More information about the Openstack
mailing list