Ansible-inventory和playbook
文章目录
- 一、inventory 主机清单
- 1、列表表示
- 2、inventory 中的变量
- 3、变量
- 3.1 主机变量
- 3.2 组变量
- 3.3 组嵌套
- 二、playbook剧本
- 1、playbook的组成
- 2、编写剧本
- 2.1 剧本制作
- 2.2 准备nginx.conf
- 2.3 运行剧本
- 2.4 查看webservers服务器
- 2.5 补充参数
- 3、剧本定义、引用变量
- 3.1 剧本制作
- 3.2 运行剧本
- 3.3 查看dbservers服务器
- 3.4 在命令行定义变量运行剧本
- 3.5 查看dbservers服务器
- 4、when条件判断剧本
- 4.1 剧本制作
- 4.2 运行剧本
- 4.3 查看远程服务器
- 5、迭代剧本
- 5.1 剧本制作
- 5.2 执行剧本
- 5.3 查看验证
一、inventory 主机清单
- Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内。
1、列表表示
- 如果是名称类似的主机,可以使用列表的方式标识各个主机。
#编辑主机清单配置文件
vim /etc/ansible/hosts
[webservers]
192.168.10.1[2:5]
#表示12-15的地址范围,(可以使用[ ]表示连续的主机范围值)


#编辑主机清单配置文件
vim /etc/ansible/hosts
[webservers]
192.168.10.12:1128
#指定远程连接端口号为1128
#冒号后定义远程连接端口,默认是 ssh 的 22 端口


#编辑主机清单配置文件
vim /etc/ansible/hosts
[dbservers]
db-[a:f].example.org
#支持匹配 a~f
2、inventory 中的变量
| Inventory变量名 | 含义 |
|---|---|
| ansible_host | ansible连接节点时的IP地址 |
| ansible_port | 连接对方的端口号,ssh连接时默认为22 |
| ansible_user | 连接对方主机时使用的主机名。不指定时,将使用执行ansible或ansible-playbook命令的用户 |
| ansible_password | 连接时的用户的ssh密码,仅在未使用密钥对验证的情况下有效 |
| ansible_ssh_private_key_file | 指定密钥认证ssh连接时的私钥文件 |
| ansible_ssh_common_args | 提供给ssh、sftp、scp命令的额外参数 |
| ansible_become | 允许进行权限提升 |
| ansible_become_method | 指定提升权限的方式,例如可使用sudo/su/runas等方式 |
| ansible_become_user | 提升为哪个用户的权限,默认提升为root |
| ansible_become_password | 提升为指定用户权限时的密码 |
3、变量
3.1 主机变量
#修改主机清单配置文件
vim /etc/ansible/hosts
[dbservers]
192.168.10.13 ansible_port=22 ansible_user=root ansible_password=123
#通过远程主机的用户账号和密码进行登录,而不是使用ssh协议(每个主机可以设置不同的变量)ansible dbservers -a 'date'
#远程主机执行date命令



3.2 组变量
#修改主机清单配置文件
vim /etc/ansible/hosts
[dbservers:vars]
#表示为 webservers 组内所有主机定义变量
ansible_user=root
ansible_password=123[all:vars]
#表示为所有组内的所有主机定义变量
ansible_port=22



3.3 组嵌套
#修改主机清单配置文件
vim /etc/ansible/hosts
[liu:children]
#表示为 [liu:children] 组内所有主机定义变量(组嵌套)
webservers
dbservers[liu:vars]
#表示为所有组内的所有主机定义变量
ansible_user=root
ansible_password=123


二、playbook剧本
1、playbook的组成
playbooks 本身由以下各部分组成
- Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行
- Variables:变量
- Templates:模板
- Handlers:处理器,当changed状态条件满足时,(notify)触发执行的操作
- Roles:角色
2、编写剧本
- 编辑关闭防火墙和核心防护playbook剧本
#编辑yaml脚本,详细解释看上面文档
vim playbook.yaml
---
- name: first play for install nginx#gather_facts: falsehosts: webserversremote_user: roottasks:- name: disable firewalldservice: name=firewalld state=stopped- name: disable selinuxcommand: '/sbin/setenforce 0'ignore_errors: yesansible-playbook playbook.yaml
#执行yaml脚本


