【Ansible】Ansible playbook

Ansible playbook简介

Ansible playbook是一种用于描述和自动化IT基础设施配置和管理的工具。它使用YAML格式来定义一系列任务和配置项,并利用Ansible的执行引擎自动执行这些任务。

Playbook包含一个或多个play,每个play定义了一组任务,这些任务将在目标主机上执行。每个任务可以是一个模块(例如复制文件、安装软件等),也可以是一个自定义的脚本。

Playbook还可以定义变量、条件语句、循环和其他控制结构,以实现更复杂的配置和管理逻辑。可以使用Ansible的模块来管理主机的各种资源,如文件、用户、服务等。

通过使用Ansible playbook,可以实现自动化的部署、配置和管理,提高系统的可靠性和可维护性,并减少人工干预的工作量。它还可以根据需要进行扩展和定制,以满足不同环境和需求的要求。

playbook结构

Playbook结构是一个Ansible playbook文件的组织结构。一个Ansible playbook是一个用来描述一组关联主机上执行任务的文件。

Playbook结构通常包括以下几个部分:

  1. 主机组或主机名:指定要在哪些主机上执行任务。可以使用主机组名或逗号分隔的主机名列表。

  2. 变量定义:定义用于在任务中引用的变量。可以是全局变量或主机特定变量。

  3. 任务列表:列出需要在主机上执行的任务。每个任务都包含一个名称和一个或多个操作。

  4. 模块和参数:使用Ansible模块来执行任务。每个任务都会调用一个模块,并为模块传递必要的参数。

  5. 条件语句:根据条件,有选择地执行任务。条件语句可以基于主机变量或事先定义的变量。

  6. 循环:重复执行一个任务集。循环可以用来处理多个主机或不同的变量组合。

  7. 错误处理:处理任务执行过程中可能出现的错误。可以定义失败任务的处理方式。

  8. 注释:包含有关Playbook的注释,以便于其他人理解和维护。

整个Playbook结构通常以YAML格式编写,具有易读性和可维护性。通过定义主机、变量、任务和条件,Playbook可以用来自动化配置、部署和管理远程主机。

Ansible playbook语法

Ansible playbook是用于编写自动化任务的脚本文件,其中包含了一系列的任务和配置信息。以下是Ansible playbook的基本语法:

  1. 文件头部:在文件的头部指定一些基本的信息,如Ansible版本、作者等。
---
- hosts: <目标主机>gather_facts: <是否收集主机信息,默认为True>
...
  1. 变量定义:可以定义一些变量,用于在任务中引用。
vars:var_name: var_value...
  1. 任务定义:定义一系列的任务,每个任务包含一个名称和一系列操作步骤。
tasks:- name: <任务名称><操作步骤>...
  1. 动作(Action):在任务中执行的操作步骤,可以是Ansible模块、命令、脚本等。
- name: <任务名称><操作步骤>...
  1. 模块(Module):Ansible提供了大量的模块,用于执行各种操作。模块可以通过参数传递不同的配置信息。
- name: <任务名称><模块名称>:<参数>...
  1. 条件判断:可以使用条件判断来根据不同的情况执行不同的操作。
- name: <任务名称><操作步骤>when: <条件>...
  1. 循环(Loop):可以使用循环来重复执行一系列的任务。
- name: <任务名称><操作步骤>loop: <循环列表>...
  1. 注释:可以在脚本中添加注释以提高可读性。
# 这是一个注释

要启动一个Ansible playbook任务,可以使用ansible-playbook命令。该命令将使用指定的playbook文件来执行自动化任务。以下是启动任务的基本语法:

ansible-playbook <playbook_file>

其中,<playbook_file>是要执行的playbook文件的路径。可以使用绝对路径或相对路径。

要配置一个role,可以按照以下步骤进行:

  1. 创建一个名为roles的目录,作为roles的根目录。该目录应该与playbook文件在同一级。

  2. roles目录下创建一个新的角色目录,在此处设置角色的名称。例如,可以创建一个名为webserver的目录:

    roles/└── webserver/
    
  3. 在角色目录中,创建以下目录和文件结构:

    roles/└── webserver/├── tasks/│   └── main.yml├── handlers/│   └── main.yml├── vars/│   └── main.yml├── files/└── templates/
    
    • tasks目录:包含角色的主要任务文件,通常名为main.yml
    • handlers目录:包含角色的处理程序文件,用于处理特定事件的触发。
    • vars目录:包含角色的变量文件,用于定义角色的变量。
    • files目录:包含角色需要使用的文件。
    • templates目录:包含角色需要使用的模板文件。
  4. main.yml文件中,定义该角色的任务。可以使用Ansible模块和任务语句来描述任务的操作。例如:

    - name: Install Apacheapt:name: apache2state: present- name: Start Apacheservice:name: apache2state: startedenabled: yes
    

    这是一个简单的示例,其中安装了Apache包并启动了Apache服务。

  5. 在playbook文件中,使用角色的名称来调用它。例如:

    - name: My Playbookhosts: allroles:- webserver
    

    在此示例中,我们调用了名为webserver的角色,该角色将在所有主机上执行。

