自动化之ansible(二)

news2025/2/22 5:03:13

一、ansible中playbook(剧本)

官方文档:

Ansible playbooks — Ansible Community Documentation

1、playbook的基本结构

一个基本的playbook由以下几个主要部分组成

hosts: 定义要执行任务的主机组或主机。
become: 是否需要使用超级用户权限(如 sudo)。
vars: 在 Playbook 中定义变量。

tasks: 任务列表,指定要执行的操作。

注:playbook:由一个play或者多个play组成,一个paly可以包含多个task任务

ansible中playbook的文件结尾是.yml格式后缀

示例:

---
- name: Playbook名称
  hosts: 主机组
  become: true  # 是否需要使用管理员权限(sudo)
  vars:  # 可选部分,定义变量
    variable_name: value
  tasks:  # 任务列表
    - name: 任务1名称
      module_name:  # Ansible模块名称
        parameter1: value1
        parameter2: value2
    - name: 任务2名称
      module_name:
        parameter1: value1


name: Playbook或Play的名称,通常用于描述Playbook的作用。
hosts: 要运行任务的主机组。可以是inventory中定义的主机组,也可以是单个主机(如localhost)
become: 设为true时,任务将以管理员权限(sudo)执行。
vars: 定义变量,在Playbook中全局可用。
tasks: 包含一个或多个任务,每个任务由名称和模块组成。每个任务都会通过特定的模块来执行指定的操作。

2、安装和启动nginx

[master-61 root ~/playbook] # cat nginx.yml 
---
- name: install nginx
  hosts: web
  become: true
  tasks:
    - name: install nginx
      yum:
        name: nginx
        state: present
    - name: start nginx
      service:
        name: nginx
        state: started
        enabled: true

 在执行playbook脚本时报错了如下:

web7主机出现系统的文件系统被挂载为只读模式,导致没法执行yml脚本

解决方法:登录上web-7主机,将文件系统重新挂载为读写模式

检查文件系统的挂载状态,确认是否为只读模式
[web-7 root ~] # mount | grep ' / '
/dev/mapper/centos-root on / type xfs (ro,relatime,attr2,inode64,noquota)

ro 表示只读,这就意味着文件系统被挂载为只读模式



重新挂载为读写模式,重新挂载根文件系统(/)为读写模式
[web-7 root ~] # mount -o remount,rw /
[web-7 root ~] # df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 979M     0  979M   0% /dev
tmpfs                    991M     0  991M   0% /dev/shm
tmpfs                    991M  9.5M  981M   1% /run
tmpfs                    991M     0  991M   0% /sys/fs/cgroup
/dev/mapper/centos-root   37G  2.1G   35G   6% /
/dev/sda1               1014M  140M  875M  14% /boot
tmpfs                    199M     0  199M   0% /run/user/0
[web-7 root ~] # ls /root/
anaconda-ks.cfg  .bash_history    .bash_profile    .cshrc           .pki/            .tcshrc
.ansible/        .bash_logout     .bashrc          network.sh       .ssh/            .viminfo

重新执行playbook

先执行命令检查一下是否正常
[master-61 root ~/playbook] # ansible-playbook -C nginx.yml 

PLAY [install nginx] **********************************************************************************

TASK [Gathering Facts] ********************************************************************************
ok: [172.16.1.7]

TASK [install nginx] **********************************************************************************
changed: [172.16.1.7]

TASK [start nginx] ************************************************************************************
changed: [172.16.1.7]

PLAY RECAP ********************************************************************************************
172.16.1.7                 : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
  

执行剧本

[master-61 root ~/playbook] # ansible-playbook nginx.yml 

PLAY [install nginx] **********************************************************************************

TASK [Gathering Facts] ********************************************************************************
ok: [172.16.1.7]

TASK [install nginx] **********************************************************************************
changed: [172.16.1.7]

TASK [start nginx] ************************************************************************************
changed: [172.16.1.7]

PLAY RECAP ********************************************************************************************
172.16.1.7                 : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

验证web-7机器是否安装启动成功

二、ansible中roles角色

1、roles介绍

roles相当于是在ansible中playbooks的目录组织结构。它可以将任务(tasks)、变量(vars)、文件(files)、模板(templates)、处理器(handlers)、默认值(defaults)、以及其他资源分组到一个单独的目录中,提升代码的可维护性。

2、roles目录结构如下

my_role/
├── defaults/
│   └── main.yml          # 默认变量
├── files/                # 存放静态文件
├── handlers/
│   └── main.yml          # 任务完成后的处理器
├── meta/
│   └── main.yml          # 角色的元数据,例如依赖关系
├── tasks/
│   └── main.yml          # 主要的任务文件
├── templates/            # 存放 Jinja2 模板文件
├── tests/
│   └── test.yml          # 测试脚本
└── vars/
    └── main.yml          # 存放变量

