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"

使用说明:

  1. 将上述脚本保存为一个 .sh 文件( generate_hosts.sh)。

  2. 赋予执行权限:

    chmod +x generate_hosts.sh
  3. 执行脚本:

    ./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}")

使用说明:

  1. 将 Python 脚本保存为 .py 文件(generate_hosts.py`)。

  2. 赋予执行权限:

    chmod +x generate_hosts.py
  3. 执行脚本:

    ./generate_hosts.py

脚本工作原理:

  • Shell 脚本:读取 user.txt 文件,每行包含 IP 地址、用户名和密码。然后,它将这些信息格式化并写入 /etc/ansible/hosts 文件。
  • Python 脚本:功能和 Shell 脚本类似,读取 user.txt 文件,提取 IP 地址、用户名和密码,按照 Ansible 所需格式输出到 /etc/ansible/hosts 文件。

可以选择其中一种方式来自动化生成 Ansible 主机清单文件,并直接使用它来管理 100 台服务器,这里我自己推荐使用Shell方便快捷。

Ansible 数百台批量操作前期准备工作的更多相关文章

  1. RMAN 前期准备工作和实例

    理解恢复目录,RMAN可以在没有恢复目录(NOCATALOG)下运行,这个时候备份信息保存在控制文件.保存在控制文件的备份信息是很危险的,如果控制文件的破坏将导致备份信息的丢失与恢复的失败,而且,没有 ...

  2. 使用JDBC对数据库进行查询的前期准备工作,以及简单的JDBC访问MySQL数据库(Mac)

    首先JDBC的前期数据库数据准备: 1,打开链接好MySQL的Workbench软件,新建一个数据库: 2.然后打开数据库对应的代码编辑窗口,建立表和插入数据记录: 3.然后是打开关于javaWeb编 ...

  3. openstack 前期准备工作

    OS 是 centos6.5_X86_64 一.vmware 虚拟机 准备两台机虚拟机即可 二.导入第三方安装源 [root@openstack ~]# rpm -Uvh http://dl.fedo ...

  4. Ubuntu离线安装VSCode(附带前期准备工作)

    跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 在说正式步骤前先把准备工作做到位: 1.IP设置,这个因为是GUI的,手动设置 ...

  5. ZedBoard前期准备工作

    1. 资源下载 内核:https://github.com/Xilinx/linux-xlnx/releases uboot:https://github.com/Xilinx/u-boot-xlnx ...

  6. vue组件库(一):前期准备工作

    前言 将近期项目内自行开发一个vue组件,做个总结,记录下自己的思维过程~~~ 正文 接到这个任务后,还是要做些准备工作的. 主要内容如下: 1.优化下所在团队前端开发流程 服务器搭建gitlab,采 ...

  7. 鸿蒙的fetch请求加载聚合数据的前期准备工作-手动配置网络权限

    目录: 1.双击打开"config.json"文件 2.找到配置网络访问权限位置1 3.配置内容1 4.默认访问内容是空的 5.添加配置内容2 6.复制需要配置的网络二级URL 7 ...

  8. Elasticsearch部署清单---前期准备工作

    1.了解ES集群拓扑结构 当我们启动Elasticsearch的实例,就会启动至少一个节点.相同集群名的多个节点的连接组成一个集群, 在默认情况下,集群中的每个节点都可以处理Http请求和集群节点的数 ...

  9. Android studio中使用asmack的jar包的前期准备工作

    1.下载相应的jar包,官网:http://asmack.freakempire.de/SNAPSHOTS/ 将下载好的jar包拷贝到工程文件的libs文件夹下 2.右击app,然后依次操作 然后点击 ...

  10. linux 编程技术No.1前期准备工作

    原创博文,转载请注明出处. GCC的编译过程分为预处理.生成汇编代码.生成目标代码和链接成可执行文件等4个步骤. 使用vim编写C 文件 : [lining@localhost program]$ v ...

随机推荐

  1. 预热篇2:从RNN到Transformmer

    下面是整理的一个思维导图 2010年Mikolov提出了RNN网络,RNN网络存在长距离依赖(梯度消失),计算效率(RNN 难以并行)两个问题 2017年Transformmer网络结构问世,Tran ...

  2. 【Linux】CentOS7 远程联机

    # CentOS7 远程联机 哔哩哔哩 萌狼蓝天 博客:https://mllt.cc 微信公众号:萌狼蓝天 检查与安装配置OpenSSH [CentOS7]检查系统是否安装OpenSSH yum - ...

  3. kubernetes上报Pod已用内存不准问题分析

    1.问题描述: 经常有业务反馈在使用容器云平台过程中监控展示的业务使用内存不准,分析了下kubernetes采集Pod内存使用的实现原理以及相应的解决思路 2.问题分析: 2.1 问题排查: 监控数据 ...

  4. Qt自定义控件大全文章导航

    文章 链接 Qt编写自定义控件1-汽车仪表盘 https://qtchina.blog.csdn.net/article/details/89407746 Qt编写自定义控件2-进度条标尺 https ...

  5. [转]Winform实现多线程异步更新UI(进度及状态信息)

    引言 在进行Winform程序开发需要进行大量的数据的读写操作的时候,往往会需要一定的时间,然在这个时间段里面,界面ui得不到更新,导致在用户看来界面处于假死的状态,造成了不好的用户体验.所以在大量数 ...

  6. TNN编译及使用

    要使用 CMake 和 TNN 库基于 C++ 实现神经网络模型的推理预测,你需要按照以下步骤进行操作: 准备环境 确保已安装 CMake 和 C++ 编译器.并从 TNN 的 GitHub 仓库下载 ...

  7. springcloud eureka原理和机制

    公司的注册中心使用的是Eureka,之前使用过ZooKeeper,大致原理应该差不多,具体细节需要进一步学习,正好之前在腾讯云开发者社区看到一篇讲得很不错的文章,转载过来方便查看. 简介 在微服务架构 ...

  8. SQL优化的这15招,真香!

    前言 sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到. 如果某天你负责的某个线上接口,出现了性能问题,需要做优化.那么你首先想到的很有可能是优化sql语句,因为它 ...

  9. 关于存入sessionStorage中boolean值拿出来为字符串

    上面是html部分,然后定义了变量 定义方法 在mounted中获取,然后刷新页面,打印类型为字符串 解决办法

  10. 一致性hash和普通hash和hash槽

    普通hash Hash函数:一般翻译做散列.杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值.碰撞(冲突):如果两个关键字通过 ...