linux部署ansible自动化运维
ansible自动化运维
1,编写ansible的仓库(比赛已经安装,无需关注)
1、虚拟机右击---设置---添加---CD/DVD驱动器---完成---确定
2、将ansible.iso的光盘连接上(右下角呈绿色状态)
3、查看光盘挂载信息
df -h
4、挂载光盘(/dev/sr1)
mount /dev/sr1 /opt
df -h
5、编写ansible的仓库
cd /etc/yum.repos.d/
ls
vim ansible.repo
1 [Ansible]
2 name=Ansible
3 baseurl=file:///opt
4 gpgcheck=0
5 enabled=1
yum clean all #清理缓存
yum makecache #建立缓存
yum repolist #刷新
2,部署ansible(前面的仓库就是用来部署ansible的)
CentOS7安装ansible
更新yum仓库的镜像源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
安装epel扩展包(扩展包才有ansible软件包)
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
安装ansible
yum install -y ansible
5、查询ansible是否安装
rpm -q ansible
3,ansible生效配置文件
1、当系统中有多个absible的配置文件时,只能有一个生效,谁的优先级越大谁就生效
2、查看生效的配置文件
ansible --version
3、要求使用普通用户来做ansible,并且ansible的生效文件有要求,例如在用户的家目录
cp /etc/ansible/ansible.cfg .
ls
ansible --version
4、因为当前生效的配置文件为/root/ansible.cfg,所以必须修改/root/ansible.cfg的文件才能往后面做
4,清单文件
1、相当于老师手中的花名册,清单文件中有哪些主机就说明这些主机可以被控制节点管理
vim /root/ansible.cfg
14 inventory = /root/inventory 指的清单文件的位置
15 #inventory = /etc/ansible/hosts 默认清单文件存放的位置
2、创建指定的清单文件
vim /root/inventory
[test] #表示主机组的名字
192.168.23.142 #表示主机组下面的主机
3、验证清单文件是否生效,简称:列出清单树
ansible-inventory --graph
备注:带@表示组名
5,ad-hoc临时命令
命令格式:ansible 主机/主机组 [-m 模块] -a "命令"
1、使用临时命令测试ls(报错,原因:因为没有输入密码)
ansible test -a "ls"
2、再次使用临时命令 -k 指定密码
ansible test -a "ls" -k
3、使用临时命令查看对端的当前所在路径
ansible test -a "pwd" -k
4、使用临时命令查看对端的主机名
ansible test -a "hostname" -k
5、使用临时命令在对端主机上的当前所在路径创建文件
ansible test -a "touch 1.txt" -k
6、使用临时命令查看对端的当前所在路径的文件
ansible test -a "ls" -k
6,免密
因为当前是root用户,所以只需要做以下2步
1、在主配置文件中取消指纹验证
vim /root/ansible.cfg
72 host_key_checking = False
73 #host_key_checking = False
2、在清单文件中添加密码
vim /root/inventory
[all:vars]
ansible_password=123456
[test]
192.168.23.142
3、再次测试
ansible test -a "useradd user1"
ansible test -a "id user1"
7.修改tab的缩进-为playbook做准备
vim ~/.vimrc
set number ts=2 sw=2 et
8.帮助
1、统计ansible中有多少个模块有帮助
ansible-doc -l | wc -l
2、在模块中过滤出user
ansible-doc -l | grep user
3、查看user的帮助
ansible-doc user
/EX
9.集中缩进
1、跳转到要缩进的行
2、按ctrl v进入可视化块模式
3、按↑↓键选中要缩进的行
4、按I在行首输入
5、按tab缩进
6、按ecs(两下)
10.编写简单的playbook
Ansible常用模块列表:
模块名称 | 功能描述 |
ping | 检查指定节点机器是否还能连通。 |
command | 在远程主机执行命令,不支持管道符和重定向。 |
raw | 执行原始的命令,不通过模块子系统。 |
shell | 类似于command模块,但支持更全面的功能,包括管道和重定向。 |
script | 在远程主机上执行本地脚本。 |
template | 将模板文件复制到远程主机并支持变量替换。 |
yum | 管理RedHat/CentOS系统的软件包。 |
apt | 管理Ubuntu/Debian系统的软件包。 |
copy | 复制文件到远程主机。 |
fetch | 从远程主机获取文件到本地。 |
file | 管理文件和目录的属性。 |
unarchive | 解压归档文件到远程主机。 |
user | 管理用户账户。 |
group | 管理用户组。 |
service | 管理系统服务。 |
firewalld | 管理firewalld防火墙规则。 |
cron | 管理定时任务。 |
dnf | 管理Fedora系统的软件包(类似于yum)。 |
synchronize | 同步本地和远程主机之间的文件和目录。 |
wait_for | 等待某个条件满足后再继续执行。 |
pause | 暂停执行一段时间。 |
fail | 人为地使任务失败,并显示错误信息。 |
debug | 输出变量的值,用于调试。 |
创建用户
vim user.yml
- --- #表示playbook的开头(可省,但不建议省)
- - name: useradd # - name:表示解释说明,解释此playbook的功能
- hosts: test #表示此playbook应该到哪些主机组和主机上,如果有多个用,隔开
- tasks: #接下来具体要实施的任务
- - name: Add the user 'johnd' #- name:解释说明,对此任务的解释说明
- user: #模块名
- name: qq1 #创建用户的名
- uid: 1010 #用户的uid
ansible-playbook user.yml
备注:红色表示错误,黄色表示更改,绿色表示没有更改
根据红色报错信息修正错误之后
验证实验效果
ansible test -a "grep qq1 /etc/passwd"
创建组
1、在模块中过滤出group
ansible-doc -l | grep group
2、查看user的帮助
ansible-doc group
/EX
3,编写playbook vim group.yml
---
- name: groupadd
hosts: test
tasks:
- name: Ensure group "somegroup" exists
group:
name: group1
state: present
4,根据检查排错 ansible-playbook group.yml
5,验证实验效果 ansible test -a "tail -n 1 /etc/group"
安装软件包+开启服务
管理软件包的模块
ansible-doc -l | grep yum
ansible-doc yum
/EX
管理服务的模块
ansible-doc -l | grep service
ansible-doc service
/EX
编写vim httpd.yml
1 ---
2 - name: web
3 hosts: test
4 tasks:
5 - name: install the latset version of Apache
6 yum:
7 name: httpd
8 state: latest
9 - name: Start service httpd, if not started
10 service:
11 name: httpd
12 state: started
13 enabled: yes
验证playbook是否配置成功 ansible-playbook httpd.yml
验证实验效果 ansible test -a "systemctl status httpd"
修改httpd的端口号(默认80端口)
替换配置文件中某一行的模块
ansible-doc -l | grep line
ansible-doc lineinfile
/EX
编辑playbook vim apache.yml
---
- name: listen
hosts: test
tasks:
- name: Ensure the default Apache port is 8080
lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: '^Listen '
insertafter: '^#Listen '
line: 'Listen 8080'
state: present
backup: yes
检验配置是否成功:ansible-playbook apache.yml
验证配置效果
ansible test -a "grep ^Listen /etc/httpd/conf/httpd.conf"
复制文件
查找复制文件的模块
ansible-doc -l | grep copy
ansible-doc copy
/EX
编辑playbook vim copy.yml
---
- name: copy
hosts: test
tasks:
- name: Copy file with owner and permissions
copy:
src: /etc/fstab
dest: /var/tmp/fstab
排查错误 ansible-playbook copy.yml
验证实验结果 ansible test -a "ls -ld /var/tmp/fstab"
11.循环(loop)
1,批量创建用户(未循环操作)vim useradd.yml
---
- name: loop useradd
hosts: test
tasks:
- name: Add the user
user:
name: qq10
- name: Add the user
user:
name: qq11
- name: Add the user
user:
name: qq12
排查错误 ansible-playbook useradd.yml
验证实验结果 ansible test -a "tail -n 3 /etc/passwd"
2,批量创建用户(使用循环操作)vim useradd1.yml
---
- name: loop
hosts: test
tasks:
- name: Add the user
user:
name: "{{ item }}"
loop:
- wx1
- wx2
- wx3
#"{{ item }}"跟loop是固定搭配
#loop下面就行你要循环的名字
ansible-playbook useradd1.yml
ansible test -a "tail -n 3 /etc/passwd"
3,通过循环批量创建组 vim group1.yml
---
- name: groupadd loop
hosts: test
tasks:
- name: Ensure group "somegroup" exists
group:
name: "{{ item }}"
state: present
loop:
- group10
- group20
- group30
ansible-playbook group1.yml
ansible test -a "tail -n 3 /etc/group"
12,利用变量实现模板复制
查看帮助
ansible-doc -l |grep setup
ansible-doc setup
/EX
使用临时命令找变量
查找ipv4相关的变量 ansible test -m setup -a "filter=*ipv4*"
查找bios相关的变量 ansible test -m setup -a "filter=*bios*"
查找cpu相关的变量 ansible test -m setup -a "filter=*cpu*"
1、编写模板,需求内容如下:
被控节点的ipv4地址
被控节点的bios版本
被控节点的CPU颗数
2、编写模板
vim test.j2
{{ ansible_default_ipv4.address }} {{ ansible_bios_version }} {{ ansible_processor_vcpus }}
3、编写playbook将test.j2的模板复制到被控节点并显示具体值
复制带有变量的模板
ansible-doc -l | grep temp
ansible-doc template
编写playbook vim template.yml
---
- name: template
hosts: test
tasks:
- name: Template a file to /etc/files.conf
template:
src: test.j2
dest: /tmp/test.txt
ansible-playbook template.yml
ansible test -a "cat /tmp/test.txt"
使用普通用户
要求使用user1用户部署ansible,生效的配置文件为/home/user1/ansible.cfg,清单文件路径为/home/user1/inventory
1、查看当前生效的配置文件
ansible --version
2、修改生效的配置文件
cp /etc/ansible/ansible.cfg .
ls
3、修改清单文件
vim ansible.cfg
inventory = /home/user1/inventory
inventory = /etc/ansible/hosts
4、修改清单文件内容
vim /home/user1/inventory
[dev]
192.168.23.142
图形化的方式显示 Ansible 库存(inventory)的结构 ansible-inventory --graph
5、使用临时命令做测试(报错)
ansible dev -a "ls"
这个错误信息表明,Ansible 尝试通过 SSH 连接到目标主机,但被拒绝了。拒绝的原因可能是以下几种情况之一:
- SSH 密钥问题:目标主机拒绝了你的 SSH 密钥。这可能是因为你使用的密钥没有被添加到目标主机的 ~/.ssh/authorized_keys 文件中。
- 用户名或密码错误:如果你使用的是密码认证方式,那么可能是用户名或密码错误。
- SSH 配置问题:目标主机的 SSH 配置可能不允许你使用的认证方式。
- 防火墙或网络问题:目标主机的防火墙可能阻止了 SSH 连接,或者存在其他网络问题。
为了进一步排查这个问题,你可以尝试以下步骤:
- 检查 SSH 密钥:确保你使用的 SSH 密钥已经被添加到目标主机的 ~/.ssh/authorized_keys 文件中。
- 检查用户名和密码:如果你使用的是密码认证方式,确保你输入的用户名和密码是正确的。
- 检查 SSH 配置:查看目标主机的 SSH 配置文件(通常是 /etc/ssh/sshd_config),确保配置允许你使用的认证方式。
- 检查防火墙和网络配置:确保目标主机的防火墙没有阻止 SSH 连接,并且网络配置正确。
ansible dev -a "ls" -k
SSH password: 被控节点的密码
ansible dev -a "touch 1.txt" -k
SSH password: 被控节点的密码
ansible dev -a "ls" -k
SSH password: 被控节点的密码
6、免密
vim ansible.cfg
#取消指纹验证
72 host_key_checking = False
73 #host_key_checking = False
#远程用户使用root身份执行
109 remote_user = root
110 #remote_user = root
设置密码 vim inventory
1 [all:vars]
2 ansible_password=123456
3 [dev]
4 192.168.23.142
测试验证实验结果
ansible dev -a "useradd stu1"
ansible dev -a "id stu1"
7,loop循环-未 vim loop.yml
---
- name: loop
hosts: dev
tasks:
- name: Add the user
user:
name: student1
- name: Add the user
user:
name: student2
验证实验效果
ansible-playbook loop.yml
ansible dev -a "tail -n 2 /etc/passwd"
8,loop循环
vim loop.yml
---
- name: loop
hosts: dev
tasks:
- name: Add the user
user:
name: "{{ item }}"
loop:
- stu10
- stu11
- stu12
ansible-playbook loop.yml
ansible dev -a "tail -n 3 /etc/passwd"
9,创建组 vim group.yml
---
- name: groupadd
hosts: dev
tasks:
- name: Ensure group "somegroup" exists
group:
name: "{{ item }}"
state: present
loop:
- group10
- group20
- group30
ansible-playbook group.yml
ansible dev -a "tail -n 3 /etc/group"
10,item.name、item.uid、item.groups
vim loop.yml
---
- name: loop
hosts: dev
tasks:
- name: Add the user
user:
name: "{{ item.name }}"
uid: "{{ item.uid }}"
group: "{{ item.group }}"
loop:
- name: userq1
uid: 1050
group: group10
- name: userq2
uid: 1040
group: group20
- name: userq3
uid: 1030
group: group30
ansible-playbook loop.yml
ansible dev -a "tail -n 3 /etc/passwd"
ansible dev -a "id userq1"
ansible dev -a "id userq2"
ansible dev -a "id userq3"
相关文章:

