Détecter la dissortingbution du système d’exploitation hôte dans un script bash de déploiement solo-chef

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.