Merge "Octavia LB status admin util" into stable/victoria

This commit is contained in:
Zuul 2021-05-05 15:39:14 +00:00 committed by Gerrit Code Review
commit 40682e8bb9
8 changed files with 155 additions and 2 deletions

View File

@ -351,6 +351,13 @@ Config
nsxadmin -r config -o validate
Loadbalancers
~~~~~~~~~~~~~
- Set an Octavia loadbalancer id to ERROR status. Useful while the loadbalancer hangs in PENDING status::
nsxadmin -r loadbalancers -o set-status-error --property loadbalancer-id=<loadbalancer id>
NSX-T Plugin
------------
@ -628,6 +635,13 @@ T2P migration
nsxadmin -r nsx-migrate-t2p -o clean-all
Loadbalancers
~~~~~~~~~~~~~
- Set an Octavia loadbalancer id to ERROR status. Useful while the loadbalancer hangs in PENDING status::
nsxadmin -r loadbalancers -o set-status-error --property loadbalancer-id=<loadbalancer id>
NSXtvd Plugin
-------------
@ -694,6 +708,10 @@ NSX Policy Plugin
nsxadmin -r nsx-migrate-v2t -o validate --property ext-net=<path> --property ext-cidr=<path>
- Set an Octavia loadbalancer id to ERROR status. Useful while the loadbalancer hangs in PENDING status::
nsxadmin -r loadbalancers -o set-status-error --property loadbalancer-id=<loadbalancer id>
Client Certificate
~~~~~~~~~~~~~~~~~~

View File

@ -44,7 +44,7 @@ RPC_SERVER = None
def _log_before_retry(retry_state):
if retry_state.attempt_number > 0:
if retry_state.attempt_number > 1:
LOG.warning("Retrying the call to _update_loadbalancer_status due to "
"timeout")
@ -704,7 +704,7 @@ class NSXOctaviaDriverEndpoint(driver_lib.DriverLibrary):
retry=tenacity.retry_if_exception_type(
exceptions.UpdateStatusError))
def _update_loadbalancer_status(self, status):
super(NSXOctaviaDriverEndpoint,
return super(NSXOctaviaDriverEndpoint,
self).update_loadbalancer_status(status)
@log_helpers.log_method_call

View File

@ -37,6 +37,7 @@ CONFIG = 'config'
ORPHANED_NETWORKS = 'orphaned-networks'
ORPHANED_ROUTERS = 'orphaned-routers'
SYSTEM = 'system'
LOADBALANCERS = 'loadbalancers'
# NSXV3 only Resource Constants
PORTS = 'ports'

View File

@ -0,0 +1,52 @@
# Copyright 2021 VMware, Inc.
# All Rights Reserved
#
# 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 oslo_config import cfg
from oslo_log import log as logging
import oslo_messaging as messaging
from vmware_nsx.services.lbaas.octavia import constants as octavia_const
from vmware_nsx.shell.admin.plugins.common import utils as admin_utils
LOG = logging.getLogger(__name__)
@admin_utils.output_header
def set_loadbalancer_status_error(resource, event, trigger, **kwargs):
usage_msg = ("Loadbalancer id should be specified with "
"--property loadbalancer-id=<id>")
if not kwargs.get('property'):
LOG.error(usage_msg)
return
properties = admin_utils.parse_multi_keyval_opt(kwargs['property'])
lb_id = properties.get('loadbalancer-id')
if not lb_id:
LOG.error("Need to specify loadbalancer-id. "
"Add --property loadbalancer-id=<id>")
return
status_dict = {
octavia_const.LOADBALANCERS: [{
'id': lb_id,
octavia_const.PROVISIONING_STATUS: octavia_const.ERROR}]}
kw = {'status': status_dict}
topic = octavia_const.DRIVER_TO_OCTAVIA_TOPIC
transport = messaging.get_rpc_transport(cfg.CONF)
target = messaging.Target(topic=topic, exchange="common",
namespace='control', fanout=False,
version='1.0')
client = messaging.RPCClient(transport, target)
client.cast({}, 'update_loadbalancer_status', **kw)

View File

@ -0,0 +1,25 @@
# Copyright 2021 VMware, Inc.
# All Rights Reserved
#
# 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 neutron_lib.callbacks import registry
from vmware_nsx.shell.admin.plugins.common import constants
from vmware_nsx.shell.admin.plugins.common import loadbalancers
from vmware_nsx.shell import resources as shell
registry.subscribe(loadbalancers.set_loadbalancer_status_error,
constants.LOADBALANCERS,
shell.Operations.SET_STATUS_ERROR.value)

View File

@ -0,0 +1,25 @@
# Copyright 2021 VMware, Inc.
# All Rights Reserved
#
# 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 neutron_lib.callbacks import registry
from vmware_nsx.shell.admin.plugins.common import constants
from vmware_nsx.shell.admin.plugins.common import loadbalancers
from vmware_nsx.shell import resources as shell
registry.subscribe(loadbalancers.set_loadbalancer_status_error,
constants.LOADBALANCERS,
shell.Operations.SET_STATUS_ERROR.value)

View File

@ -0,0 +1,25 @@
# Copyright 2021 VMware, Inc.
# All Rights Reserved
#
# 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 neutron_lib.callbacks import registry
from vmware_nsx.shell.admin.plugins.common import constants
from vmware_nsx.shell.admin.plugins.common import loadbalancers
from vmware_nsx.shell import resources as shell
registry.subscribe(loadbalancers.set_loadbalancer_status_error,
constants.LOADBALANCERS,
shell.Operations.SET_STATUS_ERROR.value)

View File

@ -77,6 +77,7 @@ class Operations(enum.Enum):
REUSE = 'reuse'
UPDATE_TIER0 = 'update-tier0'
UPDATE_FIREWALL_MATCH = 'update-nat-firewall-match'
SET_STATUS_ERROR = 'set-status-error'
ops = [op.value for op in Operations]
@ -162,6 +163,8 @@ nsxv3_resources = {
[Operations.IMPORT.value,
Operations.CLEAN_ALL.value,
Operations.VALIDATE.value]),
constants.LOADBALANCERS: Resource(constants.LOADBALANCERS,
[Operations.SET_STATUS_ERROR.value]),
}
# Add supported NSX-V resources in this dictionary
@ -258,6 +261,8 @@ nsxv_resources = {
[Operations.VALIDATE.value]),
constants.PORTS: Resource(constants.PORTS,
[Operations.LIST.value]),
constants.LOADBALANCERS: Resource(constants.LOADBALANCERS,
[Operations.SET_STATUS_ERROR.value]),
}
@ -296,6 +301,8 @@ nsxp_resources = {
[Operations.CLEAN_ALL.value,
Operations.VALIDATE.value,
Operations.NSX_REDISTRIBUTE.value]),
constants.LOADBALANCERS: Resource(constants.LOADBALANCERS,
[Operations.SET_STATUS_ERROR.value]),
}
nsxv3_resources_names = list(nsxv3_resources.keys())