ansible安装脚本

news/2025/10/15 23:08:25/文章来源:https://www.cnblogs.com/LiJunboke/p/19144483

ansible安装脚本

#!/usr/bin/env bash
#
# 通用 Ansible 安装脚本
# 支持多种方式安装(yum/apt/pip/source)
# 支持 root 和 普通用户
# 支持自定义版本(默认 2.9.27)set -eANSIBLE_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-releaseOS_ID=$IDOS_VER=$VERSION_IDelseecho "[ERROR] 无法检测系统类型"exit 1fiecho "[INFO] 检测到系统: ${OS_ID} ${OS_VER}" | tee -a "$LOG_FILE"
}#-----------------------------
# 安装依赖
#-----------------------------
install_deps() {echo "[INFO] 安装依赖..." | tee -a "$LOG_FILE"case "$OS_ID" inubuntu|debian)sudo apt update -ysudo 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 ]; thenpip3 install "ansible==${ANSIBLE_VERSION}"elsepip3 install --user "ansible==${ANSIBLE_VERSION}"export PATH=$HOME/.local/bin:$PATHecho 'export PATH=$HOME/.local/bin:$PATH' >> ~/.bashrcfi
}#-----------------------------
# apt/yum 方式
#-----------------------------
install_by_package() {echo "[INFO] 尝试使用系统包管理器安装 ansible" | tee -a "$LOG_FILE"case "$OS_ID" inubuntu|debian)sudo apt update -ysudo apt install -y ansible;;centos|rocky|almalinux|openEuler|rhel)sudo yum install -y epel-release || truesudo 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 ansiblegit checkout "v${ANSIBLE_VERSION}" || { echo "[ERROR] 无法找到版本 v${ANSIBLE_VERSION}"; exit 1; }if [ "$EUID" -eq 0 ]; thenpython3 setup.py installelsepython3 setup.py install --userexport PATH=$HOME/.local/bin:$PATHecho 'export PATH=$HOME/.local/bin:$PATH' >> ~/.bashrcfi
}#-----------------------------
# 自动选择安装方式
#-----------------------------
auto_install() {case "$OS_ID" inubuntu|debian) install_by_package ;;centos|rocky|almalinux|openEuler|rhel) install_by_package ;;*) install_by_pip ;;esac
}#-----------------------------
# 主流程
#-----------------------------
main() {detect_osinstall_depscase "$INSTALL_METHOD" inyum|apt) install_by_package ;;pip) install_by_pip ;;source) install_by_source ;;auto) auto_install ;;*)echo "[ERROR] 未知安装方式: $INSTALL_METHOD"exit 1;;esacecho "[INFO] Ansible 安装完成 ✅"echo "[INFO] 当前版本:"ansible --version | head -n 1
}main "$@"

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/937864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细介绍:【笔记】介绍 WPF XAML 中 Binding 的 StringFormat详细功能

详细介绍:【笔记】介绍 WPF XAML 中 Binding 的 StringFormat详细功能pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

CF2143D2

给定长度为 \(n(n \le 2000)\) 的序列 \(a\),询问有多少个子序列满足不存在长度 \(\ge 3\) 的下降子序列。 显然可以 DP,令 \(dp_{i, j, k}\) 表示前 \(i\) 个数组成的子序列,最大值为 \(j\),长度为 \(2\) 的下降…

结果(Results)和结论 (Conclusion)的联系与区别

学术论文中结果(Results)和结论 (Conclusion)的联系与区别维度 结果 (Results) 结论 (Conclusion)联系 结论基于结果。结论必须以结果的客观发现为基础,不能无中生有。区别 事实呈现,描述“是什么”(What)。 事实的…

【训练技巧】PyTorch多卡训练模型DistributedDataParallel和DataParallel设置方法详解及分布式训练命令解释 - 实践

【训练技巧】PyTorch多卡训练模型DistributedDataParallel和DataParallel设置方法详解及分布式训练命令解释 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; …

20251015

