Ansible 数百台批量操作前期准备工作
Ansible 数百台批量操作前期准备工作
背景: 当前有100台服务器在同一个内网,需要统一部署业务程序并且对主机修改主机名,只提供了一个文档
host_user.txt
,内容 “ IP 用户 密码 ” 三列。host_user.txt 内容示例:
10.0.0.11 root xxxx
10.0.0.12 root xxxx
10.0.0.13 root xxxx
技术难点:
1、如何避免一台台服务配置免密等
2、如何避免在ansible配置主机清单中统一添加业务主机
思路: 想根据 host_user.txt
文件的内容自动生成 ansible/hosts
文件,可以通过 Shell 脚本或 Python 脚本来实现。提供两种方法来动态生成 ansible/hosts
文件。
方法 1:使用 Shell 脚本
可以使用一个简单的 Shell 脚本来读取 user.txt
并格式化成 Ansible 所需的 hosts
文件格式。
Shell 脚本
#!/bin/bash
# 定义输入文件和输出文件
input_file="user.txt"
output_file="/etc/ansible/hosts"
# 清空输出文件内容
> $output_file
# 遍历user.txt中的每一行,格式化为ansible所需格式
while IFS=" " read -r ip user pass; do
echo "$ip ansible_ssh_port=22 ansible_ssh_user=$user ansible_ssh_pass='$pass'" >> $output_file
done < "$input_file"
echo "Ansible hosts file has been generated at $output_file"
使用说明:
将上述脚本保存为一个
.sh
文件(generate_hosts.sh
)。赋予执行权限:
chmod +x generate_hosts.sh
执行脚本:
./generate_hosts.sh
这个脚本会根据 user.txt
文件的内容生成一个格式化好的 /etc/ansible/hosts
文件。
shell脚本分析:
while IFS=" " read -r ip user pass;
语句
这个语句用于逐行读取文件或标准输入中的数据,并将每一行的内容按空格分割成不同的字段。具体解释如下:
IFS=" "
:IFS
是 "内部字段分隔符"(Internal Field Separator)的缩写,定义了 Shell 在分割字符串时用作分隔符的字符。默认情况下,IFS
是空格、制表符和换行符,但在这里我们明确指定为一个空格" "
,意味着按空格来分割每一行。read -r ip user pass
:read
命令用于从输入中读取一行并将它分配给变量。-r
选项告诉read
不要转义反斜杠(\
),这是为了避免将反斜杠作为特殊字符处理。ip user pass
是我们想要从每一行中提取的变量名。read
会将每一行按空格分割,依次将第一部分赋给ip
,第二部分赋给user
,第三部分赋给pass
。如果一行有超过三个字段,后面的内容将被赋给pass
。
方法 2:使用 Python 脚本
Python,以下是通过 Python 脚本实现的方式。
Python 脚本
#!/usr/bin/env python3
# 输入和输出文件路径
input_file = 'user.txt'
output_file = '/etc/ansible/hosts'
# 打开并清空输出文件
with open(output_file, 'w') as f:
pass # 清空文件内容
# 读取输入文件并格式化为ansible所需格式
with open(input_file, 'r') as infile:
with open(output_file, 'a') as outfile:
for line in infile:
ip, user, password = line.strip().split()
# 将格式化内容写入输出文件
outfile.write(f"{ip} ansible_ssh_port=22 ansible_ssh_user={user} ansible_ssh_pass='{password}'\n")
print(f"Ansible hosts file has been generated at {output_file}")
使用说明:
将 Python 脚本保存为
.py
文件(generate_hosts.py`)。赋予执行权限:
chmod +x generate_hosts.py
执行脚本:
./generate_hosts.py
脚本工作原理:
- Shell 脚本:读取
user.txt
文件,每行包含 IP 地址、用户名和密码。然后,它将这些信息格式化并写入/etc/ansible/hosts
文件。 - Python 脚本:功能和 Shell 脚本类似,读取
user.txt
文件,提取 IP 地址、用户名和密码,按照 Ansible 所需格式输出到/etc/ansible/hosts
文件。
可以选择其中一种方式来自动化生成 Ansible 主机清单文件,并直接使用它来管理 100 台服务器,这里我自己推荐使用Shell方便快捷。
Ansible 数百台批量操作前期准备工作的更多相关文章
- RMAN 前期准备工作和实例
理解恢复目录,RMAN可以在没有恢复目录(NOCATALOG)下运行,这个时候备份信息保存在控制文件.保存在控制文件的备份信息是很危险的,如果控制文件的破坏将导致备份信息的丢失与恢复的失败,而且,没有 ...
- 使用JDBC对数据库进行查询的前期准备工作,以及简单的JDBC访问MySQL数据库(Mac)
首先JDBC的前期数据库数据准备: 1,打开链接好MySQL的Workbench软件,新建一个数据库: 2.然后打开数据库对应的代码编辑窗口,建立表和插入数据记录: 3.然后是打开关于javaWeb编 ...
- openstack 前期准备工作
OS 是 centos6.5_X86_64 一.vmware 虚拟机 准备两台机虚拟机即可 二.导入第三方安装源 [root@openstack ~]# rpm -Uvh http://dl.fedo ...
- Ubuntu离线安装VSCode(附带前期准备工作)
跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 在说正式步骤前先把准备工作做到位: 1.IP设置,这个因为是GUI的,手动设置 ...
- ZedBoard前期准备工作
1. 资源下载 内核:https://github.com/Xilinx/linux-xlnx/releases uboot:https://github.com/Xilinx/u-boot-xlnx ...
- vue组件库(一):前期准备工作
前言 将近期项目内自行开发一个vue组件,做个总结,记录下自己的思维过程~~~ 正文 接到这个任务后,还是要做些准备工作的. 主要内容如下: 1.优化下所在团队前端开发流程 服务器搭建gitlab,采 ...
- 鸿蒙的fetch请求加载聚合数据的前期准备工作-手动配置网络权限
目录: 1.双击打开"config.json"文件 2.找到配置网络访问权限位置1 3.配置内容1 4.默认访问内容是空的 5.添加配置内容2 6.复制需要配置的网络二级URL 7 ...
- Elasticsearch部署清单---前期准备工作
1.了解ES集群拓扑结构 当我们启动Elasticsearch的实例,就会启动至少一个节点.相同集群名的多个节点的连接组成一个集群, 在默认情况下,集群中的每个节点都可以处理Http请求和集群节点的数 ...
- Android studio中使用asmack的jar包的前期准备工作
1.下载相应的jar包,官网:http://asmack.freakempire.de/SNAPSHOTS/ 将下载好的jar包拷贝到工程文件的libs文件夹下 2.右击app,然后依次操作 然后点击 ...
- linux 编程技术No.1前期准备工作
原创博文,转载请注明出处. GCC的编译过程分为预处理.生成汇编代码.生成目标代码和链接成可执行文件等4个步骤. 使用vim编写C 文件 : [lining@localhost program]$ v ...
随机推荐
- CVE-2023-32233 Linux 内核 UAF 漏洞分析与利用
Linux 内核 nftable 模块在处理匿名 set 时存在 UAF. 漏洞分析 漏洞成因是 nf_tables_deactivate_set 在释放匿名 set 时没有将 set 的标记设 ...
- 论文解读《The Philosopher’s Stone: Trojaning Plugins of Large Language Models》
发表时间:2025 期刊会议:Network and Distributed System Security (NDSS) Symposium 论文单位:Shanghai Jiao Tong Univ ...
- SQL Server Profiler的trc文件生成阻止
很奇葩,sqlserver自动生成trc文件,每分钟一个,重启服务器也没用. 解决思路: 查询现在正在跑的trace进程 select * from sys.fn_trace_getinfo(0); ...
- 鸿蒙应用开发从入门到入行 - 篇2:HarmonyOS开发快速基础入门
鸿蒙应用开发从入门到入行 第二天 - 开发工具与基础组件 导读:在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用.ArkUI里的基础组件,并通过制作一个简单界面掌握使用 鸿蒙开发工具 - De ...
- Flutter获取当前路由信息和全局路由监听
Flutter获取当前路由信息和全局路由监听 获取当前路由名 通过Flutter提供的方式 var routePath = ModalRoute.of(context).settings.name; ...
- 中电金信:“人工智能+”首次写入政府工作报告,各大企业何以破局AI模型挑战
2024年全球新一轮技术变革加速来临,大模型作为人工智能发展的核心引擎,正引发一场全新的工业革命.今年全国两会期间,人工智能成为最热话题之一."人工智能+"首次被写入政府工作报告 ...
- How To Install and Enable SSH Server on Debian 10
https://devconnected.com/how-to-install-and-enable-ssh-server-on-debian-10/ How To Install and Enabl ...
- Eureka 缓存机制详细配置
https://blog.csdn.net/qwe86314/article/details/94963865 上节为大家介绍了 Eureka 的工作原理,其中提到了 Eureka Server 内部 ...
- 免费学习基于SpringBoot的高考志愿智能推荐系统
免费学习基于SpringBoot的高考志愿智能推荐系统 摘要 科学技术日新月异,人们的生活都发生了翻天覆地的变化,高考志愿智能推荐系统管理当然也不例外.过去的信息管理都使用传统的方式实行,既花费了时间 ...
- Selenium Python 问题汇总
1. 在自动化打开浏览器后会长时间加载,此时使用如下命令解决: driver.set_page_load_timeout(20) # 设置浏览器超时加载时间 driver.set_script_tim ...