diff options
Diffstat (limited to 'compass-tasks/actions/clean.py')
-rw-r--r-- | compass-tasks/actions/clean.py | 195 |
1 files changed, 0 insertions, 195 deletions
diff --git a/compass-tasks/actions/clean.py b/compass-tasks/actions/clean.py deleted file mode 100644 index a4e9bc9..0000000 --- a/compass-tasks/actions/clean.py +++ /dev/null @@ -1,195 +0,0 @@ -# Copyright 2014 Huawei Technologies Co. 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. - -"""Module to clean installers -""" -import logging -import xmlrpclib - -from compass.actions import util - -try: - import chef -except ImportError: - pass - -class CobblerInstaller(object): - """cobbler installer""" - CREDENTIALS = "credentials" - USERNAME = 'username' - PASSWORD = 'password' - - INSTALLER_URL = "cobbler_url" - - def __init__(self, settings): - username = settings[self.CREDENTIALS][self.USERNAME] - password = settings[self.CREDENTIALS][self.PASSWORD] - cobbler_url = settings[self.INSTALLER_URL] - try: - self.remote = xmlrpclib.Server(cobbler_url) - self.token = self.remote.login(username, password) - logging.info('cobbler %s client created', cobbler_url) - except Exception as error: - logging.error( - 'failed to login %s with (%s, %s)', - cobbler_url, username, password - ) - logging.exception(error) - - def clean(self): - systems = self.remote.get_systems() - for system in systems: - system_name = system['name'] - try: - self.remote.remove_system(system_name, self.token) - logging.info('system %s is removed', system_name) - except Exception as error: - logging.error( - 'failed to remove system %s', system_name - ) - logging.exception(error) - - -class AnsibleInstaller(object): - - def __init__(self, settings): - return - - def clean(self): - pass - - -class ChefInstaller(object): - DATABAGS = "databags" - CHEFSERVER_URL = "chef_url" - CHEFSERVER_DNS = "chef_server_dns" - CHEFSERVER_IP = "chef_server_ip" - KEY_DIR = "key_dir" - CLIENT = "client_name" - - def __init__(self, settings): - installer_url = settings.get(self.CHEFSERVER_URL, None) - key_dir = settings.get(self.KEY_DIR, None) - client = settings.get(self.CLIENT, None) - try: - if installer_url and key_dir and client: - self.api = chef.ChefAPI(installer_url, key_dir, client) - else: - self.api = chef.autoconfigure() - logging.info( - 'chef client created %s(%s, %s)', - installer_url, key_dir, client - ) - except Exception as error: - logging.error( - 'failed to create chef client %s(%s, %s)', - installer_url, key_dir, client - ) - logging.exception(error) - - def clean(self): - try: - for node_name in chef.Node.list(api=self.api): - node = chef.Node(node_name, api=self.api) - node.delete() - logging.info('delete node %s', node_name) - except Exception as error: - logging.error('failed to delete some nodes') - logging.exception(error) - - try: - for client_name in chef.Client.list(api=self.api): - if client_name in ['chef-webui', 'chef-validator']: - continue - client = chef.Client(client_name, api=self.api) - client.delete() - logging.info('delete client %s', client_name) - except Exception as error: - logging.error('failed to delete some clients') - logging.exception(error) - - try: - for env_name in chef.Environment.list(api=self.api): - if env_name == '_default': - continue - env = chef.Environment(env_name, api=self.api) - env.delete() - logging.info('delete env %s', env_name) - except Exception as error: - logging.error('failed to delete some envs') - logging.exception(error) - - try: - for databag_name in chef.DataBag.list(api=self.api): - databag = chef.DataBag(databag_name, api=self.api) - for item_name, item in databag.items(): - item.delete() - logging.info( - 'delete item %s from databag %s', - item_name, databag_name - ) - except Exception as error: - logging.error('failed to delete some databag items') - logging.exception(error) - - -OS_INSTALLERS = { - 'cobbler': CobblerInstaller -} -PK_INSTALLERS = { - 'chef_installer': ChefInstaller, - 'ansible_installer': AnsibleInstaller -} - - -def clean_os_installer( - os_installer_name, os_installer_settings -): - with util.lock('serialized_action', timeout=100) as lock: - if not lock: - raise Exception( - 'failed to acquire lock to clean os installer' - ) - - if os_installer_name not in OS_INSTALLERS: - logging.error( - '%s not found in os_installers', - os_installer_name - ) - - os_installer = OS_INSTALLERS[os_installer_name]( - os_installer_settings - ) - os_installer.clean() - - -def clean_package_installer( - package_installer_name, package_installer_settings -): - with util.lock('serialized_action', timeout=100) as lock: - if not lock: - raise Exception( - 'failed to acquire lock to clean package installer' - ) - - if package_installer_name not in PK_INSTALLERS: - logging.error( - '%s not found in os_installers', - package_installer_name - ) - - package_installer = PK_INSTALLERS[package_installer_name]( - package_installer_settings - ) - package_installer.clean() |