def test_relative_link_replacement(self): current_dir = 'user-files/home/stack' expected = { 'file:///home/stack/test.sh': 'test.sh', 'file:///usr/share/extra-templates/my.yml': '../../usr/share/extra-templates/my.yml', } self.assertEqual(expected, utils.relative_link_replacement( self.link_replacement, current_dir))
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