今天上了离散数学课,然后收获了非常多的知识,接着又上了马克思原理课,今天总结下来就是非常的收获,然后中午经过一个舒爽的午睡以后,直接完成英语作业,读了单词剪辑了视频作业,非常的满意,然后还写了算法与数据…

java date 初始化指定时分秒及比较日期大小

java date 初始化指定时分秒及比较日期大小java date 初始化指定时分秒及比较日期大小Date now = new Date();/*** 注意:使用new Date(year, month, date)构造方法时,年份是绝对的年份(比如1999),月份是从0开始的…

软件工程学习日志2025.10.15

今日核心成果 完成了EIMS系统三大核心窗口的视觉统一与体验优化,实现了从"功能可用"到"体验优雅"的重要跨越。 ✨ 界面焕新:细节中的专业感全局视觉语言统一• 字体系统:全平台采用Microsoft Y…

实用指南:玳瑁的嵌入式日记---0929(ARM--ADC)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

C++篇:007

C++篇:007$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");C++篇:007.C++20常用新特性 一、模块 模块是一个用于在翻译单元间分享声明和定义的语言特性。它…

C++篇:006

C++篇:006$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");C++篇:006.C++17常用新特性 一、折叠表达式 C++17中引入了折叠表达式,主要是为了方便模板编程,…

C++篇:005

C++篇:005$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");C++篇:005.C++11常用新特性 一、auto 在新标准中,auto的功能变为类型推断,通知编译器去根据初…

C++篇:004

C++篇:004$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");C++篇:004.综合案例 基于字符串的IO操作 1.iostream istream 读取 ostream 写入 iostream 读写 …

轻量级ChatGPT克隆版nanochat技术解析

某知名AI研究员发布开源项目nanochat,提供完整的ChatGPT风格模型训练与推理流程。该项目包含8000行代码,涵盖分词器训练、Transformer预训练、监督微调及强化学习等关键技术环节。轻量级ChatGPT克隆版nanochat技术解…

10.15 —— 2020icpc上海D

临近一个月得知区域赛有了名额,可能也不算是好消息,大概率会延续去年打铁的经历。但不管怎样,我都会全力以赴,就算失败,我也会坦然地告诉自己尽力了,没有什么遗憾。 紧急进行一个小规划:争取每天练一道铁铜牌区…

[QOJ888] Travel around China 题解

存在[QOJ888] Travel around China 题解Petrozavodsk Winter 2021. Day 4. PKU Contest (Common Contest 1)考虑 \(n = 2\),猫树分治,考虑统计所有经过 \(mid\) 的区间,从 \(mid\) 开始跑最短路,处理出区间左右端点…

MySQL面试必考:从入门到精通的20个问题

低级难度问题问题:MySQL和SQL Server有什么区别? 答案:MySQL是一个开源的关系数据库管理系统,而SQL Server是微软开发的一个商业数据库管理系统。它们在性能、安全性、功能和成本方面有所不同。 案例: -- MySQL 分…

手撕大模型 | MQA 和 GQA 原理解析

一、前言 大模型(参数规模通常数十亿至万亿级)在处理复杂任务时面临三大核心问题:显式关联的局限性:传统 Multi-head Attention 依赖输入数据的显式特征(如文本中的词向量、图像中的像素特征)计算注意力,难以捕…

实用指南:CTFHub RCE通关笔记9:命令注入 过滤目录分隔符(3种方法渗透)

实用指南:CTFHub RCE通关笔记9:命令注入 过滤目录分隔符(3种方法渗透)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family…

P1912 [NOI2009] 诗人小G 分析

题目链接:P1912 [NOI2009] 诗人小G 题目概述 给你几个字符串,你可以按照给定的顺序任意拼接(你可以分组),但是拼接的时候中间要打空格,设这个当前的拼接长度为 \(sum\),那么代价为 \(|sum-L|^P\),求最小的代价…

[COCI2022-2023#2] Tramvaji 题解

简要题意 告诉一些站点之间的距离,求两站距离最小的两个站 思路 对于某个站点,站台1到他前面的站的距离一定已经处理好了,所以可以用一个数组维护前缀和,从前面某个站转移过来,最后统计就行了 Code: #include <…