Ansible-inventory和playbook

news2024/11/16 19:45:06

文章目录

    • 一、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: false
  hosts: webservers
  remote_user: root
  tasks:
   - name: disable firewalld
     service: name=firewalld state=stopped
   - name: disable selinux
     command: '/sbin/setenforce 0'
     ignore_errors: yes

ansible-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: nginx
       state: 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: false
  hosts: webservers
  remote_user: root
  tasks:
   - name: disable firewalld
     service: name=firewalld state=stopped
   - name: disable selinux
     command: '/sbin/setenforce 0'
     ignore_errors: yes
   - name: install nginx
     yum:
       name: nginx
       state: latest
   - name: install configuration file for nginx
     copy:
       src: /opt/nginx.conf
       #需要事先准备nginx.conf配置文件
       dest: /etc/nginx/conf/nginx.conf
       #远程主机目标目录要存在
     notify: "restart nginx"
   - name: start nginx service
     service: enabled=true name=nginx state=started
  handlers:
   - name: restart nginx
     service: 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: value
  tasks:
  #定义任务列表
    - 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: host
  hosts: all
  remote_user: root
  tasks:
    - name: shutdown host
      command: /sbin/shutdown -r now
      when: 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: all
  gather_facts: false
  tasks:
    - name: create directories
    #自定义任务名称
      file:
      #使用
        path: "{{ item }}"
        #每次迭代中,{{ item }} 变量会被替换为列表中的当前项,从而允许 file 模块为这些路径创建目录
        state: directory
      loop:
      #迭代一个列表
        - /data/xx01
        - /data/xx02
    - name: add users
    #自定义原始任务名称
      user:
        name: "{{ item.name }}"
        state: present
        groups: "{{ item.group }}"
      with_items:
      #等同于loop:
        - name: xx01
          group: wheel
        - name: xx02
          group: root
          #或使用以下格式
#      with_items:
#        - {name:'xx01', groups:'wheel'}
#        - {name:'xx01', groups:'root'}

vim deam04.yaml
---
- name: play
  hosts: all
  gather_facts: false
  tasks:
    - name: create directories
      file:
        path: "{{ item }}"
        state: directory
      loop:
      #等同于with_items:
        - /data/xx01
        - /data/xx02
    - name: add users
      user:
        name: "{{ item.name }}"
        state: present
        groups: "{{ item.group }}"
      with_items:
      #等同于loop:
        - name: xx01
          group: wheel
        - name: xx02
          group: 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1656314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

roofline model加速模型部署最后一公里

文章目录 模型部署教程来啦:)什么是Roofline Model&#xff1f;算法模型相关指标计算量计算峰值参数量访存量带宽计算密度kernel size对计算密度的影响output size对计算密度的影响channel size对计算密度的影响group convolution对计算密度的影响tensor reshape对计算密度的影…

ZYNQ实验--裸机程序固化

参考资料 正点原子《领航者 ZYNQ 之嵌入式 SDK 开发指南》详细的配置资料中都有介绍&#xff0c;本文只针对个人实验需求进行简要说明 固化流程 调试阶段是通过 JTAG 接口将 FPGA 配置文件和应用程序下载到 ZYNQ 器件中。但在实际应用中需要程序在上电或者复位时让程序自动运…

利用Python简单操作MySQL数据库,轻松实现数据读写

PyMySQL是Python编程语言中的一个第三方模块&#xff0c;它可以让Python程序连接到MySQL数据库并进行数据操作。它的使用非常简单&#xff0c;只需要安装PyMySQL模块&#xff0c;然后按照一定的步骤连接到MySQL数据库即 可。本文将介绍PyMySQL的安装、连接MySQL数据库、创建表、…

【Linux】18. 进程间通信 --- System V IPC(选学)

System V IPC System V 消息队列System V 共享内存System V 信号量 system V 共享内存 共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间&#xff0c;这些进程间数据传递不再涉及到内核。 换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据…

Python图形界面(GUI)Tkinter笔记(一):根窗口的创建

Tkinter库是Python的内置关于图形界面编程&#xff08;GUI全称为Graphical User Interface&#xff0c;中文意思为“图形用户界面”&#xff09;的一个库。直接导入Tkinter使用即可。 其余笔记&#xff1a;【Python图形界面&#xff08;GUI&#xff09;Tkinter笔记&#xff08;…

ES6语法教程

简介&#xff1a; ECMA European Computer Manufactures Association 欧洲计算机制造商协会&#xff0c;该组织的目标是评估、开发、和认可电信和计算机标准&#xff0c;94年后该组织改名为Ecma国标。 ECMAScript是由Ecma国际通过ECMA-262标准化的脚本程序设计语言 Ecma国…

【设计模式】JAVA Design Patterns——Abstract-document

&#x1f50d; 目的 使用动态属性&#xff0c;并在保持类型安全的同时实现非类型化语言的灵活性。 &#x1f50d; 解释 抽象文档模式使您能够处理其他非静态属性。 此模式使用特征的概念来实现类型安全&#xff0c;并将不同类的属性分离为一组接口 真实世界例子 考虑由多个部…

