Merge "Cisco standalone fabric horizon GUI"

This commit is contained in:
Jenkins 2016-12-19 19:51:54 +00:00 committed by Gerrit Code Review
commit 2c06965290
4 changed files with 56 additions and 52 deletions

View File

@ -13,16 +13,15 @@
# License for the specific language governing permissions and limitations
# under the License.
import ConfigParser
import json
import logging
import platform
import sys
from networking_cisco.apps.saf.common import config
from networking_cisco.apps.saf.common import constants
from networking_cisco.apps.saf.common import rpc
from horizon import exceptions
from horizon.utils.memoized import memoized
from oslo_config import cfg
import oslo_messaging as messaging
LOG = logging.getLogger(__name__)
@ -31,26 +30,41 @@ class DFAClient(object):
"""Represents fabric enabler command line interface."""
def __init__(self):
self.setup_client()
@memoized
def setup_client(self):
cfgfile = '/etc/saf/enabler_conf.ini'
config = ConfigParser.ConfigParser()
res = config.read(cfgfile)
if not res:
return None
url = config.get('dfa_rpc', 'transport_url')
self.ctl_host = platform.node()
self._cfg = config.CiscoDFAConfig().cfg
url = self._cfg.dfa_rpc.transport_url % ({'ip': self.ctl_host})
self.clnt = rpc.DfaRpcClient(url, constants.DFA_SERVER_QUEUE,
exchange=constants.DFA_EXCHANGE)
url = url % ({'ip': self.ctl_host})
transport = messaging.get_transport(cfg.CONF, url=url)
target = messaging.Target(exchange='dfa',
topic='dfa_server_q', fanout=False)
self.clnt = messaging.RPCClient(transport, target)
return self.clnt
def do_precreate_network(self, network):
'''Precreate network on current version of Fabric Enabler'''
context = {}
args = json.dumps(network)
msg = self.clnt.make_msg('precreate_network', context, msg=args)
try:
resp = self.clnt.call(msg)
resp = self.clnt.call(context, 'precreate_network', msg=args)
if not resp:
raise exceptions.NotAvailable("Project %(id)s not present in "
"fabric enabler" %
{'id': network.get('tenant_id')})
return resp
except (rpc.MessagingTimeout, rpc.RPCException, rpc.RemoteError):
except (messaging.MessagingException, messaging.RemoteError,
messaging.MessagingTimeout):
LOG.error("RPC: Request to precreate network failed.")
raise exceptions.NotAvailable("RPC to Fabric Enabler failed")
@ -59,15 +73,16 @@ class DFAClient(object):
context = {}
args = json.dumps(network)
msg = self.clnt.make_msg('delete_precreate_network', context, msg=args)
try:
resp = self.clnt.call(msg)
resp = self.clnt.call(context, 'delete_precreate_network',
msg=args)
if not resp:
raise exceptions.NotAvailable("Project %(id)s not present in "
"fabric enabler" %
{'id': network.get('tenant_id')})
return resp
except (rpc.MessagingTimeout, rpc.RPCException, rpc.RemoteError):
except (messaging.MessagingException, messaging.RemoteError,
messaging.MessagingTimeout):
LOG.error("RPC: Request to delete precreated network failed.")
raise exceptions.NotAvailable("RPC to Fabric Enabler failed")
@ -76,17 +91,11 @@ class DFAClient(object):
context = {}
args = json.dumps({})
msg = self.clnt.make_msg('get_config_profiles_detail',
context, msg=args)
try:
resp = self.clnt.call(msg)
resp = self.clnt.call(context, 'get_config_profiles_detail',
msg=args)
return resp
except (rpc.MessagingTimeout, rpc.RPCException, rpc.RemoteError):
except (messaging.MessagingException, messaging.RemoteError,
messaging.MessagingTimeout):
LOG.error("RPC: Request for detailed Config Profiles failed.")
raise exceptions.NotAvailable("RPC to Fabric Enabler failed")
def dfa_client():
sys.argv.append('--config-file')
sys.argv.append('/etc/saf/enabler_conf.ini')
return DFAClient()

View File

