X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FRO.git;a=blobdiff_plain;f=RO-plugin%2Fosm_ro_plugin%2Fvimconn.py;h=2baa202299710be80803b0b0c5d5ee84c19713f3;hp=cc087f0a38b19453d9e76e6fc0c8ba1603e34259;hb=2e307cf84eabefe994b8fe225bd9c468ecbc2a41;hpb=80135b928ab442c38898750b4751480205b4affc diff --git a/RO-plugin/osm_ro_plugin/vimconn.py b/RO-plugin/osm_ro_plugin/vimconn.py index cc087f0a..2baa2022 100644 --- a/RO-plugin/osm_ro_plugin/vimconn.py +++ b/RO-plugin/osm_ro_plugin/vimconn.py @@ -26,17 +26,19 @@ vimconn implement an Abstract class for the vim connector plugins with the definition of the method to be implemented. """ -import logging -import paramiko -import socket -from io import StringIO -import yaml -import sys from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from http import HTTPStatus +from io import StringIO +import logging +import socket +import sys +import traceback import warnings +import paramiko +import yaml + __author__ = "Alfonso Tierno, Igor D.C." __date__ = "$14-aug-2017 23:59:59$" @@ -527,6 +529,29 @@ class VimConnector: """ raise VimConnNotImplemented("Should have implemented this") + def get_affinity_group(self, affinity_group_id): + """Obtain affinity or anti affinity group details from the VIM + Returns the flavor dict details {'id':<>, 'name':<>, other vim specific } + Raises an exception upon error or if not found + """ + raise VimConnNotImplemented("Should have implemented this") + + def new_affinity_group(self, affinity_group_data): + """Adds an affinity or anti affinity group to VIM + affinity_group_data contains a dictionary with information, keys: + name: name in VIM for the affinity or anti-affinity group + type: affinity or anti-affinity + scope: Only nfvi-node allowed + Returns the affinity or anti affinity group identifier + """ + raise VimConnNotImplemented("Should have implemented this") + + def delete_affinity_group(self, affinity_group_id): + """Deletes an affinity or anti affinity group from the VIM identified by its id + Returns the used id or raise an exception + """ + raise VimConnNotImplemented("Should have implemented this") + def new_image(self, image_dict): """Adds a tenant image to VIM Returns the image id or raises an exception if failed @@ -565,6 +590,7 @@ class VimConnector: start, image_id, flavor_id, + affinity_group_list, net_list, cloud_config=None, disk_list=None, @@ -575,6 +601,8 @@ class VimConnector: Params: 'start': (boolean) indicates if VM must start or created in pause mode. 'image_id','flavor_id': image and flavor VIM id to use for the VM + affinity_group_list: list of affinity groups, each one is a dictionary. + Ignore if empty. 'net_list': list of interfaces, each one is a dictionary with: 'name': (optional) name for the interface. 'net_id': VIM network id where this interface must be connect to. Mandatory for type==virtual @@ -729,6 +757,11 @@ class VimConnector: "chmod 644 ~/.ssh/authorized_keys", "chmod 700 ~/.ssh/", } + + logging.basicConfig( + format="%(asctime)s %(levelname)s %(name)s %(filename)s:%(lineno)s %(message)s" + ) + logging.getLogger("paramiko").setLevel(logging.DEBUG) client = paramiko.SSHClient() try: @@ -738,33 +771,39 @@ class VimConnector: pkey = None client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( - ip_addr, username=user, password=password, pkey=pkey, timeout=10 + ip_addr, + username=user, + password=password, + pkey=pkey, + timeout=30, + auth_timeout=60, ) for command in commands: - (i, o, e) = client.exec_command(command, timeout=10) + (i, o, e) = client.exec_command(command, timeout=30) returncode = o.channel.recv_exit_status() outerror = e.read() if returncode != 0: text = "run_command='{}' Error='{}'".format(command, outerror) + self.logger.debug(traceback.format_tb(e.__traceback__)) raise VimConnUnexpectedResponse( "Cannot inject ssh key in VM: '{}'".format(text) ) - return except ( socket.error, paramiko.AuthenticationException, paramiko.SSHException, ) as message: + self.logger.debug(traceback.format_exc()) raise VimConnUnexpectedResponse( "Cannot inject ssh key in VM: '{}' - {}".format( ip_addr, str(message) ) ) - return # Optional methods @@ -1050,6 +1089,15 @@ class VimConnector: """ raise VimConnNotImplemented("SFC support not implemented") + def migrate_instance(self, vm_id, compute_host=None): + """Migrate a vdu + Params: + vm_id: ID of an instance + compute_host: Host to migrate the vdu to + Returns the vm state or raises an exception upon error + """ + raise VimConnNotImplemented("Should have implemented this") + # NOT USED METHODS in current version. Deprecated @deprecated def host_vim2gui(self, host, server_dict):