Merge pull request #1876 from davidobrien1985/devel

Custom Windows Facts
This commit is contained in:
Matt Davis 2016-03-04 17:31:24 +00:00
commit ad2b9b342d
2 changed files with 40 additions and 5 deletions

View file

@ -35,7 +35,7 @@ options:
description: description:
- path used for local ansible facts (*.fact) - files in this dir - path used for local ansible facts (*.fact) - files in this dir
will be run (if executable) and their results be added to ansible_local facts will be run (if executable) and their results be added to ansible_local facts
if a file is not executable it is read. if a file is not executable it is read. Check notes for Windows options. (from 2.1 on)
File/results format can be json or ini-format File/results format can be json or ini-format
required: false required: false
default: '/etc/ansible/facts.d' default: '/etc/ansible/facts.d'
@ -55,11 +55,16 @@ notes:
remote systems. (See also M(facter) and M(ohai).) remote systems. (See also M(facter) and M(ohai).)
- The filter option filters only the first level subkey below ansible_facts. - The filter option filters only the first level subkey below ansible_facts.
- If the target host is Windows, you will not currently have the ability to use - If the target host is Windows, you will not currently have the ability to use
C(fact_path) or C(filter) as this is provided by a simpler implementation of the module. C(filter) as this is provided by a simpler implementation of the module.
Different facts are returned for Windows hosts. - If the target host is Windows you can now use C(fact_path). Make sure that this path
exists on the target host. Files in this path MUST be PowerShell scripts (*.ps1) and
their output must be formattable in JSON (Ansible will take care of this). Test the
output of your scripts.
This option was added in Ansible 2.1.
author: author:
- "Ansible Core Team" - "Ansible Core Team"
- "Michael DeHaan" - "Michael DeHaan"
- "David O'Brien @david_obrien davidobrien1985"
''' '''
EXAMPLES = """ EXAMPLES = """
@ -74,6 +79,9 @@ ansible all -m setup -a 'filter=facter_*'
# Display only facts about certain interfaces. # Display only facts about certain interfaces.
ansible all -m setup -a 'filter=ansible_eth[0-2]' ansible all -m setup -a 'filter=ansible_eth[0-2]'
# Display facts from Windows hosts with custom facts stored in C(C:\\custom_facts).
ansible windows -m setup -a "fact_path='c:\\custom_facts'"
""" """

View file

@ -17,14 +17,41 @@
# WANT_JSON # WANT_JSON
# POWERSHELL_COMMON # POWERSHELL_COMMON
# $params is not currently used in this module # enabled $params (David O'Brien, 06/08/2015)
# $params = Parse-Args $args; $params = Parse-Args $args;
Function Get-CustomFacts {
[cmdletBinding()]
param (
[Parameter(mandatory=$false)]
$factpath = $null
)
if (-not (Test-Path -Path $factpath)) {
Fail-Json $result "The path $factpath does not exist. Typo?"
}
$FactsFiles = Get-ChildItem -Path $factpath | Where-Object -FilterScript {($PSItem.PSIsContainer -eq $false) -and ($PSItem.Extension -eq '.ps1')}
foreach ($FactsFile in $FactsFiles) {
$out = & $($FactsFile.FullName)
Set-Attr $result.ansible_facts "ansible_$(($FactsFile.Name).Split('.')[0])" $out
}
}
$result = New-Object psobject @{ $result = New-Object psobject @{
ansible_facts = New-Object psobject ansible_facts = New-Object psobject
changed = $false changed = $false
}; };
# failifempty = $false is default and thus implied
$factpath = Get-AnsibleParam -obj $params -name fact_path
if ($factpath -ne $null) {
# Get any custom facts
Get-CustomFacts -factpath $factpath
}
$win32_os = Get-CimInstance Win32_OperatingSystem $win32_os = Get-CimInstance Win32_OperatingSystem
$win32_cs = Get-CimInstance Win32_ComputerSystem $win32_cs = Get-CimInstance Win32_ComputerSystem
$osversion = [Environment]::OSVersion $osversion = [Environment]::OSVersion