Source code for octavia.cmd.interface
# Copyright 2020 Red Hat, 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.
import sys
from oslo_config import cfg
from octavia.amphorae.backends.utils import interface
from octavia.common import config
from octavia.common import exceptions
[docs]
class InterfaceException(exceptions.OctaviaException):
message = "Could not configure interface: %(msg)s"
[docs]
def interfaces_find(interface_controller, name):
all_interfaces = interface_controller.list()
if name == "all":
return all_interfaces.values()
if name in all_interfaces:
return [all_interfaces[name]]
msg = f"Could not find interface '{name}'."
raise InterfaceException(msg=msg)
[docs]
def interfaces_update(interfaces, action_fn, action_str):
errors = []
for iface in interfaces:
try:
action_fn(iface)
except Exception as e:
errors.append("Error on action '{}' for interface {}: {}.".format(
action_str, iface.name, e))
if errors:
raise InterfaceException(msg=", ".join(errors))
[docs]
def interface_cmd(interface_name, action):
interface_controller = interface.InterfaceController()
if action == "up":
action_fn = interface_controller.up
elif action == "down":
action_fn = interface_controller.down
else:
raise InterfaceException(
msg=f"Unknown action '{action}'")
interfaces = interfaces_find(interface_controller,
interface_name)
interfaces_update(interfaces, action_fn, action)
[docs]
def main():
config.init(sys.argv[1:-2])
config.setup_logging(cfg.CONF)
try:
action = sys.argv[-2]
interface_name = sys.argv[-1]
except IndexError:
print(f"usage: {sys.argv[0]} [up|down] <interface>")
sys.exit(1)
try:
interface_cmd(interface_name, action)
except Exception as e:
print(f"Error: {e}")
sys.exit(2)