--- /dev/null
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2012 IBM
+#
+# 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 warnings
+
+from cinder import exception
+from cinder import flags
+from cinder.openstack.common import cfg
+from cinder.openstack.common import log as logging
+
+LOG = logging.getLogger(__name__)
+
+deprecate_opts = [
+ cfg.BoolOpt('fatal_deprecations',
+ default=False,
+ help='make deprecations fatal')
+ ]
+FLAGS = flags.FLAGS
+FLAGS.register_opts(deprecate_opts)
+
+
+def _showwarning(message, category, filename, lineno, file=None, line=None):
+ """
+ Redirect warnings into logging.
+ """
+ LOG.warn(str(message))
+
+
+# Install our warnings handler
+warnings.showwarning = _showwarning
+
+
+def warn(msg=""):
+ """
+ Warn of a deprecated config option that an operator has specified.
+ This should be added in the code where we've made a change in how
+ we use some operator changeable parameter to indicate that it will
+ go away in a future version of OpenStack.
+ """
+ warnings.warn(_("Deprecated Config: %s") % msg)
+ if FLAGS.fatal_deprecations:
+ raise exception.DeprecatedConfig(msg=msg)
super(CinderException, self).__init__(message)
+class DeprecatedConfig(CinderException):
+ message = _("Fatal call to deprecated config") + " %(msg)s"
+
+
class DecryptionFailure(CinderException):
message = _("Failed to decrypt text")
--- /dev/null
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+#
+# Copyright 2010 OpenStack LLC
+#
+# 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 cinder.common import deprecated
+from cinder import exception
+from cinder import test
+
+
+class DeprecatedConfigTestCase(test.TestCase):
+ def setUp(self):
+ super(DeprecatedConfigTestCase, self).setUp()
+ self.logbuffer = ""
+
+ def local_log(msg):
+ self.logbuffer = msg
+
+ self.stubs.Set(deprecated.LOG, 'warn', local_log)
+
+ def test_deprecated(self):
+ deprecated.warn('test')
+ self.assertEqual(self.logbuffer, 'Deprecated Config: test')
+
+ def test_deprecated_fatal(self):
+ self.flags(fatal_deprecations=True)
+ self.assertRaises(exception.DeprecatedConfig,
+ deprecated.warn, "test2")
+ self.assertEqual(self.logbuffer, 'Deprecated Config: test2')
+
+ def test_deprecated_logs_only_once(self):
+ deprecated.warn('only once!')
+ deprecated.warn('only once!')
+ deprecated.warn('only once!')
+ self.assertEqual(self.logbuffer, 'Deprecated Config: only once!')
from eventlet.green import subprocess
import netaddr
+from cinder.common import deprecated
from cinder import exception
from cinder import flags
from cinder.openstack.common import log as logging
PERFECT_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%f"
FLAGS = flags.FLAGS
-if FLAGS.rootwrap_config is None or FLAGS.root_helper != 'sudo':
- LOG.warn(_('The root_helper option (which lets you specify a root '
- 'wrapper different from cinder-rootwrap, and defaults to '
- 'using sudo) is now deprecated. You should use the '
- 'rootwrap_config option instead.'))
-
def find_config(config_path):
"""Find a configuration file using the given hint.
'to utils.execute: %r') % kwargs)
if run_as_root:
+
+ if FLAGS.rootwrap_config is None or FLAGS.root_helper != 'sudo':
+ deprecated.warn(_('The root_helper option (which lets you specify '
+ 'a root wrapper different from cinder-rootwrap, '
+ 'and defaults to using sudo) is now deprecated. '
+ 'You should use the rootwrap_config option '
+ 'instead.'))
+
if (FLAGS.rootwrap_config is not None):
cmd = ['sudo', 'cinder-rootwrap',
FLAGS.rootwrap_config] + list(cmd)