九州金榜|如果孩子胆小懦弱,如何家庭教育?

在孩子成长的过程中&#xff0c;孩子可能会出现胆小懦弱的表现&#xff0c;当孩子出现这个问题是&#xff0c;势必会对孩子成长造成影响&#xff0c;可能会影响孩子的社交&#xff0c;学习以及日常生活等。对此很多家长不明白哪地方出现了问题&#xff0c;就会着急。面对这种情…

速度背!24上软考信管“经典100道母题来了”!

距离软考考试的时间越来越近了&#xff0c;趁着这两周赶紧准备起来 今天给大家整理了——信息系统管理工程师经典100道母题&#xff08;含解析&#xff09;&#xff0c;有PDF版&#xff0c;可打印&#xff0c;每天刷一点。 1、微机系统中&#xff0c;&#xff08; &#xff09…

一键自动化博客发布工具,用过的人都说好(cnblogs篇)

cnblogs和其他的博客平台相比会比较复杂&#xff0c;需要设置的项目也比较多一些&#xff0c;弄懂了cnblogs的实现方式&#xff0c;那么你应该对selenium的整个框架使用已经烂熟于心了。 除了正常的标题&#xff0c;内容&#xff0c;摘要之外&#xff0c;cnblogs还需要设置个人…

操作系统原理与实验——实验十三多道批处理作业调度(作业不可移动)

关键代码 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct data{int hour;//当前小时int min;//当前分钟 }time; struct node{char name[20];//进程名time arrive;//到达就绪队列时间int zx;//执行时间(预期时间)int size;int ta…

用栈实现队列——leetcode刷题

题目要求我们只用栈的基本操作 push to top 入栈&#xff0c;peek from top 返回栈顶元素&#xff0c;pop from top 移除并返回栈顶元素&#xff0c;size 栈的大小&#xff0c;is_empty 判断栈是否为空&#xff0c;这几个函数来实现队列&#xff0c;也就是说&#xff0c;我们在…

建议收藏!如何选择高低温冲击试验箱厂家?

高低温冲击试验箱是实验室中不可或缺的重要设备之一&#xff0c;它在许多领域都发挥着关键作用。因此选择合适的高低温冲击试验箱厂家是非常关键的&#xff0c;因为正规厂家的正规产品能直接影响到产品实验的准确性和效率。下面我们一起来了解一下关于选择高低温冲击试验箱厂家…

从源头把控风险:集团多主体合规管理实战技巧分享

官.网地址&#xff1a;合合TextIn - 合合信息旗下OCR云服务产品 集团合规管理中&#xff0c;为了规避内外部利益冲突&#xff0c;需要对员工、供应商、经销商、客户、黑名单企业等多主体及其关联主体之间&#xff0c;进行多维度、多层级的关系挖掘与排查&#xff0c;避免利益…

OpenHarmony 实战开发(南向)-Docker编译环境搭建

Docker环境介绍 OpenHarmony为开发者提供了两种Docker环境&#xff0c;以帮助开发者快速完成复杂的开发环境准备工作。两种Docker环境及适用场景如下&#xff1a; 独立Docker环境&#xff1a;适用于直接基于Ubuntu、Windows操作系统平台进行版本编译的场景。 基于HPM的Docker…

react、vue 把要渲染的元素挂到指定节点。

react、vue 把要渲染的元素挂到指定节点。 文章目录 vue3 的 Teleportreact 的 createPortal 在日常工作中&#xff0c;需要封装一些定制的浮动模态框&#xff0c;但是每个弹框在不同的父级元素中&#xff0c;那弹框的层级我们是没有办法控制到的&#xff0c;所有有必要把它统一…

2024年钉钉直播回放怎么永久保存

钉钉群直播回放下载工具我已经打包好了&#xff0c; 钉钉群直播回放下载链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1234 --来自百度网盘超级会员V10的分享 1.首先解压好我给大家准备好的压缩包 2.再继续解压M3U8逍遥一仙下载器 3.进入M3U8逍遥一仙下载器文…

Pytorch快速上手

Pytorch快速上手 一、加载数据集 &#xff08;Dataset&#xff09; 加载数据集需要继承Dataset&#xff0c;通常情况下需要实现__init__方法、__getitem__方法以及__len__方法。 案例一&#xff1a; import osimport torch from torch.utils.data import Dataset from PIL …

SqlDeveloper字体大小设置

菜单栏字体&#xff1a; C:\Users\xxx\AppData\Roaming\SQL Developer\system19.2.1.247.2212\o.sqldeveloper 下的ide.properties 修改 Ide.FontSize.Aqua30 编辑器字体&#xff1a;

特定消谐技术:SHEPWM调制方法

简介 特定消谐技术是通过计算PWM波的开关时刻&#xff0c;消除特定的低阶谐波。其基本理论是恰当地控制逆变器脉宽调制电压的波形&#xff0c;通过脉宽平均法把逆变器输出的方波电压转换成等效的正弦波&#xff0c;以消除某些特定的谐波。本文对特定谐波消除方法的基本原理进行…