Files
python-brick-cinderclient-ext/brick_cinderclient_ext/brick_utils.py
Michael Dovgal f909d1d870 Add --nic attr to get-connector command
Added attribute permits usage of different network
interfaces for getting connector.

Change-Id: If08c7094b233ee440642f6e4651656f6332c9460
2017-01-25 12:36:21 +02:00

81 lines
2.4 KiB
Python

# Copyright 2011-2014 OpenStack Foundation
# 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 netifaces
import os
import socket
from brick_cinderclient_ext import exceptions as exc
from cinderclient import exceptions
from oslo_concurrency import processutils
def get_my_ip():
try:
csock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
csock.connect(('8.8.8.8', 80))
(addr, port) = csock.getsockname()
csock.close()
return addr
except socket.error:
return None
def get_ip(nic_name=None):
"""Getting ip address by network interface name.
:param nic_name: interface name
:returns: ip address from interface or default ip
"""
# TODO(mdovgal): add ipv6 support
if not nic_name:
return get_my_ip()
existing_ifaces = netifaces.interfaces()
if nic_name not in existing_ifaces:
raise exc.NicNotFound(iface=nic_name)
# get necessary iface information
iface = netifaces.ifaddresses(nic_name)
try:
return iface[netifaces.AF_INET][0]['addr']
except KeyError:
raise exc.IncorrectNic(iface=nic_name)
def get_root_helper():
# NOTE (e0ne): We don't use rootwrap now
return 'sudo'
def require_root(f):
def wrapper(*args, **kwargs):
if os.getuid() != 0:
raise exceptions.CommandError(
"This command requires root permissions.")
return f(*args, **kwargs)
return wrapper
def safe_execute(cmd):
try:
processutils.execute(*cmd, root_helper=get_root_helper(),
run_as_root=True)
except processutils.ProcessExecutionError as e:
print('Command "{0}" execution returned {1} exit code:'.format(
e.cmd, e.exit_code))
print('Stderr: {0}'.format(e.stderr))
print('Stdout: {0}'.format(e.stdout))