Ansible--详解
目录
一、Ansible核心组件
二、Ansible配置
1.配置案例
(1)管理安装ansible
(2)管理机分发公匙
(3)配置管理
(4)测试连接
2.命令说明
三、playbook剧本编写
1.playbook模板
2.playbook剧本话管理
3.常用模块
4.文件管理
5.文件分发
6.处理程序(Handlers)
7.角色管理
8.事实
9.加密
一、Ansible核心组件
- Host Inventory模块:
定义ansible管理的主机,可以进行分组管理。
- Core Modules Ansible核心模块
ansible中模块就是用来指定对远程主机具体的操作,比如执行命令模块command、创建文件模块file等(ansible自带的模块)。
- Custom Modules自定义模块
如果黑犀牛模块不足以完成魔种功能呢就可以使用任何语言自定义模块。
- Connection Plugins连接插件
Ansible用来连接被管理端的一种方式,比如客户端运行了SSH服务,Ansible利用SSH服务跟客户端进行通信,Ansible是通过python编写的,而python有一个模块paramiko支持并行连接SSH,Ansible事实上就是使用paramiko进行连接被管理端。但是它还支持其他的连接方式需要插件(如zeroMQ就是C/S模式工作)。
- Plugins第三方插件支持
如email、logging模块,只要有Python编写能力就可以自行编写插件。
二、Ansible配置
1.配置案例
实验环境准备:
- 192.168.10.10 管理机 192.168.10.11 被管理机
- 目前只要机器上安装了python2.6或python2.7(windows系统不可以做控制主机),都可以运行Ansible。
- 主机的系统可以是Red Hat,Debian,CentOS,OS X,BSD的各种版本等等。
(1)管理安装ansible
yum -y install epel-release#ansible在epel扩展源中yum -y install ansible#安装ansible
(2)管理机分发公匙
ssh-keygen -t rsa -b 4096#生成密钥对ssh-copy-id root@192.168.10.11#将公钥传给被管理机
#编写批量化传公钥的脚本
yum -y install expect#安装expect,让脚本支持expect的命令,可以出发远程登录。vim send_isa_pub.sh#编写批量化传公钥的脚本#!/bin/bash
ip1=100
pwd=123456
while [ $ip1 -le 200 ];
doip=192.168.10.$ip1
expect << EOF
spawn ssh-copy-id root@$ip
expect {
"yes/no" {send "yes\n";exp_continue}
"password" {send "$pwd\n"}
}
export eof
EOFlet ip1=$ip1+1
done
(3)配置管理
cd /aetc/ansible
vim hosts#编辑主机管理文件
[web] #定义模块
# 设置管理的主机(被管理主机的IP地址)
192.168.10.11
[local]
127.0.0.1
[remote]
192.168.10.11
(4)测试连接
ansible -i /etc/ansible/hosts --connection=local local -m ping# 测试本地连接,-i 指定主机文件;-m指定调用的命令模块;# --connection=local告诉ansible本机通信不需要通过SSH运行命令ansible -i /etc/ansible/hosts remote -m ping# 测试远程连接,-m后面跟调用的命令模块# 测试到 remote 模块的主机是否网络通畅
2.命令说明
命令:ansible
参数:-i /etc/ansible/hosts# --inventory=PATH# 指定库存文件,命名为hostsremote,local,all# 使用这个标签的下定义的服务器hosts清单文件# “all”是针对文件中定义的每个服务器运行的特殊关键字的。--private-key=PRIVATE_KEY_FILE_PATH# #使用指定路径的密匙建立认证连接-m shell# --module-path=DIRECTORY# 使用shell模块,它只是运行ping命令并返回结果。-a 'yum -y install httpd'# 用于将任何参数传递给 -m 指定的模块-c local或--connecion=local#在本地服务器上运行命令,而不是SSH。-b --become-user=root# 以用户“root”身份运行命令-u USERNAME --user=USERNAME# 指定移动端的执行用户-U SUDO_USERNAME --sudo-user=USERNAME-s --sudo# -u指定用户的时候,使用sudo获得root权限-k --ask-pass# 提示输入ssh的密码,而不是使用基于ssh的密钥认证-K --ask-sudo-pass# 提示输入sudo密码,与--sudo一起使用示例:ansible -i /etc/ansible/hosts web -b --become-user=root -m shell -a 'yum -y install httpd'# -i指定hosts文件(内有管理主机的IP)中的web组里的主机# -b指定以root用户执行后面的命令# -m指定shell模块(运行命令)# -a指定yum -y install httpd运行这个命令,并将这个参数传给shellansible -i ./hosts local --connection=local -b --become-user=root -m shell -a 'yum -y install nginx'# --connection=local对本机执行ansible -i ./hosts local remote -b --become-user=root -m shell -a 'yum -y install httpd'# 同时指定多个模块
三、playbook剧本编写
-
功能:剧本文件中可以写入多个执行项,并排列好执行顺序,一次性给客户执行
-
特点:剧本文件,必须按照yml语言编写,后缀必须是.yml
剧本中调用对应的模块(即程序段),实现对应的功能
1.playbook模板
mkdir /etc/ansible/playbook && cd /etc/ansible/playbookvim default.yml
- hosts: web #指定hosts文件里的web模块的主机become: yes #允许使用指定的用户身份去执行become_user: roottasks: #针对web主机组执行的操作 - name: install httpd #定义一个任务名shell: #调用shell模块执行命令'yum -y install httpd'#command: 'yum -y install httpd' #等于shell模块- name: create web page file #创建网页文件shell:'echo "www.daboluo.com" > /var/www/html/index.html' - name: start httpd #定义一个任务名service: #服务name: httpd #服务名为httpdstate: restarted #指定服务状态重启ansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/default.yml# 指定主机文件/etc/ansible/hosts,剧本文件为/etc/ansible/playbook/default.yml
2.playbook剧本话管理
- 功能:制定被管主机服务,业务的部署方案,实现复杂配置
- 配置思路:
首先定义.yml文件,文件内容按ad-hoc格式编写
再用ansible-playbook -i ./hosts XXX.yml的方式调用运行剧本
- 模块化管理:
.yml文件中使用不同模块完成不同的配置功能
3.常用模块
tasks # 定义各种任务,.yml启动时执行,常用任务类型如下:command # 运行指定命令shell # 调用指定脚本file # 文件创建copy # 文件复制service # 服务管理yum # 软件安装handlers # 设定处理程序user # 用户模块group # 组模块
# command和shell的区别:
# command只能调用一条指令,不支持保留字;shell可以使用管道。
# 不支持别名命令
4.文件管理
# task任务中可设定file模块,创建文件或目录
file:path: '/mnt/d1'mode: '0775'state: directory
# 指定文件类型:touch文件,directory目录,link软连接,hard硬链接,absent删除文件owner: www-datagroup: www-data#src=/mnt/f1 # 若state=link/hard的时候,src来指定原文件#force=yes # 若创建软链接时,需要强制创建,则增加force=yes#recurse=yes # 若state=directory时,并且更改权限或所属的时候,需递归继承,增加此选项。
# 若文件/目录不存在,则创建;若文件/目录存在,则更改权限,所属。
参数详解:
-
state参数:文件需要将state的值设置为touch。软链接需要将state设置为link,硬链接需要将state设置为hard。删除文件时(删除时不用区分目标是文件、目录还是链接),需要将state的值设置为absent,“absent”为缺席之意,当我们想让操作的目标“缺席”时,就表示我们想要删除目标。
-
src参数:当state设置为link或hard时,表示我们想要创建一个软连接或硬链接,所以,我们必须知知名软连接或硬链接的那个文件,通过src参数即可指定链接源。
-
force参数:当state=link的时候,可以配合此参数强制创建链接文件,当force=yes时,表示强制创建链接文件。
-
recurse参数:当要操作的文件为目录,将recurse设置为yes,可以递归的修改目录中文件的属性。
示例:
vim test1.yml#编写剧本文件
- hosts: webbecome: yesbecome_user: roottasks:- name: chuang jian wen jianfile: #创建一个文件path: /mnt/f1 #文件的路径state: touch #状态为创建mode: '0644' #权限为644owner: root #所有者为rootgroup: root #所属组为rootansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/test1.yml
vim link-test.yml
- hosts: webbecome: yesbecome_user: roottasks:- name: an zhuang httpdfile: #创建一个文件src: /mnt/f1 #源文件的路径dest: /root/f1 #软连接文件为f1state: link #创建软链接force: yes #如果已经存在,那就强制创建ansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/link-test.yml
5.文件分发
功能:从ansible服务器端分发文件给客户机
copy:
src=/mnt/f1 # 指定本机要分发出去的文件路径
dst=/mnt/ # 指定客户机上分发后存放的路径
# 复制文件- hosts: webbecome: yesbecome_user: roottasks:- name: testcopy:src: /mnt/f1
# 本机要分发出去的文件,src=/mnt表示把整个目录分发下去,src=/mnt/表示分发目录下所有内容dest: /mnt/ # 客户机上存放的路径mode: '0644' # 权限为644owner: root # 所有者为rootgroup: root # 所属组为rootansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/XXX.yml
# 复制多个文件
# 多个文件复制传到相同位置- hosts: testvars:filename: /mnt/f*become: yesbecome_user: roottasks:- name: copy filecopy:src: "{{item}}" #占位符dest: /mnt/mode: '0755'owner: rootgroup: rootwith_fileglob: "{{filename}}" #调用变量的值,将变量的值传给占位符ansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/XXX.yml
# 多个文件传到不同位置- hosts: testremote_user: rootgather_facts: falsebecome: yestasks:- name: "copy from target cpu"copy:src: "{{item.src}}" #占位符,src调用src项dest: "{{item.dest}}" #占位符:dest调用dest项mode: '0755'owner: rootgroup: root loop:- {src: "/mnt/f1", dest: "/mnt" } #被调用变量- {src: "/mnt/f2", dest: "/var" } #被调用变量,给占位符传值ansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/XXX.yml# 使用变量支持保留字时,只针对批量文件分发有效,对批量目录的分发无效
# 添加用户或组- hosts: webremote_user: rootbecome: yestasks:- name: testuser:name: wang #创建名为wang的用户state: presentansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/XXX.yml
6.处理程序(Handlers)
处理程序与任务完全相同(它可以做task可以做的任何事),相当于一个函数,只是在剧本启动时不被执行,只有当另一个任务调用它时才会运行,您可以将其视为时间系统的一部分,处理程序将通过其侦听的时间调用进行操作。
这对于运行任务后可能需要的“辅助”操作非常有用,例如在配置更改后安装或重新加载服务后启动新服务。
功能:使用handlers模块,创建任务,但并不会被直接执行,实在任务中调用执行,类似于软件开发中欧给的函数功能。
注:使用notify关键字调用handlers程序,而且notify不可以独立完成任务,需要跟在其他任务后。
示例:
- hosts: webbecome: yesbecome_user: roottasks:- name: an zhuangyum:name: httpdstate: installednotify:jian wang ye #调用下方的handlers的执行的操作- name: qi fu wuservice:name: httpdstate: restartedhandlers: #被上面notify调用- name: jian wang yeshell:'echo "www.daboluo.com" > /var/www/html/index.html'ansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/XXX.yml
7.角色管理
-
角色的功能:
将剧本中需要定义的各个模块,如:handlers、files、变量等分别存放于不同的目录中,然后在task中组织任务部署的流程,方案。
-
角色的优点:
模块化、离散化编写复杂任务
可支持的功能比单个task文件较为丰富,如:可创建文件模板,便于某服务的配置文件的统一化配置
-
角色的创建:
ansible-galaxy init NFS-test #创建角色,角色名为NFS-test
cd /etc/ansible/rolesansible-galaxy init test #创建角色,命名为testcd files && mkdir d1echo aaaa > d1/f1cd ../tasksvim main.yml
-name: copy d1copy:src: d1 #不用指定路径,他会自动到角色的目录下的files目录下找d1文件dest: /mnt/mode=644owner: rootgroup: rootvim test.yml
- hosts: webroles: #调用web_admin用户的所有任务- web_adminansible-playbook -i /etc/ansible/hosts tt.yml
8.事实
在运行任何任务之前,Ansible将手机有关其配置的系统的信息,这些被成为事实,并且包括广泛的系统信息,如:CPU核心数量,可用的ipv4和ipv6网络,挂载的磁盘,Linux发行版等等。
事实在“任务”或“模板”配置中通常很有用,例如在nginx的配置文件模块文件中设定与CPU核数一样的进程数。
user www-data:worker_processes {{ ansible _processor_cores }};# 定义进程数pid /var/run/nginx.pid;# 所有的ansible facts全局变量都是以“ansible_"为前缀,并且可以在其他任何地方使用。ansible -m setup --connection=local localhost# 查看本机事实ansible -i ./hosts remote -m setup# 查看远端事实(获取客户端信息)示例:ansible -i /etc/ansible/hosts web -m setup# 查看客户端信息
9.加密
我们经常需要将敏感数据存储在我们的模板,文件或变量文件中,这样安全性由一定要求的情况时不可避免的。
Ansible有一个j奥做Ansible Valult的解决方案
Vault允许加密任何Yaml文件,通常用于将其作用与遍历啊ing文件,Vault不会加密文件和模板,只能加密Yaml文件。
在创建加密文件时,系统会询问您必须使用的密码,以便稍后在调用角色或playbook时进行编辑。
参数: create #创建一个新文件并进行加密decrypt #从加密文件创建明文文件edit #编辑已经存在的加密文件encrypt #加密现有的纯文本文件rekey #在加密文件中设置新密码示例:
ansible-vault create vars/main.yml# 创建一个新的变量文件,并加密。# 输入加密密码后,该文件将在默认编辑器(通常是vim或nano)中打开。
相关文章:

Ansible--详解
目录 一、Ansible核心组件 二、Ansible配置 1.配置案例 (1)管理安装ansible (2)管理机分发公匙 (3)配置管理 (4)测试连接 2.命令说明 三、playbook剧本编写 1.playbook模板…...

Django和Mysql数据库
Django学习笔记 Django和Mysql数据库 Django开发操作数据库更简单,内部提供了ORM框架。 1)安装mysqlclient pip3 install mysqlclient2)ORM ORM可以帮助我们做两件事: 1.创建、修改、修改数据库中的表(不用写sql语句)[不能创…...

[蓝桥杯]-最大的通过数-CPP-二分查找、前缀和
目录 一、题目描述: 二、整体思路: 三、代码: 一、题目描述: 二、整体思路: 首先要知道不是他们同时选择序号一样的关卡通关,而是两人同时进行两个入口闯关。就是说两条通道存在相同关卡编号的的关卡被通…...

安卓UI面试题 26-30
26. Window和DecorView是什么?DecorView又是如何和Window建立联系的?Window是 WindowManager 最顶层的视图,它负责背景(窗口背景)、Title之类的标准的UI元素, Window是一个抽 象类,整个Android系统中, PhoneWindow是 Window的唯一实现类。 至于 DecorView,它是一个顶级 …...

CPU、GPU、IPU、NPU、TPU、LPU、MCU、MPU、SOC、DSP、FPGA、ASIC、GPP、ECU、
CPU: 中央处理器(Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。 它的功能主要是解释计算机指令以及处理计算机软件…...

鸿蒙车载原生开发,拓展新版图
一天内连发“五弹”、HiCar 4.0首次上车 华为鸿蒙狂扩“汽车朋友圈”-上游新闻 汇聚向上的力量 3月15日,在“华为云&华为终端云服务创新峰会2024”上,华为首批汽车行业伙伴广汽传祺、岚图汽车、零跑汽车、凯翼汽车加入鸿蒙生态合作,华为…...

15届蓝桥杯第二期模拟赛题单详细解析
文章目录 🧡🧡t1_求余🧡🧡思路代码 🧡🧡t2_灌水🧡🧡思路代码 🧡🧡t3_字符显示🧡🧡思路代码 🧡🧡t4_区间最大和…...

mysql统计数据库大小
ps:亲测可行,时间2024-03-15 15:18 mysql统计数据库大小 要统计MySQL数据库的大小,你可以使用以下SQL查询: SELECT table_schema AS "Database",ROUND(SUM(data_length index_length) / 1024 / 1024, 2) AS "Size (MB)"FROM info…...

centos防火墙firewall-cmd限定特定的ip访问
文章目录 firewall-cmd是什么?启动firewalld服务查看默认区域关闭端口访问添加富规则firewall-cmd的区域概念firewall-cmd的常用选项通用选项:状态选项:永久选项:区域选项: firewall-cmd是什么? firewall-…...

创维汽车与创维光伏储能亮相2024上海AWE,感受制造业的升级变迁
2024年3月14日,中国家电及电子消费博览会在上海正式召开。相比往届展会,2024上海AWE进驻更多行业头部力量,出展更多尖端科技,蕴含更深行业思考。创维光伏储能及乘载更先进智驾科技的创维汽车亮相此次展会。 消费电子的革新不断影响…...

Kafka配置SASL_PLAINTEXT权限。常用操作命令,创建用户,topic授权
查看已经创建的topic ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --list 创建topic 创建分区和副本数为1的topic ./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic acltest --partitions 1 --replication-factor 1 创建kafka用户 …...

[Java、Android面试]_05_内存泄漏和内存溢出
本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。 整理成了面试系列,由于时间有限,每天整理一点,后续会陆续分享出来,感兴趣的朋友可关注收…...

MySQL-HMA 高可用故障切换
本章内容: 了解MySQL MHA搭建MySQL MHAMySQL MHA故障切换 1.案例分析 1.1.1案例概述 目前 MySQL 已经成为市场上主流数据库之一,考虑到业务的重要性,MySQL 数据库 单点问题已成为企业网站架构中最大的隐患。随着技术的发展,MHA…...

深度学习 精选笔记(11)深度学习计算相关:GPU、参数、读写、块
学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…...

深度学习 Day27——J7对于ResNeXt-50算法的思考
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制🚀 文章来源:K同学的学习圈子 文章目录 前言问题分析 前言 关键问题:ResNeXt-50中conv_shortcutFalse时…...

华为配置敏捷分布式SFN漫游实验
配置敏捷分布式SFN漫游示例 组网图形 图1 配置敏捷分布式SFN漫游示例组网图 组网需求数据规划配置思路配置注意事项操作步骤配置文件 组网需求 某医院通过部署敏捷分布式网络给医护人员提供WLAN接入服务,以满足医护人员办公的最基本需求。管理员希望终端在覆盖区域内…...

续上篇 qiankun 微前端配置
上篇文章地址:微前端框架 qiankun 配置使用【基于 vue/react脚手架创建项目 】-CSDN博客 主应用: src/main.js 配置: import Vue from vue import App from ./App.vue import router from ./router import { registerMicroApps, start } …...

AI日报:欧盟人工智能法案通过后行业面临合规障碍
文章目录 人工智能新规对web爬网的影响对英国的影响。 人工智能新规 立法者已经通过了欧盟人工智能法案。企业现在必须确保其人工智能应用程序符合规则。 全面的新规定对可能影响公民权利的人工智能系统实施制裁,并有可能彻底禁止某些系统。 违反规定的公司可能面…...

音视频如何快速转二维码?在线生成音视频活码的教程
音频文件的二维码制作步骤是什么样的呢?扫描二维码来展现内容是很流行的一种方式,基本上日常生活中经常会用的图片、音频、视频等都可以使用生成二维码的方式。现在很多的幼儿园或者学校会录制孩子的音频或者视频内容用来展示,那么二维码制作…...

开源堡垒机Jumpserver安装教程
前言:堡垒机的应用场景 公司内有若干台服务器,既有windows的也有linux的, 提供有ERP,OA,Web,报表等等各种服务,往往需要远程登录到服务器上去做运维,但如果给root或者administrator权限,很容易出现不知道谁操作了的问题.如果不同人设置不同账号,又账号过多,权限不足等等其他问题…...

CentOS 7 socat命令端口转发 —— 筑梦之路
命令简介 socat是一个功能强大的命令行工具,也可以看作是netcat的加强版,它可以在两个端口之间建立虚拟通道,实现数据的传输。适用于网络调试、端口转发、安全测试等多种场景,是一个适合网络管理员和开发者的工具 yum在线安装 yu…...

SeaTunnel 2.3.4 Cluster in K8S
参考:seatunnel k8s运行zeta引擎(cluster-mode模式)_apache seatunnel zeta 启动-CSDN博客 以上参考使用的是2.3.3版本 下载2.3.4版本, 上dlcdn.apache.org下载 ,官网下载有问题 wget https://dlcdn.apache.org/seatunnel/2.3.4/…...

多模态学习 - 视觉语言预训练综述-2023-下游任务、数据集、基础知识、预训练任务、模型
参考: https://zhuanlan.zhihu.com/p/628840228 https://zhuanlan.zhihu.com/p/628994098 https://zhuanlan.zhihu.com/p/629996372 https://zhuanlan.zhihu.com/p/582424974 多模态学习 - 视觉语言预训练综述-2023-下游任务、数据集、基础知识、模型 1. 多模态介绍…...

Vite为什么比Webpack快
一、引言 主流的前端构建工具包括以下几种: Webpack:当下最热门的前端资源模块化管理和打包工具。它能够将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。同时,Webpack还支持代码分割,可以按需加载模块&#…...

因聚而生 数智有为丨软通动力携子公司鸿湖万联亮相华为中国合作伙伴大会2024
3月14日,以“因聚而生 数智有为”为主题的“华为中国合作伙伴大会2024”在深圳隆重开幕。作为华为的重要合作伙伴和本次大会钻石级(最高级)合作伙伴,软通动力深度参与本次盛会,携前沿数智化技术成果和与华为的联合解决…...

724.寻找数组的中心下标
题目:给你一个整数数组 nums ,请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不…...

Selenium 是什么?简单了解Selenium
Selenium Selenium 是什么 Selenium 是一款 Web UI 测试工具,是一款 自动化测试 工具,使用 Selenium 测试工具进行的测试通常被称为 Selenium Testing,各种支持如下列表: UI 元素的支持与管理:自写代码实现浏览器支…...

钡铼技术有限公司R40路由器工业4G让养殖环境监控更高效
钡铼技术有限公司的R40路由器是一款专为养殖环境监控而设计的工业级4G路由器。该路由器的出现极大地提高了养殖行业的监控效率,为养殖场主和管理者提供了更可靠、高效的解决方案。本文将从功能特点、优势以及应用案例等方面介绍钡铼技术有限公司的R40路由器在养殖环…...

vue2 / vue3 路由(返回跳转)时判断 + 取消跳转
vue3 options api: <template><button click$router.back()>返回</button><input type"text" v-model"formData.v1"><textarea name"" id"" v-model"formData.v2" cols"30&quo…...

【设计模式】Java 设计模式之代理模式(Proxy Pattern)
代理模式深入分析 一、概述 代理模式是一种为其他对象提供一种代理以控制对这个对象的访问的设计模式。在某些情况下,一个对象不适合或者不能直接访问另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 代理模式的主要目的是…...