linux部署ansible自动化运维
ansible自动化运维 1,编写ansible的仓库(比赛已经安装,无需关注) 1、虚拟机右击---设置---添加---CD/DVD驱动器---完成---确定 2、将ansible.iso的光盘连接上(右下角呈绿色状态) 3、查看光盘挂载信息 df -h…...
docker—私有仓库搭建
docker—私有仓库搭建 HTTP 部署 docker run -d \-p 5000:5000 \--restartalways \--name registry \-v /opt/data/registry:/var/lib/registry \registry:2使用官方的 registry 镜像来启动私有仓库。默认情况下,仓库会被创建在容器的 /var/lib/registry 目录…...

【SpringAOP】深入浅出SpringAOP从原理到源码
AOP对象是如何创建的 对于熟悉Spring IOC流程源码的同学来说,一定了解bean的整个生命周期,也就是从实例化、属性填充、初始化三个过程。那么对于Bean 工厂来说,是如何保证需要创建代理的对象创建代理的呢。 从图中可以看到,本质…...

Java 从查询超时到性能提升 (实战讲解)
目录 1. 问题所示2. 原理分析3. 解决方法3.1 代码优化3.2 索引优化3.3 删数据 1. 问题所示 查询返回速度慢,导致前端页面无数据显示 前端和后端均未报错,但后端未能在合理时间内返回结果到前端 后端没有报错日志 2. 原理分析 单独分析代码中的对算法…...
《C 语言携手 PaddlePaddle C++ API:开启深度学习开发新征程》
在深度学习领域,PaddlePaddle 作为一款强大的深度学习框架,为开发者提供了丰富的功能和高效的计算能力。而 C 语言,凭借其高效性和广泛的应用场景,与 PaddlePaddle 的 C API 相结合,能够为深度学习开发带来独特的优势。…...
Mysql之存储过程
MySQL 存储过程(Stored Procedure) 1. 概念 存储过程是一组预编译的 SQL 语句集合,可以通过调用名称来执行。存储过程可以接收参数,并支持复杂的业务逻辑(如条件语句、循环、异常处理等)。它们可以提高代…...

