mercredi 11 mars 2020

Generate ansible host file from redhat satellite

Hi,

Here is a little script to generate ansible host list from redhat satellite.
The idea is to use HostCollection to create ansible groups.

You need to have hammer installed on the server.
My satellite-api.conf contains this keys:

   [main]
   SATELLITE_URL = https://mysatellite.domain.dns
   SATELLITE_LOGIN = ****************
   SATELLITE_PASSWORD = *****************
   SATELLITE_ORG = myOrg


Here is the script

#!/bin/bash 

fn_isHammer() {
    if [ ! -f /usr/bin/hammer ]
    then
       echo "Error: hammer is not installed on this machine"
       exit -1
    fi
}

fn_isConfFile() {
    if [ ! -s /usr/local/etc/satellite-api.conf ]
    then
       echo "Error: satellite-api.conf not found"
       exit -1
    fi
}


fn_getConfig() {
    fn_isConfFile
    login=$(grep SATELLITE_LOGIN /usr/local/etc/satellite-api.conf|awk  '{print $NF}')
    password=$(grep SATELLITE_PASSWORD /usr/local/etc/satellite-api.conf|awk '{print $NF}')
    url=$(grep SATELLITE_URL /usr/local/etc/satellite-api.conf|awk '{print $NF}')
    ORG=$(grep SATELLITE_ORG /usr/local/etc/satellite-api.conf|awk -F= '{print $NF}')
}

fn_getHostsByCollections() {
    for HC in $(hammer --no-headers -u $login -p$password \
                     -s $url host-collection list | awk '{print $3}')
    do
       echo "[${HC}]"
       hammer --no-headers -u $login -p$password -s $url \
                     host-collection hosts --name "${HC}" \
                     --organization $ORG | awk '{print $NF}'
       echo ""
    done
}

main() {
    fn_isHammer
    fn_getConfig
    fn_getHostsByCollections
}

main