Merge pull request #8812 from trondhindenes/win_json_facts_setup_improvements

win_json_facts_setup_improvements; All changes referenced in PRs #8767 , #8768 , #8769
This commit is contained in:
Chris Church 2014-08-29 15:53:42 -04:00
commit 69e7999586
2 changed files with 49 additions and 22 deletions

View file

@ -1,4 +1,3 @@
# This particular file snippet, and this file snippet only, is BSD licensed. # This particular file snippet, and this file snippet only, is BSD licensed.
# Modules you write using this snippet, which is embedded dynamically by Ansible # Modules you write using this snippet, which is embedded dynamically by Ansible
# still belong to the author of the module, and may assign their own license # still belong to the author of the module, and may assign their own license
@ -55,25 +54,6 @@ Function Set-Attr($obj, $name, $value)
$obj | Add-Member -Force -MemberType NoteProperty -Name $name -Value $value $obj | Add-Member -Force -MemberType NoteProperty -Name $name -Value $value
} }
# Helper function to get an "attribute" from a psobject instance in powershell.
# This is a convenience to make getting Members from an object easier and
# slightly more pythonic
# Example: $attr = Get-Attr $response "code" -default "1"
Function Get-Attr($obj, $name, $default = $null)
{
# Check if the provided Member $name exists in $obj and return it or the
# default
If ($obj.$name.GetType)
{
$obj.$name
}
Else
{
$default
}
return
}
# Helper function to convert a powershell object to JSON to echo it, exiting # Helper function to convert a powershell object to JSON to echo it, exiting
# the script # the script
# Example: Exit-Json $result # Example: Exit-Json $result
@ -85,7 +65,7 @@ Function Exit-Json($obj)
$obj = New-Object psobject $obj = New-Object psobject
} }
echo $obj | ConvertTo-Json echo $obj | ConvertTo-Json -Depth 99
Exit Exit
} }
@ -109,10 +89,35 @@ Function Fail-Json($obj, $message = $null)
Set-Attr $obj "msg" $message Set-Attr $obj "msg" $message
Set-Attr $obj "failed" $true Set-Attr $obj "failed" $true
echo $obj | ConvertTo-Json echo $obj | ConvertTo-Json -Depth 99
Exit 1 Exit 1
} }
# Helper function to get an "attribute" from a psobject instance in powershell.
# This is a convenience to make getting Members from an object easier and
# slightly more pythonic
# Example: $attr = Get-Attr $response "code" -default "1"
#Note that if you use the failifempty option, you do need to specify resultobject as well.
Function Get-Attr($obj, $name, $default = $null,$resultobj, $failifempty=$false, $emptyattributefailmessage)
{
# Check if the provided Member $name exists in $obj and return it or the
# default
If ($obj.$name.GetType)
{
$obj.$name
}
Elseif($failifempty -eq $false)
{
$default
}
else
{
if (!$emptyattributefailmessage) {$emptyattributefailmessage = "Missing required argument: $name"}
Fail-Json -obj $resultobj -message $emptyattributefailmessage
}
return
}
# Helper filter/pipeline function to convert a value to boolean following current # Helper filter/pipeline function to convert a value to boolean following current
# Ansible practices # Ansible practices
# Example: $is_true = "true" | ConvertTo-Bool # Example: $is_true = "true" | ConvertTo-Bool
@ -136,3 +141,4 @@ Function ConvertTo-Bool
} }
return return
} }

View file

@ -32,6 +32,27 @@ $capacity = 0
$memory | foreach {$capacity += $_.Capacity} $memory | foreach {$capacity += $_.Capacity}
$netcfg = Get-WmiObject win32_NetworkAdapterConfiguration $netcfg = Get-WmiObject win32_NetworkAdapterConfiguration
$ActiveNetcfg = @(); $ActiveNetcfg+= $netcfg | where {$_.ipaddress -ne $null}
$formattednetcfg = @()
foreach ($adapter in $ActiveNetcfg)
{
$thisadapter = New-Object psobject @{
interface_name = $adapter.description
dns_domain = $adapter.dnsdomain
default_gateway = $null
interface_index = $adapter.InterfaceIndex
}
if ($adapter.defaultIPGateway)
{
$thisadapter.default_gateway = $adapter.DefaultIPGateway[0].ToString()
}
$formattednetcfg += $thisadapter;$thisadapter = $null
}
Set-Attr $result.ansible_facts "ansible_interfaces" $formattednetcfg
Set-Attr $result.ansible_facts "ansible_hostname" $env:COMPUTERNAME; Set-Attr $result.ansible_facts "ansible_hostname" $env:COMPUTERNAME;
Set-Attr $result.ansible_facts "ansible_fqdn" "$([System.Net.Dns]::GetHostByName((hostname)).HostName)" Set-Attr $result.ansible_facts "ansible_fqdn" "$([System.Net.Dns]::GetHostByName((hostname)).HostName)"
Set-Attr $result.ansible_facts "ansible_system" $osversion.Platform.ToString() Set-Attr $result.ansible_facts "ansible_system" $osversion.Platform.ToString()