XV6 开发环境搭建
Step 1 搭建ubuntu 20.04 虚拟机 注意:一定要使用ubuntu 20.04,该版本可以直接通过deb安装gnu编译工具链。 安装完虚拟机后,换apt源。 ubuntu20.04镜像下载链接 设置root账户密码: sudo passwd root Step 2 下载解压qemu 5.1.0 wget ht…...

Windows 系统下 Python 环境安装
一、引言 Python 作为一种广泛应用的编程语言,在数据分析、人工智能等领域发挥着重要作用。本文将详细介绍在 Windows 系统上安装 Python 环境的步骤。 二、安装前准备 系统要求 Windows 7 及以上版本一般都能支持 Python。硬件方面,通常 2GB 内存、几…...

VMware Workstation的有线连接消失了
进入/var/lib目录下 cd /var/lib 查看是否存在NetworkManager 文件 ls 将其删除,然后虚拟机reboot一下。 sudo rm -r NetworkManager reboot 解决了,可以联网...

73页车企大数据平台规划与数据价值挖掘应用咨询项目方案解读
该项目旨在帮助乘用车公司规划大数据平台并提高数据挖掘应用水平,以满足业务部门对数据的需求,同时保证数据完整性和真实性。数据应用体系现状存在数据孤岛和数据关注维度不统一的问题,导致业务部门无法便捷使用数据并无法进行业务预测。大数…...

