def test_register_configs_for_all_packs(self): # Verify DB is empty pack_dbs = Pack.get_all() config_dbs = Config.get_all() self.assertEqual(len(pack_dbs), 0) self.assertEqual(len(config_dbs), 0) registrar = ConfigsRegistrar(use_pack_cache=False) registrar._pack_loader.get_packs = mock.Mock() registrar._pack_loader.get_packs.return_value = {'dummy_pack_1': PACK_1_PATH} packs_base_paths = content_utils.get_packs_base_paths() registrar.register_from_packs(base_dirs=packs_base_paths) # Verify pack and schema have been registered pack_dbs = Pack.get_all() config_dbs = Config.get_all() self.assertEqual(len(pack_dbs), 1) self.assertEqual(len(config_dbs), 1) config_db = config_dbs[0] self.assertEqual(config_db.values['api_key'], '{{st2kv.user.api_key}}') self.assertEqual(config_db.values['api_secret'], SUPER_SECRET_PARAMETER) self.assertEqual(config_db.values['region'], 'us-west-1')
def _register_pack_configs(self, validate_configs=False): """ Register all the packs inside the fixtures directory. """ registrar = ConfigsRegistrar(use_pack_cache=False, validate_configs=validate_configs) registrar.register_from_packs(base_dirs=get_packs_base_paths())
def test_register_configs_for_all_packs(self): # Verify DB is empty pack_dbs = Pack.get_all() config_dbs = Config.get_all() self.assertEqual(len(pack_dbs), 0) self.assertEqual(len(config_dbs), 0) registrar = ConfigsRegistrar(use_pack_cache=False) registrar._pack_loader.get_packs = mock.Mock() registrar._pack_loader.get_packs.return_value = { "dummy_pack_1": PACK_1_PATH } packs_base_paths = content_utils.get_packs_base_paths() registrar.register_from_packs(base_dirs=packs_base_paths) # Verify pack and schema have been registered pack_dbs = Pack.get_all() config_dbs = Config.get_all() self.assertEqual(len(pack_dbs), 1) self.assertEqual(len(config_dbs), 1) config_db = config_dbs[0] self.assertEqual(config_db.values["api_key"], "{{st2kv.user.api_key}}") self.assertEqual(config_db.values["api_secret"], SUPER_SECRET_PARAMETER) self.assertEqual(config_db.values["region"], "us-west-1")
def test_register_all_configs_invalid_config_no_config_schema(self): # verify_ configs is on, but ConfigSchema for the pack doesn't exist so # validation should proceed normally # Verify DB is empty pack_dbs = Pack.get_all() config_dbs = Config.get_all() self.assertEqual(len(pack_dbs), 0) self.assertEqual(len(config_dbs), 0) registrar = ConfigsRegistrar(use_pack_cache=False, validate_configs=False) registrar._pack_loader.get_packs = mock.Mock() registrar._pack_loader.get_packs.return_value = { "dummy_pack_6": PACK_6_PATH } packs_base_paths = content_utils.get_packs_base_paths() registrar.register_from_packs(base_dirs=packs_base_paths) # Verify pack and schema have been registered pack_dbs = Pack.get_all() config_dbs = Config.get_all() self.assertEqual(len(pack_dbs), 1) self.assertEqual(len(config_dbs), 1)
def test_register_all_configs_with_config_schema_validation_validation_failure( self): # Verify DB is empty pack_dbs = Pack.get_all() config_dbs = Config.get_all() self.assertEqual(len(pack_dbs), 0) self.assertEqual(len(config_dbs), 0) registrar = ConfigsRegistrar(use_pack_cache=False, fail_on_failure=True, validate_configs=True) registrar._pack_loader.get_packs = mock.Mock() registrar._pack_loader.get_packs.return_value = { 'dummy_pack_6': PACK_6_PATH } # Register ConfigSchema for pack registrar._register_pack_db = mock.Mock() registrar._register_pack(pack_name='dummy_pack_5', pack_dir=PACK_6_PATH) packs_base_paths = content_utils.get_packs_base_paths() expected_msg = ( 'Failed validating attribute "regions" in config for pack "dummy_pack_6" ' '(.*?): 1000 is not of type u\'array\'') self.assertRaisesRegexp(ValueError, expected_msg, registrar.register_from_packs, base_dirs=packs_base_paths)
def test_register_all_configs_with_config_schema_validation_validation_failure_1(self): # Verify DB is empty pack_dbs = Pack.get_all() config_dbs = Config.get_all() self.assertEqual(len(pack_dbs), 0) self.assertEqual(len(config_dbs), 0) registrar = ConfigsRegistrar(use_pack_cache=False, fail_on_failure=True, validate_configs=True) registrar._pack_loader.get_packs = mock.Mock() registrar._pack_loader.get_packs.return_value = {'dummy_pack_6': PACK_6_PATH} # Register ConfigSchema for pack registrar._register_pack_db = mock.Mock() registrar._register_pack(pack_name='dummy_pack_5', pack_dir=PACK_6_PATH) packs_base_paths = content_utils.get_packs_base_paths() if six.PY3: expected_msg = ('Failed validating attribute "regions" in config for pack ' '"dummy_pack_6" (.*?): 1000 is not of type \'array\'') else: expected_msg = ('Failed validating attribute "regions" in config for pack ' '"dummy_pack_6" (.*?): 1000 is not of type u\'array\'') self.assertRaisesRegexp(ValueError, expected_msg, registrar.register_from_packs, base_dirs=packs_base_paths)
def test_register_configs_for_all_packs(self): # Verify DB is empty pack_dbs = Pack.get_all() config_dbs = Config.get_all() self.assertEqual(len(pack_dbs), 0) self.assertEqual(len(config_dbs), 0) registrar = ConfigsRegistrar(use_pack_cache=False) registrar._pack_loader.get_packs = mock.Mock() registrar._pack_loader.get_packs.return_value = {"dummy_pack_1": PACK_PATH} packs_base_paths = content_utils.get_packs_base_paths() registrar.register_configs_for_all_packs(base_dirs=packs_base_paths) # Verify pack and schema have been registered pack_dbs = Pack.get_all() config_dbs = Config.get_all() self.assertEqual(len(pack_dbs), 1) self.assertEqual(len(config_dbs), 1) config_db = config_dbs[0] self.assertEqual(config_db.values["api_key"], "{{user.api_key}}") self.assertEqual(config_db.values["api_secret"], "{{user.api_secret}}") self.assertEqual(config_db.values["region"], "us-west-1")
def put(self, pack_uninstall_request, pack_ref): """ Create a new config for a pack. Handles requests: POST /configs/<pack_ref> """ try: config_api = ConfigAPI(pack=pack_ref, values=vars(pack_uninstall_request)) config_api.validate(validate_against_schema=True) except jsonschema.ValidationError as e: raise ValueValidationException(str(e)) config_content = yaml.safe_dump(config_api.values, default_flow_style=False) configs_path = os.path.join(cfg.CONF.system.base_path, 'configs/') config_path = os.path.join(configs_path, '%s.yaml' % config_api.pack) with open(config_path, 'w') as f: f.write(config_content) ConfigsRegistrar.save_model(config_api) return config_api
def test_register_configs_for_all_packs(self): # Verify DB is empty pack_dbs = Pack.get_all() config_dbs = Config.get_all() self.assertEqual(len(pack_dbs), 0) self.assertEqual(len(config_dbs), 0) registrar = ConfigsRegistrar(use_pack_cache=False) registrar._pack_loader.get_packs = mock.Mock() registrar._pack_loader.get_packs.return_value = { 'dummy_pack_1': PACK_1_PATH } packs_base_paths = content_utils.get_packs_base_paths() registrar.register_configs_for_all_packs(base_dirs=packs_base_paths) # Verify pack and schema have been registered pack_dbs = Pack.get_all() config_dbs = Config.get_all() self.assertEqual(len(pack_dbs), 1) self.assertEqual(len(config_dbs), 1) config_db = config_dbs[0] self.assertEqual(config_db.values['api_key'], '{{user.api_key}}') self.assertEqual(config_db.values['api_secret'], '{{user.api_secret}}') self.assertEqual(config_db.values['region'], 'us-west-1')
def put(self, pack_uninstall_request, pack_ref, requester_user, show_secrets=False): """ Create a new config for a pack. Handles requests: POST /configs/<pack_ref> """ try: config_api = ConfigAPI(pack=pack_ref, values=vars(pack_uninstall_request)) config_api.validate(validate_against_schema=True) except jsonschema.ValidationError as e: raise ValueValidationException(str(e)) self._dump_config_to_disk(config_api) config_db = ConfigsRegistrar.save_model(config_api) mask_secrets = self._get_mask_secrets(requester_user, show_secrets=show_secrets) return ConfigAPI.from_model(config_db, mask_secrets=mask_secrets)
def test_register_all_configs_with_config_schema_validation_validation_failure_2( self, ): # Verify DB is empty pack_dbs = Pack.get_all() config_dbs = Config.get_all() self.assertEqual(len(pack_dbs), 0) self.assertEqual(len(config_dbs), 0) registrar = ConfigsRegistrar(use_pack_cache=False, fail_on_failure=True, validate_configs=True) registrar._pack_loader.get_packs = mock.Mock() registrar._pack_loader.get_packs.return_value = { "dummy_pack_19": PACK_19_PATH } # Register ConfigSchema for pack registrar._register_pack_db = mock.Mock() registrar._register_pack(pack_name="dummy_pack_19", pack_dir=PACK_19_PATH) packs_base_paths = content_utils.get_packs_base_paths() if six.PY3: expected_msg = ( 'Failed validating attribute "instances.0.alias" in config for pack ' "\"dummy_pack_19\" (.*?): {'not': 'string'} is not of type " "'string'") else: expected_msg = ( 'Failed validating attribute "instances.0.alias" in config for pack ' "\"dummy_pack_19\" (.*?): {'not': 'string'} is not of type " "u'string'") self.assertRaisesRegexp( ValueError, expected_msg, registrar.register_from_packs, base_dirs=packs_base_paths, )
def test_register_all_configs_with_config_schema_validation_validation_failure_4( self, ): # This test checks for default values containing "decrypt_kv" jinja filter for # keys which have "secret: True" set. # Verify DB is empty pack_dbs = Pack.get_all() config_dbs = Config.get_all() self.assertEqual(len(pack_dbs), 0) self.assertEqual(len(config_dbs), 0) registrar = ConfigsRegistrar(use_pack_cache=False, fail_on_failure=True, validate_configs=True) registrar._pack_loader.get_packs = mock.Mock() registrar._pack_loader.get_packs.return_value = { "dummy_pack_22": PACK_22_PATH } # Register ConfigSchema for pack registrar._register_pack_db = mock.Mock() registrar._register_pack(pack_name="dummy_pack_22", pack_dir=PACK_22_PATH) packs_base_paths = content_utils.get_packs_base_paths() expected_msg = ( 'Values specified as "secret: True" in config schema are automatically ' 'decrypted by default. Use of "decrypt_kv" jinja filter is not allowed ' "for such values. Please check the specified values in the config or " "the default values in the schema.") self.assertRaisesRegexp( ValueError, expected_msg, registrar.register_from_packs, base_dirs=packs_base_paths, )
def test_register_all_configs_invalid_config_no_config_schema(self): # verify_ configs is on, but ConfigSchema for the pack doesn't exist so # validation should proceed normally # Verify DB is empty pack_dbs = Pack.get_all() config_dbs = Config.get_all() self.assertEqual(len(pack_dbs), 0) self.assertEqual(len(config_dbs), 0) registrar = ConfigsRegistrar(use_pack_cache=False, validate_configs=False) registrar._pack_loader.get_packs = mock.Mock() registrar._pack_loader.get_packs.return_value = {'dummy_pack_6': PACK_6_PATH} packs_base_paths = content_utils.get_packs_base_paths() registrar.register_from_packs(base_dirs=packs_base_paths) # Verify pack and schema have been registered pack_dbs = Pack.get_all() config_dbs = Config.get_all() self.assertEqual(len(pack_dbs), 1) self.assertEqual(len(config_dbs), 1)
def put(self, pack_uninstall_request, pack_ref): """ Create a new config for the action. Handles requests: POST /configs/<pack_ref> """ try: config_api = ConfigAPI(pack=pack_ref, values=vars(pack_uninstall_request)) config_api.validate(validate_against_schema=True) except jsonschema.ValidationError as e: raise ValueValidationException(str(e)) config_content = yaml.safe_dump(config_api.values, default_flow_style=False) configs_path = os.path.join(cfg.CONF.system.base_path, 'configs/') config_path = os.path.join(configs_path, '%s.yaml' % config_api.pack) with open(config_path, 'w') as f: f.write(config_content) ConfigsRegistrar.save_model(config_api) return config_api
def _register_pack_configs(self): """ Register all the packs inside the fixtures directory. """ registrar = ConfigsRegistrar(use_pack_cache=False) registrar.register_configs_for_all_packs(base_dirs=get_packs_base_paths())