2.1 剧本制作
vim playbook.yaml
---
#yaml文件以---开头,以表明这是一个yaml文件,可省略
- name: first play for install nginx
#定义一个play的名称,可省略#gather_facts: false#设置不进行facts信息收集,这可以加快执行速度,可省略hosts: webservers#指定要执行任务的被管理主机组,如多个主机组用冒号分隔remote_user: root#指定被管理主机上执行任务的用户tasks:#定义任务列表,任务列表中的各任务按次序逐个在hosts中指定的主机上执行- name: disable firewalld#自定义任务名称service: name=firewalld state=stopped#关闭防火墙#使用 module: options 格式来定义任务,option使用key=value格式- name: disable selinux#自定义任务名称command: '/sbin/setenforce 0'#关闭核心防护#command模块和shell模块无需使用key=value格式ignore_errors: yes#ignore_errors: True(或者使用true)#如执行命令的返回值不为0,就会报错,tasks停止,可使用ignore_errors忽略失败的任务,,继续执行后续任务- name: install nginx#自定义任务名称yum:#安装nginx服务name: nginxstate: latest- name: install configuration file for nginx#自定义任务名称copy:#复制配置文件到指定目录src: /opt/nginx.conf#这里需要事先准备好/opt/nginx.conf文件dest: /etc/nginx/conf/nginx.conf#远程主机目标路径要存在notify: "restart nginx"#如以上操作后为changed的状态时,会通过notify指定的名称触发对应名称的handlers操作,即重启nginx服务- name: start nginx service#自定义任务名称service: enabled=true name=nginx state=started#开启服务handlers:#handlers中定义的就是任务,此处handlers中的任务使用的是service模块- name: restart nginx#notify和handlers中任务的名称必须一致service: name=nginx state=restarted#重启nginx服务 vim playbook.yaml
---
- name: first play for install nginx#gather_facts: falsehosts: webserversremote_user: roottasks:- name: disable firewalldservice: name=firewalld state=stopped- name: disable selinuxcommand: '/sbin/setenforce 0'ignore_errors: yes- name: install nginxyum:name: nginxstate: latest- name: install configuration file for nginxcopy:src: /opt/nginx.conf#需要事先准备nginx.conf配置文件dest: /etc/nginx/conf/nginx.conf#远程主机目标目录要存在notify: "restart nginx"- name: start nginx serviceservice: enabled=true name=nginx state=startedhandlers:- name: restart nginxservice: name=nginx state=restarted

Ansible在执行完某个任务之后并不会立即去执行对应的handler,而是在当前play中所有普通任务都执行完后再去执行handler,这样的好处是可以多次触发notify,但最后只执行一次对应的handler,从而避免多次重启。
2.2 准备nginx.conf
cd /opt
#切换目录#上传nginx.conf配置文件

2.3 运行剧本
ansible-playbook playbook.yaml
#执行yaml脚本



2.4 查看webservers服务器
ansible webservers -m shell -a 'ss -natp | grep nginx'
#查看远程主机nginx服务进程

2.5 补充参数
----------------------------------------------------------------------------------------------------------
-k(–ask-pass):用来交互输入ssh密码
-K(-ask-become-pass):用来交互输入sudo密码
-u:指定用户
----------------------------------------------------------------------------------------------------------
ansible-playbook playbook.yaml --syntax-check
#检查yaml文件的语法是否正确ansible-playbook playbook.yaml --list-task
#检查tasks任务ansible-playbook playbook.yaml --list-hosts
#检查生效的主机ansible-playbook playbook.yaml --start-at-task='install nginx'
#指定从某个task开始运行


3、剧本定义、引用变量
3.1 剧本制作
#编辑yaml剧本
vim deam01.yaml
---
- name: xin jian yong hu#自定义任务名称hosts: dbservers#指定要执行任务的被管理主机组remote_user: root#指定被管理主机上执行任务的用户vars:#定义任务列表- username: liu#格式为 key: valuetasks:#定义任务列表- name: create user#自定义任务名称user:name={{username}}#使用 {{key}} 引用变量的值uid=330- name: copy file#自定义任务名称copy:content="{{ansible_default_ipv4}}"#指定写入文件的内容dest=/opt/xxxx.txt#远程主机目标路径

3.2 运行剧本
ansible-playbook deam01.yaml#运行剧本

3.3 查看dbservers服务器
ansible dbservers -a 'grep "liu" /etc/passwd'
#查看创建的用户信息ansible dbservers -a 'cat /opt/xxxx.txt'
#查看新建的文件内容

3.4 在命令行定义变量运行剧本
ansible-playbook deam01.yaml -e "username=yanfen"
#命令行定义变量剧本


3.5 查看dbservers服务器
ansible dbservers -a 'grep "yanfen" /etc/passwd'
#查看命令行指定创建的用户