每个目录的用途如下:

defaults/main.yml:定义角色的默认变量,变量值可以被 Playbook 或其它角色覆盖。
files/:存放一些静态的文件,可以通过 copy 或 template 模块来部署到目标主机。
handlers/main.yml:用于定义触发特定条件时执行的处理器。通常是服务的重启、重载等操作。
meta/main.yml:描述角色的元数据,如角色的依赖关系、作者信息等。
tasks/main.yml:包含角色的任务,定义了这个角色执行的具体工作。
templates/:存放 Jinja2 模板文件。你可以在角色中使用模板来动态生成文件。
tests/test.yml:用于测试角色是否正常工作,通常会包含一些验证任务,确保角色行为符合预期。
vars/main.yml:存放角色的变量,这些变量在 Playbook 中可以覆盖。

3、创建roles角色

命令:ansible-galaxy init 角色名

(11:04:31)[master-61 root /etc/ansible/roles] # ansible-galaxy init my_role
- Role my_role was created successfully
(11:04:35)[master-61 root /etc/ansible/roles] # 
(11:04:38)[master-61 root /etc/ansible/roles] # tree my_role/
my_role/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

8 directories, 8 files

4、使用roles角色

roles角色的执行流程:

定义tasks任务 --> 定义jinja2模板,作为配置文件用 --> 定义变量 --> 定义触发 --> 定义roles的yml文件 -->检查yml语法 --> 执行roles.yml文件 --> 查看nginx服务启动状态

4.1定义任务,在task/main.yml文件中定义任务

(14:45:56)[master-61 root /etc/ansible/roles/nginx] # cat tasks/main.yml 

---
- name: "Install wget"
  yum:
    name: "wget"
    state: "present"

- name: "Download nginx package"
  get_url:
    url: "http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.18.0-1.el7.ngx.x86_64.rpm"
    dest: "/etc/ansible/roles/nginx/files/"
- name: "Copy nginx package to /tmp"
  copy:
    src: "nginx-1.18.0-1.el7.ngx.x86_64.rpm"
    dest: "/tmp/nginx-1.18.0-1.el7.ngx.x86_64.rpm"

- name: "Install nginx from rpm package"
  yum:
    name: "/tmp/nginx-1.18.0-1.el7.ngx.x86_64.rpm"
    state: "latest"

- name: "Configure nginx"
  template:
    src: "nginx.conf.j2"
    dest: "/etc/nginx/nginx.conf"
  tags:
    - "nginxconf"
  notify:
    - "Reload nginx configuration"

- name: "Start nginx service"
  service:
    name: "nginx"
    state: "started"
    enabled: true

4.2 定义templates生成配置文件

(16:23:43)[master-61 root /etc/ansible/roles/nginx] # cat templates/nginx.conf.j2 
user nginx;  # 设置 Nginx 服务的系统使用用户
worker_processes {{ ansible_processor_vcpus }};  # 工作进程数

error_log /var/log/nginx/error.log warn;  # Nginx 的错误日志
pid /var/run/nginx.pid;  # Nginx 启动时的 PID

events {
    worker_connections 1024;  # 每个进程允许的最大连接数
}

