Thanks to Tomas! His answer got me onto a useful track, shared here.
In my case Gethostbyname was returning a bad ip, but I could
use Socket.getaddrinfo, like this:
<% ipStr = Socket.getaddrinfo('INST-STAGE-HAPROXY-A',nil)[0][3] %><%= ipStr
%>
or with the environment parameterised;
<% ipStr =
Socket.getaddrinfo('INST-'+scope.lookupvar('::config::uc_env')+'-HAPROXY-A',nil)[0][3]
%><%= ipStr %>
Other useful pointers;
You can test the ruby functions
(yum install irb)
$ irb
2.1.2 :001 > require 'socket'
=> true
2.1.2 :002 > Socket.getaddrinfo('localhost',nil)
=> [["AF_INET6", 0, "::1", "::1", 30, 2, 17], ["AF_INET6", 0, "::1",
"::1", 30, 1, 6], ["AF_INET6", 0, "fe80::1%lo0", "fe80::1%lo0", 30, 2, 17],
["AF_INET6", 0, "fe80::1%lo0", "fe80::1%lo0", 30, 1, 6], ["AF_INET", 0,
"127.0.0.1", "127.0.0.1", 2, 2, 17], ["AF_INET", 0, "127.0.0.1",
"127.0.0.1", 2, 1, 6]]
2.1.2 :004 > exit
(yum remove irb)
More ruby functions here:
http://ruby-doc.org/stdlib-1.9.3/libdoc/socket/rdoc/Socket.html#method-c-gethostbyname
On Friday, June 21, 2013 at 6:29:25 PM UTC+10, Tomas wrote:
>
> It is not so complicated as others wrote here.
>
> Here is an example how I use it:
>
> allowed_hosts=<% for nagios_server in nagios_servers %><% ipInt =
> Socket.gethostbyname(nagios_server)[3] %><%= "%d.%d.%d.%d" % [ipInt[0],
> ipInt[1], ipInt[2], ipInt[3]] %>,<% end %>
>
>
>
> Dne Ätvrtek, 9. srpna 2012 22:38:14 UTC+2 Tim Mooney napsal(a):
>>
>>
>> Environment: puppet 2.7.14 on both master and all clients. We're also
>> using puppetlabs-stdlib and hiera, if that matters.
>>
>> I know this is really more of a ruby/erb question, but I've been
>> searching
>> for a couple hours and haven't turned up anything relatively close to
>> what
>> I'm trying to do, and I'm hoping someone here has had to do this and can
>> provide a suggestion for how to proceed.
>>
>> I'm generating a configuration file from a template. The configuration
>> file will need to have IP addresses in it, but I would like to be able to
>> use either hostnames or IP adresses in the puppet config. This means
>> that I need to be able to resolve the hostnames and turn them into IP
>> addresses, probably in the template itself.
>>
>> Basically, given something like this in puppet:
>>
>> class foo::data {
>>
>> $webfarm = {
>> http_servers => hiera('webfarm_http_servers', [
>> {
>> host => 'foo1.example.com',
>> port => '80',
>> },
>> {
>> host => 'foo2.example.com',
>> port => '80',
>> },
>> {
>> host => 'foo3.example.com',
>> port => '80',
>> },
>> ]),
>> https_servers => hiera('webfarm_https_servers', [
>> {
>> host => 'foo1.example.com',
>> port => '443',
>> },
>> {
>> host => 'foo22.example.com',
>> port => '443',
>> },
>> {
>> host => 'foo99.example.com',
>> port => '443',
>> },
>> ]),
>> }
>> }
>>
>> I need my template to iterate over the http_servers and https_servers
>> arrays and resolve the values for the host key for each element.
>>
>> Anyone have an example of how to do this in a template?
>>
>> Thanks,
>>
>> Tim
>> --
>> Tim Mooney [email protected]
>> Enterprise Computing & Infrastructure 701-231-1076
>> (Voice)
>> Room 242-J6, IACC Building 701-231-8541 (Fax)
>> North Dakota State University, Fargo, ND 58105-5164
>>
>
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-users/00523c03-1b86-48d9-8ec9-80fcfa39b958%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.