4、when条件判断剧本
-
在Ansible中,提供的唯一一个通用的条件判断是when指令,当when指令的值为true时,则该任务执行,否则不执行该任务。
-
when一个比较常见的应用场景是实现跳过某个主机不执行任务或者只有满足条件的主机执行任务
4.1 剧本制作
#编辑剧本
vim deam03.yaml
---
- name: hosthosts: allremote_user: roottasks:- name: shutdown hostcommand: /sbin/shutdown -r nowwhen: ansible_default_ipv4.address == "192.168.10.13"#只在主机192.168.10.13上执行command#when指令中的变量名不需要手动加上{{}}
#when: inventory_hostname == "<主机名>"

4.2 运行剧本
ansible-playbook deam03.yaml
#运行剧本

4.3 查看远程服务器
- 执行后,仅有指定主机重启,执行ping模块查看
ansible all -m ping
#ping远程主机

5、迭代剧本
- Ansible提供了很多种循环结构,一般都命名为with_items,作用等同于 loop 循环。
5.1 剧本制作
#编辑yaml剧本(迭代)
vim deam04.yaml
---
- name: play
#自定义任务名称hosts: allgather_facts: falsetasks:- name: create directories#自定义任务名称file:#使用path: "{{ item }}"#每次迭代中,{{ item }} 变量会被替换为列表中的当前项,从而允许 file 模块为这些路径创建目录state: directoryloop:#迭代一个列表- /data/xx01- /data/xx02- name: add users#自定义原始任务名称user:name: "{{ item.name }}"state: presentgroups: "{{ item.group }}"with_items:#等同于loop:- name: xx01group: wheel- name: xx02group: root#或使用以下格式
# with_items:
# - {name:'xx01', groups:'wheel'}
# - {name:'xx01', groups:'root'}vim deam04.yaml
---
- name: playhosts: allgather_facts: falsetasks:- name: create directoriesfile:path: "{{ item }}"state: directoryloop:#等同于with_items:- /data/xx01- /data/xx02- name: add usersuser:name: "{{ item.name }}"state: presentgroups: "{{ item.group }}"with_items:#等同于loop:- name: xx01group: wheel- name: xx02group: root#或使用以下格式
# with_items:
# - {name:'xx01', groups:'wheel'}
# - {name:'xx01', groups:'root'}

5.2 执行剧本
ansible-playbook deam04.yaml
#运行脚本

5.3 查看验证
ansible all -a 'ls -l /data'
#查看被控制节点创建的文件ansible all -m shell -a 'id xx01'
#查看远程服务器节点用户xx01的信息ansible all -m shell -a 'id xx02'
#查看远程服务器节点用户xx02的信息

