AnsibleHost.ps1

function Get-AnsibleHost
{
    [CmdletBinding()]
    [OutputType([AnsibleTower.Host])]
    Param (
        [Parameter(ValueFromPipelineByPropertyName=$true)]
        [int]$id, 

        [string]$Name
    )

    if ($id)
    {
        $Return = Invoke-GetAnsibleInternalJsonResult -ItemType "hosts" -Id $id
    }
    Else
    {
        $Return = Invoke-GetAnsibleInternalJsonResult -ItemType "hosts"
    }
    

    if (!($Return))
    {
        #Nothing returned from the call
        Return
    }
    $returnobj = @()
    foreach ($jsonhost in $return)
    {
        #Shift back to json and let newtonsoft parse it to a strongly named object instead
        $jsonhoststring = $jsonhost | ConvertTo-Json
        $thishost = $JsonParsers.ParseToHost($jsonhoststring)

        Write-verbose "Found host id $($thishost.id)"

        #Get the related groups
        $Groups = Invoke-GetAnsibleInternalJsonResult -ItemType "hosts" -Id $thishost.id -ItemSubItem "groups"
        
        foreach ($group in $groups)
        {
            $GroupObj = Get-AnsibleGroup -id $group.id
            if (!($thishost.groups)) 
            {
                $thishost.groups = $GroupObj
            }
            Else
            {
                $thishost.groups.add($GroupObj)
            }
        }

        $returnobj += $thishost; $thishost = $null

    }

    if ($name)
    {
        $returnobj = $Return | where {$_.Name -eq $name}
    }


    #return the things
    if ($returnobj)
    {
        $returnobj
    }
    
}


Function New-AnsibleHost
{
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory=$true)]
        [string]$Name,

        [Parameter(Mandatory=$false)]
        [string]$Description,

        [Parameter(Mandatory=$true)]
        [AnsibleTower.Inventory]$Inventory, 

        [Parameter(Mandatory=$true)]
        [AnsibleTower.Group]$group, 

        [String]$Variables = "---",

        [bool]$Enabled = $true
    )
    
    $Group = Get-AnsibleGroup -id ($group.id)
    if (!($group)) {
        write-error "Could not find group $($group.name)"
        return
    }

    $myobj = "" | Select name, description, inventory, variables, enabled
    $myobj.Name = $Name
    $myobj.Description = $Description
    $myobj.Inventory = $Inventory.id
    $myobj.variables = $Variables
    $myobj.enabled = $Enabled

    $result = Invoke-PostAnsibleInternalJsonResult -ItemType "groups" -InputObject $myobj -itemId ($group.id) -ItemSubItem "hosts"
    
}