Add kayobe seed vm deprovision command
This command will destroy the seed VM and all associated data volumes.
This commit is contained in:
parent
f76f244a38
commit
c01f5834cb
@ -1,4 +1,7 @@
|
||||
---
|
||||
# State of the VM. May be 'present' or 'absent'.
|
||||
libvirt_vm_state: present
|
||||
|
||||
# Name of the VM.
|
||||
libvirt_vm_name:
|
||||
|
||||
|
52
ansible/roles/libvirt-vm/files/destroy_virt_volume.sh
Normal file
52
ansible/roles/libvirt-vm/files/destroy_virt_volume.sh
Normal file
@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright (c) 2017 StackHPC Ltd.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
# Ensure that a libvirt volume does not exists.
|
||||
# On success, output a JSON object with a 'changed' item.
|
||||
|
||||
if [[ $# -ne 2 ]]; then
|
||||
echo "Usage: $0 <name> <pool>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
NAME=$1
|
||||
POOL=$2
|
||||
|
||||
# Check whether a volume with this name exists.
|
||||
output=$(virsh vol-info --pool $POOL --vol $NAME 2>&1)
|
||||
result=$?
|
||||
if [[ $result -ne 0 ]]; then
|
||||
if echo "$output" | grep 'Storage volume not found' >/dev/null 2>&1; then
|
||||
echo '{"changed": false}'
|
||||
exit 0
|
||||
else
|
||||
echo "Unexpected error while getting volume info"
|
||||
echo "$output"
|
||||
exit $result
|
||||
fi
|
||||
fi
|
||||
|
||||
# Delete the volume.
|
||||
output=$(virsh vol-delete --pool $POOL --vol $NAME 2>&1)
|
||||
result=$?
|
||||
if [[ $result -ne 0 ]]; then
|
||||
echo "Failed to delete volume"
|
||||
echo "$output"
|
||||
exit $result
|
||||
fi
|
||||
|
||||
echo '{"changed": true}'
|
||||
exit 0
|
@ -1,3 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright (c) 2017 StackHPC Ltd.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
@ -12,8 +14,6 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# Ensure that a libvirt volume exists, optionally uploading an image.
|
||||
# On success, output a JSON object with a 'changed' item.
|
||||
|
||||
|
20
ansible/roles/libvirt-vm/tasks/destroy-vm.yml
Normal file
20
ansible/roles/libvirt-vm/tasks/destroy-vm.yml
Normal file
@ -0,0 +1,20 @@
|
||||
---
|
||||
# The destroyed state does not seem to be idempotent, so check whether the VM
|
||||
# exists before destroying it.
|
||||
- name: Check the VM's status
|
||||
virt:
|
||||
name: "{{ libvirt_vm_name }}"
|
||||
command: list_vms
|
||||
register: result
|
||||
|
||||
- block:
|
||||
- name: Ensure the VM is absent
|
||||
virt:
|
||||
name: "{{ libvirt_vm_name }}"
|
||||
state: destroyed
|
||||
|
||||
- name: Ensure the VM is undefined
|
||||
virt:
|
||||
name: "{{ libvirt_vm_name }}"
|
||||
command: undefine
|
||||
when: libvirt_vm_name in result.list_vms
|
11
ansible/roles/libvirt-vm/tasks/destroy-volumes.yml
Normal file
11
ansible/roles/libvirt-vm/tasks/destroy-volumes.yml
Normal file
@ -0,0 +1,11 @@
|
||||
---
|
||||
- name: Ensure the VM volumes do not exist
|
||||
script: >
|
||||
destroy_virt_volume.sh
|
||||
{{ item.name }}
|
||||
{{ item.pool }}
|
||||
with_items: "{{ libvirt_vm_volumes }}"
|
||||
register: volume_result
|
||||
changed_when:
|
||||
- "{{ volume_result | success }}"
|
||||
- "{{ (volume_result.stdout | from_json).changed | default(True) }}"
|
@ -1,3 +1,10 @@
|
||||
---
|
||||
- include: volumes.yml
|
||||
- include: vm.yml
|
||||
- block:
|
||||
- include: volumes.yml
|
||||
- include: vm.yml
|
||||
when: libvirt_vm_state == 'present'
|
||||
|
||||
- block:
|
||||
- include: destroy-volumes.yml
|
||||
- include: destroy-vm.yml
|
||||
when: libvirt_vm_state == 'absent'
|
||||
|
15
ansible/seed-vm-deprovision.yml
Normal file
15
ansible/seed-vm-deprovision.yml
Normal file
@ -0,0 +1,15 @@
|
||||
---
|
||||
- name: Ensure that the seed VM is deprovisioned
|
||||
hosts: seed-hypervisor
|
||||
vars:
|
||||
seed_host: "{{ groups['seed'][0] }}"
|
||||
seed_hostvars: "{{ hostvars[seed_host] }}"
|
||||
roles:
|
||||
- role: libvirt-vm
|
||||
seed_vm_configdrive_volume:
|
||||
name: "{{ seed_hostvars.seed_vm_name }}-configdrive"
|
||||
pool: "{{ seed_hostvars.seed_vm_pool }}"
|
||||
libvirt_vm_name: "{{ seed_hostvars.seed_vm_name }}"
|
||||
libvirt_vm_volumes: "{{ seed_hostvars.seed_vm_volumes + [seed_vm_configdrive_volume] }}"
|
||||
libvirt_vm_state: "absent"
|
||||
become: True
|
@ -69,6 +69,17 @@ To deprovision the overcloud::
|
||||
|
||||
(kayobe-venv) $ kayobe overcloud deprovision
|
||||
|
||||
Deprovisioning The Seed VM
|
||||
==========================
|
||||
|
||||
.. note::
|
||||
|
||||
This step will destroy the seed VM and its data volumes.
|
||||
|
||||
To deprovision the seed VM::
|
||||
|
||||
(kayobe-venv) $ kayobe seed vm deprovision
|
||||
|
||||
Running Kayobe Playbooks on Demand
|
||||
==================================
|
||||
|
||||
|
@ -241,12 +241,25 @@ class SeedVMProvision(KollaAnsibleMixin, KayobeAnsibleMixin, VaultMixin,
|
||||
self.app.LOG.debug("Provisioning seed VM")
|
||||
self.run_kayobe_playbook(parsed_args, "ansible/ip-allocation.yml",
|
||||
limit="seed")
|
||||
self.run_kayobe_playbook(parsed_args, "ansible/seed-vm.yml")
|
||||
self.run_kayobe_playbook(parsed_args, "ansible/seed-vm-provision.yml")
|
||||
# Now populate the Kolla Ansible inventory.
|
||||
self.run_kayobe_playbook(parsed_args, "ansible/kolla-ansible.yml",
|
||||
tags="config")
|
||||
|
||||
|
||||
class SeedVMDeprovision(KollaAnsibleMixin, KayobeAnsibleMixin, VaultMixin,
|
||||
Command):
|
||||
"""Deprovision the seed VM.
|
||||
|
||||
This will destroy the seed VM and all associated volumes.
|
||||
"""
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
self.app.LOG.debug("Deprovisioning seed VM")
|
||||
self.run_kayobe_playbook(parsed_args,
|
||||
"ansible/seed-vm-deprovision.yml")
|
||||
|
||||
|
||||
class SeedHostConfigure(KollaAnsibleMixin, KayobeAnsibleMixin, VaultMixin,
|
||||
Command):
|
||||
"""Configure the seed node host OS."""
|
||||
|
1
setup.py
1
setup.py
@ -74,6 +74,7 @@ setup(
|
||||
'seed_host_configure = kayobe.cli.commands:SeedHostConfigure',
|
||||
'seed_hypervisor_host_configure = kayobe.cli.commands:SeedHypervisorHostConfigure',
|
||||
'seed_service_deploy = kayobe.cli.commands:SeedServiceDeploy',
|
||||
'seed_vm_deprovision = kayobe.cli.commands:SeedVMDeprovision',
|
||||
'seed_vm_provision = kayobe.cli.commands:SeedVMProvision',
|
||||
],
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user