@ -15,10 +15,6 @@ import mock
import platform
from horizon_cisco_ui.cisco.dfa import dfa_client
from networking_cisco.apps.saf.common import config
from networking_cisco.apps.saf.common import constants
from openstack_dashboard.test import helpers as test
@ -31,13 +27,10 @@ class DFAClientTestCase(test.BaseAdminViewTests):
self._test_dfa_client_init()
def _test_dfa_client_init(self):
with mock.patch('networking_cisco.apps.saf.common.rpc.DfaRpcClient') as dfa_rpc, \
mock.patch.object(config.CiscoDFAConfig, 'cfg') as dfa_cfg:
with mock.patch('horizon_cisco_ui.cisco.dfa.dfa_client.ConfigParser.ConfigParser'), \
mock.patch('oslo_messaging.RPCClient'), \
mock.patch('oslo_messaging.get_transport'):
self.DFAClient = dfa_client.DFAClient()
self.url = dfa_cfg.dfa_rpc.transport_url % ({'ip': self.ip})
dfa_rpc.assert_called_with(self.url,
constants.DFA_SERVER_QUEUE,
exchange=constants.DFA_EXCHANGE)
def test_do_precreate_network(self):
network = dict(tenant_id=1,
@ -46,13 +39,10 @@ class DFAClientTestCase(test.BaseAdminViewTests):
cfgp='defaultNetworkL2Profile')
message = json.dumps(network)
with mock.patch.object(self.DFAClient.clnt, 'make_msg') as mock_make_msg, \
mock.patch.object(self.DFAClient.clnt, 'call') as mock_call:
with mock.patch.object(self.DFAClient.clnt, 'call') as mock_call:
self.DFAClient.do_precreate_network(network)
rpc_make_obj = mock_make_msg.return_value
mock_make_msg.assert_called_with('precreate_network', {}, msg=message)
mock_call.assert_called_with(rpc_make_obj)
mock_call.assert_called_with({}, 'precreate_network', msg=message)
def test_do_precreate_network_not_available_exception(self):
network = dict(tenant_id=1,
@ -75,7 +65,7 @@ class DFAClientTestCase(test.BaseAdminViewTests):
cfgp='defaultNetworkL2Profile')
with mock.patch.object(self.DFAClient.clnt, 'call',
side_effect=dfa_client.rpc.RPCException), \
side_effect=dfa_client.messaging.MessagingException), \
self.assertRaises(dfa_client.exceptions.NotAvailable) as cm:
self.DFAClient.do_precreate_network(network)

View File

@ -45,7 +45,10 @@ class DFAConfigProfileAction(workflows.Action):
def _get_cfg_profiles(self, request):
profiles = []
try:
cfgplist = dfa_client.dfa_client().get_config_profiles_detail()
dfaclient = dfa_client.DFAClient()
if not bool(dfaclient.__dict__):
return profiles
cfgplist = dfaclient.get_config_profiles_detail()
profiles = [profile for cfgp in cfgplist
if (cfgp.get('profileSubType') == 'network:universal')
for profile in [cfgp.get('profileName')]]
@ -98,7 +101,9 @@ class DFACreateNetwork(upstream_networks_workflows.CreateNetwork):
nwk_name=data['net_name'],
subnet=data['cidr'],
cfgp=data['cfg_profile'])
dfaclient = dfa_client.dfa_client()
dfaclient = dfa_client.DFAClient()
if not bool(dfaclient.__dict__):
return False
dfaclient.do_delete_precreate_network(precreate_network)
except Exception as exc:
LOG.error('Unable to delete precreated Network')
@ -116,14 +121,15 @@ class DFACreateNetwork(upstream_networks_workflows.CreateNetwork):
subnet=data['cidr'],
cfgp=data['cfg_profile'])
if data['cfg_profile']:
dfaclient = dfa_client.dfa_client()
try:
precreate_flag = dfaclient.do_precreate_network(
precreate_network)
except Exception as exc:
LOG.error('Unable to do precreate Network')
exceptions.handle(self.request, exc.message)
return False
dfaclient = dfa_client.DFAClient()
if bool(dfaclient.__dict__):
try:
precreate_flag = dfaclient.do_precreate_network(
precreate_network)
except Exception as exc:
LOG.error('Unable to do precreate Network')
exceptions.handle(self.request, exc.message)
return False
network = self._create_network(request, data)
if not network:

View File

@ -17,7 +17,6 @@ setenv = VIRTUAL_ENV={envdir}
PYTHONHASHSEED=0
deps = -r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
networking-cisco
commands = {toxinidir}/manage.py test horizon_cisco_ui --settings=horizon_cisco_ui.test.settings
[testenv:pep8]