45 lines
1.3 KiB
Django/Jinja
45 lines
1.3 KiB
Django/Jinja
#!/usr/bin/bash
|
|
|
|
set -eu
|
|
|
|
printservers="{{ printservers | join(' ') }}"
|
|
hostgroup="$(id -Gn "${HOSTNAME^^}$")"
|
|
usergroup="$(id -Gn "${SUDO_USER}")"
|
|
installedprinters="$(lpstat -v | cut -f 3 -d" " | sed 's/:$//' )"
|
|
|
|
cat <<EOF
|
|
Hostgroups: ${hostgroup}
|
|
Usergroups: ${usergroup}
|
|
Local print queues:
|
|
${installedprinters}
|
|
|
|
EOF
|
|
|
|
## Remove all printers not wanted:
|
|
for p in $installedprinters ; do
|
|
printer_ip=$(lpstat -v "${p}" | sed -nE "s%.*ipp://(.+)/printers.*%\1%p")
|
|
if [[ ! "${hostgroup}" =~ "$p" ]] && [[ ! "${usergroup}" =~ "$p" ]] \
|
|
&& [[ -n $printer_ip ]] && (echo "${printservers}" | grep -w -q "${printer_ip}"); then
|
|
echo "Removing print queue '$p'."
|
|
lpadmin -x "$p"
|
|
fi
|
|
done
|
|
|
|
## Add all printers needed:
|
|
for ps in $printservers ; do
|
|
echo "Checking print server '$ps' for available printers:"
|
|
printers="$(timeout 5 lpstat -h "$ps" -U "${SUDO_USER}" -v | sed -E 's/^.+ (\w+): .+$/\1/')"
|
|
echo -e "$printers\n"
|
|
for p in $printers; do
|
|
if [[ "${hostgroup}" =~ "$p" ]] || [[ "${usergroup}" =~ "$p" ]] ; then
|
|
if [[ "$installedprinters" =~ "$p" ]] ; then
|
|
echo "Print queue '$p' already available."
|
|
else
|
|
echo "Adding print queue '$p'."
|
|
timeout 10 lpadmin -p "$p" -E -v \
|
|
"ipp://$ps/printers/$p" \
|
|
-m "driverless:ipp://$ps/printers/$p" || echo "Adding queue '$p' failed."
|
|
fi
|
|
fi
|
|
done
|
|
done
|