aboutsummaryrefslogtreecommitdiffstats
path: root/opnfv/utils/Credentials.py
blob: 1882692b36435a1224e77305587cbdaf8a3048d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/usr/bin/env python

# Copyright (c) 2016 Orange and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
#
# Usage example:
#   from opnfv.utils.Credentials import Credentials as credentials
#   credentials("fuel", "10.20.0.2", "root", "r00tme").fetch('./openrc')
#

import os

import opnfv.installer_adapters.InstallerHandler as ins_handler
import opnfv.utils.Connection as con
import opnfv.utils.OPNFVLogger as logger


class Credentials(object):

    def __init__(self, installer, ip, user, password=None):
        self.installer = installer
        self.ip = ip
        self.logger = logger.Logger("Credentials", level="DEBUG").getLogger()
        self.connection = con.Connection()

        if self.__check_installer_name(self.installer) != os.EX_OK:
            self.logger.error("Installer %s not supported!" % self.installer)
            return os.EX_CONFIG
        else:
            self.logger.debug("Installer %s supported." % self.installer)

        if self.connection.verify_connectivity(self.ip) != os.EX_OK:
            self.logger.error("Installer %s not reachable!" % self.ip)
            return os.EX_UNAVAILABLE
        else:
            self.logger.debug("IP %s is reachable!" % self.ip)

        self.logger.debug(
            "Trying to stablish ssh connection to %s ..." % self.ip)
        self.handler = ins_handler.InstallerHandler(installer,
                                                    ip,
                                                    user,
                                                    password)

    def __check_installer_name(self, installer):
        if installer not in ("apex", "compass", "fuel", "joid"):
            return os.EX_CONFIG
        else:
            return os.EX_OK

    def __check_path(self, path):
        try:
            with open(path, 'a'):
                os.utime(path, None)
            return os.EX_OK
        except IOError as e:
            self.logger.error(e)
            return os.EX_IOERR

    def __fetch_creds_apex(self, target_path):
        # TODO
        pass

    def __fetch_creds_compass(self, target_path):
        # TODO
        pass

    def __fetch_creds_fuel(self, target_path):
        creds_file = '/root/openrc'
        try:
            self.handler.get_file_from_controller(creds_file, target_path)
        except Exception, e:
            self.logger.error(
                "Cannot get %s from controller. %e" % (creds_file, e))
        pass

    def __fetch_creds_joid(self, target_path):
        # TODO
        pass

    def fetch(self, target_path):
        if self.__check_path(target_path) != os.EX_OK:
            self.logger.error(
                "Target path %s does not exist!" % target_path)
            return os.EX_IOERR
        else:
            self.logger.debug("Target path correct.")

        self.logger.info("Fetching credentials from the deployment...")
        if self.installer == "apex":
            self.__fetch_creds_apex(target_path)
        elif self.installer == "compass":
            self.__fetch_creds_compass(target_path)
        elif self.installer == "fuel":
            self.__fetch_creds_fuel(target_path)
        elif self.installer == "joid":
            self.__fetch_creds_joid(target_path)