6f21ceb865
This patch prevents teardown.sh script from deleting /etc/openstack_deploy in order to let the deployer decide whether to delete it or not. Change-Id: I8de55c6fce79bd9301d995c565cfb4e0a38b253a Closes-Bug: #1504561
276 lines
7.8 KiB
Bash
Executable File
276 lines
7.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Copyright 2014, Rackspace US, Inc.
|
|
#
|
|
# 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.
|
|
|
|
## Shell Opts ----------------------------------------------------------------
|
|
set -e -u
|
|
|
|
|
|
## Library Check -------------------------------------------------------------
|
|
info_block "Checking for required libraries." 2> /dev/null || source $(dirname ${0})/scripts-library.sh
|
|
|
|
## Confirmation -------------------------------------------------------------
|
|
cat <<EOF
|
|
-----------------------------------------------------------------------------
|
|
WARNING: This is a destructive action. All containers will be destroyed and
|
|
all data within the containers will be removed. Some data will be
|
|
removed from the host as well. /etc/openstack_deploy will be preserved
|
|
and may be manually removed if needed.
|
|
Please verify that you have backed up all important data prior to
|
|
proceeding with the teardown script.
|
|
-----------------------------------------------------------------------------
|
|
To REALLY destroy all containers and delete the data within them,
|
|
type 'Y' or 'y' and press enter:
|
|
EOF
|
|
|
|
read -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
echo "Teardown canceled."
|
|
exit 1
|
|
fi
|
|
|
|
## Main ----------------------------------------------------------------------
|
|
info_block "Running Teardown"
|
|
|
|
pushd playbooks
|
|
KNOWN_HOSTS=$(ansible hosts --list-hosts) || true
|
|
if [ -z "${KNOWN_HOSTS}" ];then
|
|
ANSIBLE_DESTROY_HOSTS="localhost"
|
|
else
|
|
ANSIBLE_DESTROY_HOSTS="hosts"
|
|
fi
|
|
# Create the destroy play
|
|
cat > /tmp/destroy_play.yml <<EOF
|
|
- name: Destruction of openstack
|
|
hosts: "${ANSIBLE_DESTROY_HOSTS}"
|
|
gather_facts: false
|
|
user: root
|
|
tasks:
|
|
- name: Get containers
|
|
command: lxc-ls
|
|
register: onlinecontainers
|
|
failed_when: false
|
|
- name: Destroy containers
|
|
command: lxc-destroy -fn "{{ item }}"
|
|
with_items: onlinecontainers.stdout_lines
|
|
when: onlinecontainers.rc == 0 and onlinecontainers.stdout
|
|
|
|
- name: Shutdown the lxc bridge
|
|
shell: |
|
|
ifdown {{ item }} || true
|
|
with_items: shut_interfaces_down
|
|
- name: Lxc system manage shutdown
|
|
shell: |
|
|
lxc-system-manage system-force-tear-down || true
|
|
lxc-system-manage veth-cleanup || true
|
|
failed_when: false
|
|
|
|
- name: Get os service script
|
|
shell: |
|
|
ls /etc/init | grep -e nova -e swift -e neutron -e haproxy
|
|
failed_when: false
|
|
register: servicenames
|
|
- name: Stop services
|
|
service:
|
|
name: "{{ item.split('.')[0] }}"
|
|
state: "stopped"
|
|
enabled: no
|
|
failed_when: false
|
|
with_items: servicenames.stdout_lines
|
|
when: servicenames.stdout
|
|
- name: Remove init scripts
|
|
shell: |
|
|
rm "/etc/init/{{ item }}"
|
|
with_items: servicenames.stdout_lines
|
|
when: servicenames.stdout
|
|
|
|
- name: Get pip packages
|
|
shell: |
|
|
pip freeze | grep -i {% for i in remove_pip_packages %} -e {{ i }}{% endfor %}
|
|
register: pippackages
|
|
failed_when: false
|
|
- name: Remove python packages
|
|
pip:
|
|
name: "{{ item }}"
|
|
state: "absent"
|
|
with_items: pippackages.stdout_lines
|
|
when: pippackages.stdout
|
|
|
|
- name: Remove packages
|
|
apt:
|
|
name: "{{ item }}"
|
|
state: "absent"
|
|
with_items: remove_packages
|
|
failed_when: false
|
|
|
|
- name: Clean up apt cruft
|
|
shell: |
|
|
apt-get autoremove --yes || true
|
|
failed_when: false
|
|
|
|
- name: Get all logical volumes
|
|
shell: >
|
|
lvs | awk '/lxc/ || /cinder/ || /swift/ {print \$1","\$2}'
|
|
register: lvstorage
|
|
failed_when: false
|
|
- name: Remove all logical volumes
|
|
lvol:
|
|
vg: "{{ item.split(',')[1] }}"
|
|
lv: "{{ item.split(',')[0] }}"
|
|
state: "absent"
|
|
force: "yes"
|
|
with_items: lvstorage.stdout_lines
|
|
failed_when: false
|
|
when: lvstorage.stdout
|
|
|
|
- name: Get all dm storage devices
|
|
shell: >
|
|
dmsetup info | awk '/lxc/ || /cinder/ || /swift/ {print \$2}'
|
|
register: dmstorage
|
|
failed_when: false
|
|
- name: Remove dm storage entries
|
|
command: dmsetup remove "{{ item }}"
|
|
with_items: dmstorage.stdout_lines
|
|
when: dmstorage.stdout
|
|
|
|
- name: Get all loopback storage devices
|
|
shell: >
|
|
losetup -a | awk -F':' '{print \$1}'
|
|
register: lostorage
|
|
failed_when: false
|
|
- name: Unmount loopback storage
|
|
shell: |
|
|
umount {{ item }} || true
|
|
losetup -d {{ item }} || true
|
|
with_items: lostorage.stdout_lines
|
|
when: lostorage.stdout
|
|
failed_when: false
|
|
|
|
- name: Remove known AIO mount points (fstab)
|
|
lineinfile:
|
|
dest: "/etc/fstab"
|
|
state: "absent"
|
|
regexp: "{{ item }}.*.img"
|
|
with_items: aio_mount_points
|
|
|
|
- name: Remove known AIO mount points (rc.local)
|
|
lineinfile:
|
|
dest: "/etc/rc.local"
|
|
state: "absent"
|
|
regexp: "{{ item }}.*.img"
|
|
with_items: aio_mount_points
|
|
|
|
- name: Stop all swap
|
|
command: "swapoff -a"
|
|
failed_when: false
|
|
|
|
- name: Remove known files and folders.
|
|
shell: |
|
|
rm -rf {{ item }}
|
|
failed_when: false
|
|
with_items: remove_files
|
|
vars:
|
|
aio_mount_points:
|
|
- cinder
|
|
- swap
|
|
- swift
|
|
shut_interfaces_down:
|
|
- lxcbr0
|
|
remove_files:
|
|
- /etc/haproxy
|
|
- /etc/nova
|
|
- /etc/network/interfaces.d/aio_interfaces.cfg
|
|
- /etc/neutron
|
|
- /etc/swift
|
|
- /openstack
|
|
- /opt/*.img
|
|
- /opt/*lxc*
|
|
- /opt/*neutron*
|
|
- /opt/*nova*
|
|
- /opt/*pip*
|
|
- /opt/*repo*
|
|
- /root/.pip
|
|
- /var/lib/neutron
|
|
- /var/lib/nova
|
|
- /var/lib/mongodb
|
|
- /var/log/mongodb
|
|
- /var/log/swift
|
|
- /var/log/neutron
|
|
- /var/log/nova
|
|
remove_packages:
|
|
- haproxy
|
|
- hatop
|
|
- liblxc1
|
|
- libvirt0
|
|
- libvirt-bin
|
|
- lxc
|
|
- lxc-dev
|
|
- vim-haproxy
|
|
- mongodb-server
|
|
- mongodb-clients
|
|
- python-pymongo
|
|
remove_pip_packages:
|
|
- cinder
|
|
- eventlet
|
|
- euca2ools
|
|
- glance
|
|
- heat
|
|
- keystone
|
|
- kombu
|
|
- lxc
|
|
- lxml
|
|
- mysql
|
|
- neutron
|
|
- nova
|
|
- oslo
|
|
- Paste
|
|
- pbr
|
|
- pymongo
|
|
- repoze
|
|
- six
|
|
- sql
|
|
- swift
|
|
- turbolift
|
|
- warlock
|
|
EOF
|
|
|
|
# Destroy all of the known stuff.
|
|
if [ "${ANSIBLE_DESTROY_HOSTS}" == "localhost" ];then
|
|
echo -e '[all]\nlocalhost ansible_connection=local' | tee /tmp/localhost
|
|
openstack-ansible -i /tmp/localhost /tmp/destroy_play.yml --forks ${FORKS} || true
|
|
# Since this is an AIO, just remove it from the local hosts file
|
|
sed -i '/_container-/d' /etc/hosts
|
|
else
|
|
openstack-ansible lxc-containers-destroy.yml --forks ${FORKS} || true
|
|
openstack-ansible /tmp/destroy_play.yml --forks ${FORKS} || true
|
|
# Remove containers from /etc/hosts on physical hosts
|
|
ansible hosts -m shell -a "sed -i '/_container-/d' /etc/hosts"
|
|
fi
|
|
popd
|
|
|
|
# Remove the temp destruction play
|
|
rm /tmp/destroy_play.yml &>/dev/null || true
|
|
rm /tmp/localhost &>/dev/null || true
|
|
|
|
# Final message
|
|
get_instance_info
|
|
info_block "* NOTICE *"
|
|
echo -e "The system has been torn down."
|
|
echo -e "Make sure you update and/or review the file '/etc/fstab'."
|
|
if [ ! -z "${KNOWN_HOSTS}" ];then
|
|
echo -e "The following hosts has been touched: \"${KNOWN_HOSTS}\""
|
|
fi
|
|
echo -e "Entries may need to be updated."
|