当前位置: 首页 > news >正文

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的地址范围,(可以使用[ ]表示连续的主机范围值)

image-20240507150557652

image-20240507151205164

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

image-20240507151809100

image-20240507152131207

#编辑主机清单配置文件
vim /etc/ansible/hosts
[dbservers]
db-[a:f].example.org
#支持匹配 a~f  

2、inventory 中的变量

Inventory变量名含义
ansible_hostansible连接节点时的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命令

image-20240507160113785

image-20240507160229999

image-20240507160547272

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

image-20240507160918257

image-20240507161246665

image-20240507161329208

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

image-20240507162230025

image-20240507162320609

二、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脚本

image-20240507180331184

image-20240507180828554

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

image-20240507184533299

Ansible在执行完某个任务之后并不会立即去执行对应的handler,而是在当前play中所有普通任务都执行完后再去执行handler,这样的好处是可以多次触发notify,但最后只执行一次对应的handler,从而避免多次重启。

2.2 准备nginx.conf
cd /opt
#切换目录#上传nginx.conf配置文件

image-20240507185223998

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

image-20240507185429331

image-20240507190431888

image-20240507190343424

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

image-20240507191314806

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开始运行

image-20240507191826056

image-20240507191909564

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#远程主机目标路径

image-20240507222452599

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

image-20240507223420320

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

image-20240507224046769

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

image-20240507224951750

image-20240507225035404

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

image-20240507225340270

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 == "<主机名>"

image-20240507231435745

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

image-20240507231626873

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

image-20240507232135839

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'}

image-20240507235057153

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

image-20240507235502360

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

image-20240508000043215

相关文章:

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&#xff0c;在开放操作系统、新一代视频编解码标准网络安全和隐私保护、人工智能方面引领行业发展&#xff0c;主要面向室内外场景下的枪机、球机、半球机、海螺机、枪球一体机、双目长短焦机等产品形态&#xff0c;打…...

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…...

设计模式一

单例模式&#xff08;Singleton Pattern&#xff09;是一种常用的软件设计模式&#xff0c;旨在确保一个类只有一个实例&#xff0c;并提供一个全局访问点。单例模式常用于控制资源密集型对象的创建&#xff0c;如数据库连接池、线程池等&#xff0c;以避免资源浪费。 单例模式…...

MySQL中JOIN连接的实现算法

目录 嵌套循环算法&#xff08;NLJ&#xff09; 简单嵌套循环&#xff08;SNLJ&#xff09; 索引嵌套循环&#xff08;INLJ&#xff09; 块嵌套循环&#xff08;BNLJ&#xff09; 三种算法比较 哈希连接算法&#xff08;Hash Join&#xff09; 注意事项&#xff1a; 工…...

[力扣题解] 216. 组合总和 III

题目&#xff1a;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信息并没有用户信息&#xff0c;在认证授权后一般会返回这一部分信息&#xff0c;我对此进行了改造。 Oauth…...

蜜蜂收卡系统 加油卡充值卡礼品卡自定义回收系统源码 前后端开源uniapp可打包app

本文来自&#xff1a;蜜蜂收卡系统 加油卡充值卡礼品卡自定义回收系统源码 前后端开源uniapp可打包app - 源码1688 卡券绿色循环计划—— 一项旨在构建卡券价值再利用生态的社会责任感项目。在当前数字化消费日益普及的背景下&#xff0c;大量礼品卡、优惠券因各种原因未能有效…...

三星硬盘好还是西数硬盘好?硬盘数据丢失怎么找回

在数字化时代&#xff0c;硬盘作为数据存储的核心组件&#xff0c;其品质与性能直接关系到用户的数据安全与使用体验。在众多硬盘品牌中&#xff0c;三星与西数无疑是两个备受关注的名字。那么&#xff0c;究竟是三星硬盘更胜一筹&#xff0c;还是西数硬盘更受用户青睐&#xf…...

企业微信hook接口协议,ipad协议http,设置是否自动同意

设置是否自动同意 参数名必选类型说明uuid是String每个实例的唯一标识&#xff0c;根据uuid操作具体企业微信 请求示例 {"uuid":"bc4800492083fdec4c1a7e5c94","state":1 //1 是需要验证同意&#xff08;需要手动点击同意&#xff09; 0关闭验证…...

自动化测试的成本高效果差,那么自动化测试的意义在哪呢?

有人问&#xff1a;自动化测试的成本高效果差&#xff0c;那么自动化测试的意义在哪呢&#xff1f; 我觉得这个问题带有很强的误导性&#xff0c;是典型的逻辑陷阱之一。“自动化测试的成本高效果差”是真的吗&#xff1f;当然不是。而且我始终相信&#xff0c;回答问题的最…...

