Custom Windows Fact (match ipaddress)

275 views
Skip to first unread message

cko

unread,
Oct 29, 2013, 10:07:12 AM10/29/13
to puppet...@googlegroups.com
Hi everybody,

I'm trying to write a custom fact that gets the IP Address of any given NIC if it matches a specific IP range.

On Linux i use this (works fine)

Facter.add("ip_foo") do
   setcode do
      Facter::Util::Resolution.exec("/sbin/ifconfig | /bin/grep '192.168.20[567].' | /bin/awk '{ print $2 }' | /bin/cut -d':' -f2")
   end
end


Now my Windows Version:

Facter.add("ip_foo_windows") do
   confine :operatingsystem => :windows
   setcode do
      Facter::Util::Resolution.exec("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe ipconfig | Select-String -pattern '192.168.20[567]' | %{$_.line.split()} | FINDSTR 192.168.20[567]")
      end
end



When i run the command C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe ipconfig | Select-String -pattern '192.168.20[567]' | %{$_.line.split()} | FINDSTR 192.168.20[567] on the box it works perfectly fine. It returns the value that i need.

But it seems that puppet doesn't get that value into the fact.


Josh Cooper

unread,
Oct 29, 2013, 10:30:29 AM10/29/13
to puppet...@googlegroups.com


On Tuesday, October 29, 2013, cko wrote:
Hi everybody,

I'm trying to write a custom fact that gets the IP Address of any given NIC if it matches a specific IP range.

On Linux i use this (works fine)

Facter.add("ip_foo") do
   setcode do
      Facter::Util::Resolution.exec("/sbin/ifconfig | /bin/grep '192.168.20[567].' | /bin/awk '{ print $2 }' | /bin/cut -d':' -f2")
   end
end


Now my Windows Version:

Facter.add("ip_foo_windows") do
   confine :operatingsystem => :windows
   setcode do
      Facter::Util::Resolution.exec("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe ipconfig | Select-String -pattern '192.168.20[567]' | %{$_.line.split()} | FINDSTR 192.168.20[567]")
      end
end

Since you've double quoted the string you need to escape the backslashes, eg "C:\\Windows\\...
 


When i run the command C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe ipconfig | Select-String -pattern '192.168.20[567]' | %{$_.line.split()} | FINDSTR 192.168.20[567] on the box it works perfectly fine. It returns the value that i need.

But it seems that puppet doesn't get that value into the fact.


--
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 puppet-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-users/65472ec1-fe7d-4a83-a144-9534419c78e3%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Josh 


--
Josh Cooper
Developer, Puppet Labs

cko

unread,
Oct 30, 2013, 5:25:55 AM10/30/13
to puppet...@googlegroups.com
Still no effect.


   Facter::Util::Resolution.exec("C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe ipconfig | Select-String -pattern '192.168.20[567]' | %{$_.line.split()} | FINDSTR 192.168.20[567]")

Is there anything else i need to escape?

Josh Cooper

unread,
Oct 30, 2013, 11:23:45 AM10/30/13
to puppet...@googlegroups.com
The second issue is that findstr is a shell builtin, so you have wrap the entire command in:

cmd.exe /c <original command>

You may have to quote the original command and adjust the interior quotes accordingly.

Josh
--
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 puppet-users...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.

cko

unread,
Nov 12, 2013, 2:22:25 AM11/12/13
to puppet...@googlegroups.com
I still can't get it to work:


 Facter::Util::Resolution.exec("C:\\Windows\\System32\\cmd.exe /c 'C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe ipconfig | Select-String -pattern '192.168.20[567]' | %{$_.line.split()} | FINDSTR 192.168.20[567]'")
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-users+unsubscribe@googlegroups.com.

giovanni possemato

unread,
Nov 12, 2013, 6:29:25 AM11/12/13
to puppet...@googlegroups.com
hi all,

try using the sysnative instead of System32

The File System Redirector will silently redirect all file system access to%windir%\system32 to %windir%\SysWOW64 instead. This can be an issue when trying to manage files in the system directory, e.g., IIS configuration files. In order to prevent redirection, you can use the sysnative alias, e.g.C:\Windows\sysnative\inetsrv\config\application Host.config.
 


Reply all
Reply to author
Forward
0 new messages