mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
72760f5999
This changes the get-attr function slightly, and lets the module specify whether a param is needed and auto-fails if it is not present. A module can now verify params like so:: $params = Parse-Args $args; $result = New-Object psobject; Set-Attr $result "changed" $false; $path = Get-Attr -obj $params -name path -failifempty $true -resultobj $result or $params = Parse-Args $args; $result = New-Object psobject; Set-Attr $result "changed" $false; $path = Get-Attr -obj $params -name path -failifempty $true -emptyattributefailmessage "Oh man. You forgot the main part!" -resultobj $result slight tweak in how the powershell module converts to json in order to support nested objects (allows for more complex facts, among others) This script gathers some extended facts on windows hosts in a json array attribute called "ansible_interfaces". This info is needed for some network-related modules I'm working on. Required the update to powershell.ps1 to return deeply nested json objects.
69 lines
2.3 KiB
PowerShell
69 lines
2.3 KiB
PowerShell
#!powershell
|
|
# This file is part of Ansible
|
|
#
|
|
# Ansible is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Ansible is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
# WANT_JSON
|
|
# POWERSHELL_COMMON
|
|
|
|
# $params is not currently used in this module
|
|
# $params = Parse-Args $args;
|
|
|
|
$result = New-Object psobject @{
|
|
ansible_facts = New-Object psobject
|
|
changed = $false
|
|
};
|
|
|
|
$osversion = [Environment]::OSVersion
|
|
$memory = @()
|
|
$memory += Get-WmiObject win32_Physicalmemory
|
|
$capacity = 0
|
|
$memory | foreach {$capacity += $_.Capacity}
|
|
$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_fqdn" "$([System.Net.Dns]::GetHostByName((hostname)).HostName)"
|
|
Set-Attr $result.ansible_facts "ansible_system" $osversion.Platform.ToString()
|
|
Set-Attr $result.ansible_facts "ansible_os_family" "Windows"
|
|
Set-Attr $result.ansible_facts "ansible_distribution" $osversion.VersionString
|
|
Set-Attr $result.ansible_facts "ansible_distribution_version" $osversion.Version.ToString()
|
|
|
|
Set-Attr $result.ansible_facts "ansible_totalmem" $capacity
|
|
|
|
$ips = @()
|
|
Foreach ($ip in $netcfg.IPAddress) { If ($ip) { $ips += $ip } }
|
|
Set-Attr $result.ansible_facts "ansible_ip_addresses" $ips
|
|
|
|
Exit-Json $result;
|