Any ideas for debugging this?

On Friday, November 10, 2017 at 5:06:40 PM UTC-5, [email protected] wrote:
>
> Hi,
>
> I've got a custom fact called is_internal that produces a Boolean value:
>
> # puppet apply -e 'notice(type($is_internal))'
> Notice: Scope(Class[main]): Boolean
>
> I'm using it in my puppet.conf template like this:
>
> server=<%if @is_internal == true -%>puppetmaster-internal<% else 
> -%>puppetmaster<% end -%>
>
> The fact is relatively simple, it checks to see if any interface matches 
> the regexp 10.0.1, and if so, it sets is_internal to true (I'm including 
> the fact below).
>
> Strangely, two machines with the same node definition are producing 
> different results. On machine A if I run puppet, is_internal is evaluated 
> to be false, and the template is set to have 'puppetmaster-internal', but 
> on machine B it somehow evaluates to be 'true' and sets the value to the 
> non-internal one in the template.
>
> As you can see from the interfaces configuration, neither machine has 
> 10.0.1.x configured for their interface (they use 10.0.2.x), see below for 
> the output of 'ip addr ls'. 
>
> Both machines respond with 'false' when I do `facter -p is_internal`, yet, 
> when Machine B has puppet run, for some reason it is evaluated to be true 
> via puppet:
>
> Machine A:
> # facter -p is_internal
> false
> # puppet apply -e 'notice($is_internal)'
> Notice: Scope(Class[main]): false
>
> Machine B:
> # facter -p is_internal
> false
> # puppet apply -e 'notice($is_internal)'
> Notice: Scope(Class[main]): true
>
> Both run 4.8.2 puppet version and facter 2.4.6. What could possibly make 
> Machine B change this value when it is run through puppet?!
>
> Thanks for any ideas, I'm going absolutely insane with this.
>
> Machine A:
>
> 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group 
> default 
>     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
>     inet 127.0.0.1/8 scope host lo
>        valid_lft forever preferred_lft forever
>     inet6 ::1/128 scope host 
>        valid_lft forever preferred_lft forever
> 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 
> master br-public state UP group default qlen 1000
>     link/ether 00:30:48:7c:d7:78 brd ff:ff:ff:ff:ff:ff
> 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 
> master br-private state UP group default qlen 1000
>     link/ether 00:30:48:7c:d7:79 brd ff:ff:ff:ff:ff:ff
> 5: br-private: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue 
> state UP group default 
>     link/ether 00:30:48:7c:d7:79 brd ff:ff:ff:ff:ff:ff
>     inet 10.0.2.11/24 brd 10.0.2.255 scope global br-private
>        valid_lft forever preferred_lft forever
>     inet6 fe80::230:48ff:fe7c:d779/64 scope link 
>        valid_lft forever preferred_lft forever
> 6: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 
> master br-public state UNKNOWN group default qlen 500
>     link/ether fe:0a:cf:dd:a8:b2 brd ff:ff:ff:ff:ff:ff
>     inet6 fe80::fc0a:cfff:fedd:a8b2/64 scope link 
>        valid_lft forever preferred_lft forever
> 10: tap1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 
> master br-public state UNKNOWN group default qlen 500
>     link/ether fe:1e:ec:4c:ac:6c brd ff:ff:ff:ff:ff:ff
>     inet6 fe80::fc1e:ecff:fe4c:ac6c/64 scope link 
>        valid_lft forever preferred_lft forever
>
>
> Machine B:
>
> root@mesange-pn:/var/lib/puppet/lib/facter# ip a ls
> 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group 
> default 
>     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
>     inet 127.0.0.1/8 scope host lo
>        valid_lft forever preferred_lft forever
>     inet6 ::1/128 scope host 
>        valid_lft forever preferred_lft forever
> 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 
> master br-public state UP group default qlen 1000
>     link/ether 00:30:48:7e:52:18 brd ff:ff:ff:ff:ff:ff
> 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 
> master br-private state UP group default qlen 1000
>     link/ether 00:30:48:7e:52:19 brd ff:ff:ff:ff:ff:ff
> 5: br-private: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue 
> state UP group default 
>     link/ether 00:30:48:7e:52:19 brd ff:ff:ff:ff:ff:ff
>     inet 10.0.2.10/24 brd 10.0.2.255 scope global br-private
>        valid_lft forever preferred_lft forever
>     inet 10.0.2.1/32 scope global br-private:0
>        valid_lft forever preferred_lft forever
>     inet6 fe80::230:48ff:fe7e:5219/64 scope link 
>        valid_lft forever preferred_lft forever
> 9: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 
> master br-public state UNKNOWN group default qlen 500
>     link/ether fe:2d:b0:c6:2b:58 brd ff:ff:ff:ff:ff:ff
>     inet6 fe80::fc2d:b0ff:fec6:2b58/64 scope link 
>        valid_lft forever preferred_lft forever
> 10: tap1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 
> master br-public state UNKNOWN group default qlen 500
>     link/ether fe:69:06:4b:83:19 brd ff:ff:ff:ff:ff:ff
>     inet6 fe80::fc69:6ff:fe4b:8319/64 scope link 
>        valid_lft forever preferred_lft forever
>
> require 'facter/util/ip'
>  
> def has_address(interface)
>   ip = Facter::Util::IP.get_interface_value(interface, 'ipaddress')
>   if ip.nil?
>     false
>   else
>     true
>   end
> end
>  
> def is_internal(interface)
>   rfc1918 = Regexp.new('^10\.0\.1\.')
>   ip = Facter::Util::IP.get_interface_value(interface, 'ipaddress')
>   if rfc1918.match(ip)
>     true
>   else
>     false
>   end
> end
>  
> def find_networks
>   found_public = found_internal = false
>   Facter::Util::IP.get_interfaces.each do |interface|
>     if has_address(interface)
>       if is_internal(interface)
>         found_internal = true
>       else
>         found_public = true
>       end
>     end
>   end
>   [found_public, found_internal]
> end
>  
> # these facts check if any interface is on a public or internal network
> # they return the string true or false
> # this fact will always be present
>
> Facter.add(:is_internal) do
>   confine :kernel => Facter::Util::IP.supported_platforms
>   setcode do
>     found_public, found_internal = find_networks
>     found_internal
>   end
> end 
>
> Facter.add(:interfaces_internal) do
>   confine :kernel => Facter::Util::IP.supported_platforms
>   setcode do
>     iface=""
>     Facter::Util::IP.get_interfaces.each do |interface|
>       if has_address(interface)
>         if is_internal(interface)
>           iface += "," unless iface.empty?
>           iface = iface + Facter::Util::IP.alphafy(interface)
>         end
>       end
>     end
>     iface
>   end
> end
>
>

-- 
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/d28dfcd1-656e-4044-ab4f-0a9d039e0b24%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to