Migrates Apex to Python
[apex.git] / apex / clean.py
1 ##############################################################################
2 # Copyright (c) 2016 Tim Rozet (trozet@redhat.com) and others.
3 #
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
9
10 # Clean will eventually be migrated to this file
11
12 import argparse
13 import logging
14 import os
15 import pyipmi
16 import pyipmi.interfaces
17 import sys
18
19 from .common import utils
20
21
22 def clean_nodes(inventory):
23     inv_dict = utils.parse_yaml(inventory)
24     if inv_dict is None or 'nodes' not in inv_dict:
25         logging.error("Inventory file is empty or missing nodes definition")
26         sys.exit(1)
27     for node, node_info in inv_dict['nodes'].items():
28         logging.info("Cleaning node: {}".format(node))
29         try:
30             interface = pyipmi.interfaces.create_interface(
31                 'ipmitool', interface_type='lanplus')
32             connection = pyipmi.create_connection(interface)
33             connection.session.set_session_type_rmcp(node_info['ipmi_ip'])
34             connection.target = pyipmi.Target(0x20)
35             connection.session.set_auth_type_user(node_info['ipmi_user'],
36                                                   node_info['ipmi_pass'])
37             connection.session.establish()
38             connection.chassis_control_power_down()
39         except Exception as e:
40             logging.error("Failure while shutting down node {}".format(e))
41             sys.exit(1)
42
43
44 def main():
45     clean_parser = argparse.ArgumentParser()
46     clean_parser.add_argument('-f',
47                               dest='inv_file',
48                               required=True,
49                               help='File which contains inventory')
50     args = clean_parser.parse_args(sys.argv[1:])
51     os.makedirs(os.path.dirname('./apex_clean.log'), exist_ok=True)
52     formatter = '%(asctime)s %(levelname)s: %(message)s'
53     logging.basicConfig(filename='./apex_clean.log',
54                         format=formatter,
55                         datefmt='%m/%d/%Y %I:%M:%S %p',
56                         level=logging.DEBUG)
57     console = logging.StreamHandler()
58     console.setLevel(logging.DEBUG)
59     console.setFormatter(logging.Formatter(formatter))
60     logging.getLogger('').addHandler(console)
61     clean_nodes(args.inv_file)
62
63
64 if __name__ == '__main__':
65     main()