Disable config parser interpolation
This commit is contained in:
		
					parent
					
						
							
								b9a48c9316
							
						
					
				
			
			
				commit
				
					
						5aa8dac80a
					
				
			
		
					 4 changed files with 45 additions and 26 deletions
				
			
		| 
						 | 
					@ -382,7 +382,7 @@ class Configuration(metaclass=Singleton):
 | 
				
			||||||
        return args
 | 
					        return args
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _read_config_file(self, files):
 | 
					    def _read_config_file(self, files):
 | 
				
			||||||
        config_parser = configparser.ConfigParser()
 | 
					        config_parser = configparser.ConfigParser(interpolation=None)
 | 
				
			||||||
        config_parser.read(files)
 | 
					        config_parser.read(files)
 | 
				
			||||||
        d = dict()
 | 
					        d = dict()
 | 
				
			||||||
        for section in config_parser.sections():
 | 
					        for section in config_parser.sections():
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,6 +31,11 @@ import logging
 | 
				
			||||||
 | 
					
 | 
				
			||||||
my_dir = op.abspath(op.dirname(__file__))
 | 
					my_dir = op.abspath(op.dirname(__file__))
 | 
				
			||||||
fixtures = op.join(my_dir, 'fixtures')
 | 
					fixtures = op.join(my_dir, 'fixtures')
 | 
				
			||||||
 | 
					interpolation_config_file = op.join(fixtures, "interpolation-test.cfg")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def newConfigParser():
 | 
				
			||||||
 | 
					    return configparser.ConfigParser(interpolation=None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ConfigurationOptionsTestCase(test.CdistTestCase):
 | 
					class ConfigurationOptionsTestCase(test.CdistTestCase):
 | 
				
			||||||
| 
						 | 
					@ -141,7 +146,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def setUp(self):
 | 
					    def setUp(self):
 | 
				
			||||||
        # Create test config file.
 | 
					        # Create test config file.
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'beta': 'off',
 | 
					            'beta': 'off',
 | 
				
			||||||
            'local_shell': '/bin/sh',
 | 
					            'local_shell': '/bin/sh',
 | 
				
			||||||
| 
						 | 
					@ -159,13 +164,13 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
            'verbosity': 'INFO',
 | 
					            'verbosity': 'INFO',
 | 
				
			||||||
            'archiving': 'none',
 | 
					            'archiving': 'none',
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        config_custom = configparser.ConfigParser()
 | 
					        config_custom = newConfigParser()
 | 
				
			||||||
        config_custom['GLOBAL'] = {
 | 
					        config_custom['GLOBAL'] = {
 | 
				
			||||||
            'parallel': '4',
 | 
					            'parallel': '4',
 | 
				
			||||||
            'archiving': 'txz',
 | 
					            'archiving': 'txz',
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config_custom2 = configparser.ConfigParser()
 | 
					        config_custom2 = newConfigParser()
 | 
				
			||||||
        config_custom2['GLOBAL'] = {
 | 
					        config_custom2['GLOBAL'] = {
 | 
				
			||||||
            'parallel': '16',
 | 
					            'parallel': '16',
 | 
				
			||||||
            'archiving': 'tbz2',
 | 
					            'archiving': 'tbz2',
 | 
				
			||||||
| 
						 | 
					@ -405,7 +410,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        args = argparse.Namespace()
 | 
					        args = argparse.Namespace()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'beta': 'off',
 | 
					            'beta': 'off',
 | 
				
			||||||
            'local_shell': '/bin/sh',
 | 
					            'local_shell': '/bin/sh',
 | 
				
			||||||
| 
						 | 
					@ -463,7 +468,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        args = argparse.Namespace()
 | 
					        args = argparse.Namespace()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'beta': 'off',
 | 
					            'beta': 'off',
 | 
				
			||||||
            'local_shell': '/bin/sh',
 | 
					            'local_shell': '/bin/sh',
 | 
				
			||||||
| 
						 | 
					@ -486,7 +491,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        with open(global_config_file, 'w') as f:
 | 
					        with open(global_config_file, 'w') as f:
 | 
				
			||||||
            config.write(f)
 | 
					            config.write(f)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'beta': 'on',
 | 
					            'beta': 'on',
 | 
				
			||||||
            'local_shell': '/usr/bin/sh',
 | 
					            'local_shell': '/usr/bin/sh',
 | 
				
			||||||
| 
						 | 
					@ -544,7 +549,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        args = argparse.Namespace()
 | 
					        args = argparse.Namespace()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'beta': 'off',
 | 
					            'beta': 'off',
 | 
				
			||||||
            'local_shell': '/bin/sh',
 | 
					            'local_shell': '/bin/sh',
 | 
				
			||||||
| 
						 | 
					@ -611,7 +616,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        args = argparse.Namespace()
 | 
					        args = argparse.Namespace()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'beta': 'off',
 | 
					            'beta': 'off',
 | 
				
			||||||
            'local_shell': '/bin/sh',
 | 
					            'local_shell': '/bin/sh',
 | 
				
			||||||
| 
						 | 
					@ -634,7 +639,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        with open(global_config_file, 'w') as f:
 | 
					        with open(global_config_file, 'w') as f:
 | 
				
			||||||
            config.write(f)
 | 
					            config.write(f)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'beta': 'on',
 | 
					            'beta': 'on',
 | 
				
			||||||
            'local_shell': '/usr/bin/sh',
 | 
					            'local_shell': '/usr/bin/sh',
 | 
				
			||||||
| 
						 | 
					@ -709,7 +714,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        args = argparse.Namespace()
 | 
					        args = argparse.Namespace()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'beta': 'off',
 | 
					            'beta': 'off',
 | 
				
			||||||
            'local_shell': '/bin/sh',
 | 
					            'local_shell': '/bin/sh',
 | 
				
			||||||
| 
						 | 
					@ -732,7 +737,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        with open(global_config_file, 'w') as f:
 | 
					        with open(global_config_file, 'w') as f:
 | 
				
			||||||
            config.write(f)
 | 
					            config.write(f)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'beta': 'on',
 | 
					            'beta': 'on',
 | 
				
			||||||
            'local_shell': '/usr/bin/sh',
 | 
					            'local_shell': '/usr/bin/sh',
 | 
				
			||||||
| 
						 | 
					@ -800,7 +805,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        args = argparse.Namespace()
 | 
					        args = argparse.Namespace()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'beta': 'off',
 | 
					            'beta': 'off',
 | 
				
			||||||
            'local_shell': '/bin/sh',
 | 
					            'local_shell': '/bin/sh',
 | 
				
			||||||
| 
						 | 
					@ -823,7 +828,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        with open(global_config_file, 'w') as f:
 | 
					        with open(global_config_file, 'w') as f:
 | 
				
			||||||
            config.write(f)
 | 
					            config.write(f)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'beta': 'on',
 | 
					            'beta': 'on',
 | 
				
			||||||
            'local_shell': '/usr/bin/sh',
 | 
					            'local_shell': '/usr/bin/sh',
 | 
				
			||||||
| 
						 | 
					@ -840,7 +845,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        with open(local_config_file, 'w') as f:
 | 
					        with open(local_config_file, 'w') as f:
 | 
				
			||||||
            config.write(f)
 | 
					            config.write(f)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'conf_dir': '/opt/conf/cdist',
 | 
					            'conf_dir': '/opt/conf/cdist',
 | 
				
			||||||
            'remote_copy': 'scpcustom',
 | 
					            'remote_copy': 'scpcustom',
 | 
				
			||||||
| 
						 | 
					@ -899,7 +904,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        args = argparse.Namespace()
 | 
					        args = argparse.Namespace()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'beta': 'off',
 | 
					            'beta': 'off',
 | 
				
			||||||
            'local_shell': '/bin/sh',
 | 
					            'local_shell': '/bin/sh',
 | 
				
			||||||
| 
						 | 
					@ -922,7 +927,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        with open(global_config_file, 'w') as f:
 | 
					        with open(global_config_file, 'w') as f:
 | 
				
			||||||
            config.write(f)
 | 
					            config.write(f)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'beta': 'on',
 | 
					            'beta': 'on',
 | 
				
			||||||
            'local_shell': '/usr/bin/sh',
 | 
					            'local_shell': '/usr/bin/sh',
 | 
				
			||||||
| 
						 | 
					@ -939,7 +944,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        with open(local_config_file, 'w') as f:
 | 
					        with open(local_config_file, 'w') as f:
 | 
				
			||||||
            config.write(f)
 | 
					            config.write(f)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'conf_dir': '/opt/conf/cdist',
 | 
					            'conf_dir': '/opt/conf/cdist',
 | 
				
			||||||
            'remote_copy': 'scpcustom',
 | 
					            'remote_copy': 'scpcustom',
 | 
				
			||||||
| 
						 | 
					@ -998,7 +1003,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        args = argparse.Namespace()
 | 
					        args = argparse.Namespace()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'beta': 'off',
 | 
					            'beta': 'off',
 | 
				
			||||||
            'local_shell': '/bin/sh',
 | 
					            'local_shell': '/bin/sh',
 | 
				
			||||||
| 
						 | 
					@ -1021,7 +1026,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        with open(global_config_file, 'w') as f:
 | 
					        with open(global_config_file, 'w') as f:
 | 
				
			||||||
            config.write(f)
 | 
					            config.write(f)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'beta': 'on',
 | 
					            'beta': 'on',
 | 
				
			||||||
            'local_shell': '/usr/bin/sh',
 | 
					            'local_shell': '/usr/bin/sh',
 | 
				
			||||||
| 
						 | 
					@ -1038,7 +1043,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        with open(local_config_file, 'w') as f:
 | 
					        with open(local_config_file, 'w') as f:
 | 
				
			||||||
            config.write(f)
 | 
					            config.write(f)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'conf_dir': '/opt/conf/cdist',
 | 
					            'conf_dir': '/opt/conf/cdist',
 | 
				
			||||||
            'remote_copy': 'scpcustom',
 | 
					            'remote_copy': 'scpcustom',
 | 
				
			||||||
| 
						 | 
					@ -1107,7 +1112,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        self.assertEqual(dargs, expected_args)
 | 
					        self.assertEqual(dargs, expected_args)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_configuration_empty_value_in_file(self):
 | 
					    def test_configuration_empty_value_in_file(self):
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'inventory_dir': '',
 | 
					            'inventory_dir': '',
 | 
				
			||||||
            'conf_dir': '',
 | 
					            'conf_dir': '',
 | 
				
			||||||
| 
						 | 
					@ -1169,7 +1174,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
                                             config_files=())
 | 
					                                             config_files=())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_configuration_disable_saving_output_streams1(self):
 | 
					    def test_configuration_disable_saving_output_streams1(self):
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'save_output_streams': 'True',
 | 
					            'save_output_streams': 'True',
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -1197,7 +1202,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        self.assertEqual(configuration.config, expected_config_dict)
 | 
					        self.assertEqual(configuration.config, expected_config_dict)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_configuration_disable_saving_output_streams2(self):
 | 
					    def test_configuration_disable_saving_output_streams2(self):
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'save_output_streams': 'False',
 | 
					            'save_output_streams': 'False',
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -1225,7 +1230,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        self.assertEqual(configuration.config, expected_config_dict)
 | 
					        self.assertEqual(configuration.config, expected_config_dict)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_configuration_disable_saving_output_streams3(self):
 | 
					    def test_configuration_disable_saving_output_streams3(self):
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'save_output_streams': 'False',
 | 
					            'save_output_streams': 'False',
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -1253,7 +1258,7 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
        self.assertEqual(configuration.config, expected_config_dict)
 | 
					        self.assertEqual(configuration.config, expected_config_dict)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_configuration_disable_saving_output_streams4(self):
 | 
					    def test_configuration_disable_saving_output_streams4(self):
 | 
				
			||||||
        config = configparser.ConfigParser()
 | 
					        config = newConfigParser()
 | 
				
			||||||
        config['GLOBAL'] = {
 | 
					        config['GLOBAL'] = {
 | 
				
			||||||
            'save_output_streams': 'True',
 | 
					            'save_output_streams': 'True',
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -1280,6 +1285,17 @@ class ConfigurationTestCase(test.CdistTestCase):
 | 
				
			||||||
                                         config_files=config_files)
 | 
					                                         config_files=config_files)
 | 
				
			||||||
        self.assertEqual(configuration.config, expected_config_dict)
 | 
					        self.assertEqual(configuration.config, expected_config_dict)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_read_config_file_with_interpolation(self):
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            config = cc.Configuration(None, env={}, config_files=())
 | 
				
			||||||
 | 
					            d = config._read_config_file(interpolation_config_file)
 | 
				
			||||||
 | 
					            val = d['GLOBAL']['cache_path_pattern']
 | 
				
			||||||
 | 
					            self.assertIsNotNone(val)
 | 
				
			||||||
 | 
					            self.assertEqual(val, '%N')
 | 
				
			||||||
 | 
					        except configparser.InterpolationSyntaxError as e:
 | 
				
			||||||
 | 
					            self.fail("Exception should not have been raised: {}".format(
 | 
				
			||||||
 | 
					                e))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == "__main__":
 | 
					if __name__ == "__main__":
 | 
				
			||||||
    import unittest
 | 
					    import unittest
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								cdist/test/configuration/fixtures/interpolation-test.cfg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								cdist/test/configuration/fixtures/interpolation-test.cfg
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					[GLOBAL]
 | 
				
			||||||
 | 
					cache_path_pattern = %N
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,7 @@ Changelog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
next:
 | 
					next:
 | 
				
			||||||
	* New type: __acl (Ander Punnar)
 | 
						* New type: __acl (Ander Punnar)
 | 
				
			||||||
 | 
						* Core: Disable config parser interpolation (Darko Poljak)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
4.9.1: 2018-05-30
 | 
					4.9.1: 2018-05-30
 | 
				
			||||||
	* New type: __install_coreos (Ľubomír Kučera)
 | 
						* New type: __install_coreos (Ľubomír Kučera)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue