aboutsummaryrefslogtreecommitdiffstats
path: root/opnfv/deployment/apex/adapter.py
blob: 1b81e781b7cfba31b5a41e3e027c4f5c95c2a689 (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
##############################################################################
# Copyright (c) 2017 Ericsson AB and others.
# Author: Jose Lausuch (jose.lausuch@ericsson.com)
# 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
##############################################################################

import re

from opnfv.deployment import manager
from opnfv.utils import opnfv_logger as logger
from opnfv.utils import ssh_utils

logger = logger.Logger(__name__).getLogger()


class ApexAdapter(manager.DeploymentHandler):

    def __init__(self, installer_ip, installer_user, pkey_file):
        super(ApexAdapter, self).__init__(installer='apex',
                                          installer_ip=installer_ip,
                                          installer_user=installer_user,
                                          installer_pwd=None,
                                          pkey_file=pkey_file)

    def nodes(self):
        nodes = []
        cmd = "source /home/stack/stackrc;nova list 2>/dev/null"
        output = self.installer_node.run_cmd(cmd)
        lines = output.rsplit('\n')
        if len(lines) < 4:
            logger.info("No nodes found in the deployment.")
            return None

        for line in lines:
            if 'controller' in line:
                roles = "controller"
            elif 'compute' in line:
                roles = "compute"
            else:
                continue
            if 'Daylight' in line:
                roles += ", OpenDaylight"
            fields = line.split('|')
            id = re.sub('[!| ]', '', fields[1])
            name = re.sub('[!| ]', '', fields[2])
            status_node = re.sub('[!| ]', '', fields[3])
            ip = re.sub('[!| ctlplane=]', '', fields[6])

            if status_node == 'ACTIVE':
                status = manager.Node.STATUS_OK
                ssh_client = ssh_utils.get_ssh_client(hostname=ip,
                                                      username='heat-admin',
                                                      pkey_file=self.pkey_file)
            else:
                status = manager.Node.STATUS_INACTIVE
                ssh_client = None

            node = manager.Node(id, ip, name, status, roles, ssh_client)
            nodes.append(node)

        return nodes

    def get_openstack_version(self):
        cmd = 'source overcloudrc;sudo nova-manage version'
        result = self.installer_node.run_cmd(cmd)
        return result

    def get_sdn_version(self):
        cmd_descr = ("sudo yum info opendaylight 2>/dev/null|"
                     "grep Description|sed 's/^.*\: //'")
        cmd_ver = ("sudo yum info opendaylight 2>/dev/null|"
                   "grep Version|sed 's/^.*\: //'")
        for node in self.nodes:
            if 'controller' in node.get_attribute('roles'):
                description = node.run_cmd(cmd_descr)
                version = node.run_cmd(cmd_ver)
                break

        if description is None:
            return None
        else:
            return description + ':' + version

    def get_deployment_status(self):
        cmd = 'source stackrc;openstack stack list|grep CREATE_COMPLETE'
        result = self.installer_node.run_cmd(cmd)
        if result is None or len(result) == 0:
            return 'failed'
        else:
            return 'active'