Add reliable OS detection for ansible bootstrap
Python's platform module provides a very reliable method for determining the Linux distribution, its version, and any applicable codenames. This patch adds three bash variables that can be brought into the bash scripts to take different actions depending on the operating system that is detected. Implements: blueprint multi-platform-host Change-Id: I98bcb478e99e11956618b2327399e18471aab534
This commit is contained in:
parent
42cf693c75
commit
d9b9a427aa
@ -43,12 +43,12 @@ info_block "Bootstrapping System with Ansible"
|
||||
ssh_key_create
|
||||
|
||||
# Install the base packages
|
||||
APT=`command -v apt-get` || true
|
||||
YUM=`command -v yum` || true
|
||||
if [[ "$APT" != "" ]]; then
|
||||
if [[ $HOST_DISTRO =~ ^(Ubuntu|Debian) ]]; then
|
||||
apt-get update && apt-get -y install git python-all python-dev curl autoconf g++ python2.7-dev < /dev/null
|
||||
elif [[ "$YUM" != "" ]]; then
|
||||
elif [[ $HOST_DISTRO =~ ^(CentOS|Red Hat) ]]; then
|
||||
yum check-update && yum -y install git python2 curl autoconf gcc-c++ python2-devel
|
||||
elif [[ $HOST_DISTRO =~ ^Fedora ]]; then
|
||||
dnf -y install git python curl autoconf gcc-c++ python-devel
|
||||
fi
|
||||
|
||||
# If the working directory exists remove it
|
||||
|
25
scripts/os-detection.py
Executable file
25
scripts/os-detection.py
Executable file
@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright 2015, Rackspace US, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
"""Determines the operating system of a host and returns bash variables."""
|
||||
import platform
|
||||
|
||||
|
||||
template = """
|
||||
HOST_DISTRO="{0}"
|
||||
HOST_VERSION="{1}"
|
||||
HOST_CODENAME="{2}"
|
||||
""".format(*platform.linux_distribution())
|
||||
|
||||
print(template)
|
@ -325,6 +325,11 @@ function get_pip {
|
||||
trap "exit_fail ${LINENO} $? 'Received STOP Signal'" SIGHUP SIGINT SIGTERM
|
||||
trap "exit_fail ${LINENO} $?" ERR
|
||||
|
||||
## Determine OS --------------------------------------------------------------
|
||||
# Determine the operating system of the base host
|
||||
# Adds the $HOST_DISTRO, $HOST_VERSION, and $HOST_CODENAME bash variables.
|
||||
eval "$(python $(dirname ${0})/os-detection.py)"
|
||||
echo "Detected ${HOST_DISTRO} ${HOST_VERSION} (codename: ${HOST_CODENAME})"
|
||||
|
||||
## Pre-flight check ----------------------------------------------------------
|
||||
# Make sure only root can run our script
|
||||
|
Loading…
Reference in New Issue
Block a user