[Ovirt-devel] Re: [PATCH server] Use DNS SRV records for qpidd on appliance
Ian Main
imain at redhat.com
Wed Feb 11 19:14:44 UTC 2009
DOH! Sorry ignore this, forgot to git add :)
Ian
On Wed, 11 Feb 2009 11:12:08 -0800
Ian Main <imain at redhat.com> wrote:
> This patch makes taskomatic and dbomatic etc. use dns srv records
> when connecting to qpidd. This fixes the installer problems we
> were seeing when connecting to various host names.
>
> Signed-off-by: Ian Main <imain at redhat.com>
> ---
> src/db-omatic/db_omatic.rb | 6 +++++-
> src/dutils/dutils.rb | 32 ++++++++++++++++++++++++++++++++
> src/qmf-libvirt-example.rb | 5 ++++-
> src/task-omatic/taskomatic.rb | 7 +++++--
> 4 files changed, 46 insertions(+), 4 deletions(-)
>
> diff --git a/src/db-omatic/db_omatic.rb b/src/db-omatic/db_omatic.rb
> index 06adc19..845a714 100755
> --- a/src/db-omatic/db_omatic.rb
> +++ b/src/db-omatic/db_omatic.rb
> @@ -327,8 +327,12 @@ def main()
> get_credentials('qpidd')
>
> dbsync = DbOmatic.new()
> +
> + server, port = get_srv('qpidd', 'tcp')
> + raise "Unable to determine qpid server from DNS SRV record" if not server
> +
> s = Qpid::Qmf::Session.new(:console => dbsync, :rcv_events => false)
> - b = s.add_broker("amqp://management.priv.ovirt.org:5672", :mechanism => 'GSSAPI')
> + b = s.add_broker("amqp://#{server}:#{port}", :mechanism => 'GSSAPI')
>
> dbsync.db_init_cleanup()
>
> diff --git a/src/dutils/dutils.rb b/src/dutils/dutils.rb
> index 6df2f06..5b2ac50 100644
> --- a/src/dutils/dutils.rb
> +++ b/src/dutils/dutils.rb
> @@ -18,6 +18,8 @@
>
> require 'active_record_env'
> require 'krb5_auth'
> +require 'resolv'
> +
> include Krb5Auth
>
> ENV['KRB5CCNAME'] = '/usr/share/ovirt-server/ovirt-cc'
> @@ -56,3 +58,33 @@ def get_credentials(service = 'libvirt')
> end
> end
> end
> +
> +# Returns the server and port of the specified service using DNS SRV records
> +# to perform the look up.
> +#
> +# For example:
> +#
> +# server, port = get_srv('qpidd', 'tcp')
> +#
> +def get_srv(service, proto)
> + server = nil
> + port = nil
> +
> + Resolv::DNS.open do |dns|
> + begin
> + hostname = Socket.gethostbyname(Socket.gethostname).first
> + lst = hostname.split('.')
> + lst.shift
> + domainname = lst.join('.')
> + res = dns.getresource("_#{service}._#{proto}.#{domainname}", Resolv::DNS::Resource::IN::SRV)
> + server = res.target.to_s
> + port = res.port
> + rescue => ex
> + puts "Error looking up SRV record: #{ex}"
> + end
> + dns.close
> + end
> +
> + return server, port
> +end
> +
> diff --git a/src/qmf-libvirt-example.rb b/src/qmf-libvirt-example.rb
> index f8d6aca..64e3ba7 100644
> --- a/src/qmf-libvirt-example.rb
> +++ b/src/qmf-libvirt-example.rb
> @@ -8,8 +8,11 @@ require "dutils"
>
> get_credentials('qpidd')
>
> +server, port = get_srv('qpidd', 'tcp')
> +raise "Unable to determine qpid server from DNS SRV record" if not server
> +
> s = Qpid::Qmf::Session.new()
> -b = s.add_broker("amqp://management.priv.ovirt.org:5672", :mechanism => 'GSSAPI')
> +b = s.add_broker("amqp://#{server}:#{port}", :mechanism => 'GSSAPI')
>
> while true:
> nodes = s.objects(:class => "node")
> diff --git a/src/task-omatic/taskomatic.rb b/src/task-omatic/taskomatic.rb
> index 79e2082..77fe6da 100755
> --- a/src/task-omatic/taskomatic.rb
> +++ b/src/task-omatic/taskomatic.rb
> @@ -47,8 +47,11 @@ class TaskOmatic
> @nth_host = 0
>
> @session = Qpid::Qmf::Session.new()
> - # FIXME: Should come from some kind of config or DNS SRV or what have you.
> - @broker = @session.add_broker("amqp://management.priv.ovirt.org:5672", :mechanism => 'GSSAPI')
> +
> + server, port = get_srv('qpidd', 'tcp')
> + raise "Unable to determine qpid server from DNS SRV record" if not server
> +
> + @broker = @session.add_broker("amqp://#{server}:#{port}", :mechanism => 'GSSAPI')
>
> do_daemon = true
>
> --
> 1.6.0.4
>
More information about the ovirt-devel
mailing list