星途物语 星途物语
首页
  • 随手记录
  • 故障处理
  • Nginx
  • MySQL
  • Ansible
  • Nexus
  • Tomcat
  • Docker
  • Zabbix
  • Prometheus
  • Git
  • GitLab
  • Jenkins
  • Kubernetes
  • Shell
  • Python
  • 圈圈空间
  • 做饭这件事
收藏站点
留言板
归档
GitHub (opens new window)

星途物语

尚记时,记之
首页
  • 随手记录
  • 故障处理
  • Nginx
  • MySQL
  • Ansible
  • Nexus
  • Tomcat
  • Docker
  • Zabbix
  • Prometheus
  • Git
  • GitLab
  • Jenkins
  • Kubernetes
  • Shell
  • Python
  • 圈圈空间
  • 做饭这件事
收藏站点
留言板
归档
GitHub (opens new window)
  • 随手记录

    • QPS优化记录
    • 阿里云SLB演示
    • DDOS预防
    • Linux内核优化
    • rsync同步守护进程
    • NFS文件同步
    • Tomcat升级
    • 编译安装mysql后添加到systemd管理
    • 防火墙笔记
    • python自动化巡检服务器
  • 故障处理

    • 处理防MIME攻击后出现的问题解决
  • MySQL学习笔记

    • MySQL5.7安装
    • MySQL常用操作语句
    • MySQL主从架构实施
    • MySQL主主架构实施
    • MySQL MHA高可用实施
    • MyCat读写分离
    • MySQL创建用户时的授权
    • MySQL备份
    • MySQL通配符
  • Nginx学习笔记

    • 状态码含义
    • 匹配优先级
    • Nginx常用操作
    • 添加第三方模块
    • 关于路径匹配
    • 转发和重写
    • 内置变量
    • Nginx配置文件结构
  • Tomcat学习笔记

    • 部署Tomcat
    • 修改发布目录
    • Tomcat调优
  • Redis学习笔记

    • 通过 tar.gz 包安装部署 redis
    • redis 配置文件
    • 哨兵集群
    • redis常用命令
    • 虚拟机安装 redis.tar.gz 遇到的问题
  • Ansible学习笔记

    • 部署和使用 ansible
    • ansible 自带的密码认证参数
    • 批量免密操作:批量分发公钥
    • 配置主机清单
    • ansible 小知识
    • 模块介绍
    • 剧本
      • 一键部署 rsync 环境
      • 批量安装一个tomcat
      • 批量安装一个nginx
      • 批量安装 zabbix-agent
    • Zabbix学习笔记

      • 部署 zabbix 服务端、客户端
      • 自定义监控
      • 触发器
      • 监控项类型
      • 简单检查模式
      • zabbix web 界面结构信息
      • 邮件报警
      • 微信报警
      • snmp 监控网络设备
      • 部署 zabbix 服务端、客户端
      • jmx 监控 java 应用
      • ipmi 监控硬件
      • 自动化注册
      • 监控项的主要项和相关项
      • percona 监控 mysql
    • Git学习笔记

      • 配置 git
      • 常用命令
    • GitLab学习笔记

      • 环境准备
      • 安装 gitlab
      • gitlab 忘记 root 管理员密码的处理办法
    • Jenkins学习笔记

      • 安装部署
      • jenkins 使用脚本完成项目构建
      • jenkins 自动构建最新项目
      • 将 jenkins 自动部署的结果返回给 gitlab
      • jenkins 上线 java 项目
      • jenkins pipeline
    • Docker学习笔记

      • 安装 docker
      • 配置 docker 源
      • docker 中的常见名词
      • 镜像管理命令
      • 容器管理命令
      • 创建容器
      • 数据卷
      • docker network
      • 搭建 LNMP
      • Dockerfile
      • Dockerfile 搭建 tomcat
      • docker 镜像磁盘扩容
      • docker composer
      • Harbor 私有镜像仓库
      • docker 面试题
      • docker desktop 运行时与虚拟机冲突
      • docker离线安装
    • Nexus学习笔记
    • Prometheus学习笔记

      • 核心组件
      • 工作原理
      • 安装和配置
      • 启动 Prometheus
      • PromQL 使用
      • 数据模型
      • Exporter
      • 演示服务
      • Grafana 数据可视化
      • Prometheus 告警
    • Kubernetes学习笔记

      • K8S的介绍
      • K8S集群环境的搭建
      • K8S资源管理
      • K8S的实战入门
    • 运维
    • Ansible学习笔记
    星途物语
    2025-01-01
    目录

    剧本

    规划目录,将所有剧本全部放置在一起:mkdir /etc/ansible/ansible-playbook

    编写剧本:vim rsync_server.yaml

    检查剧本语法:ansible-playbook --syntax-check rsync_server.yaml

    模拟执行剧本:ansible-playbook -C rsync_server.yaml

    执行脚本:ansible-playbook rsync_server.yaml

    # 剧本调试

    在 ansible 剧本中,register 和 debug 是两个常用的功能

    register 用于将任务的输出结果保存到一个变量中,这样后续的任务可以引用这个变量的值

    - hosts: localhost
      tasks:
        - name: Check if a file exists
          stat:
            path: /etc/passwd
          register: file_info
    
        - name: Show file details
          debug:
            msg: "The file permissions are: {{ file_info.stat.mode }}"
    
    #stat 模块检查 /etc/passwd 文件的状态
    #register 将 stat 模块的结果保存到变量 file_info 中
    #之后可以通过 {{ file_info.stat.mode }} 访问文件的权限
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    debug 模块用于在执行剧本时打印出变量的值或信息,常用于调试和输出日志

    - hosts: localhost
      tasks:
        - name: Print a message
          debug:
            msg: "Hello, World!"
    
        - name: Show the registered variable
          debug:
            var: file_info
    
    #第一个 debug 任务简单打印 "Hello, World!"
    #第二个 debug 任务显示已注册的 file_info 变量的所有内容
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    register 和 debug 的结合

    可以先使用 register 存储任务的结果,然后使用 debug 模块来查看该结果,方便进行调试

    - hosts: localhost
      tasks:
        - name: Ping the local host
          ping:
          register: ping_result
    
        - name: Show the ping result
          debug:
            var: ping_result
    
    #ping 模块执行后,结果被保存到 ping_result 中
    #debug 模块打印出 ping_result 变量的值,帮助你查看 ping 的执行结果
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 剧本设置变量

    变量设置后优先级:命令行变量设置 > 剧本中的变量设置 > 主机清单变量设置

    局部变量

    可以在剧本的 vars 块中定义变量,这些变量仅在该剧本中有效

    这里定义了两个变量 my_variable 和 package_name,在任务中使用 的格式来引用它们

    - hosts: all
      vars:
        my_variable: "Hello World"
        package_name: "httpd"
      tasks:
        - name: Install package
          yum:
            name: "{{ package_name }}"
            state: present
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    通过 vars_files 引入外部变量文件

    在 vars/main.yml 文件中

    package_name: "httpd"
    
    1
    - hosts: all
      vars_files:
        - vars/main.yml
      tasks:
        - name: Install package
          yum:
            name: "{{ package_name }}"
            state: present
    
    1
    2
    3
    4
    5
    6
    7
    8

    全局变量

    在剧本中使用 vars 块直接定义变量,这样定义的变量对所有主机都有效

    - hosts: all
      vars:
        global_variable: "This is a global variable"
    
      tasks:
        - name: Print the global variable
          debug:
            msg: "{{ global_variable }}"
    
    1
    2
    3
    4
    5
    6
    7
    8

    在这个例子中,global_variable 变量在所有 hosts 中都可以使用

    你可以将变量存储在外部文件中,并通过 vars_files 引入

    vars/global_vars.yml 文件内容

    global_variable: "This is a global variable from file"
    
    1
    - hosts: all
      vars_files:
        - vars/global_vars.yml
    
      tasks:
        - name: Print the global variable
          debug:
            msg: "{{ global_variable }}"
    
    1
    2
    3
    4
    5
    6
    7
    8

    你也可以通过 group_vars/all.yml 或 host_vars/all.yml 文件来定义全局变量

    Ansible 会自动加载这些文件中的变量

    group_vars 是 Ansible 的一种组织变量的机制,用于在多个主机或主机组之间共享变量

    在 ansible 项目目录下,创建一个名为 group_vars 的目录

    在 group_vars 目录下创建一个文件,比如 all.yml,这样文件中的变量会对所有主机生效

    在 group_vars/all.yml 文件中定义你希望所有主机都共享的变量。all 代表应用于所有主机的变量组

    在主机文件中定义变量

    可以在 Ansible 的主机文件中为特定主机或组定义变量

    这样,每个主机有各自的 package_name 变量

    [webservers]
    192.168.1.1 ansible_user=root package_name=httpd
    192.168.1.2 ansible_user=root package_name=nginx
    
    1
    2
    3

    通过命令行传递变量

    可以在执行 Ansible 时通过命令行传递变量

    ansible-playbook playbook.yml --extra-vars "package_name=httpd"
    
    1

    在剧本中:

    - hosts: all
      tasks:
        - name: Install package
          yum:
            name: "{{ package_name }}"
            state: present
    
    1
    2
    3
    4
    5
    6

    临时变量

    可以使用 set_fact 来定义任务内的临时变量

    - hosts: all
      tasks:
        - name: Set a temporary variable
          set_fact:
            my_temp_variable: "temp_value"
    
        - name: Use the temporary variable
          debug:
            msg: "{{ my_temp_variable }}"
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #Ansible
    模块介绍
    一键部署 rsync 环境

    ← 模块介绍 一键部署 rsync 环境→

    Theme by Vdoing | Copyright © 2025-2025 | 鄂ICP备2024086820号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式