Lorsque vous déployez une configuration de chef-solo, vous devez basculer entre l’utilisation de sudo ou non:
bash install.sh
et
sudo bash install.sh
En fonction de la dissortingbution sur le serveur hôte. Comment cela peut-il être automatisé?
ohai remplit déjà ces atsortingbuts et sont facilement disponibles dans votre recette par exemple,
"platform": "centos", "platform_version": "6.4", "platform_family": "rhel",
vous pouvez vous y référer comme
if node[:platform_family].include?("rhel") ... end
Pour voir quels autres atsortingbuts définit ohai, tapez simplement
ohai
sur la ligne de commande.
Vous pouvez détecter la dissortingbution sur l’hôte distant et déployer en conséquence. dans deploy.sh:
DISTRO=`ssh -o 'SsortingctHostKeyChecking no' ${host} 'bash -s' < bootstrap.sh`
La variable DISTRO est remplie par tout ce qui est répercuté par le script bootstrap.sh, qui est exécuté sur la machine hôte. Donc, nous pouvons maintenant utiliser bootstrap.sh pour détecter la dissortingbution ou tout autre paramètre de serveur dont nous avons besoin et que nous pourrons utiliser pour écho au script local et vous pourrez y répondre en conséquence.
exemple deploy.sh:
#!/bin/bash # Usage: ./deploy.sh [host] host="${1}" if [ -z "$host" ]; then echo "Please provide a host - eg: ./deploy [email protected]" exit 1 fi echo "deploying to ${host}" # The host key might change when we instantiate a new VM, so # we remove (-R) the old host key from known_hosts ssh-keygen -R "${host#*@}" 2> /dev/null # rough test for what distro the server is on DISTRO=`ssh -o 'SsortingctHostKeyChecking no' ${host} 'bash -s' < bootstrap.sh` if [ "$DISTRO" == "FED" ]; then echo "Detected a Fedora, RHEL, CentOS distro on host" tar cjh . | ssh -o 'StrictHostKeyChecking no' "$host" ' rm -rf /tmp/chef && mkdir /tmp/chef && cd /tmp/chef && tar xj && bash install.sh' elif [ "$DISTRO" == "DEB" ]; then echo "Detected a Debian, Ubuntu distro on host" tar cj . | ssh -o 'StrictHostKeyChecking no' "$host" ' sudo rm -rf ~/chef && mkdir ~/chef && cd ~/chef && tar xj && sudo bash install.sh' fi
exemple bootstrap.sh:
#!/bin/bash # Fedora/RHEL/CentOS distro if [ -f /etc/redhat-release ]; then echo "FED" # Debian/Ubuntu elif [ -r /lib/lsb/init-functions ]; then echo "DEB" fi
Cela vous permettra de détecter la plateforme très tôt dans le processus de déploiement.