From 017210703c54bc3681196ef4742f207775f4a286 Mon Sep 17 00:00:00 2001 From: Ghanshyam Mann Date: Thu, 24 Dec 2020 20:28:58 -0600 Subject: [PATCH] [goal] Deprecate the JSON formatted policy file As per the community goal of migrating the policy file the format from JSON to YAML[1], we need to do two things: 1. Change the default value of '[oslo_policy] policy_file'' config option from 'policy.json' to 'policy.yaml' with upgrade checks. 2. Deprecate the JSON formatted policy file on the project side via warning in doc and releasenotes. Also replace policy.json to policy.yaml ref from doc and tests. [1]https://governance.openstack.org/tc/goals/selected/wallaby/migrate-policy-format-from-json-to-yaml.html Change-Id: Id369108f00acb6977bf24f48ff77b45a69b2908f --- lower-constraints.txt | 16 +++++++-------- ...ormatted-policy-file-6a1e9b690fdbc132.yaml | 20 +++++++++++++++++++ requirements.txt | 12 +++++------ vitrage/api/hooks.py | 7 +++++++ vitrage/cli/status.py | 13 +++--------- vitrage/tests/unit/cli/test_status.py | 12 +++++++---- 6 files changed, 52 insertions(+), 28 deletions(-) create mode 100644 releasenotes/notes/deprecate-json-formatted-policy-file-6a1e9b690fdbc132.yaml diff --git a/lower-constraints.txt b/lower-constraints.txt index c59a8a927..07a330aec 100644 --- a/lower-constraints.txt +++ b/lower-constraints.txt @@ -52,18 +52,18 @@ os-service-types==1.2.0 osc-lib==1.10.0 oslo.cache==1.29.0 oslo.concurrency==3.26.0 -oslo.config==5.2.0 -oslo.context==2.20.0 +oslo.config==6.8.0 +oslo.context==2.22.0 oslo.db==4.44.0 oslo.i18n==3.20.0 oslo.log==3.44.0 oslo.messaging==5.36.0 oslo.middleware==3.35.0 -oslo.policy==1.34.0 +oslo.policy==3.6.0 oslo.serialization==2.25.0 oslo.service==1.30.0 -oslo.upgradecheck==0.1.1 -oslo.utils==3.36.0 +oslo.upgradecheck==1.3.0 +oslo.utils==3.40.0 oslotest==3.3.0 osprofiler==2.0.0 packaging==17.1 @@ -99,14 +99,14 @@ python-subunit==1.2.0 python-swiftclient==3.5.0 python-troveclient==2.2.0 pytz==2018.3 -PyYAML==3.13 +PyYAML==5.1 pyzabbix==0.7.4 reno==3.1.0 repoze.lru==0.7 -requests==2.18.4 +requests==2.20.0 requests-mock==1.4.0 requestsexceptions==1.4.0 -rfc3986==1.1.0 +rfc3986==1.2.0 Routes==2.4.1 setproctitle==1.1.10 simplejson==3.13.2 diff --git a/releasenotes/notes/deprecate-json-formatted-policy-file-6a1e9b690fdbc132.yaml b/releasenotes/notes/deprecate-json-formatted-policy-file-6a1e9b690fdbc132.yaml new file mode 100644 index 000000000..c9c530004 --- /dev/null +++ b/releasenotes/notes/deprecate-json-formatted-policy-file-6a1e9b690fdbc132.yaml @@ -0,0 +1,20 @@ +--- +upgrade: + - | + The default value of ``[oslo_policy] policy_file`` config option has + been changed from ``policy.json`` to ``policy.yaml``. + Operators who are utilizing customized or previously generated + static policy JSON files (which are not needed by default), should + generate new policy files or convert them in YAML format. Use the + `oslopolicy-convert-json-to-yaml + `_ + tool to convert a JSON to YAML formatted policy file in + backward compatible way. +deprecations: + - | + Use of JSON policy files was deprecated by the ``oslo.policy`` library + during the Victoria development cycle. As a result, this deprecation is + being noted in the Wallaby cycle with an anticipated future removal of support + by ``oslo.policy``. As such operators will need to convert to YAML policy + files. Please see the upgrade notes for details on migration of any + custom policy files. diff --git a/requirements.txt b/requirements.txt index 630e60d05..47c318983 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,16 +10,16 @@ lxml>=4.5.2 # BSD PyMySQL>=0.8.0 # MIT License python-dateutil>=2.7.0 # BSD networkx>=2.4 # BSD -oslo.config>=5.2.0 # Apache-2.0 -oslo.context>=2.20.0 # Apache-2.0 +oslo.config>=6.8.0 # Apache-2.0 +oslo.context>=2.22.0 # Apache-2.0 oslo.db>=4.44.0 # Apache-2.0 oslo.messaging>=5.36.0 # Apache-2.0 oslo.middleware>=3.35.0 # Apache-2.0 oslo.serialization>=2.25.0 # Apache-2.0 oslo.log>=3.44.0 # Apache-2.0 -oslo.policy>=1.34.0 # Apache-2.0 +oslo.policy>=3.6.0 # Apache-2.0 oslo.i18n>=3.20.0 # Apache-2.0 -oslo.upgradecheck>=0.1.1 # Apache-2.0 +oslo.upgradecheck>=1.3.0 # Apache-2.0 pecan>=1.2.1 # BSD PasteDeploy>=1.5.2 # MIT Werkzeug>=0.14.1 # BSD License @@ -32,8 +32,8 @@ pysnmp>=4.4.4 # BSD PyJWT>=1.6.0 # MIT osprofiler>=2.0.0 # Apache-2.0 keystoneauth1>=3.6.2 # Apache-2.0 -PyYAML>=3.13 # MIT -requests>=2.18.4 # Apache-2.0 +PyYAML>=5.1 # MIT +requests>=2.20.0 # Apache-2.0 WebOb>=1.7.4 # MIT eventlet!=0.20.1,>=0.20.0 # MIT debtcollector>=1.19.0 # Apache-2.0 diff --git a/vitrage/api/hooks.py b/vitrage/api/hooks.py index 146bccfaf..e4b918171 100644 --- a/vitrage/api/hooks.py +++ b/vitrage/api/hooks.py @@ -14,6 +14,7 @@ import oslo_messaging from oslo_config import cfg from oslo_context import context +from oslo_policy import opts from oslo_policy import policy from pecan import hooks @@ -25,6 +26,12 @@ from vitrage import storage CONF = cfg.CONF +# TODO(gmann): Remove setting the default value of config policy_file +# once oslo_policy change the default value to 'policy.yaml'. +# https://github.com/openstack/oslo.policy/blob/a626ad12fe5a3abd49d70e3e5b95589d279ab578/oslo_policy/opts.py#L49 +DEFAULT_POLICY_FILE = 'policy.yaml' +opts.set_defaults(CONF, DEFAULT_POLICY_FILE) + class ConfigHook(hooks.PecanHook): """Attach the configuration and policy enforcer object to the request. """ diff --git a/vitrage/cli/status.py b/vitrage/cli/status.py index 362af912f..4a6db2743 100644 --- a/vitrage/cli/status.py +++ b/vitrage/cli/status.py @@ -15,6 +15,7 @@ import sys from oslo_config import cfg +from oslo_upgradecheck import common_checks from oslo_upgradecheck import upgradecheck from vitrage.i18n import _ @@ -30,17 +31,9 @@ class Checks(upgradecheck.UpgradeCommands): and added to _upgrade_checks tuple. """ - def _sample_check(self): - """This is sample check added to test the upgrade check framework - - It needs to be removed after adding any real upgrade check - """ - return upgradecheck.Result(upgradecheck.Code.SUCCESS, 'Sample detail') - _upgrade_checks = ( - # Sample check added for now. - # Whereas in future real checks must be added here in tuple - (_('Sample Check'), _sample_check), + (_('policy File JSON to YAML Migration'), + (common_checks.check_policy_json, {'conf': CONF})), ) diff --git a/vitrage/tests/unit/cli/test_status.py b/vitrage/tests/unit/cli/test_status.py index 2298c9d56..83bc2b309 100644 --- a/vitrage/tests/unit/cli/test_status.py +++ b/vitrage/tests/unit/cli/test_status.py @@ -24,7 +24,11 @@ class TestUpgradeChecks(base.BaseTest): super(TestUpgradeChecks, self).setUp() self.cmd = status.Checks() - def test__sample_check(self): - check_result = self.cmd._sample_check() - self.assertEqual( - Code.SUCCESS, check_result.code) + def test_checks(self): + for name, func in self.cmd._upgrade_checks: + if isinstance(func, tuple): + func_name, kwargs = func + result = func_name(self, **kwargs) + else: + result = func(self) + self.assertEqual(Code.SUCCESS, result.code)