http {  # HTTP 请求配置,一个 http 可以包含多个 server
    include /etc/nginx/mime.types;  # 定义 Content-Type
    default_type application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status $body_bytes_sent "$http_referer" '
                   '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;  # 访问日志

    sendfile on;  # 高效文件传输
    keepalive_timeout 65;  # 客户端与服务端的超时时间

    server {  # HTTP 服务,一个 server 可以配置多个 location
        listen {{ nginx_config.nginx_port }};  # 服务监听端口
        server_name localhost;  # 主机名、域名

        location / {
            root /usr/share/nginx/html;  # 页面存放目录
            index index.html index.htm;  # 默认页面
        }

        error_page 500 502 503 504 /50x.html;  # 错误页面重定向
        location = /50x.html {
            root /usr/share/nginx/html;  # 页面存放的目录
        }
    }

    include /etc/nginx/conf.d/*.conf;  # 包含其他配置文件
}

4.3定义变量,在vars/main.yml文件中定义变量

(14:49:48)[master-61 root /etc/ansible/roles/nginx] # vim  vars/main.yml 
---
nginx_config:
  nginx_port:888

4.4 定义触发

(16:25:55)[master-61 root /etc/ansible/roles/nginx] # cat handlers/main.yml 
---
- name: reload new config 
  service: 
    name: nginx
    statr: restarted

4.5定义剧本文件

(16:26:42)[master-61 root /etc/ansible/roles/nginx] # cat roles.yml 
- hosts: web
  remote_user: root
  roles: 
    - nginx

4.6 检查yml文件语法是否正确,如果报错需要检查对应配置文件

(16:27:11)[master-61 root /etc/ansible/roles/nginx] # ansible-playbook --syntax-check roles.yml 

playbook: roles.yml

4.7 执行roles.yml文件

(10:48:31)[master-61 root /etc/ansible/roles/nginx] # ansible-playbook roles.yml 

PLAY [web] ********************************************************************************************

TASK [Gathering Facts] ********************************************************************************
ok: [172.16.1.8]
ok: [172.16.1.7]

TASK [nginx : Install wget] ***************************************************************************
ok: [172.16.1.7]
ok: [172.16.1.8]

TASK [Download nginx package] *************************************************************************
ok: [172.16.1.7]
ok: [172.16.1.8]

TASK [Install nginx from rpm package] *****************************************************************
ok: [172.16.1.7]
ok: [172.16.1.8]

TASK [Configure nginx] ********************************************************************************
changed: [172.16.1.7]
changed: [172.16.1.8]

TASK [Start nginx service] ****************************************************************************
changed: [172.16.1.7]
changed: [172.16.1.8]

PLAY RECAP ********************************************************************************************
172.16.1.7                 : ok=6    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
172.16.1.8                 : ok=6    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

4.8 检查服务启动状态

web-7和web-8中nginx服务都正常启动

网页访问也正常

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

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

相关文章

QSNCTF-WEB做题记录

第一题&#xff0c;文章管理系统 来自 <天狩CTF竞赛平台> 描述&#xff1a;这是我们的文章管理系统&#xff0c;快来看看有什么漏洞可以拿到FLAG吧&#xff1f;注意&#xff1a;可能有个假FLAG哦 1&#xff0c;首先观察题目网站的结构和特征 这个一个文件管理系统&#x…

Ruoyi-Vue 3.8.7集成积木报表JmReport和积木大屏JimuBI

Ruoyi-Vue 3.8.7集成积木报表JmReport和积木大屏JimuBI 一、版本 RuoYi-Vue版本&#xff1a;v3.8.7 JMreport报表版本&#xff1a; v1.9.4 JimuBI大屏版本&#xff1a;V1.9.4 二、数据库 积木数据库sql 下载后&#xff0c;使用数据库管理工具执行sql脚本&#xff0c;将需…

亲测可用,IDEA中使用满血版DeepSeek R1!支持深度思考!免费!免配置!

作者&#xff1a;程序员 Hollis 之前介绍过在IDEA中使用DeepSeek的方案&#xff0c;但是很多人表示还是用的不够爽&#xff0c;比如用CodeChat的方案&#xff0c;只支持V3版本&#xff0c;不支持带推理的R1。想要配置R1的话有特别的麻烦。 那么&#xff0c;今天&#xff0c;给…

jvm中各个参数的理解

MEMORY - MANAGERS 定义 MEMORY - MANAGERS即内存管理器&#xff0c;它是操作系统或软件系统中负责管理计算机内存资源的组件。从本质上来说&#xff0c;它是一种软件机制&#xff0c;旨在协调计算机系统中内存的分配、使用和回收等操作&#xff0c;确保系统能够高效、稳定地…

【队列】循环队列(Circular Queue)详解

文章目录 一、循环队列简介二、循环队列的判空和判满三、循环队列的实现leetcode 622. 设计循环队列 一、循环队列简介 在实际开发中&#xff0c;队列是一种常用的数据结构&#xff0c;而循环队列&#xff08;Circular Queue&#xff09;则一般是一种基于数组实现的队列&#x…

DeepSeek掀起推理服务器新风暴,AI应用迎来变革转折点?

AI 浪潮下&#xff0c;推理服务器崭露头角 在科技飞速发展的当下&#xff0c;AI 是耀眼明星&#xff0c;席卷各行业&#xff0c;深刻改变生活与工作模式&#xff0c;从语音助手到医疗诊断、金融风险预测&#xff0c;AI 无处不在。其发展分数据收集整理、模型训练、推理应用三个…

Vue 项目中逐步引入 TypeScript 的类型检查

在现有的 Vue 项目中逐步引入 TypeScript 的类型检查 本文源于一道面试题&#xff1a;注&#xff1a;两种问法一个意思哈&#xff01;&#xff01; 问题一&#xff1a;“ 老项目Js写的&#xff0c;如何轻量方式享受 ts 类型&#xff1f;” 问题二&#xff1a;“如何 在现有的 …

Git企业开发

Git&#xff08;版本控制器&#xff09; 在我们对于文档进行操作的时候&#xff0c;很多时候可能会出现多个文档&#xff0c;对这些文档进行多个版本的保存和记录就变成必要的。通俗的讲&#xff0c;就是记录每次的修改和记录版本迭代的管理系统。目前最主流的版本控制器就是G…

DeepSeek预测25考研分数线

25考研分数马上要出了。 目前&#xff0c;多所大学已经陆续给出了分数查分时间&#xff0c;综合往年情况来看&#xff0c;每年的查分时间一般集中在2月底。 等待出成绩的日子&#xff0c;学子们的心情是万分焦急&#xff0c;小编用最近爆火的“活人感”十足的DeepSeek帮大家预…

基于springboot校园健康系统的设计与实现(源码+文档)

大家好我是风歌&#xff0c;今天要和大家聊的是一款基于springboot的园健康系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于springboot校园健康系统的设计与实现的主要使用者管理员具有最高的权限&#xff0c;通…

【YOLOv8】损失函数

学习视频&#xff1a; yolov8 | 损失函数 之 5、类别损失_哔哩哔哩_bilibili yolov8 | 损失函数 之 6、定位损失 CIoU DFL_哔哩哔哩_bilibili 2.13、yolov8损失函数_哔哩哔哩_bilibili YOLOv8 的损失函数由类别损失和定位损失构成 类别损失&#xff1a;BCE Loss 定位损失…

【Linux】【网络】Libevent 内部实现简略版

【Linux】【网络】Libevent 内部实现简略版 1 event_base结构–>相当于Reactor 在使用libevent之前&#xff0c;就必须先创建这个结构。 以epoll为例&#xff1a; 1.1evbase void* evbase-->epollop结构体&#xff08;以epoll为例&#xff09; libevent通过一个void…

计算机网络抄手 运输层

一、运输层协议概述 1. 进程之间的通信 从通信和信息处理的角度看&#xff0c;运输层向它上面的应用层提供通信服务&#xff0c;它属于面向通信部分的最高层&#xff0c;同时也是用户功能中的最低层。当网络边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时&…

MATLAB图像处理:图像分割方法

图像分割将图像划分为具有特定意义的子区域&#xff0c;是目标检测、医学影像分析、自动驾驶等领域的核心预处理步骤。本文讲解阈值分割、边缘检测、区域生长、聚类分割、基于图的方法等经典与前沿技术&#xff0c;提供MATLAB代码实现。 目录 1. 图像分割基础 2. 经典分割方…

【VSCode】MicroPython环境配置

【VSCode】MicroPython环境配置 RT-Thread MicroPython 插件安装MicroPython 库文件配置结束语 RT-Thread MicroPython 插件安装 在 VSCode 拓展中搜索 “RT-Thread MicroPython” 并安装&#xff0c;详细配置步骤&#xff08;修改 VSCode 默认终端、MicroPython 代码补全&…

【python】网页批量转PDF

安装wkhtmltopdf 网站&#xff1a;wkhtmltopdf wkhtmltopdf http://www.baidu.com/ D:website1.pdf 安装pdfkit库 pip install pdfkit 批量转换代码 import os import pdfkit path_wkthmltopdf rE:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe config pdfkit.configu…

基于Flask的租房信息可视化系统的设计与实现

【Flask】基于Flask的租房信息可视化系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 随着互联网的快速发展&#xff0c;租房市场日益繁荣&#xff0c;信息量急剧增加&#xff…

Scrapy安装,创建Scrapy项目,启动Scrapy爬虫

Scrapy安装&#xff0c;创建Scrapy项目&#xff0c;启动Scrapy爬虫 1. 安装 Python2. 安装 Scrapy3. 验证安装4. 创建 Scrapy 项目5. 启动爬虫5.1 示例 总结 Scrapy 的安装方式比较简单&#xff0c;下面是基于 Python 环境的安装流程&#xff1a; 1. 安装 Python 首先&#x…

C++项目:高并发内存池_上

目录 1. 项目介绍 2. 内存池概念 2.1 池化技术 2.2 内存池和内存碎片 2.3 细看malloc 3. 定长内存池的实现 ObjectPool.hpp 4. 高并发内存池框架 5. thread cache测试 5.1 thread cache框架 5.2 ConcurrentAlloc.hpp 6. central cache测试 6.1 central cache框架 …

手机控制电脑远程关机

远程看看软件兼容iOS和Android设备&#xff0c;该软件除了能通过电脑远程关闭另一台电脑外&#xff0c;您还可以通过它在手机上远程关闭公司的电脑。您可以按照以下步骤进行操作以实现电脑远程关机&#xff1a; 步骤1.在手机应用商店搜索“远程看看”进行软件安装&#xff0c;…