Merge "Cisco standalone fabric horizon GUI"
This commit is contained in:
commit
2c06965290
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue