Estou fazendo um script simples que será executado no nó Ansible e me notifique via apache Slack se as atualizações estiverem disponíveis.
Se eu executar o script em meus hosts (todos baseados no Debian), recebo uma notificação no aplicativo Slack conforme desejado, mas quando ele é executado via Ansible, reproduz relatórios sem erros, mas nunca recebo a saída.
Qual poderia ser o problema? Eu estou fora das idéias.
O script Bash foi executado no Ansible:
#!/bin/bash
UPGRADE_LIST=$(mktemp)
HOLDED_PACKAGES=$(mktemp)
TMP=$(mktemp)
HOST=$(hostname)
APT=$(which apt)
#Get packages that are holded by the pkg manager
dpkg --get-selections | awk '/hold$/{print $1}' > "${HOLDED_PACKAGES}"
#Get list of upgradeable packages
$APT list --upgradable > "${UPGRADE_LIST}"
#Filter it
awk '/.*\/.*/ {FS="/"; print $1 }' "${UPGRADE_LIST}" > "${TMP}"
slack () {
a=$1
curl -X POST -H "Content-type: application/json" --data "{\"text\":\"${a}\"}" "API HOOK"
}
COUNT=$(wc -l "${TMP}")
# If count is not equal to 0, then there available packages for upgrade
if [[ $COUNT != 0 ]]; then
c="Upgrade available for $HOST"
slack $c
#Print only those that aren't holded by dpkg
while read line; do
pkg=$(grep -v $line "${TMP}")
slack "${pkg}"
pkg=""
done < "${HOLDED_PACKAGES}"
else
b="No upgrade available for ${HOST}"
slack $b
fi
#CLEANUP
rm "${TMP}" "${UPGRADE_LIST}" "${HOLDED_PACKAGES}"
Manual:
---
- hosts: debian
tasks:
- script: /etc/ansible/scripts/update-manager.sh
Corrigido. Foi o problema local no inventário. Ele estava apontando para um host local que é o Alpine.
Tags bash curl ansible shell-script