@@ -51,7 +51,8 @@ defmodule DNSCluster do
5151 differs between nodes, a tuple of `{basename, query}` can be provided as well.
5252 The value `:ignore` can be used to ignore starting the DNSCluster.
5353 * `:resource_types` - the resource record types that are used for node discovery.
54- Defaults to `[:a, :aaaa]` and also supports the `:srv` type.
54+ Defaults to `[:a, :aaaa]` and also supports `{:srv, :ips}`, `{:srv, :hostnames}` and
55+ `:srv` (same as `{:srv, :ips}`) type.
5556 * `:interval` - the millisec interval between DNS queries. Defaults to `5000`.
5657 * `:connect_timeout` - the millisec timeout to allow discovered nodes to connect.
5758 Defaults to `10_000`.
@@ -68,7 +69,7 @@ defmodule DNSCluster do
6869 GenServer . start_link ( __MODULE__ , opts , name: Keyword . get ( opts , :name , __MODULE__ ) )
6970 end
7071
71- @ valid_resource_types [ :a , :aaaa , :srv ]
72+ @ valid_resource_types [ :a , :aaaa , :srv , { :srv , :ips } , { :srv , :hostnames } ]
7273
7374 @ impl true
7475 def init ( opts ) do
@@ -79,7 +80,11 @@ defmodule DNSCluster do
7980 { :ok , query } ->
8081 validate_query! ( query )
8182
82- resource_types = Keyword . get ( opts , :resource_types , [ :a , :aaaa ] )
83+ resource_types =
84+ opts
85+ |> Keyword . get ( :resource_types , [ :a , :aaaa ] )
86+ |> normalize_old_srv_resource_type ( )
87+
8388 validate_resource_types! ( resource_types )
8489
8590 warn_on_invalid_dist ( )
@@ -161,12 +166,22 @@ defmodule DNSCluster do
161166 { basename , addr }
162167 end
163168 |> Enum . uniq ( )
164- |> Enum . map ( fn { basename , addr } -> { basename , to_string ( :inet . ntoa ( addr ) ) } end )
169+ |> Enum . map ( fn
170+ { basename , ip } when is_tuple ( ip ) -> { basename , to_string ( :inet . ntoa ( ip ) ) }
171+ { basename , hostname } -> { basename , hostname }
172+ end )
165173 end
166174
167175 defp basename_from_query_or_state ( { basename , _query } , _state ) , do: basename
168176 defp basename_from_query_or_state ( _query , % { basename: basename } ) , do: basename
169177
178+ defp normalize_old_srv_resource_type ( resource_types ) do
179+ Enum . map ( resource_types , fn
180+ :srv -> { :srv , :ips }
181+ resource_type -> resource_type
182+ end )
183+ end
184+
170185 defp validate_query! ( query ) do
171186 query
172187 |> List . wrap ( )
@@ -186,7 +201,7 @@ defmodule DNSCluster do
186201 defp validate_resource_types! ( resource_types ) do
187202 if resource_types == [ ] or resource_types -- @ valid_resource_types != [ ] do
188203 raise ArgumentError ,
189- "expected :resource_types to be a subset of [:a, :aaaa, :srv] , got: #{ inspect ( resource_types ) } "
204+ "expected :resource_types to be a subset of #{ inspect ( @ valid_resource_types ) } , got: #{ inspect ( resource_types ) } "
190205 end
191206 end
192207
0 commit comments