impuls/lib/python3.11/site-packages/openstack/network/v2/bgp_speaker.py

170 lines
6.6 KiB
Python

# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from openstack import exceptions
from openstack import resource
from openstack import utils
class BgpSpeaker(resource.Resource):
resource_key = 'bgp_speaker'
resources_key = 'bgp_speakers'
base_path = '/bgp-speakers'
_allow_unknown_attrs_in_body = True
# capabilities
allow_create = True
allow_fetch = True
allow_commit = True
allow_delete = True
allow_list = True
# Properties
#: The Id of the BGP Speaker
id = resource.Body('id')
#: The BGP speaker's name.
name = resource.Body('name')
#: The ID of the project that owns the BGP Speaker.
project_id = resource.Body('project_id', alias='tenant_id')
#: Tenant_id (deprecated attribute).
tenant_id = resource.Body('tenant_id', deprecated=True)
#: The IP version (4 or 6) of the BGP Speaker.
ip_version = resource.Body('ip_version')
#: Whether to enable or disable the advertisement of floating ip host
#: routes by the BGP Speaker. True by default.
advertise_floating_ip_host_routes = resource.Body(
'advertise_floating_ip_host_routes'
)
#: Whether to enable or disable the advertisement of tenant network
#: routes by the BGP Speaker. True by default.
advertise_tenant_networks = resource.Body('advertise_tenant_networks')
#: The local Autonomous System number of the BGP Speaker.
local_as = resource.Body('local_as')
#: The ID of the network to which the BGP Speaker is associated.
networks = resource.Body('networks')
def _put(self, session, url, body):
resp = session.put(url, json=body)
exceptions.raise_from_response(resp)
return resp
def add_bgp_peer(self, session, peer_id):
"""Add BGP Peer to a BGP Speaker
:param session: The session to communicate through.
:type session: :class:`~keystoneauth1.adapter.Adapter`
:param peer_id: id of the peer to associate with the speaker.
:returns: A dictionary as the API Reference describes it.
:raises: :class:`~openstack.exceptions.SDKException` on error.
"""
url = utils.urljoin(self.base_path, self.id, 'add_bgp_peer')
body = {'bgp_peer_id': peer_id}
resp = self._put(session, url, body)
return resp.json()
def remove_bgp_peer(self, session, peer_id):
"""Remove BGP Peer from a BGP Speaker
:param session: The session to communicate through.
:type session: :class:`~keystoneauth1.adapter.Adapter`
:param peer_id: The ID of the peer to disassociate from the speaker.
:raises: :class:`~openstack.exceptions.SDKException` on error.
"""
url = utils.urljoin(self.base_path, self.id, 'remove_bgp_peer')
body = {'bgp_peer_id': peer_id}
self._put(session, url, body)
def add_gateway_network(self, session, network_id):
"""Add Network to a BGP Speaker
:param: session: The session to communicate through.
:type session: :class:`~keystoneauth1.adapter.Adapter`
:param network_id: The ID of the network to associate with the speaker
:returns: A dictionary as the API Reference describes it.
"""
body = {'network_id': network_id}
url = utils.urljoin(self.base_path, self.id, 'add_gateway_network')
resp = session.put(url, json=body)
return resp.json()
def remove_gateway_network(self, session, network_id):
"""Delete Network from a BGP Speaker
:param session: The session to communicate through.
:type session: :class:`~keystoneauth1.adapter.Adapter`
:param network_id: The ID of the network to disassociate
from the speaker
"""
body = {'network_id': network_id}
url = utils.urljoin(self.base_path, self.id, 'remove_gateway_network')
session.put(url, json=body)
def get_advertised_routes(self, session):
"""List routes advertised by a BGP Speaker
:param session: The session to communicate through.
:type session: :class:`~keystoneauth1.adapter.Adapter`
:returns: The response as a list of routes (cidr/nexthop pair
advertised by the BGP Speaker.
:raises: :class:`~openstack.exceptions.SDKException` on error.
"""
url = utils.urljoin(self.base_path, self.id, 'get_advertised_routes')
resp = session.get(url)
exceptions.raise_from_response(resp)
self._body.attributes.update(resp.json())
return resp.json()
def get_bgp_dragents(self, session):
"""List Dynamic Routing Agents hosting a specific BGP Speaker
:param session: The session to communicate through.
:type session: :class:`~keystoneauth1.adapter.Adapter`
:returns: The response as a list of dragents hosting a specific
BGP Speaker.
:raises: :class:`~openstack.exceptions.SDKException` on error.
"""
url = utils.urljoin(self.base_path, self.id, 'bgp-dragents')
resp = session.get(url)
exceptions.raise_from_response(resp)
self._body.attributes.update(resp.json())
return resp.json()
def add_bgp_speaker_to_dragent(self, session, bgp_agent_id):
"""Add BGP Speaker to a Dynamic Routing Agent
:param session: The session to communicate through.
:type session: :class:`~keystoneauth1.adapter.Adapter`
:param bgp_agent_id: The id of the dynamic routing agent to which
add the speaker.
"""
body = {'bgp_speaker_id': self.id}
url = utils.urljoin('agents', bgp_agent_id, 'bgp-drinstances')
session.post(url, json=body)
def remove_bgp_speaker_from_dragent(self, session, bgp_agent_id):
"""Delete BGP Speaker from a Dynamic Routing Agent
:param session: The session to communicate through.
:type session: :class:`~keystoneauth1.adapter.Adapter`
:param bgp_agent_id: The id of the dynamic routing agent from which
remove the speaker.
"""
url = utils.urljoin('agents', bgp_agent_id, 'bgp-drinstances', self.id)
session.delete(url)