def test_replace_links_not_yaml(self): # invalid JSON/YAML -- curly brace left open source = '{"invalid JSON"' self.assertEqual( source, utils.replace_links_in_template_contents(source, self.link_replacement))
def test_replace_links(self): source = ( 'description: my template\n' 'heat_template_version: "2014-10-16"\n' 'resources:\n' ' test_config:\n' ' properties:\n' ' config: {get_file: "file:///home/stack/test.sh"}\n' ' type: OS::Heat::SoftwareConfig\n' ) expected = ( 'description: my template\n' 'heat_template_version: "2014-10-16"\n' 'resources:\n' ' test_config:\n' ' properties:\n' ' config: {get_file: user-files/home/stack/test.sh}\n' ' type: OS::Heat::SoftwareConfig\n' ) # the yaml->string dumps aren't always character-precise, so # we need to parse them into dicts for comparison expected_dict = yaml.safe_load(expected) result_dict = yaml.safe_load(utils.replace_links_in_template_contents( source, self.link_replacement)) self.assertEqual(expected_dict, result_dict)
def test_replace_links_not_template(self): # valid JSON/YAML, but doesn't have heat_template_version source = '{"get_file": "file:///home/stack/test.sh"}' self.assertEqual( source, utils.replace_links_in_template_contents(source, self.link_replacement))
def test_replace_links_not_yaml(self): # invalid JSON/YAML -- curly brace left open source = '{"invalid JSON"' self.assertEqual( source, utils.replace_links_in_template_contents( source, self.link_replacement))
def test_replace_links_not_template(self): # valid JSON/YAML, but doesn't have heat_template_version source = '{"get_file": "file:///home/stack/test.sh"}' self.assertEqual( source, utils.replace_links_in_template_contents( source, self.link_replacement))
def _upload_missing_files(self, container_name, files_dict, tht_root): """Find the files referenced in custom environments and upload them Heat environments can be passed to be included in the deployment, these files can include references to other files anywhere on the local file system. These need to be discovered and uploaded to Swift. When they have been uploaded to Swift the path to them will be different, the new paths are store din the file_relocation dict, which is returned and used by _process_and_upload_environment which will merge the environment and update paths to the relative Swift path. """ file_relocation = {} file_prefix = "file://" # select files files for relocation & upload for fullpath in files_dict.keys(): if not fullpath.startswith(file_prefix): continue path = fullpath[len(file_prefix):] if path.startswith(tht_root): # This should already be uploaded. continue file_relocation[fullpath] = "user-files/{}".format( os.path.normpath(path[1:])) # make sure links within files point to new locations, and upload them for orig_path, reloc_path in file_relocation.items(): link_replacement = utils.relative_link_replacement( file_relocation, os.path.dirname(reloc_path)) contents = utils.replace_links_in_template_contents( files_dict[orig_path], link_replacement) self.object_client.put_object(container_name, reloc_path, contents) return file_relocation
def _upload_missing_files(self, container_name, swift_client, files_dict, tht_root): """Find the files referenced in custom environments and upload them Heat environments can be passed to be included in the deployment, these files can include references to other files anywhere on the local file system. These need to be discovered and uploaded to Swift. When they have been uploaded to Swift the path to them will be different, the new paths are store din the file_relocation dict, which is returned and used by _process_and_upload_environment which will merge the environment and update paths to the relative Swift path. """ file_relocation = {} file_prefix = "file://" # select files files for relocation & upload for fullpath in files_dict.keys(): if not fullpath.startswith(file_prefix): continue path = fullpath[len(file_prefix):] if path.startswith(tht_root): # This should already be uploaded. continue file_relocation[fullpath] = "user-files/{}".format(path[1:]) # make sure links within files point to new locations, and upload them for orig_path, reloc_path in file_relocation.items(): link_replacement = utils.relative_link_replacement( file_relocation, os.path.dirname(reloc_path)) contents = utils.replace_links_in_template_contents( files_dict[orig_path], link_replacement) swift_client.put_object(container_name, reloc_path, contents) return file_relocation