MIF格式详解,javascript加载导出 MIF文件示例
MIF 格式详解 MIF(MapInfo Interchange Format)是由Pitney Bowes Software开发的一种文本格式,用于存储地理空间数据。它通常与地图可视化和地理信息系统(GIS)相关联。MIF文件通常成对出现,一个.mif文件用…...

若依实现图片上传时自动添加水印
文章目录 总体思路1. 修改通用上传方法2. 去除文件路径前两级目录3. 添加水印方法运行效果总结 为了解决图盗用,并有效保护图片版权,若依项目需要实现一个功能:上传图片时,自动在图片上添加水印。这不仅可以有效防止盗用ÿ…...

用于日语词汇学习的微信小程序+ssm
日语词汇学习小程序是高校人才培养计划的重要组成部分,是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。本学生所在学院多采用半手工管理日语词汇学习小程序的方式,所以有必要开发日语词汇…...
【信息系统项目管理师】高分论文:论信息系统项目的范围管理(融媒体发布系统)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 正文1、规划范围管理2、收集需求3、定义范围4、创建WBS5、确认范围6、控制范围正文 我市xx社区作为智慧社区建设的试点社区,将通过各种创新技术手段,促进小区公共服务智能管理应用,实现社区中的基础设施、环…...

Kaggler日志--Day5
进度24/12/15 昨日复盘 Intermediate Mechine Learning之类型变量 读两篇讲解如何提问的文章,在提问区里发起一次提问 实战:自己从头到尾首先Housing Prices Competition for Kaggle Learn Users并成功提交 Intermediate Mechine Learning之管道&#…...

