第七篇:Ansible剧本、变量
剧本⭐⭐⭐⭐
- playbook文件:用于长久保存并实现批量管理、维护、部署的文件
- 脚本中存放变量和命令,剧本中存放变量和模块
- 剧本采用yaml序列化格式:冒号 空格(不按照该格式则报错)
剧本与点对点模式的异同 | ans剧本 | ans ad-hoc |
共同点 | 批量管理,使用模块 | 批量管理,使用模块 |
异同点 | 重复调用 | 临时执行 |
应用场景 | 部署多步骤任务 | 部署临时性任务,测试模块 |
剧本书写格式
剧本文件以.yml或.yaml结尾 # 执行剧本 ansible-playbook -i hosts /server/scripts/playbook/01.show.yml
可以将主机清单文件/ansible/hosts文件剪切到剧本文件中
剧本案例
- 报错分析
- 需要切换到主机清单文件的目录下
- -i 指定主机清单的绝对路径
案例01:批量创建目录/server/files/,且将/etc/hosts文件分发到/server/files/目录中
[root@m01 /server/scripts/playbook]# cat 01.show.yaml --- - hosts: all tasks: - name: 01 创建目录/server/files/ file: path: /server/files/ state: directory - name: 02 分发/etc/hosts文件到/server/files/目录中 copy: src: /etc/hosts dest: /server/files/
案例02:批量下载zabbix-agent软件包,安装并启动服务
[root@m01 /server/scripts/playbook]# cat 02.show.yaml --- - hosts: all tasks: - name: 01 下载软件包到/app/tools/ get_url: url: https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-agent-6.0.21-release1.el7.x86_64.rpm dest: /tmp/ - name: 02 安装zabbix软件包 yum: name: /tmp/zabbix-agent-6.0.21-release1.el7.x86_64.rpm state: present - name: 03 启动zabbix-agent服务 systemd: name: zabbix-agent enabled: yes state: started
案例03:部署sersync服务⭐⭐⭐⭐⭐
- 备份服务
- 安装服务
- 配置配置文件
- 添加虚拟用户
- 创建密码文件并修改其权限
- 创建共享目录并修改权限
- 启动服务
- 存储服务
- 安装服务
- 启动服务
- 配置文件
- 重启服务
- 创建共享目录并修改权限
- 挂载
- 实时同步服务
- 安装服务
- 解压压缩包
- 创建存放该服务的目录
- 启动服务
Ansible中的变量⭐⭐⭐⭐
Ansible中可以定义变量的地方 | 说明 |
剧本中定义变量 | 仅限于当前的剧本使用(常用) |
变量文件
根据主机清单分组进行变量的定义 |
常用于多个剧本使用相同的变量 |
register变量(注册变量) |
ip = `hostname -I` 实现脚本中反引号的功能,可以获取命令的结果 |
facts变量 | 一般用于获取主机基本信息 |
inventory主机清单中定义变量 | 批量修改主机使用(使用较少) |
剧本中定义变量⭐⭐⭐
[root@m01 /server/scripts/playbook]# cat 04.show.yaml --- - hosts: web vars: dir: /yuan/xiao/ tasks: - name: mkdir file: path: {{ dir }} state: directory # 温馨提示:如果使用的变量是某个选项的开头,则变量引用的时候需要加上双引号 dir: /yuan/xiao file: path: "{{ dir }}" # 该情况需要添加双引号 file: path: /etc-new/{{ dri }} # 该种情况不需要添加双引号
变量文件⭐⭐⭐
变量文件(公用变量)⭐⭐⭐
- 变量文件
# 变量文件 [root@m01 /server/scripts/playbook]# cat vars.yaml dir: /tmp/ file: yuan.txt user: yuanxiaojiang
- 剧本
# 剧本 [root@m01 /server/scripts/playbook]# cat 05.show.yaml --- - hosts: all vars_files: ./vars.yaml tasks: - name: create file file: path: "{{ dir }}{{ user }}--{{ file }}" state: touch
根据主机组使用变量(公用变量)⭐⭐⭐
# 在主机清单文件的统计目录下创建/group_vars/目录 /group_vars/ web/vars.yaml # 存放web组的变量 data/vars.yaml # 存放data组的变量 all/vars.yaml # 存放所有主机的变量 # 注意:如果目录不使用/group_vars则报错
- 变量文件
[root@m01 /server/scripts/playbook]# cat ./group_vars/all/vars.yaml user: yuanxiaojiang web_mount_dir: /web_nfs nfs_server: 172.16.1.31
- 剧本
[root@m01 /server/scripts/playbook]# cat test_group_vars.yaml --- - hosts: all tasks: - name: debug: msg: 变量内容为user:{{ user }} web_mount_dir:{{ web_mount_dir }} nfs_server:{{ nfs_server }} - hosts: web tasks: - name: 测试web组是否能识别group变量 debug: msg: 变量内容为user:{{ user }} web_mount_dir:{{ web_mount_dir }} nfs_server:{{ nfs_server }}
register变量(注册变量)⭐⭐
- 本质:实现脚本中的反引号功能
- 用户通过命令获取的内容都存放在register变量中
- register中存放的是json格式数据
--- - hosts: web tasks: - name: get time shell: date +%F register: result - name: print result debug: msg: | "register变量的标准输出:{{ result.stdout }}" "register变量的全部内容:{{ result }}"
facts变量
- facts变量:运行剧本时从被管理机上收集的系统信息
- facts变量通过setup模块获取:ansible all -m setup -i /server/scripts/playbook/hosts
- facts变量应用场景:
- 通过facts变量获取系统的基本信息
- 通过facts变量获取系统的基本信息并进行判断
- 关闭facts:在剧本中加上(gather_facts: no)
常用的facts变量
ansible_hostname # 主机名 ansible_memtotal_mb # 系统内存大小(单位mb) ansible_swaptotal_mb # 系统交换内存大小(单位mb) ansible_processor_vcpus # cpu数量 ansible_date_time.date # 当前日期 ansible_processor_cores # 默认网卡ip(默认是eth0) ansible_default_ipv4.address # 默认的网卡ip eth0 ansible_distribution # 系统发行版本名名字
案例: 批量修改系统/etc/motd文件
登录的时候输出系统基本信息:主机名、内存总大小、IP地址、发行版本、cpu数、核心数# jinja2 用于python的模板引擎,允许动态生成文件 文件后缀:.j2 # 1. 创建包含变量的模板文件 [root@m01 /server/scripts/playbook]# cat ./templates/motd.j2 主机名: {{ ansible_hostname }} ip地址: {{ ansible_default_ipv4.address }} 内存大小: {{ ansible_memtotal_mb }} CPU数量: {{ ansible_processor_vcpus }} 核心总数: {{ ansible_processor_cores }} 发行版本: {{ ansible_distribution }} # 2. 发送模板文件替代/etc/motd [root@m01 /server/scripts/playbook]# cat change_moth.yaml --- - hosts: web tasks: - name: 分发/motd文件 template: src: templates/motd.j2 dest: /etc/motd backup: yes
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构