Merge "fix tox python3 overrides"

This commit is contained in:
Zuul 2018-07-05 23:01:34 +00:00 committed by Gerrit Code Review
commit a74f8b4874
52 changed files with 164 additions and 109 deletions

View File

@ -51,7 +51,11 @@ disable=
too-many-locals,
too-many-public-methods,
too-many-return-statements,
too-many-statements
too-many-statements,
multiple-statements,
duplicate-except,
keyword-arg-before-vararg,
deprecated-method
[BASIC]
# Variable names can be 1 to 31 characters long, with lowercase and underscores
@ -80,8 +84,6 @@ max-line-length=79
additional-builtins=
[CLASSES]
# List of interface methods to ignore, separated by a comma.
ignore-iface-methods=
[IMPORTS]
# Deprecated modules which should not be used, separated by a comma
@ -94,4 +96,3 @@ ignored-modules=six.moves,_MovedItems
[REPORTS]
# Tells whether to display a full report or only the messages
reports=no

View File

@ -4,7 +4,7 @@
# Docs
os-api-ref>=1.4.0 # Apache-2.0
sphinxcontrib-actdiag>=0.8.5 # BSD
sphinxcontrib-apidoc # BSD
sphinxcontrib-apidoc>=0.2.1 # BSD
sphinxcontrib-blockdiag>=1.5.4 # BSD
sphinxcontrib-nwdiag>=0.9.5 # BSD
sphinxcontrib-seqdiag>=0.8.4 # BSD

View File

@ -109,7 +109,7 @@ pycparser==2.18
pyflakes==1.0.0
Pygments==2.2.0
pyinotify==0.9.6
pylint==1.4.5
pylint==1.9.2
PyMySQL==0.7.6
PyNaCl==1.2.1
pyOpenSSL==17.1.0

View File

@ -18,6 +18,7 @@ import gettext
import six
if six.PY2:
gettext.install('octavia', unicode=1)
gettext.install('octavia', # pylint: disable=unexpected-keyword-arg
unicode=1)
else:
gettext.install('octavia')

View File

@ -18,11 +18,11 @@ import re
import socket
import subprocess
import netifaces
import pyroute2
import six
import webob
import netifaces
from octavia.amphorae.backends.agent import api_server
from octavia.amphorae.backends.agent.api_server import util
from octavia.common import constants as consts

View File

@ -480,8 +480,7 @@ class Listener(object):
m = re.search('frontend {}'.format(listener_id), cfg)
if m:
return consts.ACTIVE
else:
return consts.OFFLINE
return consts.OFFLINE
else: # pid file but no process...
return consts.ERROR
else:
@ -539,8 +538,8 @@ class Listener(object):
if action == consts.AMP_ACTION_STOP:
listener_ids.remove(listener_id)
args = []
for listener_id in listener_ids:
args.append(util.haproxy_sock_path(listener_id))
for lid in listener_ids:
args.append(util.haproxy_sock_path(lid))
if not os.path.exists(util.keepalived_dir()):
os.makedirs(util.keepalived_dir())
@ -555,7 +554,4 @@ class Listener(object):
if os.path.exists(
os.path.join('/proc', util.get_haproxy_pid(listener_id))):
return consts.ACTIVE
else: # pid file but no process...
return consts.OFFLINE
else:
return consts.OFFLINE
return consts.OFFLINE

View File

@ -95,7 +95,7 @@ class BaseOS(object):
text = template_vip.render(
interface=primary_interface,
vip=vip,
vip_ipv6=ip.version is 6,
vip_ipv6=ip.version == 6,
prefix=utils.netmask_to_prefix(netmask),
broadcast=broadcast,
netmask=netmask,
@ -103,7 +103,7 @@ class BaseOS(object):
network=utils.ip_netmask_to_cidr(vip, netmask),
mtu=mtu,
vrrp_ip=vrrp_ip,
vrrp_ipv6=vrrp_version is 6,
vrrp_ipv6=vrrp_version == 6,
host_routes=render_host_routes,
)
text_file.write(text)
@ -150,7 +150,7 @@ class BaseOS(object):
cidr if isinstance(
cidr, six.text_type) else six.u(cidr))
broadcast = network.broadcast_address.exploded
netmask = (network.prefixlen if ip.version is 6
netmask = (network.prefixlen if ip.version == 6
else network.netmask.exploded)
host_routes = self.get_host_routes(fixed_ip)
@ -158,7 +158,7 @@ class BaseOS(object):
return webob.Response(
json=dict(message="Invalid network IP"), status=400)
new_text = template_port.render(interface=netns_ip_interface,
ipv6=ip.version is 6,
ipv6=ip.version == 6,
ip_address=ip.exploded,
broadcast=broadcast,
netmask=netmask,

View File

@ -20,7 +20,6 @@ import stat
import subprocess
import jinja2
import netifaces
from oslo_config import cfg
from oslo_log import log as logging
import pyroute2
@ -28,6 +27,7 @@ import six
import webob
from werkzeug import exceptions
import netifaces
from octavia.common import constants as consts
@ -60,7 +60,7 @@ class Plug(object):
else six.u(subnet_cidr))
vip = ip.exploded
broadcast = network.broadcast_address.exploded
netmask = (network.prefixlen if ip.version is 6
netmask = (network.prefixlen if ip.version == 6
else network.netmask.exploded)
vrrp_version = None
if vrrp_ip:

View File

@ -136,8 +136,7 @@ def get_os_init_system():
if os.path.exists(init_path):
args = [init_path, '--version']
init_version = subprocess.check_output(args, shell=False)
if consts.INIT_UPSTART in init_version:
if consts.INIT_UPSTART in str(init_version, 'utf-8'):
return consts.INIT_UPSTART
else:
return consts.INIT_SYSVINIT
return consts.INIT_SYSVINIT
return consts.INIT_UNKOWN

View File

@ -27,9 +27,10 @@ from octavia.amphorae.backends.health_daemon import health_sender
from octavia.amphorae.backends.utils import haproxy_query
if six.PY2:
import Queue as queue
import Queue as queue # pylint: disable=wrong-import-order
else:
import queue
import queue # pylint: disable=wrong-import-order
CONF = cfg.CONF
LOG = logging.getLogger(__name__)
@ -91,10 +92,10 @@ def run_sender(cmd_queue):
try:
cmd = cmd_queue.get_nowait()
if cmd is 'reload':
if cmd == 'reload':
LOG.info('Reloading configuration')
CONF.reload_config_files()
elif cmd is 'shutdown':
elif cmd == 'shutdown':
LOG.info('Health Manager Sender shutting down.')
break
except queue.Empty:

View File

@ -44,7 +44,7 @@ class Details(models.BaseDataModel):
active=None, haproxy_count=None, cpu=None, memory=None,
disk=None, load=None, listeners=None, packages=None):
self.hostname = hostname
self.uuid = uuid,
self.uuid = uuid
self.version = version
self.api_version = api_version
self.network_tx = network_tx

View File

@ -324,6 +324,7 @@ class AmphoraAPIClient(object):
'listeners/{listener_id}'.format(listener_id=listener_id))
if exc.check_exception(r):
return r.json()
return None
def _action(self, action, amp, listener_id):
r = self.put(amp, 'listeners/{listener_id}/{action}'.format(
@ -348,6 +349,7 @@ class AmphoraAPIClient(object):
listener_id=listener_id, filename=pem_filename))
if exc.check_exception(r):
return r.json().get("md5sum")
return None
def delete_listener(self, amp, listener_id):
r = self.delete(
@ -359,16 +361,19 @@ class AmphoraAPIClient(object):
r = self.get(amp, "info")
if exc.check_exception(r):
return r.json()
return None
def get_details(self, amp):
r = self.get(amp, "details")
if exc.check_exception(r):
return r.json()
return None
def get_all_listeners(self, amp):
r = self.get(amp, "listeners")
if exc.check_exception(r):
return r.json()
return None
def delete_cert_pem(self, amp, listener_id, pem_filename):
r = self.delete(
@ -400,3 +405,4 @@ class AmphoraAPIClient(object):
r = self.get(amp, 'interface/{ip_addr}'.format(ip_addr=ip_addr))
if exc.check_exception(r):
return r.json()
return None

View File

@ -67,8 +67,8 @@ def simulate_controller(data_model, delete=False, update=False, create=False,
operating_status=constants.ONLINE)
elif batch_update:
members = member
for member in members:
repo.member.update(db_api.get_session(), member.id,
for m in members:
repo.member.update(db_api.get_session(), m.id,
operating_status=constants.ONLINE)
listeners = []
if db_mem:

View File

@ -169,7 +169,7 @@ class L7PolicyController(base.BaseController):
which controller, if any, should control be passed.
"""
context = pecan.request.context.get('octavia_context')
if l7policy_id and len(remainder) and remainder[0] == 'l7rules':
if l7policy_id and remainder and remainder[0] == 'l7rules':
remainder = remainder[1:]
db_l7policy = self.repositories.l7policy.get(
context.session, id=l7policy_id)
@ -181,3 +181,4 @@ class L7PolicyController(base.BaseController):
load_balancer_id=self.load_balancer_id,
listener_id=self.listener_id,
l7policy_id=db_l7policy.id), remainder
return None

View File

@ -251,9 +251,14 @@ class ListenersController(base.BaseController):
which controller, if any, should control be passed.
"""
context = pecan.request.context.get('octavia_context')
if listener_id and len(remainder) and (remainder[0] == 'pools' or
remainder[0] == 'l7policies' or
remainder[0] == 'stats'):
is_children = (
listener_id and remainder and (
remainder[0] == 'pools' or (
remainder[0] == 'l7policies' or remainder[0] == 'stats'
)
)
)
if is_children:
controller = remainder[0]
remainder = remainder[1:]
db_listener = self.repositories.listener.get(
@ -273,3 +278,4 @@ class ListenersController(base.BaseController):
elif controller == 'stats':
return listener_statistics.ListenerStatisticsController(
listener_id=db_listener.id), remainder
return None

View File

@ -271,7 +271,7 @@ class LoadBalancersController(base.BaseController):
context = pecan.request.context.get('octavia_context')
possible_remainder = ('listeners', 'pools', 'delete_cascade', 'stats')
if lb_id and len(remainder) and (remainder[0] in possible_remainder):
if lb_id and remainder and (remainder[0] in possible_remainder):
controller = remainder[0]
remainder = remainder[1:]
db_lb = self.repositories.load_balancer.get(context.session,
@ -291,6 +291,7 @@ class LoadBalancersController(base.BaseController):
elif controller == 'stats':
return lb_stats.LoadBalancerStatisticsController(
loadbalancer_id=db_lb.id), remainder
return None
class LBCascadeDeleteController(LoadBalancersController):

View File

@ -200,7 +200,7 @@ class PoolsController(base.BaseController):
"""Deletes a pool from a load balancer."""
context = pecan.request.context.get('octavia_context')
db_pool = self._get_db_pool(context.session, id)
if len(db_pool.l7policies) > 0:
if db_pool.l7policies:
raise exceptions.PoolInUseByL7Policy(
id=db_pool.id, l7policy_id=db_pool.l7policies[0].id)
self._test_lb_and_listener_statuses(context.session, pool=db_pool)
@ -228,8 +228,12 @@ class PoolsController(base.BaseController):
which controller, if any, should control be passed.
"""
context = pecan.request.context.get('octavia_context')
if pool_id and len(remainder) and (remainder[0] == 'members' or
remainder[0] == 'healthmonitor'):
is_children = (
pool_id and remainder and (
remainder[0] == 'members' or remainder[0] == 'healthmonitor'
)
)
if is_children:
controller = remainder[0]
remainder = remainder[1:]
db_pool = self.repositories.pool.get(context.session, id=pool_id)
@ -247,3 +251,4 @@ class PoolsController(base.BaseController):
load_balancer_id=self.load_balancer_id,
pool_id=db_pool.id,
listener_id=self.listener_id), remainder
return None

View File

@ -81,8 +81,9 @@ class QuotasController(base.BaseController):
@pecan.expose()
def _lookup(self, project_id, *remainder):
"""Overridden pecan _lookup method for routing default endpoint."""
if project_id and len(remainder) and remainder[0] == 'default':
if project_id and remainder and remainder[0] == 'default':
return QuotasDefaultController(project_id), ''
return None
class QuotasDefaultController(base.BaseController):

View File

@ -79,11 +79,12 @@ class AmphoraController(base.BaseController):
Currently it checks if this was a failover request and routes
the request to the FailoverController.
"""
if amphora_id and len(remainder):
if amphora_id and remainder:
controller = remainder[0]
remainder = remainder[1:]
if controller == 'failover':
return FailoverController(amp_id=amphora_id), remainder
return None
class FailoverController(base.BaseController):

View File

@ -298,7 +298,7 @@ class L7PolicyController(base.BaseController):
which controller, if any, should control be passed.
"""
context = pecan.request.context.get('octavia_context')
if l7policy_id and len(remainder) and remainder[0] == 'rules':
if l7policy_id and remainder and remainder[0] == 'rules':
remainder = remainder[1:]
db_l7policy = self.repositories.l7policy.get(
context.session, id=l7policy_id)
@ -308,3 +308,4 @@ class L7PolicyController(base.BaseController):
resource='L7Policy', id=l7policy_id)
return l7rule.L7RuleController(
l7policy_id=db_l7policy.id), remainder
return None

View File

@ -377,8 +377,9 @@ class ListenersController(base.BaseController):
Currently it checks if this was a stats request and routes
the request to the StatsController.
"""
if id and len(remainder) and remainder[0] == 'stats':
if id and remainder and remainder[0] == 'stats':
return StatisticsController(listener_id=id), remainder[1:]
return None
class StatisticsController(base.BaseController, stats.StatsMixin):

View File

@ -535,10 +535,14 @@ class LoadBalancersController(base.BaseController):
'statuses' is aliased here for backward compatibility with
neutron-lbaas LBaaS v2 API.
"""
if id and len(remainder) and (remainder[0] == 'status' or
remainder[0] == 'statuses' or
remainder[0] == 'stats' or
remainder[0] == 'failover'):
is_children = (
id and remainder and (
remainder[0] == 'status' or remainder[0] == 'statuses' or (
remainder[0] == 'stats' or remainder[0] == 'failover'
)
)
)
if is_children:
controller = remainder[0]
remainder = remainder[1:]
if controller == 'status' or controller == 'statuses':
@ -547,6 +551,7 @@ class LoadBalancersController(base.BaseController):
return StatisticsController(lb_id=id), remainder
elif controller == 'failover':
return FailoverController(lb_id=id), remainder
return None
class StatusController(base.BaseController):

View File

@ -306,7 +306,7 @@ class PoolsController(base.BaseController):
"""Deletes a pool from a load balancer."""
context = pecan.request.context.get('octavia_context')
db_pool = self._get_db_pool(context.session, id, show_deleted=False)
if len(db_pool.l7policies) > 0:
if db_pool.l7policies:
raise exceptions.PoolInUseByL7Policy(
id=db_pool.id, l7policy_id=db_pool.l7policies[0].id)
@ -337,7 +337,7 @@ class PoolsController(base.BaseController):
which controller, if any, should control be passed.
"""
context = pecan.request.context.get('octavia_context')
if pool_id and len(remainder) and remainder[0] == 'members':
if pool_id and remainder and remainder[0] == 'members':
remainder = remainder[1:]
db_pool = self.repositories.pool.get(context.session, id=pool_id)
if not db_pool:
@ -346,5 +346,5 @@ class PoolsController(base.BaseController):
id=pool_id)
if remainder:
return member.MemberController(pool_id=db_pool.id), remainder
else:
return member.MembersController(pool_id=db_pool.id), remainder
return member.MembersController(pool_id=db_pool.id), remainder
return None

View File

@ -93,8 +93,9 @@ class QuotasController(base.BaseController):
@pecan.expose()
def _lookup(self, project_id, *remainder):
"""Overridden pecan _lookup method for routing default endpoint."""
if project_id and len(remainder) and remainder[0] == 'default':
if project_id and remainder and remainder[0] == 'default':
return QuotasDefaultController(project_id), ''
return None
class QuotasDefaultController(base.BaseController):

View File

@ -40,6 +40,7 @@ class BarbicanCert(cert.Cert):
if self._cert_container.certificate:
return encodeutils.to_utf8(
self._cert_container.certificate.payload)
return None
def get_intermediates(self):
if self._cert_container.intermediates:
@ -47,16 +48,19 @@ class BarbicanCert(cert.Cert):
self._cert_container.intermediates.payload)
return [imd for imd in cert_parser.get_intermediates_pems(
intermediates)]
return None
def get_private_key(self):
if self._cert_container.private_key:
return encodeutils.to_utf8(
self._cert_container.private_key.payload)
return None
def get_private_key_passphrase(self):
if self._cert_container.private_key_passphrase:
return encodeutils.to_utf8(
self._cert_container.private_key_passphrase.payload)
return None
@six.add_metaclass(abc.ABCMeta)

View File

@ -43,6 +43,7 @@ class PKCS12Cert(cert.Cert):
for ic in self.intermediates
]
return int_data
return None
def get_private_key(self):
return self.private_key.to_cryptography_key().private_bytes(

View File

@ -38,7 +38,7 @@ def get_status(sock_address):
data += x
s.close()
# if get nothing, means has no response
if len(data) == 0:
if not data:
return 1
return 0

View File

@ -389,7 +389,7 @@ class Listener(BaseDataModel):
if self.default_pool is not None:
l7_pool_ids = [p.redirect_pool_id for p in self.l7policies
if p.redirect_pool_id is not None and
len(p.l7rules) > 0 and p.enabled is True]
p.l7rules and p.enabled is True]
old_pool = self.default_pool
if old_pool.id not in l7_pool_ids:
if old_pool in self.pools:
@ -620,7 +620,7 @@ class L7Policy(BaseDataModel):
listener_l7pools = [
p.redirect_pool for p in self.listener.l7policies
if p.redirect_pool is not None and
len(p.l7rules) > 0 and p.enabled is True and
p.l7rules and p.enabled is True and
p.id != self.id]
if pool not in listener_l7pools:
self.listener.pools.remove(pool)
@ -634,7 +634,7 @@ class L7Policy(BaseDataModel):
self.redirect_url = None
pool = self._find_in_graph('Pool' + value)
self.redirect_pool = pool
if len(self.l7rules) > 0 and (self.enabled is True or (
if self.l7rules and (self.enabled is True or (
'enabled' in update_dict.keys() and
update_dict['enabled'] is True)):
if pool not in self.listener.pools:
@ -658,7 +658,7 @@ class L7Policy(BaseDataModel):
if (value is True and self.action ==
constants.L7POLICY_ACTION_REDIRECT_TO_POOL and
self.redirect_pool is not None and
len(self.l7rules) > 0 and
self.l7rules and
self.redirect_pool not in self.listener.pools):
self.listener.pools.append(self.redirect_pool)
self.redirect_pool.listeners.append(self.listener)

View File

@ -38,7 +38,7 @@ class OctaviaException(Exception):
def __init__(self, *args, **kwargs):
try:
if len(args) > 0:
if args:
self.message = args[0]
self.orig_msg = kwargs.get('orig_msg')
self.orig_code = kwargs.get('orig_code')

View File

@ -14,10 +14,11 @@
from keystoneauth1 import loading as ks_loading
from keystonemiddleware import auth_token
from octavia.common import constants
from oslo_config import cfg
from oslo_log import log as logging
from octavia.common import constants
LOG = logging.getLogger(__name__)
_NOAUTH_PATHS = ['/', '/load-balancer/']

View File

@ -70,8 +70,7 @@ def ip_port_str(ip_address, port):
ip = netaddr.IPAddress(ip_address)
if ip.version == 4:
return "{ip}:{port}".format(ip=ip, port=port)
elif ip.version == 6:
return "[{ip}]:{port}".format(ip=ip, port=port)
return "[{ip}]:{port}".format(ip=ip, port=port)
def netmask_to_prefix(netmask):

View File

@ -52,12 +52,14 @@ def url_path(url_path):
try:
p_url = rfc3986.urlparse(rfc3986.normalize_uri(url_path))
if (
invalid_path = (
p_url.scheme or p_url.userinfo or p_url.host or
p_url.port or
p_url.path is None or
not p_url.path.startswith('/')
):
)
if invalid_path:
raise exceptions.InvalidURLPath(url_path=url_path)
except Exception:
raise exceptions.InvalidURLPath(url_path=url_path)
@ -220,7 +222,7 @@ def sanitize_l7policy_api_args(l7policy, create=False):
raise exceptions.InvalidL7PolicyAction(action='None')
# See if we have anything left after that...
if len(l7policy.keys()) == 0:
if not l7policy.keys():
raise exceptions.InvalidL7PolicyArgs(msg='Invalid update options')
return l7policy

View File

@ -33,7 +33,7 @@ LOG = logging.getLogger(__name__)
def wait_done_or_dead(futs, dead, check_timeout=1):
while True:
_done, not_done = futures.wait(futs, timeout=check_timeout)
if len(not_done) == 0:
if not not_done:
break
if dead.is_set():
for fut in not_done:
@ -68,13 +68,12 @@ class HealthManager(object):
if self.lb_repo.set_status_for_failover(lock_session, lb_id,
constants.PENDING_UPDATE):
return True
else:
db_lb = self.lb_repo.get(lock_session, id=lb_id)
prov_status = db_lb.provisioning_status
LOG.warning("Load balancer %(id)s is in immutable state "
"%(state)s. Skipping failover.",
{"state": prov_status, "id": db_lb.id})
return False
db_lb = self.lb_repo.get(lock_session, id=lb_id)
prov_status = db_lb.provisioning_status
LOG.warning("Load balancer %(id)s is in immutable state "
"%(state)s. Skipping failover.",
{"state": prov_status, "id": db_lb.id})
return False
def health_check(self):
stats = {

View File

@ -144,7 +144,7 @@ class PlugNetworks(BaseNetworkTask):
if not delta:
LOG.debug("No network deltas for amphora id: %s", amphora.id)
return None
return
# add nics
for nic in delta.add_nics:
@ -179,7 +179,7 @@ class UnPlugNetworks(BaseNetworkTask):
LOG.debug("Unplug network for amphora")
if not delta:
LOG.debug("No network deltas for amphora id: %s", amphora.id)
return None
return
for nic in delta.delete_nics:
try:

View File

@ -114,7 +114,7 @@ class BaseRepository(object):
model = model.first()
if not model:
return
return None
return model.to_data_model()
@ -246,7 +246,7 @@ class Repositories(object):
self.session_persistence.create(session, **sp_dict)
# If only the session_persistence is being updated, this will be
# empty
if len(pool_dict.keys()) > 0:
if pool_dict:
self.pool.update(session, pool_id, **pool_dict)
return self.pool.get(session, id=pool_id)
@ -355,8 +355,7 @@ class Repositories(object):
if lb_count <= lb_quota or lb_quota == consts.QUOTA_UNLIMITED:
quotas.in_use_load_balancer = lb_count
return False
else:
return True
return True
elif _class == data_models.Listener:
# Decide which quota to use
if quotas.listener is None:
@ -377,8 +376,7 @@ class Repositories(object):
listener_quota == consts.QUOTA_UNLIMITED):
quotas.in_use_listener = listener_count
return False
else:
return True
return True
elif _class == data_models.Pool:
# Decide which quota to use
if quotas.pool is None:
@ -399,8 +397,7 @@ class Repositories(object):
pool_quota == consts.QUOTA_UNLIMITED):
quotas.in_use_pool = pool_count
return False
else:
return True
return True
elif _class == data_models.HealthMonitor:
# Decide which quota to use
if quotas.health_monitor is None:
@ -421,8 +418,7 @@ class Repositories(object):
hm_quota == consts.QUOTA_UNLIMITED):
quotas.in_use_health_monitor = hm_count
return False
else:
return True
return True
elif _class == data_models.Member:
# Decide which quota to use
if quotas.member is None:
@ -443,8 +439,7 @@ class Repositories(object):
member_quota == consts.QUOTA_UNLIMITED):
quotas.in_use_member = member_count
return False
else:
return True
return True
except db_exception.DBDeadlock:
LOG.warning('Quota project lock timed out for project: %(proj)s',
{'proj': project_id})
@ -742,9 +737,8 @@ class LoadBalancerRepository(BaseRepository):
# If a load balancer was never updated use its creation timestamp
last_update = lb.updated_at or lb.created_at
return last_update < timestamp
else:
# Load balancer was just deleted.
return True
# Load balancer was just deleted.
return True
class VipRepository(BaseRepository):
@ -814,8 +808,7 @@ class ListenerRepository(BaseRepository):
max_peer_port = listener.peer_port
if max_peer_port == 0:
return consts.HAPROXY_BASE_PEER_PORT
else:
return max_peer_port + 1
return max_peer_port + 1
def _pool_check(self, session, pool_id, listener_id=None,
lb_id=None):
@ -965,6 +958,7 @@ class AmphoraRepository(BaseRepository):
).first()
if db_lb:
return db_lb.to_data_model()
return None
def get_all_deleted_expiring_amphora(self, session, exp_age=None):