VScode MAC按任意键关闭终端 想要访问桌面文件
说明 最近配置MAC上CPP的运行环境,在安装必要的CPP插件后,配置launch和task等json文件后,点击运行三角形,每次都会跳出main想要访问桌面上的文件。并且输出也是在调试控制台,非常逆天。 尝试 尝试1:尽管我尝试将ta…...
小粑记故乡的记忆
小粑,是我的故乡一安徽池州一带盛行的小吃。约成人掌心大小,厚度只三、四厘米,故谓之“小”。 小粑,主打取材随性,方便常做常吃。这也许就是它抓住人的味蕾,渐次流行开来,成为当地名小吃的主要原…...
git使用小记
环境(centos为例): yum -y install gitmkdir git_dir && cd git_dirgit clone *** 修改代码: git checkout master 切到主分支git pull 拉取最新代码git branch dev 创建开发分支git checkout dev 切换到开发分支修…...
Python实现办公自动化——自动编写word文档
Python实现办公自动化——自动编写word文档 前言安装python-docxpython-docx使用创建word文档设置纸张方向、大小和页边距统一设置格式插入文本插入表格插入图片 结语 前言 工作中有大量的报告编写需求,在不停地复制粘贴之后,突然想到,这种高…...

番外篇 | BGF-YOLO:引入双层路由注意力、广义特征金字塔网络和第四检测头,提高YOLOv8检测性能
前言:Hello大家好,我是小哥谈。本文提出了一种名为BGF-YOLO的新模型,通过引入双层路由注意力、广义特征金字塔网络和第四检测头,提高YOLOv8在脑肿瘤检测中的性能,采用多层特征融合与动态稀疏注意机制以减少特征冗余。 🌈 目录 🚀1.基础概念 🚀2.网络结构 �…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...