diff --git a/avahi/manifests/init.pp b/avahi/manifests/init.pp index ee41e76..88566aa 100644 --- a/avahi/manifests/init.pp +++ b/avahi/manifests/init.pp @@ -47,9 +47,14 @@ class avahi::daemon { # type => "_ssh._tcp", # } # -define avahi::service($type, $port, $description = "%h", $ensure = "present", $txt = []) { +define avahi::service($type, $port = "AUTO", $description = "%h", $ensure = "present", $txt = []) { $srvtype = $type + if $port == "AUTO" { + $realport = avahi_service_port($srvtype) + } else { + $realport = $port + } file { "/etc/avahi/services/${name}.service": ensure => $ensure, diff --git a/avahi/plugins/puppet/parser/functions/avahi_service_port.rb b/avahi/plugins/puppet/parser/functions/avahi_service_port.rb new file mode 100644 index 0000000..8ad3bbc --- /dev/null +++ b/avahi/plugins/puppet/parser/functions/avahi_service_port.rb @@ -0,0 +1,26 @@ + +module Puppet::Parser::Functions + newfunction(:avahi_service_port, :type => :rvalue) do |args| + + type, name, proto = /^_([^\.]*)\._([^\.]*)$/.match(args[0]).to_a + + port = nil + + File.open('/etc/services', 'r') do |fd| + while (line = fd.gets) + begin + port = /^#{name}[ \t]+(\d+)\/#{proto}.*/.match(line)[1] + break + rescue + nil + end + end + end + + if not port + raise Puppet::ParseError, 'Failed to get port for service %s' % type + end + port + + end +end