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

Ansible-role角色

将剧本功能进行拆分成不同组件;

每个组件只完成一项简单任务;

复杂任务通过组合多个组件来实现;

优点:灵活、低耦合(关联性低)、高复用;

缺点:编写的复杂性高,对技术要求高;

创建roles的目录结构

files:用来存放由copy模块或script模块调用的文件。
tasks:至少有一个main.yml文件,定义各tasks。
handlers:有一个main.yml文件,定义各handlers。
templates:用来存放jinjia2模板。
vars:有一个main.yml文件,定义变量。
meta:有一个main.yml文件,定义此角色的特殊设定及其依赖关系。

这个案例的目标是:在远程服务器上创建一个特定的目录复制一个静态文件到该目录下。

通过这个案例,你将学会如何组织 Role 的目录结构,以及如何在 Playbook 中引用它。

目标

  1. 在所有目标服务器上创建 /data/web 目录。
  2. 从控制机复制一个 index.html 文件到远程服务器的 /data/web/ 目录下。

步骤 1: 创建 Role 的目录结构

Ansible Role 有一个严格的目录结构。首先,我们需要在你的工作目录下创建这个结构。

  1. 首先,创建一个存放你所有 Roles 的目录,通常命名为 roles
  2. 然后,在 roles 目录下,为你的新 Role 创建一个目录,我们给它取名 web_content
  3. 在 web_content 目录下,创建 tasks 和 files 两个子目录。

执行以下命令来创建这个结构:

# 在你的工作目录下(例如 /root/ansible-project)
mkdir -p roles/web_content/tasks
mkdir -p roles/web_content/files

创建完成后,你的目录结构应该如下所示:

ansible-project/
└── roles/└── web_content/├── files/      # 存放需要复制到远程的静态文件└── tasks/       # 存放 Role 的主要任务

步骤 2: 编写 Role 的任务 (tasks)

任务是 Role 的核心。我们将在 tasks/main.yml 文件中定义要执行的操作。

创建并编辑 roles/web_content/tasks/main.yml 文件:

vim roles/web_content/tasks/main.yml

将以下内容粘贴到文件中:

# roles/web_content/tasks/main.yml# 任务1: 创建 /data/web 目录
- name: 创建网站根目录ansible.builtin.file:path: /data/webstate: directorymode: '0755'owner: rootgroup: root# 任务2: 复制 index.html 文件到远程服务器
- name: 复制主页文件到服务器ansible.builtin.copy:src: index.htmldest: /data/web/index.htmlmode: '0644'

解释:

  • name: 任务的描述,执行时会显示。
  • ansible.builtin.file: 使用 file 模块来确保一个目录存在。
  • ansible.builtin.copy: 使用 copy 模块来复制文件。注意 src: index.html 这里的路径是相对路径,Ansible 会自动在 roles/web_content/files/ 目录下寻找 index.html

步骤 3: 准备要复制的文件 (files)

现在,我们需要创建那个要被复制的 index.html 文件。

在 roles/web_content/files/ 目录下创建 index.html 文件:

vim roles/web_content/files/index.html

在文件中写入一些简单的内容:

<!DOCTYPE html>
<html>
<head><title>My Ansible Role Page</title>
</head>
<body><h1>Hello from Ansible Role!</h1><p>This page was deployed using an Ansible Role.</p>
</body>
</html>

步骤 4: 创建主 Playbook 来调用 Role

最后,我们需要一个主 Playbook 文件来告诉 Ansible 要在哪些主机上执行这个 web_content Role。

在你的项目根目录 (ansible-project/) 下创建一个 Playbook 文件,例如 deploy.yml

vim deploy.yml

将以下内容粘贴到文件中:

# deploy.yml- name: 部署静态网站内容hosts: group1  # 你的目标主机组,请根据你的 inventory 文件修改remote_user: root # 执行任务的用户roles:- role: web_content  # 引用我们刚刚创建的 web_content Role

解释:

  • hosts: group1: 指定在 group1 组中的所有服务器上执行。
  • roles:: 这是一个关键字,用于列出要执行的 Role。
  • - role: web_content: 告诉 Ansible 执行名为 web_content 的 Role。Ansible 会自动在 roles/ 目录下寻找这个 Role。

步骤 5: 运行 Playbook

现在,所有部分都已准备就绪。在你的项目根目录 (ansible-project/) 下,运行主 Playbook。

ansible-playbook deploy.yml

如果一切顺利,你将看到类似以下的输出,显示任务在所有节点上都成功执行了。

PLAY [部署静态网站内容] ************************************************************TASK [Gathering Facts] *********************************************************
ok: [node1]
ok: [node2]
ok: [node3]TASK [web_content : 创建网站根目录] *************************************************
changed: [node1]
changed: [node2]
changed: [node3]TASK [web_content : 复制主页文件到服务器] *********************************************
changed: [node1]
changed: [node2]
changed: [node3]PLAY RECAP *********************************************************************
node1                      : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

验证

你可以登录到任意一个目标节点(如 node1),检查文件是否已成功创建。

# 登录 node1
ssh root@node1# 检查目录是否存在
ls -ld /data/web# 检查文件内容是否正确
cat /data/web/index.html

你将看到 /data/web 目录和其中的 index.html 文件,内容正是你在控制机上编写的。

这个简单的案例完整地展示了 Ansible Role 的创建和使用流程。当你的自动化任务变得复杂时,使用 Role 可以让你的代码结构更清晰、更易于复用和维护。

剧本配yum源或apt源

剧本修改IP地址与主机名

剧本实现系统优化:设置时区、时间同步、更新软件、关闭防火墙、SELinux

剧本安装单机LNMP、LNMT

剧本安装集群:MySQL主从、redis哨兵

http://www.dtcms.com/a/474871.html

相关文章:

  • 网站设计 济南中国前500强企业排名
  • 网站开发入门书籍南京网站建设哪家好
  • 解决PyQt5资源模块导入错误:如何修复 ‘No module named ui_sources_rc’ 问题
  • 城市介绍网站模板西充县规划建设局网站
  • 彩票网站开发制作营销类的网站
  • Unity框架YouYouFramework学习第2篇:启动框架
  • wordpress站点赏析检察院网站建设方案
  • wordpress获取时间函数seo在网站制作
  • 计算机视觉(opencv)——基于 MediaPipe 的手势识别系统
  • 免费建网站代码网站登录超时怎么解决
  • 网站开发与管理对应的职业及岗位眉县网站开发
  • 网站建设销售求职东莞建设网住房保障专栏20批公示栏
  • 传统文本特征提取三巨头:TF-IDF、Word2Vec与FastText的深度对比
  • 网站开发怎么拉客户揭阳网站建设价格
  • 网站建设心得.doc网页架构
  • css `scrollbar-width` 渲染一个细滚动条甚至隐藏它,同时保持区域可滚动
  • 西安做网站的价格外贸网站宗旨
  • 晋江外贸网站开发国内精自视频品线一区
  • 网站模版的软件做网站一般注册哪几类商标
  • Golang 项目中使用 Swagger
  • 电子科技东莞网站建设百度经验实用生活指南
  • 网站私信界面站长之家seo查找
  • 领略算法真谛:求组合数
  • 企业网站建设费用会计科目哪些网站可以免费看剧
  • 自己做单词卡的网站是什么广州市外贸网站建设品牌
  • 【强化学习】#10 Actor-Critic:从QAC到A3C/A2C
  • 存储栈学习笔记
  • 廊坊网站快速排名优化域名更换网站
  • 个人网站制作程序南昌地宝网租房信息网
  • 一流的龙岗网站设计内网建设网站