这样,就可以在playbook中使用roles来组织和管理任务。每次执行playbook时,都会调用相应的角色,并执行其定义的任务。

1、使用ansible playbook远程部署docker、httpd、nginx、mysql

和#2在一起

2、编写一个安装并且运行httpd的playbook,该playbook可以在执行命令时指定被控端主机,要求每台机上的httpd首页内容为该主机的主机名、IP地址、子网掩码、网关信息

---
- hosts: gr1remote_user: roottasks:- name: add yum repocopy:src: ./docker-ce.repodest: /etc/yum.repos.d/docker-ce.repobecome: true- name: yumlist reflashyum:name: yum-utilsupdate_cache: yes- name: install dockeryum:name:- docker-ce-cli-20.10.18- docker-ce-20.10.18- containerd.iostate: present- name: install nginxyum:name: nginxstate: present- name: install mysqlyum:name: mysqlstate: present- name: change docker daemon.jsoncopy:content: |{"insecure-registries": ["192.168.99.130:5000"],"registry-mirrors": ["https://docker.1panel.live"]}dest: /etc/docker/daemon.jsonbecome: true- name: start dockerservice:name: dockerstate: started
- hosts: gr1remote_user: roottasks:- name: install httpdyum:name: httpdstate: present- name: index writecopy:content: 'Hostname "{{ ansible_fqdn }}" and IP "{{ansible_ens33.ipv4.address }}" and mask "{{ansible_ens33.ipv4.netmask }}" and gateway "{{ansible_default_ipv4.gateway }}"'dest: /var/www/html/index.htmlbecome: true- name: restart httpdservice:name: httpdstate: restarted

在这里插入图片描述

3、使用ansible远程部署docker nginx容器

yum install -y python3
pip3 install docker
---
- hosts: gr1remote_user: roottasks:- name: docker run nginxdocker_container:name: nginximage: nginx:lateststate: startedports:- "81:80"volumes:- /var/www/html:/usr/share/nginx/html

或者

ansible gr1 -m shell -a "docker run -d -p 81:80 nginx" 

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于STM32开发的智能家居安防系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化传感器数据采集与处理安防控制与报警机制Wi-Fi通信与远程监控应用场景 家庭安防系统办公室与商铺的安全监控常见问题及解决方案 常见问题解决方案结论 1. 引言 随着智能家居技术的…

WPF 动画 插值动画、关键帧动画、路径动画

WPF动画&#xff0c;分为三种&#xff1a;插值动画、关键帧动画、路径动画 2.1 插值动画&#xff1a;     1&#xff09;定义&#xff1a;插值动画是指&#xff0c;属性值从某一个值&#xff0c;经过一段时间后&#xff0c;连续变化值另一个值的动画。         例…

Nginx服务器申请及配置免费SSL证书

免费SSL证书申请 背景&#xff1a; 我的情况是这样&#xff0c;域名解析是华为云的&#xff0c;然后免费证书在腾讯云申请。但是大致的配置流程都是一样的 在腾讯云平台申请免费的SSL证明(目前有效期是90天)&#xff0c;申请步骤如下 主要步骤说明 申请免费SSL证书根据申请时说…

一码当鲜-001 这段代码是做什么?

一码当鲜 你能看出来吗&#xff1f; 1. 分页支持 2. RBC 权限申明 源自 ApiHug - API Design & Develop New Paradigm.ApiHug - API Design & Develop New Paradigm.https://apihug.com/

vue一键打不同环境的包

1.配置package.json 主要看的是 "build:all": "vue-cli-service build && vue-cli-service build --mode test && vue-cli-service build --mode development", "scripts": {"dev": "vue-cli-service serve"…

共享电动单车管理系统 ---附源码131016

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于共享电动单车管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了共享电动单车管理系统&#xff0c;它彻底…

网站怎么做敏感词过滤,敏感词过滤的思路和实践

敏感词过滤是一种在网站、应用程序或平台中实现内容审查的技术&#xff0c;用于阻止用户发布包含不适当、非法或不符合政策的内容。我们在实际的网站运营过程中&#xff0c;往往需要担心某些用户发布的内容中包含敏感词汇&#xff0c;这些词汇往往会导致我们的网站被用户举报&a…

Matlab2021b通过CNN、CNN-LSTM模型实现对声音信号的二分类与四分类

1、利用Matlab2021b训练CNN、CNN-LSTM模型&#xff0c;对采集的一维时序信号进行分类二分类与四分类 2. 声音信号每个样本数据长度3001个采样点&#xff0c;对其进行归一化处理 3、CNN时序信号多分类执行结果截图 3.1 二分类&#xff1a; CNN模型&#xff1a; 训练集损失值…

编译 onigmo 库

onigmo github: https://github.com/k-takata/Onigmo 测试环境&#xff1a;Windows 我编译库时习惯于在 vs code 下 git clone 文件后&#xff0c;再执行相应的编译操作 而 vs code 提供的终端一般是 git bash 和 powershell 在编译 windows 下运行的库》.lib 和 .dll 不能直接…

利用keepalived达成服务高可用

官方网站Keepalived for Linux 1.keepalived简介 vrrp 协议的软件实现&#xff0c;原生设计目的为了 高可用 ipvs 服务 功能&#xff1a; 基于 vrrp 协议完成地址流动 为 vip 地址所在的节点生成 ipvs 规则 ( 在配置文件中预先定义 ) 为 ipvs 集群的各 RS 做健康状态检测 …

从零开始学cv-5: 图像的仿射变换

文章目录 一&#xff0c;简介&#xff1a;二&#xff0c;图像仿射变换详解2.1&#xff0c;图像平移&#xff1a;2.2 &#xff0c;图像旋转&#xff1a;2.3&#xff0c;仿射变换&#xff1a; 一&#xff0c;简介&#xff1a; 仿射变换&#xff08;Affine Transformation 或 Aff…

校园综合服务小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;卖家管理&#xff0c;发布信息管理&#xff0c;订单信息管理&#xff0c;类型管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;发布信息&#xff0…

webm格式怎么转换成mp4?7个有效方法将webm转mp4

在数字媒体的浩瀚宇宙中&#xff0c;视频格式的多样性犹如繁星点点&#xff0c;既点亮了创意的火花&#xff0c;也铺设了内容分享的广阔道路。每一种视频格式都承载着其独特的技术优势与设计初衷&#xff0c;WebM便是其中一颗璀璨的新星&#xff0c;专为优化网络传输而生。它凭…

【C++从练气到飞升】14---深入浅出继承

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书&#x1f389; 目录 ⛳️推荐 一、继承的概念及定义 1.1 继承的概念 1.2 继承定义 1.2.1 定义格式 1.2.2 继承方式和访问限定符…

C语言—指针(2)

目录 一、数组名的理解 二、使用指针访问数组 三、一维数组传参的本质 四、冒泡排序 五、二级指针 六、指针数组 七、字符指针变量 八、数组指针变量 &#xff08;8.1&#xff09;什么是数组指针变量 &#xff08;8.2&#xff09;数组指针变量的初始化 九、二维数组传…

【工业机器人】工业异常检测大模型AnomalyGPT

AnomalyGPT 工业异常检测视觉大模型AnomalyGPT AnomalyGPT: Detecting Industrial Anomalies using Large Vision-Language Models AnomalyGPT是一种基于大视觉语言模型&#xff08;LVLM&#xff09;的新型工业异常检测&#xff08;IAD&#xff09;方法。它利用LVLM的能力来理…

企业级WEB应用服务器TOMCAT

目录 一、WEB技术 1.1 HTTP协议和B/S 结构 1.2 前端三大核心技术 1.2.1 HTML 1.2.2 CSS&#xff08;Cascading Style Sheets&#xff09;层叠样式表 二、WEB框架 2.1 web资源和访问 2.2 后台应用架构 2.2.1 单体架构 2.2.2 微服务 2.2.3 单体架构和微服务比较 三、t…

springboot社区疫情返乡管控系统--论文源码调试讲解

第2章 开发环境与技术 本章节对开发社区疫情返乡管控系统管理系统需要搭建的开发环境&#xff0c;还有社区疫情返乡管控系统管理系统开发中使用的编程技术等进行阐述。 2.1 MySQL数据库 MySQL是一种具有安全系数、安全系数、混合开发性、高效化等特征的轻量关联数据库智能管…

最新动态鲨鱼导航网引导页html源码

源码介绍 最新动态鲨鱼导航网引导页html源码 源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 https://download.csdn.net/download/h…

鸿蒙HarmonyOS开发:用户通知服务Noification的详细使用指南

文章目录 一、Notification Kit简介二、能力范围三、业务流程四、通知样式&#xff1a;五、约束限制六、开发步骤6.1、导入模块。6.2、构造NotificationRequest对象&#xff0c;并发布通知。6.2.1、普通文本类型。6.2.2、长文本类型。6.2.3、多行文本类型。 6.3、为通知添加行为…