config/sysinv/sysinv/sysinv/sysinv/objects/interface_datanetwork.py
John Kung 1a502b9151 Create DataNetworks modelling in System Configuration
Introduce the DataNetwork api, client, model to allow modelling of the
physical data network, with the following attributes:
   datanetwork_name
   mtu
   datanetwork_type (flat, vlan, vxlan)
   VxLAN specific attributes
      - port_number
      - multicast_group
      - ttl
      - mode ('dynamic' default, or 'static')

The system data network may then be assigned to interface.

This is part of the Story to "Move neutron provider network modelling
to system configuration".

The interface api is currently made compatible with current usage to
allow specifying datanetwork (formerly providernetwork).

The following new CLI commands and corresponding api are exposed:
    datanetwork-add     Add a datanetwork.
    datanetwork-delete  Delete a datanetwork.
    datanetwork-list    List datanetworks.
    datanetwork-modify  Modify a datanetwork.
    datanetwork-show    Show datanetwork details.
    interface-datanetwork-assign
                       Assign a datanetwork to an interface.
    interface-datanetwork-list
                       List datanetwork interfaces.
    interface-datanetwork-remove
                       Remove an assigned datanetwork from an interface.
    interface-datanetwork-show
                       Show interface datanetwork details.

'system datanetwork-add' must be run where
    'neutron providernetwork-create'.

Tests Performed:
    AIO Sanity
    Sanity 2-controller, 2-compute
    Sanity Storage lab
    Interface Profile create and apply
    Containers deployment

Change-Id: I630f90768647dbb414a60978bf8f8f641496afd5
Story: 2004455
Task: 28324
Signed-off-by: John Kung <john.kung@windriver.com>
2019-01-22 17:43:45 -05:00

111 lines
3.1 KiB
Python

#
# Copyright (c) 2019 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# coding=utf-8
#
from sysinv.db import api as db_api
from sysinv.objects import base
from sysinv.objects import utils
from oslo_log import log
LOG = log.getLogger(__name__)
def _get_mtu(field, db_object):
mtu = None
datanetwork = getattr(db_object, 'datanetwork', None)
if hasattr(datanetwork, 'mtu'):
mtu = datanetwork.mtu
return mtu
def _get_multicast_group(field, db_object):
multicast_group = None
datanetwork = getattr(db_object, 'datanetwork', None)
if hasattr(datanetwork, 'multicast_group'):
multicast_group = datanetwork.multicast_group
return multicast_group
def _get_port_num(field, db_object):
port_num = None
datanetwork = getattr(db_object, 'datanetwork', None)
if hasattr(datanetwork, 'port_num'):
port_num = datanetwork.port_num
return port_num
def _get_ttl(field, db_object):
ttl = None
datanetwork = getattr(db_object, 'datanetwork', None)
if hasattr(datanetwork, 'ttl'):
ttl = datanetwork.ttl
return ttl
def _get_mode(field, db_object):
mode = None
datanetwork = getattr(db_object, 'datanetwork', None)
if hasattr(datanetwork, 'mode'):
mode = datanetwork.mode
return mode
class InterfaceDataNetwork(base.SysinvObject):
VERSION = '1.0'
dbapi = db_api.get_instance()
fields = {
'id': int,
'uuid': utils.uuid_or_none,
'forihostid': utils.int_or_none,
'interface_id': utils.int_or_none,
'interface_uuid': utils.uuid_or_none,
'ifname': utils.str_or_none,
'datanetwork_id': utils.int_or_none,
'datanetwork_uuid': utils.uuid_or_none,
'datanetwork_name': utils.str_or_none,
'datanetwork_network_type': utils.str_or_none,
'datanetwork_description': utils.str_or_none,
'datanetwork_mtu': utils.int_or_none,
'datanetwork_port_num': utils.int_or_none,
'datanetwork_multicast_group': utils.str_or_none,
'datanetwork_ttl': utils.int_or_none,
'datanetwork_mode': utils.str_or_none,
}
_foreign_fields = {
'forihostid': 'interface:forihostid',
'interface_id': 'interface:id',
'interface_uuid': 'interface:uuid',
'ifname': 'interface:ifname',
'datanetwork_uuid': 'datanetwork:uuid',
'datanetwork_id': 'datanetwork:id',
'datanetwork_name': 'datanetwork:name',
'datanetwork_network_type': 'datanetwork:network_type',
'datanetwork_description': 'datanetwork:description',
'datanetwork_mtu': _get_mtu,
'datanetwork_port_num': _get_port_num,
'datanetwork_multicast_group': _get_multicast_group,
'datanetwork_ttl': _get_ttl,
'datanetwork_mode': _get_mode,
}
_optional_fields = {
'datanetwork_port_num',
'datanetwork_multicast_group',
'datanetwork_ttl',
'datanetwork_mode',
}
@base.remotable_classmethod
def get_by_uuid(cls, context, uuid):
return cls.dbapi.interface_datanetwork_get(uuid)