相关文章:
Ansible-inventory和playbook
文章目录 一、inventory 主机清单1、列表表示2、inventory 中的变量3、变量3.1 主机变量3.2 组变量3.3 组嵌套 二、playbook剧本1、playbook的组成2、编写剧本2.1 剧本制作2.2 准备nginx.conf2.3 运行剧本2.4 查看webservers服务器2.5 补充参数 3、剧本定义、引用变量3.1 剧本制…...
HI3516CV610
一、总体介绍 HI3516CV610是一颗应用在安防市场的IPC SoC,在开放操作系统、新一代视频编解码标准网络安全和隐私保护、人工智能方面引领行业发展,主要面向室内外场景下的枪机、球机、半球机、海螺机、枪球一体机、双目长短焦机等产品形态,打…...
ansible内置主机变量及魔法变量
目录 概述实践代码执行效果 概述 简单实用版本 实践 代码 --- - name: Get IP Addresshosts: allgather_facts: notasks:- name: Get IP Addressansible.builtin.setup:register: host_ip- name: Print IP Addressansible.builtin.debug:msg: "The IP Address of {{ a…...
设计模式一
单例模式(Singleton Pattern)是一种常用的软件设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点。单例模式常用于控制资源密集型对象的创建,如数据库连接池、线程池等,以避免资源浪费。 单例模式…...
MySQL中JOIN连接的实现算法
目录 嵌套循环算法(NLJ) 简单嵌套循环(SNLJ) 索引嵌套循环(INLJ) 块嵌套循环(BNLJ) 三种算法比较 哈希连接算法(Hash Join) 注意事项: 工…...
[力扣题解] 216. 组合总和 III
题目:216. 组合总和 III 思路 回溯法 代码 class Solution { private:vector<vector<int>> result;vector<int> path;public:void function(int k, int n, int startindex, int sum){int i;// 剪枝// 超过了, 不用找了;if(sum > n){return…...
Spring Security Oauth2 JWT 添加额外信息
目录 一、问题描述 二、实现步骤 1、自定义TokenEnhancer 2、配置授权服务器 3、自定义UserDetails的User类 三、参考文档 一、问题描述 Oauth2里默认生成的JWT信息并没有用户信息,在认证授权后一般会返回这一部分信息,我对此进行了改造。 Oauth…...
蜜蜂收卡系统 加油卡充值卡礼品卡自定义回收系统源码 前后端开源uniapp可打包app
本文来自:蜜蜂收卡系统 加油卡充值卡礼品卡自定义回收系统源码 前后端开源uniapp可打包app - 源码1688 卡券绿色循环计划—— 一项旨在构建卡券价值再利用生态的社会责任感项目。在当前数字化消费日益普及的背景下,大量礼品卡、优惠券因各种原因未能有效…...
三星硬盘好还是西数硬盘好?硬盘数据丢失怎么找回
在数字化时代,硬盘作为数据存储的核心组件,其品质与性能直接关系到用户的数据安全与使用体验。在众多硬盘品牌中,三星与西数无疑是两个备受关注的名字。那么,究竟是三星硬盘更胜一筹,还是西数硬盘更受用户青睐…...
企业微信hook接口协议,ipad协议http,设置是否自动同意
设置是否自动同意 参数名必选类型说明uuid是String每个实例的唯一标识,根据uuid操作具体企业微信 请求示例 {"uuid":"bc4800492083fdec4c1a7e5c94","state":1 //1 是需要验证同意(需要手动点击同意) 0关闭验证…...
自动化测试的成本高效果差,那么自动化测试的意义在哪呢?
有人问:自动化测试的成本高效果差,那么自动化测试的意义在哪呢? 我觉得这个问题带有很强的误导性,是典型的逻辑陷阱之一。“自动化测试的成本高效果差”是真的吗?当然不是。而且我始终相信,回答问题的最…...
h5页面用js判断机型是安卓还是ios,判断有app安装没app跳转应用商店app stroe或者安卓应用商店
用vue3写的wep页面。亲测好使。 疑惑: 微信跳转和浏览器跳转不一样,需要控制定时器的时间,android在没下载的情况下点击没反应,ios在没下载的情况下会跳404,就是定时器2000,不知道有没有别的办法࿰…...
算法人生(17):从“课程学习”到“逐步暴露心理疗法”
课程学习(Curriculum Learning)是一种机器学习里常用的策略,它的灵感来源于人类学习方式:学习从简单的概念开始,逐步过渡到更复杂的问题。它通过模仿教育领域中课程安排的思想,设计了一系列有序的任务或数据…...
C++仿函数周边及包装器
我最近开了几个专栏,诚信互三! > |||《算法专栏》::刷题教程来自网站《代码随想录》。||| > |||《C专栏》::记录我学习C的经历,看完你一定会有收获。||| > |||《Linux专栏》࿱…...
改进灰狼算法优化随机森林回归预测
灰狼算法(Grey Wolf Optimization,GWO)是一种基于自然界灰狼行为的启发式优化算法,在2014年被提出。该算法模仿了灰狼群体中不同等级的灰狼间的优势竞争和合作行为,通过不断搜索最优解来解决复杂的优化问题。 灰狼算法…...
Hadoop生态系统的核心组件探索
理解大数据和Hadoop的基本概念 当我们谈论“大数据”时,我们指的是那些因其体积、速度或多样性而难以使用传统数据处理软件有效管理的数据集。大数据可以来自多种来源,如社交媒体、传感器、视频监控、交易记录等,通常包含了TB(太…...
命令行方式将mysql数据库迁移到达梦数据库(全步骤)
因项目需求,需要将mysql数据库转换为国产达梦数据库,但由于安全问题,正式环境只能用命令行方式连接,下列是操作全步骤 目录 一、操作逻辑二、操作步骤1、本地安装达梦相关工具2、将服务器mysql导出到本地a) 服务器命令行导出mysql…...
旅游系列之:庐山美景
旅游系列之:庐山美景 一、路线二、住宿二、庐山美景 一、路线 庐山北门乘坐大巴上山,住在上山的酒店东线大巴游览三叠泉,不需要乘坐缆车,步行上下三叠泉即可,线路很短 二、住宿 长江宾馆庐山分部 二、庐山美景...
杭州恒生面试,社招,3年经验
你好,我是田哥 一位朋友节前去恒生面试,其实面试问题大部分都是八股文,但由于自己平时工作比较忙,完全没有时间没有精力去看八股文,导致面试结果不太理想,HR说节后通知面试结果(估计是凉了&…...
python virtualenv 创建虚拟环境指定python版本,pip 从指定地址下载某个包
一、安装 pip install virtualenv是python3 的话 换成 pip3 如果下载过慢可以从国内链接下载 如下从阿里云下载 pip3 install -i https://mirrors.aliyun.com/pypi/simple virtualenv二、创建指定python版本的虚拟环境 virtualenv venv --pythonpython3.12这里的venv 为创…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...
