Fix usage of various deprecated methods

Our unittest output complains about some of the codebase,
described in more detail in the referred bug. This change
fixes all of those places.

static_root is now set only if debug=True is set in pecan
configuration.

Logging is now setup as part of the conf module import,
so that unittests can use it.

Closes-Bug: #1668240
Change-Id: I2536bd2b174e0d224ddf6806f1be37bd29017669
This commit is contained in:
Vladyslav Drok 2017-02-27 13:37:37 +02:00
parent f6bad6fb9e
commit 7fd26bf803
8 changed files with 36 additions and 32 deletions

View File

@ -52,8 +52,8 @@ def setup_app(pecan_config=None, extra_hooks=None):
app = pecan.make_app( app = pecan.make_app(
pecan_config.app.root, pecan_config.app.root,
static_root=pecan_config.app.static_root,
debug=CONF.pecan_debug, debug=CONF.pecan_debug,
static_root=pecan_config.app.static_root if CONF.pecan_debug else None,
force_canonical=getattr(pecan_config.app, 'force_canonical', True), force_canonical=getattr(pecan_config.app, 'force_canonical', True),
hooks=app_hooks, hooks=app_hooks,
wrap_app=middleware.ParsableErrorMiddleware, wrap_app=middleware.ParsableErrorMiddleware,
@ -81,7 +81,7 @@ def setup_app(pecan_config=None, extra_hooks=None):
# Create a CORS wrapper, and attach ironic-specific defaults that must be # Create a CORS wrapper, and attach ironic-specific defaults that must be
# included in all CORS responses. # included in all CORS responses.
app = cors_middleware.CORS(app, CONF) app = cors_middleware.CORS(app, CONF)
app.set_latent( cors_middleware.set_defaults(
allow_headers=[base.Version.max_string, base.Version.min_string, allow_headers=[base.Version.max_string, base.Version.min_string,
base.Version.string], base.Version.string],
allow_methods=['GET', 'PUT', 'POST', 'DELETE', 'PATCH'], allow_methods=['GET', 'PUT', 'POST', 'DELETE', 'PATCH'],

View File

@ -109,7 +109,7 @@ class RootController(rest.RestController):
return Root.convert() return Root.convert()
@pecan.expose() @pecan.expose()
def _route(self, args): def _route(self, args, request=None):
"""Overrides the default routing behavior. """Overrides the default routing behavior.
It redirects the request to the default version of the ironic API It redirects the request to the default version of the ironic API
@ -118,4 +118,4 @@ class RootController(rest.RestController):
if args[0] and args[0] not in self._versions: if args[0] and args[0] not in self._versions:
args = [self._default_version] + args args = [self._default_version] + args
return super(RootController, self)._route(args) return super(RootController, self)._route(args, request)

View File

@ -199,7 +199,7 @@ class Controller(rest.RestController):
headers=headers) headers=headers)
@pecan.expose() @pecan.expose()
def _route(self, args): def _route(self, args, request=None):
v = base.Version(pecan.request.headers, versions.MIN_VERSION_STRING, v = base.Version(pecan.request.headers, versions.MIN_VERSION_STRING,
versions.MAX_VERSION_STRING) versions.MAX_VERSION_STRING)
@ -214,7 +214,7 @@ class Controller(rest.RestController):
pecan.response.headers[base.Version.string] = str(v) pecan.response.headers[base.Version.string] = str(v)
pecan.request.version = v pecan.request.version = v
return super(Controller, self)._route(args) return super(Controller, self)._route(args, request)
__all__ = ('Controller',) __all__ = ('Controller',)

View File

@ -237,19 +237,21 @@ class PortgroupsController(pecan.rest.RestController):
} }
@pecan.expose() @pecan.expose()
def _lookup(self, ident, subres, *remainder): def _lookup(self, ident, *remainder):
if not api_utils.allow_portgroups(): if not api_utils.allow_portgroups():
pecan.abort(http_client.NOT_FOUND) pecan.abort(http_client.NOT_FOUND)
try: try:
ident = types.uuid_or_name.validate(ident) ident = types.uuid_or_name.validate(ident)
except exception.InvalidUuidOrName as e: except exception.InvalidUuidOrName as e:
pecan.abort(http_client.BAD_REQUEST, e.args[0]) pecan.abort(http_client.BAD_REQUEST, e.args[0])
subcontroller = self._subcontroller_map.get(subres) if not remainder:
return
subcontroller = self._subcontroller_map.get(remainder[0])
if subcontroller: if subcontroller:
if api_utils.allow_portgroups_subcontrollers(): if api_utils.allow_portgroups_subcontrollers():
return subcontroller( return subcontroller(
portgroup_ident=ident, portgroup_ident=ident,
node_ident=self.parent_node_ident), remainder node_ident=self.parent_node_ident), remainder[1:]
pecan.abort(http_client.NOT_FOUND) pecan.abort(http_client.NOT_FOUND)
def __init__(self, node_ident=None): def __init__(self, node_ident=None):

View File

@ -14,7 +14,6 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from oslo_log import log
from oslo_service import service from oslo_service import service
from ironic.common import config from ironic.common import config
@ -24,25 +23,7 @@ from ironic import objects
def prepare_service(argv=None): def prepare_service(argv=None):
argv = [] if argv is None else argv argv = [] if argv is None else argv
log.register_options(CONF)
log.set_defaults(default_log_levels=['amqp=WARNING',
'amqplib=WARNING',
'qpid.messaging=INFO',
'oslo_messaging=INFO',
'sqlalchemy=WARNING',
'stevedore=INFO',
'eventlet.wsgi.server=INFO',
'iso8601=WARNING',
'paramiko=WARNING',
'requests=WARNING',
'neutronclient=WARNING',
'glanceclient=WARNING',
'urllib3.connectionpool=WARNING',
'keystonemiddleware.auth_token=INFO',
'keystoneauth.session=INFO',
])
config.parse_args(argv) config.parse_args(argv)
log.setup(CONF, 'ironic')
objects.register_all() objects.register_all()

View File

@ -14,6 +14,7 @@
# under the License. # under the License.
from oslo_config import cfg from oslo_config import cfg
from oslo_log import log
from ironic.conf import agent from ironic.conf import agent
from ironic.conf import api from ironic.conf import api
@ -45,6 +46,26 @@ from ironic.conf import swift
CONF = cfg.CONF CONF = cfg.CONF
log.register_options(CONF)
log.set_defaults(default_log_levels=[
'amqp=WARNING',
'amqplib=WARNING',
'qpid.messaging=INFO',
'oslo_messaging=INFO',
'sqlalchemy=WARNING',
'stevedore=INFO',
'eventlet.wsgi.server=INFO',
'iso8601=WARNING',
'paramiko=WARNING',
'requests=WARNING',
'neutronclient=WARNING',
'glanceclient=WARNING',
'urllib3.connectionpool=WARNING',
'keystonemiddleware.auth_token=INFO',
'keystoneauth.session=INFO',
])
log.setup(CONF, 'ironic')
agent.register_opts(CONF) agent.register_opts(CONF)
api.register_opts(CONF) api.register_opts(CONF)
audit.register_opts(CONF) audit.register_opts(CONF)

View File

@ -70,6 +70,7 @@ class BaseApiTest(base.DbTestCase):
'root': 'ironic.api.controllers.root.RootController', 'root': 'ironic.api.controllers.root.RootController',
'modules': ['ironic.api'], 'modules': ['ironic.api'],
'static_root': '%s/public' % root_dir, 'static_root': '%s/public' % root_dir,
'debug': True,
'template_path': '%s/api/templates' % root_dir, 'template_path': '%s/api/templates' % root_dir,
'acl_public_routes': ['/', '/v1'], 'acl_public_routes': ['/', '/v1'],
}, },

View File

@ -3230,10 +3230,9 @@ class UpdatePortTestCase(mgr_utils.ServiceSetUpMixin,
@mock.patch.object(n_flat.FlatNetwork, 'port_changed', autospec=True) @mock.patch.object(n_flat.FlatNetwork, 'port_changed', autospec=True)
@mock.patch.object(n_flat.FlatNetwork, 'validate', autospec=True) @mock.patch.object(n_flat.FlatNetwork, 'validate', autospec=True)
def test_update_port_address_maintenance(self, mock_val, mock_pc): def test_update_port_address_maintenance(self, mock_val, mock_pc):
node = obj_utils.create_test_node(self.context, driver='fake', node = obj_utils.create_test_node(
instance_uuid='uuid', self.context, driver='fake', maintenance=True,
provision_state='active', instance_uuid=uuidutils.generate_uuid(), provision_state='active')
maintenance=True)
port = obj_utils.create_test_port(self.context, port = obj_utils.create_test_port(self.context,
node_id=node.id, node_id=node.id,
extra={'vif_port_id': 'fake-id'}) extra={'vif_port_id': 'fake-id'})