ansible安装脚本

#!/usr/bin/env bash
#
# 通用 Ansible 安装脚本
# 支持多种方式安装(yum/apt/pip/source)
# 支持 root 和 普通用户
# 支持自定义版本(默认 2.9.27)

set -e

ANSIBLE_VERSION=${1:-2.9.27}    # 默认版本
INSTALL_METHOD=${2:-auto}       # auto|yum|apt|pip|source
LOG_FILE="/tmp/install_ansible.log"

echo "[INFO] 开始安装 Ansible ${ANSIBLE_VERSION}" | tee -a "$LOG_FILE"

#-----------------------------
# 检测系统类型
#-----------------------------
detect_os() {
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        OS_ID=$ID
        OS_VER=$VERSION_ID
    else
        echo "[ERROR] 无法检测系统类型"
        exit 1
    fi
    echo "[INFO] 检测到系统: ${OS_ID} ${OS_VER}" | tee -a "$LOG_FILE"
}

#-----------------------------
# 安装依赖
#-----------------------------
install_deps() {
    echo "[INFO] 安装依赖..." | tee -a "$LOG_FILE"
    case "$OS_ID" in
        ubuntu|debian)
            sudo apt update -y
            sudo apt install -y python3 python3-pip python3-venv build-essential git curl
            ;;
        centos|rocky|almalinux|openEuler|rhel)
            sudo yum install -y python3 python3-pip git gcc make curl
            ;;
        *)
            echo "[WARN] 未识别的系统,尝试使用 pip 安装依赖"
            ;;
    esac
}

#-----------------------------
# pip 安装方式
#-----------------------------
install_by_pip() {
    echo "[INFO] 使用 pip 安装 ansible==${ANSIBLE_VERSION}" | tee -a "$LOG_FILE"
    if [ "$EUID" -eq 0 ]; then
        pip3 install "ansible==${ANSIBLE_VERSION}"
    else
        pip3 install --user "ansible==${ANSIBLE_VERSION}"
        export PATH=$HOME/.local/bin:$PATH
        echo 'export PATH=$HOME/.local/bin:$PATH' >> ~/.bashrc
    fi
}

#-----------------------------
# apt/yum 方式
#-----------------------------
install_by_package() {
    echo "[INFO] 尝试使用系统包管理器安装 ansible" | tee -a "$LOG_FILE"
    case "$OS_ID" in
        ubuntu|debian)
            sudo apt update -y
            sudo apt install -y ansible
            ;;
        centos|rocky|almalinux|openEuler|rhel)
            sudo yum install -y epel-release || true
            sudo yum install -y ansible
            ;;
        *)
            echo "[WARN] 不支持此系统的包管理器安装,改用 pip"
            install_by_pip
            ;;
    esac
}

#-----------------------------
# 源码安装方式
#-----------------------------
install_by_source() {
    echo "[INFO] 使用源码方式安装 ansible==${ANSIBLE_VERSION}" | tee -a "$LOG_FILE"
    TMP_DIR=$(mktemp -d)
    cd "$TMP_DIR"
    git clone https://github.com/ansible/ansible.git
    cd ansible
    git checkout "v${ANSIBLE_VERSION}" || { echo "[ERROR] 无法找到版本 v${ANSIBLE_VERSION}"; exit 1; }

    if [ "$EUID" -eq 0 ]; then
        python3 setup.py install
    else
        python3 setup.py install --user
        export PATH=$HOME/.local/bin:$PATH
        echo 'export PATH=$HOME/.local/bin:$PATH' >> ~/.bashrc
    fi
}

#-----------------------------
# 自动选择安装方式
#-----------------------------
auto_install() {
    case "$OS_ID" in
        ubuntu|debian) install_by_package ;;
        centos|rocky|almalinux|openEuler|rhel) install_by_package ;;
        *) install_by_pip ;;
    esac
}

#-----------------------------
# 主流程
#-----------------------------
main() {
    detect_os
    install_deps

    case "$INSTALL_METHOD" in
        yum|apt) install_by_package ;;
        pip) install_by_pip ;;
        source) install_by_source ;;
        auto) auto_install ;;
        *)
            echo "[ERROR] 未知安装方式: $INSTALL_METHOD"
            exit 1
            ;;
    esac

    echo "[INFO] Ansible 安装完成 ✅"
    echo "[INFO] 当前版本:"
    ansible --version | head -n 1
}

main "$@"

 

posted on 2025-10-15 23:03  jun_li123  阅读(3)  评论(0)    收藏  举报

导航