Contrail / Tungsten Fabric support
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Octavia Charm |
New
|
Undecided
|
Unassigned |
Bug Description
Juniper Contrail / Tungsten Fabric charmed deployments currently recommend using a custom build of the octavia charm (https:/
Use of this charm is officially documented here:
https:/
https:/
Besides the fact that it doesn't make sense for a forked charm to exist with these minor changes and they should be upstream anyway, this charm was built in May 2021 and has not been updated since leaving new deployments missing 11+ months of fixes to the charm and the octavia charm team unable to patch the charm in these environments.
We somehow need to review/understand and upstream functionality to make our charm work and then get the documentation updated to deprecate this charm. The 4 patches included appear to be:
(1) src/lib/
Replaced with:
return ch_net_
Not immediately clear why the original code doesn't work here - need to research further
(2) src/lib/
Replaced with:
return ch_net_
Not immediately clear why the original code doesn't work here - need to research further
(3) lib/charm/
Function just runs "return". This function seems OVS specific so it needs to somehow only run the OVS specific setup when appropriate.
(4) lib/charm/
@@ -780,7 +785,16 @@ def set_service_
- "floatingip": _ul, "router": _ul, "rbac_policy": _ul}})
+ "floatingip": _ul, "router": _ul}})
+ try:
+ nc.update_quota(
+ identity_
+ body={
+ "quota": {"rbac_policy": _ul}})
+ except Exception:
+ # TF returns exception for OpenStack Ussury for this type of quota
+ # TODO: fix TF and remove this hack
+ pass
Need to follow-up on if this was fixed and whether it covers all deployed versions or otherwise how we can correctly detect and deal with this situation properly.
Full diff output between "charm pull apavlov-e-octavia" and git commit e24860fdeecbe63 154f45b81c140c7 12143f8927 (from repo-info in the built charm)
$ git diff --no-index charm-octavia/ src/lib/ charm/openstack /octavia. py octavia/ lib/charm/ openstack/ octavia. py octavia/ src/lib/ charm/openstack /octavia. py b/octavia/ lib/charm/ openstack/ octavia. py octavia/ src/lib/ charm/openstack /octavia. py lib/charm/ openstack/ octavia. py manager_ bind_ip( cls): ip.get_ host_ip( ch_core. hookenv. network_ get("public" )["ingress- addresses" ][0]) ip_port_ list(cls) : ip.get_ host_ip( ch_core. hookenv. network_ get("public" )["ingress- addresses" ][0]) + ':' + OCTAVIA_ HEALTH_ LISTEN_ PORT
leadershi p.leader_ get('controller -ip-port- list'))
diff --git a/charm-
index 4677856..5e78fe3 100644
--- a/charm-
+++ b/octavia/
@@ -97,6 +97,11 @@ def health_
:returns: IP address of unit local Health Manager interface.
:rtype: str
"""
+
+ # -> contrail addition
+ return ch_net_
+ # <- contrail addition
+
ip_list = []
for af in ['AF_INET6', 'AF_INET']:
try:
@@ -143,6 +148,11 @@ def controller_
:returns: Comma separated list of ip:port pairs.
:rtype: str
"""
+
+ # -> contrail addition
+ return ch_net_
+ # <- contrail addition
+
try:
ip_list = json.loads(
$ git diff --no-index charm-octavia/ src/lib/ charm/openstack /api_crud. py octavia/ lib/charm/ openstack/ api_crud. py octavia/ src/lib/ charm/openstack /api_crud. py b/octavia/ lib/charm/ openstack/ api_crud. py octavia/ src/lib/ charm/openstack /api_crud. py lib/charm/ openstack/ api_crud. py port(identity_ service, octavia_charm, host_id=None): APIUnavailable, api_crud. DuplicateResour ce
identity_ service, quotas_ unlimited( identity_ service) :
"quota" : {
"port": _ul, "security_group": _ul,
"security_ group_rule" : _ul, "network": _ul, "subnet": _ul, service. service_ tenant_ id(), exceptions. catalog. EndpointNotFoun d,
keystone_ exceptions. connection. ConnectFailure,
nova_ client. exceptions. ClientException ) as e:
diff --git a/charm-
index 81c8b31..16cd1bb 100644
--- a/charm-
+++ b/octavia/
@@ -424,6 +424,11 @@ def setup_hm_
:rtype: bool
:raises: api_crud.
"""
+
+ # -> contrail addition
+ return
+ # <- contrail addition
+
unit_changed = False
hm_port = get_hm_port(
@@ -780,7 +785,16 @@ def set_service_
- "floatingip": _ul, "router": _ul, "rbac_policy": _ul}})
+ "floatingip": _ul, "router": _ul}})
+ try:
+ nc.update_quota(
+ identity_
+ body={
+ "quota": {"rbac_policy": _ul}})
+ except Exception:
+ # TF returns exception for OpenStack Ussury for this type of quota
+ # TODO: fix TF and remove this hack
+ pass
except (keystone_