简介
问题描述:使用 ansible 进行自动化时,如果任务集的任务失败,尽心回滚,尽量保证一个干净的环境
如何解决:使用 block 和 resce 块
playbook
---
- name: 安装 MySQL 并修改数据目录
hosts: all
become: yes
tasks:
- block:
- name: 更新 apt 缓存
apt:
update_cache: yes
cache_valid_time: 3600
- name: 安装 rsync
apt:
name: rsync
state: present
- name: 停止 MySQL 服务
service:
name: mysql
state: stopped
- name: 创建新的数据目录
file:
path: "{{ ansible_env.HOME }}/mysql/data"
state: directory
owner: mysql
group: mysql
mode: '0755'
- name: 修改 MySQL 配置文件以使用新的数据目录
lineinfile:
path: /etc/mysql/my.cnf
regexp: '^(datadir|\\[mysqld\\])'
line: |
[mysqld]
datadir = {{ ansible_env.HOME }}/mysql/data
backup: yes
insertafter: '[mysqld]'
- name: 将 MySQL 数据迁移到新目录
command: >
rsync -av /var/lib/mysql/ {{ ansible_env.HOME }}/mysql/data/
become: yes
- name: 修正新目录的权限
file:
path: "{{ ansible_env.HOME }}/mysql/data"
owner: mysql
group: mysql
recurse: yes
- name: 启动 MySQL 服务
service:
name: mysql
state: started
- name: 验证 MySQL 数据目录
command: mysql -e "SHOW VARIABLES LIKE 'datadir';"
register: mysql_datadir
- name: 输出 MySQL 数据目录
debug:
msg: "MySQL 数据目录为: {{ mysql_datadir.stdout }}"
rescue:
- name: 删除新的数据目录
file:
path: "{{ ansible_env.HOME }}/mysql/data"
state: absent
- name: 恢复 MySQL 服务
service:
name: mysql
state: started
- name: 输出错误信息
debug:
msg: "安装过程出错,已删除新数据目录并恢复 MySQL 服务。"
仓库代码
GitCode - 全球开发者的开源社区,开源代码托管平台
参考
https://galaxy.ansible.com/