diff --git a/oslo_config/cfg.py b/oslo_config/cfg.py index 1697b2f7..5f5b3679 100644 --- a/oslo_config/cfg.py +++ b/oslo_config/cfg.py @@ -3210,6 +3210,8 @@ class ConfigOpts(collections.Mapping): if isinstance(value, self.conf.GroupAttr): raise TemplateSubstitutionError( 'substituting group %s not supported' % key) + if value is None: + return '' return value diff --git a/oslo_config/tests/test_cfg.py b/oslo_config/tests/test_cfg.py index cde47f14..7790620f 100644 --- a/oslo_config/tests/test_cfg.py +++ b/oslo_config/tests/test_cfg.py @@ -3503,6 +3503,17 @@ class SadPathTestCase(BaseTestCase): def test_conf_file_bad_float(self): self._do_test_conf_file_bad_value(cfg.FloatOpt) + def test_str_sub_none_value(self): + self.conf.register_cli_opt(cfg.StrOpt('oo')) + self.conf.register_cli_opt(cfg.StrOpt('bar', default='$oo')) + self.conf.register_cli_opt(cfg.StrOpt('barbar', default='foo $oo foo')) + + self.conf([]) + + self.assertTrue(hasattr(self.conf, 'bar')) + self.assertEqual('', self.conf.bar) + self.assertEqual("foo foo", self.conf.barbar) + def test_str_sub_from_group(self): self.conf.register_group(cfg.OptGroup('f')) self.conf.register_cli_opt(cfg.StrOpt('oo', default='blaa'), group='f')