View File

@ -112,6 +112,7 @@ def no_author_tags(physical_line):
if pos < 0:
pos = physical_line.find('author')
return pos, "O322: Don't use author tags"
return None
def assert_equal_true_or_false(logical_line):

View File

@ -94,6 +94,7 @@ class Port(data_models.BaseDataModel):
for fixed_ip in self.fixed_ips:
if fixed_ip.ip_address == fixed_ip_address:
return fixed_ip.subnet_id
return None
class FixedIP(data_models.BaseDataModel):

View File

@ -82,6 +82,7 @@ class AllowedAddressPairsDriver(neutron_base.BaseNeutronDriver):
is_correct_interface = False
if is_correct_interface:
return interface
return None
def _plug_amphora_vip(self, amphora, subnet):
# We need a vip port owned by Octavia for Act/Stby and failover
@ -124,11 +125,12 @@ class AllowedAddressPairsDriver(neutron_base.BaseNeutronDriver):
sec_grps = self.neutron_client.list_security_groups(name=sec_grp_name)
if sec_grps and sec_grps.get('security_groups'):
return sec_grps.get('security_groups')[0]
return None
def _get_ethertype_for_ip(self, ip):
address = ipaddress.ip_address(
ip if isinstance(ip, six.text_type) else six.u(ip))
return 'IPv6' if address.version is 6 else 'IPv4'
return 'IPv6' if address.version == 6 else 'IPv4'
def _update_security_group_rules(self, load_balancer, sec_grp_id):
rules = self.neutron_client.list_security_group_rules(
@ -276,8 +278,8 @@ class AllowedAddressPairsDriver(neutron_base.BaseNeutronDriver):
LOG.warning('Failed to delete security group on first '
'pass: %s', sec_grp_id)
extra_ports = self._get_ports_by_security_group(sec_grp_id)
for port in extra_ports:
port_id = port.get('id')
for extra_port in extra_ports:
port_id = extra_port.get('id')
try:
LOG.warning('Deleting extra port %s on security '
'group %s...', port_id, sec_grp_id)

View File

@ -11,9 +11,10 @@
# License for the specific language governing permissions and limitations
# under the License.
from octavia.common import constants
from oslo_policy import policy
from octavia.common import constants
rules = [
policy.DocumentedRuleDefault(
'{rbac_obj}{action}'.format(rbac_obj=constants.RBAC_AMPHORA,

View File

@ -11,9 +11,10 @@
# License for the specific language governing permissions and limitations
# under the License.
from octavia.common import constants
from oslo_policy import policy
from octavia.common import constants
rules = [
policy.DocumentedRuleDefault(
'{rbac_obj}{action}'.format(rbac_obj=constants.RBAC_HEALTHMONITOR,

View File

@ -11,9 +11,10 @@
# License for the specific language governing permissions and limitations
# under the License.
from octavia.common import constants
from oslo_policy import policy
from octavia.common import constants
rules = [
policy.DocumentedRuleDefault(
'{rbac_obj}{action}'.format(rbac_obj=constants.RBAC_L7POLICY,

View File

@ -11,9 +11,10 @@
# License for the specific language governing permissions and limitations
# under the License.
from octavia.common import constants
from oslo_policy import policy
from octavia.common import constants
rules = [
policy.DocumentedRuleDefault(
'{rbac_obj}{action}'.format(rbac_obj=constants.RBAC_L7RULE,

View File

@ -11,9 +11,10 @@
# License for the specific language governing permissions and limitations
# under the License.
from octavia.common import constants
from oslo_policy import policy
from octavia.common import constants
rules = [
policy.DocumentedRuleDefault(
'{rbac_obj}{action}'.format(rbac_obj=constants.RBAC_LISTENER,

View File

@ -11,9 +11,10 @@
# License for the specific language governing permissions and limitations
# under the License.
from octavia.common import constants
from oslo_policy import policy
from octavia.common import constants
rules = [
policy.DocumentedRuleDefault(
'{rbac_obj}{action}'.format(rbac_obj=constants.RBAC_LOADBALANCER,

View File

@ -11,9 +11,10 @@
# License for the specific language governing permissions and limitations
# under the License.
from octavia.common import constants
from oslo_policy import policy
from octavia.common import constants
rules = [
policy.DocumentedRuleDefault(
'{rbac_obj}{action}'.format(rbac_obj=constants.RBAC_MEMBER,

View File

@ -11,9 +11,10 @@
# License for the specific language governing permissions and limitations
# under the License.
from octavia.common import constants
from oslo_policy import policy
from octavia.common import constants
rules = [
policy.DocumentedRuleDefault(
'{rbac_obj}{action}'.format(rbac_obj=constants.RBAC_POOL,

View File

@ -11,9 +11,10 @@
# License for the specific language governing permissions and limitations
# under the License.
from octavia.common import constants
from oslo_policy import policy
from octavia.common import constants
rules = [
policy.DocumentedRuleDefault(
'{rbac_obj}{action}'.format(rbac_obj=constants.RBAC_PROVIDER,

View File

@ -11,9 +11,10 @@
# License for the specific language governing permissions and limitations
# under the License.
from octavia.common import constants
from oslo_policy import policy
from octavia.common import constants
rules = [
policy.DocumentedRuleDefault(
'{rbac_obj}{action}'.format(rbac_obj=constants.RBAC_QUOTA,

View File

@ -39,10 +39,10 @@ taskflow>=2.16.0 # Apache-2.0
diskimage-builder!=1.6.0,!=1.7.0,!=1.7.1,>=1.1.2 # Apache-2.0
futures>=3.0.0;python_version=='2.7' or python_version=='2.6' # BSD
castellan>=0.16.0 # Apache-2.0
tenacity # Apache-2.0
tenacity>=4.9.0 # Apache-2.0
#for the amphora api
Flask!=0.11,<1.0,>=0.10 # BSD
Flask!=0.11,>=0.10 # BSD
netifaces>=0.10.4 # MIT
ipaddress>=1.0.17;python_version<'3.3' # PSF
cryptography>=2.1 # BSD/Apache-2.0

View File

@ -9,7 +9,7 @@ mock>=2.0.0 # BSD
python-subunit>=1.0.0 # Apache-2.0/BSD
oslotest>=3.2.0 # Apache-2.0
oslo.serialization!=2.19.1,>=2.18.0 # Apache-2.0
pylint==1.4.5 # GPLv2
pylint==1.9.2 # GPLv2
testrepository>=0.0.18 # Apache-2.0/BSD
testtools>=2.2.0 # MIT
testresources>=2.0.0 # Apache-2.0/BSD

View File

@ -48,7 +48,7 @@ run_pylint () {
echo "Running pylint..."
echo "You can speed this up by running it on 'HEAD~[0-9]' (e.g. HEAD~1, this change only)..."
if [ -n "${files}" ]; then
pylint --rcfile=.pylintrc --output-format=colorized ${files}
pylint --max-nested-blocks 7 --extension-pkg-whitelist netifaces --rcfile=.pylintrc --output-format=colorized ${files}
else
echo "No python changes in this commit, pylint check not required."
exit 0

14
tox.ini
View File

@ -17,6 +17,7 @@ commands =
stestr slowest
[testenv:api-ref]
basepython = python3
# This environment is called from CI scripts to test and publish
# the API Ref to developer.openstack.org.
deps =
@ -29,6 +30,7 @@ commands =
sphinx-build -W -b html -d api-ref/build/doctrees api-ref/source api-ref/build/html
[testenv:cover]
basepython = python3
whitelist_externals = sh
setenv =
{[testenv]setenv}
@ -52,6 +54,7 @@ basepython = python3.5
setenv = OS_TEST_PATH={toxinidir}/octavia/tests/functional
[testenv:debug]
basepython = python3
commands = oslo_debug_helper {posargs}
[testenv:debug-py27]
@ -63,6 +66,7 @@ basepython = python3.5
commands = oslo_debug_helper {posargs}
[testenv:pep8]
basepython = python3
commands = flake8
# RST linter
doc8 --ignore-path doc/source/contributor/modules specs \
@ -80,6 +84,7 @@ whitelist_externals =
find
[testenv:docs]
basepython = python3
deps =
-c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt}
-r{toxinidir}/requirements.txt
@ -91,9 +96,11 @@ commands =
sphinx-build -W -b html api-ref/source api-ref/build/html
[testenv:venv]
basepython = python3
commands = {posargs}
[testenv:genconfig]
basepython = python3
whitelist_externals = mkdir
commands =
mkdir -p etc/octavia
@ -105,6 +112,7 @@ commands =
--namespace keystonemiddleware.auth_token
[testenv:genpolicy]
basepython = python3
whitelist_externals = mkdir
commands =
mkdir -p etc/octavia
@ -113,6 +121,7 @@ commands =
--output-file etc/octavia/json.policy.sample
[testenv:specs]
basepython = python3
whitelist_externals =
rm
find
@ -122,6 +131,7 @@ commands =
[testenv:bandit]
basepython = python3
commands = bandit -r octavia -ll -ii -x octavia/tests {posargs}
[flake8]
@ -145,6 +155,7 @@ local-check-factory = octavia.hacking.checks.factory
max-line-length = 79
[testenv:releasenotes]
basepython = python3
deps =
-c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt}
-r{toxinidir}/requirements.txt
@ -157,6 +168,7 @@ commands =
# If you are running the tests locally you should set the env variable
# TEMPEST_CONFIG_DIR=/opt/stack/tempest/etc
[testenv:apiv1]
basepython = python3
passenv = TEMPEST_CONFIG_DIR
setenv =
OS_TEST_PATH={toxinidir}/octavia/tests/tempest/v1/api
@ -167,6 +179,7 @@ commands =
# If you are running the tests locally you should set the env variable
# TEMPEST_CONFIG_DIR=/opt/stack/tempest/etc
[testenv:scenario]
basepython = python3
passenv = TEMPEST_CONFIG_DIR
setenv =
OS_TEST_PATH={toxinidir}/octavia/tests/tempest/v1/scenario
@ -186,6 +199,7 @@ commands =
sh -c 'OS_TEST_PATH={toxinidir}/octavia/tests/functional stestr run {posargs}'
[testenv:requirements]
basepython = python3
deps =
-egit+https://git.openstack.org/openstack/requirements#egg=openstack-requirements
whitelist_externals = sh