h5页面用js判断机型是安卓还是ios,判断有app安装没app跳转应用商店app stroe或者安卓应用商店

用vue3写的wep页面。亲测好使。 疑惑&#xff1a; 微信跳转和浏览器跳转不一样&#xff0c;需要控制定时器的时间&#xff0c;android在没下载的情况下点击没反应&#xff0c;ios在没下载的情况下会跳404&#xff0c;就是定时器2000&#xff0c;不知道有没有别的办法&#xff0…...

算法人生(17):从“课程学习”到“逐步暴露心理疗法”

课程学习&#xff08;Curriculum Learning&#xff09;是一种机器学习里常用的策略&#xff0c;它的灵感来源于人类学习方式&#xff1a;学习从简单的概念开始&#xff0c;逐步过渡到更复杂的问题。它通过模仿教育领域中课程安排的思想&#xff0c;设计了一系列有序的任务或数据…...

C++仿函数周边及包装器

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…...

改进灰狼算法优化随机森林回归预测

灰狼算法&#xff08;Grey Wolf Optimization&#xff0c;GWO&#xff09;是一种基于自然界灰狼行为的启发式优化算法&#xff0c;在2014年被提出。该算法模仿了灰狼群体中不同等级的灰狼间的优势竞争和合作行为&#xff0c;通过不断搜索最优解来解决复杂的优化问题。 灰狼算法…...

Hadoop生态系统的核心组件探索

理解大数据和Hadoop的基本概念 当我们谈论“大数据”时&#xff0c;我们指的是那些因其体积、速度或多样性而难以使用传统数据处理软件有效管理的数据集。大数据可以来自多种来源&#xff0c;如社交媒体、传感器、视频监控、交易记录等&#xff0c;通常包含了TB&#xff08;太…...

命令行方式将mysql数据库迁移到达梦数据库(全步骤)

因项目需求&#xff0c;需要将mysql数据库转换为国产达梦数据库&#xff0c;但由于安全问题&#xff0c;正式环境只能用命令行方式连接&#xff0c;下列是操作全步骤 目录 一、操作逻辑二、操作步骤1、本地安装达梦相关工具2、将服务器mysql导出到本地a) 服务器命令行导出mysql…...

旅游系列之:庐山美景

旅游系列之&#xff1a;庐山美景 一、路线二、住宿二、庐山美景 一、路线 庐山北门乘坐大巴上山&#xff0c;住在上山的酒店东线大巴游览三叠泉&#xff0c;不需要乘坐缆车&#xff0c;步行上下三叠泉即可&#xff0c;线路很短 二、住宿 长江宾馆庐山分部 二、庐山美景...

杭州恒生面试,社招,3年经验

你好&#xff0c;我是田哥 一位朋友节前去恒生面试&#xff0c;其实面试问题大部分都是八股文&#xff0c;但由于自己平时工作比较忙&#xff0c;完全没有时间没有精力去看八股文&#xff0c;导致面试结果不太理想&#xff0c;HR说节后通知面试结果&#xff08;估计是凉了&…...

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 为创…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章

用 Rust 重写 Linux 内核模块实战&#xff1a;迈向安全内核的新篇章 ​​摘要&#xff1a;​​ 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言&#xff0c;受限于 C 语言本身的内存安全和并发安全问题&#xff0c;开发复杂模块极易引入难以…...

【51单片机】4. 模块化编程与LCD1602Debug

1. 什么是模块化编程 传统编程会将所有函数放在main.c中&#xff0c;如果使用的模块多&#xff0c;一个文件内会有很多代码&#xff0c;不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里&#xff0c;在.h文件里提供外部可调用函数声明&#xff0c;其他.c文…...

HTML版英语学习系统

HTML版英语学习系统 这是一个完全免费、无需安装、功能完整的英语学习工具&#xff0c;使用HTML CSS JavaScript实现。 功能 文本朗读练习 - 输入英文文章&#xff0c;系统朗读帮助练习听力和发音&#xff0c;适合跟读练习&#xff0c;模仿学习&#xff1b;实时词典查询 - 双…...

【动态规划】B4336 [中山市赛 2023] 永别|普及+

B4336 [中山市赛 2023] 永别 题目描述 你做了一个梦&#xff0c;梦里有一个字符串&#xff0c;这个字符串无论正着读还是倒着读都是一样的&#xff0c;例如&#xff1a; a b c b a \tt abcba abcba 就符合这个条件。 但是你醒来时不记得梦中的字符串是什么&#xff0c;只记得…...