Merge pull request #1876 from davidobrien1985/devel
Custom Windows Facts
This commit is contained in:
commit
ad2b9b342d
2 changed files with 40 additions and 5 deletions
|
@ -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'"
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue