正文
这个playbook首先检查是否有任何更新要申请。如果是,playboo则从池中删除节点,应用更新,然后重新启动节点。一旦节点重新联机,它就会被添加回池中。Ansible playbook使用serial关键字确保一次只从池中删除一个节点。
如果数据库在OpenStack云中运行,则有时必须还原备份,要么刷新一些测试数据,要么可能在发生数据损坏事件时。使用Ansible可以轻松完成数据库服务器和Cinder之间的编排任务:
- hosts: db
gather_facts: true
user: centos
tasks:
- name: stop database
systemd:
name: mongod
state: stopped
become: true
- name: unmount db volume
mount:
path: /var/lib/mongodb
state: unmounted
become: true
- name: detach volume from server
os_server_volume:
state: absent
server: db0
volume: dbvol
delegate_to: localhost
- name: restore cinder backup
command: openstack volume backup restore dbvol_backup dbvol
delegate_to: localhost
register: vol_restore
failed_when:
- vol_restore.rc > 0
- "'VolumeBackupsRestore' not in vol_restore.stderr"
- name: wait for restore to finish
command: openstack volume show -c status -f value dbvol
register: restore_progress
until: restore_progress.stdout is search("available")
retries: 60
delay: 5
delegate_to: localhost
- name: reattach volume to server
os_server_volume:
state: present
server: db0
volume: dbvol
device: /dev/vdb
delegate_to: localhost
- name: mount db volume
mount:
path: /var/lib/mongodb
state: mounted
src: LABEL=dbvol
fstype: xfs
become: true
- name: start database
systemd:
name: mongod
state: started
become: true