aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjose.lausuch <jose.lausuch@ericsson.com>2017-02-08 14:25:34 +0100
committerJose Lausuch <jose.lausuch@ericsson.com>2017-02-14 17:48:07 +0000
commit2f0c4e1baa6a45dc451142f1372c48e69a5d1565 (patch)
tree4ec67d57795ff32bd04bef03d5440cabf9baeeef
parentf169fa760059f91ba68960a7f87ca915e7d0ddaf (diff)
[deployment handler] Add support for Clusters in Fuel
Fix minor apex issues. Output of example.py http://pastebin.com/raw/x70Uj85V Change-Id: I6013f5c4d916126f79afd40a6d6a35278c8ed26f Signed-off-by: jose.lausuch <jose.lausuch@ericsson.com>
-rw-r--r--opnfv/deployment/apex/adapter.py14
-rw-r--r--opnfv/deployment/example.py15
-rw-r--r--opnfv/deployment/fuel/adapter.py158
-rw-r--r--opnfv/deployment/manager.py12
4 files changed, 113 insertions, 86 deletions
diff --git a/opnfv/deployment/apex/adapter.py b/opnfv/deployment/apex/adapter.py
index 1b81e78..cb827d8 100644
--- a/opnfv/deployment/apex/adapter.py
+++ b/opnfv/deployment/apex/adapter.py
@@ -25,9 +25,9 @@ class ApexAdapter(manager.DeploymentHandler):
installer_pwd=None,
pkey_file=pkey_file)
- def nodes(self):
+ def get_nodes(self):
nodes = []
- cmd = "source /home/stack/stackrc;nova list 2>/dev/null"
+ cmd = "source /home/stack/stackrc;openstack server list"
output = self.installer_node.run_cmd(cmd)
lines = output.rsplit('\n')
if len(lines) < 4:
@@ -44,12 +44,12 @@ class ApexAdapter(manager.DeploymentHandler):
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])
+ id = re.sub('[!| ]', '', fields[1]).encode()
+ name = re.sub('[!| ]', '', fields[2]).encode()
+ status_node = re.sub('[!| ]', '', fields[3]).encode()
+ ip = re.sub('[!| ctlplane=]', '', fields[4]).encode()
- if status_node == 'ACTIVE':
+ if status_node.lower() == 'active':
status = manager.Node.STATUS_OK
ssh_client = ssh_utils.get_ssh_client(hostname=ip,
username='heat-admin',
diff --git a/opnfv/deployment/example.py b/opnfv/deployment/example.py
index f456832..3999a11 100644
--- a/opnfv/deployment/example.py
+++ b/opnfv/deployment/example.py
@@ -3,6 +3,7 @@
from opnfv.deployment import factory
+print("########## APEX ##########")
handler = factory.Factory.get_handler('apex',
'192.168.122.135',
'stack',
@@ -19,3 +20,17 @@ for node in nodes:
(node.run_cmd('hostname'), node.ip))
print(handler.get_deployment_info())
+
+
+print("########## FUEL ##########")
+handler = factory.Factory.get_handler('fuel',
+ '10.20.0.2',
+ 'root',
+ installer_pwd='r00tme')
+
+print(handler.get_deployment_info())
+
+print("List of nodes in cluster 4:")
+nodes = handler.get_nodes({'cluster': '4'})
+for node in nodes:
+ print(node)
diff --git a/opnfv/deployment/fuel/adapter.py b/opnfv/deployment/fuel/adapter.py
index d53966e..3e6ef50 100644
--- a/opnfv/deployment/fuel/adapter.py
+++ b/opnfv/deployment/fuel/adapter.py
@@ -13,7 +13,7 @@ from opnfv.deployment import manager
from opnfv.utils import opnfv_logger as logger
from opnfv.utils import ssh_utils
-logger = logger.Logger("FuelAdapter").getLogger()
+logger = logger.Logger(__name__).getLogger()
class FuelAdapter(manager.DeploymentHandler):
@@ -40,7 +40,7 @@ class FuelAdapter(manager.DeploymentHandler):
index_name = -1
index_release_id = -1
- for i in range(len(fields) - 1):
+ for i in range(len(fields)):
if "id" in fields[i]:
index_id = i
elif "status" in fields[i]:
@@ -51,7 +51,7 @@ class FuelAdapter(manager.DeploymentHandler):
index_release_id = i
# order env info
- for i in range(2, len(lines) - 1):
+ for i in range(2, len(lines)):
fields = lines[i].rsplit(' | ')
dict = {"id": fields[index_id].strip(),
"status": fields[index_status].strip(),
@@ -61,81 +61,99 @@ class FuelAdapter(manager.DeploymentHandler):
return environments
- def nodes(self, options=None):
+ def get_nodes(self, options=None):
+
+ if options and options['cluster'] and len(self.nodes) > 0:
+ n = []
+ for node in self.nodes:
+ if node.info['cluster'] == options['cluster']:
+ n.append(node)
+ return n
+
+ try:
+ # if we have retrieved previously all the nodes, don't do it again
+ # This fails the first time when the constructor calls this method
+ # therefore the try/except
+ if len(self.nodes) > 0:
+ return self.nodes
+ except:
+ pass
+
nodes = []
cmd = 'fuel node'
output = self.installer_node.run_cmd(cmd)
lines = output.rsplit('\n')
if len(lines) < 2:
logger.info("No nodes found in the deployment.")
- return None
- else:
- # get fields indexes
- fields = lines[0].rsplit(' | ')
-
- index_id = -1
- index_status = -1
- index_name = -1
- index_cluster = -1
- index_ip = -1
- index_mac = -1
- index_roles = -1
- index_online = -1
-
- for i in range(0, len(fields) - 1):
- if "id" in fields[i]:
- index_id = i
- elif "status" in fields[i]:
- index_status = i
- elif "name" in fields[i]:
- index_name = i
- elif "cluster" in fields[i]:
- index_cluster = i
- elif "ip" in fields[i]:
- index_ip = i
- elif "mac" in fields[i]:
- index_mac = i
- elif "roles " in fields[i]:
- index_roles = i
- elif "online" in fields[i]:
- index_online = i
-
- # order nodes info
- for i in range(2, len(lines) - 1):
- fields = lines[i].rsplit(' | ')
-
- id = fields[index_id].strip(),
- ip = fields[index_ip].strip()
- status_node = fields[index_status].strip()
- name = fields[index_name].strip()
- roles = fields[index_roles].strip()
-
- dict = {"cluster": fields[index_cluster].strip(),
- "mac": fields[index_mac].strip(),
- "online": fields[index_online].strip()}
-
- if status_node == 'ready':
- status = manager.Node.STATUS_OK
- proxy = {'ip': self.installer_ip,
- 'username': self.installer_user,
- 'password': self.installer_pwd}
- ssh_client = ssh_utils.get_ssh_client(hostname=ip,
- username='root',
- proxy=proxy)
- else:
- status = manager.Node.STATUS_INACTIVE
- ssh_client = None
-
- node = manager.Node(
- id, ip, name, status, roles, ssh_client, dict)
+ return nodes
+
+ # get fields indexes
+ fields = lines[0].rsplit(' | ')
+
+ index_id = -1
+ index_status = -1
+ index_name = -1
+ index_cluster = -1
+ index_ip = -1
+ index_mac = -1
+ index_roles = -1
+ index_online = -1
+
+ for i in range(len(fields)):
+ if "group_id" in fields[i]:
+ break
+ elif "id" in fields[i]:
+ index_id = i
+ elif "status" in fields[i]:
+ index_status = i
+ elif "name" in fields[i]:
+ index_name = i
+ elif "cluster" in fields[i]:
+ index_cluster = i
+ elif "ip" in fields[i]:
+ index_ip = i
+ elif "mac" in fields[i]:
+ index_mac = i
+ elif "roles " in fields[i]:
+ index_roles = i
+ elif "online" in fields[i]:
+ index_online = i
+
+ # order nodes info
+ for i in range(2, len(lines)):
+ fields = lines[i].rsplit(' | ')
+ id = fields[index_id].strip().encode()
+ ip = fields[index_ip].strip().encode()
+ status_node = fields[index_status].strip().encode()
+ name = fields[index_name].strip().encode()
+ roles = fields[index_roles].strip().encode()
+
+ dict = {"cluster": fields[index_cluster].strip().encode(),
+ "mac": fields[index_mac].strip().encode(),
+ "status_node": status_node,
+ "online": fields[index_online].strip().encode()}
+
+ if status_node == 'ready':
+ status = manager.Node.STATUS_OK
+ proxy = {'ip': self.installer_ip,
+ 'username': self.installer_user,
+ 'password': self.installer_pwd}
+ ssh_client = ssh_utils.get_ssh_client(hostname=ip,
+ username='root',
+ proxy=proxy)
+ else:
+ status = manager.Node.STATUS_INACTIVE
+ ssh_client = None
+
+ node = manager.Node(
+ id, ip, name, status, roles, ssh_client, dict)
+ if options and options['cluster']:
+ if fields[index_cluster].strip() == options['cluster']:
+ nodes.append(node)
+ else:
nodes.append(node)
- # TODO: Add support for Fuel cluster selection
- '''
- if options and options['cluster']:
- if fields[index_cluster].strip() == options['cluster']:
- '''
-
+ self.get_nodes_called = True
return nodes
def get_openstack_version(self):
diff --git a/opnfv/deployment/manager.py b/opnfv/deployment/manager.py
index 9f77ff0..8c9599b 100644
--- a/opnfv/deployment/manager.py
+++ b/opnfv/deployment/manager.py
@@ -243,7 +243,7 @@ class DeploymentHandler(object):
raise Exception(
'Cannot establish connection to the installer node!')
- self.nodes = self.nodes()
+ self.nodes = self.get_nodes()
@abstractmethod
def get_openstack_version(self):
@@ -267,18 +267,12 @@ class DeploymentHandler(object):
raise Exception(DeploymentHandler.FUNCTION_NOT_IMPLEMENTED)
@abstractmethod
- def nodes(self, options=None):
+ def get_nodes(self, options=None):
'''
Generates a list of all the nodes in the deployment
'''
raise Exception(DeploymentHandler.FUNCTION_NOT_IMPLEMENTED)
- def get_nodes(self, options=None):
- '''
- Returns the list of Node objects
- '''
- return self.nodes
-
def get_installer_node(self):
'''
Returns the installer node object
@@ -296,4 +290,4 @@ class DeploymentHandler(object):
pod=os.getenv('NODE_NAME', 'Unknown'),
openstack_version=self.get_openstack_version(),
sdn_controller=self.get_sdn_version(),
- nodes=self.nodes)
+ nodes=self.get_nodes())