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

ansible剧本与变量

1. ansible剧本

  • 注意事项
    • 注意对齐,2个空格,不能使用tab
    • 剧本以yml或yaml结尾

1.1. 第一个剧本

- hosts: all tasks: - name: 01.打开冰箱门 shell: echo 01.open >/tmp/lidao.txt - name: 02.大象放进去 shell: echo 02.put >>/tmp/lidao.txt - name: 03.关门 shell: echo 03.close >>/tmp/lidao.txt

1.2. 部署rsync服务剧本

  • 编写剧本
#1.部署rsync服务端 - hosts: bak tasks: - name: 1.安装rsync yum: name: rsync state: latest - name: 2.分发配置文件 copy: src: ./files/rsyncd.conf dest: /etc/rsyncd.conf - name: 3.添加用户 user: name: rsync shell: /sbin/nologin create_home: no state: present - name: 4.创建目录,修改所有者 file: path: /ans/backup/ owner: rsync group: rsync state: directory - name: 5.创建密码文件,修改权限 lineinfile: path: /etc/rsync.password line: rsync_backup:1 mode: '0600' create: yes - name: 6.启动服务 systemd: name: rsyncd enabled: yes state: started #2.部署客户端 - hosts: nfs tasks: - name: 分发脚本 copy: src: ./files/rsync_backup.sh dest: /server/scripts/ - name: 定时备份 cron: name: 定时备份 minute: "0" hour: "9" job: "bash /server/scripts/rsync_backup.sh >/dev/null 2>&1"
  • 编写rsyncd.conf配置文件
##rsyncd.conf start## fake super = yes uid = rsync gid = rsync use chroot = no max connections = 2000 timeout = 600 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log ignore errors read only = false list = false #hosts allow = 10.0.0.0/24 #hosts deny = 0.0.0.0/32 auth users = rsync_backup secrets file = /etc/rsync.password ##################################### [backup] comment = ansible backup path = /ans/backup/
  • 编写备份脚本
#!/bin/bash ############################################################## # File Name:rsync_backup.sh # Version:V1.0 # Author:zbl # Organization:zhubaolin.blog.csdn.net # Desc: ############################################################## #1.vars date=`date +%F_%w` backup_dir=/backup/ client_ip=`hostname -I | awk '{print $2}'` #rsync server vars rsync_user=rsync_backup rsync_server_ip=172.16.1.41 module_name=backup rsync_password_file=/etc/rsync.client #2.check_backup_dir function check_dir() { if [ ! -f ${backup_dir}${client_ip} ];then mkdir -p ${backup_dir}${client_ip} fi return $? } #3.tar function backup_files() { tar zcf ${backup_dir}${client_ip}/etc-${date}.tar.gz /etc rc=$? if [ $rc -eq 0 ];then echo "打包成功,生成校验文件中......" md5sum ${backup_dir}${client_ip}/etc-${date}.tar.gz >${backup_dir}${client_ip}/check.md5 else echo "打包失败" fi return $rc } #4.rsync function rsync_backup() { rsync -av ${backup_dir} ${rsync_user}@${rsync_server_ip}::${module_name} --password-file=${rsync_password_file} rc=$? if [ $rc -eq 0 ];then echo "备份成功" else echo "备份失败" fi return $rc } #5.clean old file function clean_oldfile() { old_file=`find ${backup_dir} -type f -mtime +7 |wc -l` old_filesize=`du -sh ${backup_dir} | cut -f1` if [ ${old_file} -gt 1 ];then find ${backup_dir} -type f -mtime +7 |xargs rm -f else echo "当前大于7天文件数:${old_file},备份文件大小:${old_filesize},无需清理" fi return $? } #6.use func function main() { check_dir backup_files rsync_backup clean_oldfile } main

1.3. 定期修改密码剧本

- hosts: web vars: password: "zbl007" tasks: - name: 定期修改密码 user: name: zbl password: "{{ password|password_hash('sha512','zbl') }}" state: present

user模块的password选项,指定的是加密后的密码

password_hash('sha512','salt')

密码插件 "sha512"哈希算法,加盐(随机内容,固定的)

  • 生成随机字符命令
mkpasswd -l 20 -s 0 -l:生成20个字符 -s:0个特殊字符

2. ansible变量

ansible定义变量方法

说明与特点

剧本定义

在剧本中创建与使用,仅限当前play部分使用

独立文件中定义(变量文件)

把写入到文件中,通过vars_files指定调取,play中指定变量文件

分组变量

推荐,根据分组自动调用,all组创建与使用,最方便。group_vars

facts变量

剧本运行的时候默认的任务,收集信息,根据信息创建的变量

如果不用,建议关闭功能,加速剧本运行

register变量

类似于shell中反引号功能,先执行命令结果保留下来

主机清单变量

批量修改主机名,批量修改密码(每台机器都不同)

使用变量形式存放目录,用户名 添加用户 创建目录,修改所有者

2.1. 分组变量

  • 创建变量
mkdir -p group_vars/all/ vim group_vars/all/vars.yml user: zbl996 dir: /ansible/zbl996/
  • 编写剧本使用变量
- hosts: web tasks: - name: 添加用户 user: name: "{{ user }}" shell: /bin/bash create_home: yes state: present - name: 创建目录 file: path: "{{ dir }}" owner: "{{ user }}" group: "{{ user }}" mode: '0755' state: directory
  • 运行剧本
ansible-playbook -i hosts 04.user.yml
  • 检查

2.2. facts变量

- hosts: all tasks: - name: 输出变量内容 debug: msg: | 主机名: {{ ansible_hostname }} ip: {{ ansible_all_ipv4_addresses }} 内存总大小: {{ ansible_memtotal_mb }} 系统发行版本: {{ ansible_distribution }} 系统版本: {{ ansible_distribution_major_version }} cpu架构: {{ ansible_architecture }} 系统版本昵称: {{ ansible_distribution_release }} 第1块网卡的ip地址: {{ ansible_default_ipv4.address }}
  • 查看所有facts变量
ansible 172.16.1.10 -m setup
  • 在j2模板中使用facts变量
vim files/motd.j2 主机名: {{ ansible_hostname }} ip: {{ ansible_all_ipv4_addresses }} 内存总大小: {{ ansible_memtotal_mb }} 系统发行版本: {{ ansible_distribution }} 系统版本: {{ ansible_distribution_major_version }} cpu架构: {{ ansible_architecture }} 系统版本昵称: {{ ansible_distribution_release }} 第1块网卡的ip地址: {{ ansible_default_ipv4.address }}
  • 编写playbook剧本,分发带有facts变量的文件
- hosts: all tasks: - name: copy template: src: ./files/motd.j2 dest: /etc/motd
  • 运行playbook剧本
ansible-playbook -i hosts 06.facts_copy.yml
  • 检查

2.2.1. 关闭facts变量

  • ansible.cfg配置文件中添加
gathering = explicit

2.2.2. 临时使用facts变量

  • 在playbook中添加
- hosts: all gather_facts: true tasks:

2.3. register注册变量

  • 在playbook中定义register变量
- hosts: web tasks: - name: 定义register变量 shell: hostname -I | awk '{print $2}' register: ip - name: 使用register变量 debug: msg: | 标准输出: {{ ip.stdout }} 错误输出: {{ ip.stderr }} 返回值: {{ ip.rc }} - name: 创建目录 file: path: /backup/{{ ip.stdout }} state: directory
  • 运行playbook
ansible-playbook -i hosts 07.register.yml

  • 检查
ansible -i hosts web -a 'ls -l /backup/'

3. 总结

  • 编写剧本playbook
  • 目标:rsync,nfs,lsyncd,nginx.php,tomcat剧本
  • 变量:vars,group_vars,facts,register

http://www.jsqmd.com/news/464619/

相关文章:

  • 基于SpringBoot实现的校园活动管理系统设计与实现
  • AutoDl-较大文件上传最快方法
  • 【redis】redis重新创建集群
  • 【限时免费】 claudecodeui:AI编程助手可视化界面
  • 对学生信息管理系统的改进
  • Shell编程-3
  • WSL端口代理配置全攻略:从零开始实现本地IP访问(附常见问题排查)
  • ansible变量-循环-判断-jinja2模板
  • 5分钟搞定Flink1.19本地部署:用JDK17运行WordCount示例教程
  • 7步掌握 Angular 项目的 Pull Request 评审流程:从提交到合并的完整指南
  • ansible变量-调试-优化
  • docker容器安装与使用
  • 【Gromacs】使用伞形采样研究Her2蛋白聚集的详细操作指南
  • 国产数据库新选择:GBase-8a单机版在Linux下的保姆级安装教程(附常见问题解决)
  • STM32以太网开发实战:DP83848 vs LAN8742选型指南(附CubeMX配置)
  • MATLAB模糊控制器实战:从零搭建智能小费计算系统(附完整代码)
  • Mysql 笔记
  • PyTorch反向传播实战:从计算图到梯度下降的完整代码解析(附可视化训练过程)
  • 从数学推导到代码实现:手把手教你写PyTorch自定义权重初始化
  • 杰理AC701N的板级配置AD的使用
  • Qt信号槽进阶指南:从Qt4到Qt5的信号重载与槽函数优化(避坑大全)
  • 从零到专业:3个AI提示词框架让你工作效率翻倍(含避坑指南)
  • 1为何扣子空间智能体默认不支持短信与邮件发送:技术沙盒、安全合规与插件生态深度解析
  • FPGA开发者的效率神器:3种方法解决Vivado多版本默认启动问题(含拖拽技巧)
  • WinForm程序如何优雅地请求管理员权限?3种方法实测对比(含UAC原理)
  • DIN 75220 标准汽车阳光模拟试验与户外试验对比研究
  • 04. Capture 中 Part Manager 应用场景(二)管理变种 BOM I OrCAD X Capture CIS 设计小诀窍第三季
  • EtherCAT从零到实战:如何用树莓派搭建低成本运动控制原型(附IGH配置指南)
  • SQLyog保姆级教程:从安装到实战操作MySQL数据库(附常见问题解决)
  • 华为云ModelArts实战:5分钟搞定深度学习模型训练(附OBS上传避坑指南)