def read_data_from_dir(cls, dir_path=None, serializer=None): """Read graph data from directory. :param dir_path: path :type dir_path: str :param serializer: serializer object :type serializer: object :return: data :rtype: list|object """ cls.check_dir(dir_path) serializer = serializer or Serializer() metadata_filepath = os.path.join(dir_path, 'metadata.yaml') if os.path.exists(metadata_filepath): data = serializer.read_from_full_path(metadata_filepath) else: data = {} tasks = [] for file_name in iterfiles(dir_path, 'tasks.yaml'): task_data = serializer.read_from_full_path(file_name) if task_data: tasks.extend(task_data) if tasks: data['tasks'] = tasks if not data: msg = ("Nothing to upload. Check if at least one 'tasks.yaml' " "file is not empty and exists in '{path}' directory " "path".format(path=dir_path)) raise error.ActionException(msg) return data
def test_iterfiles(self, mwalk): mwalk.return_value = [("/some_directory/", [], ["valid.yaml", "invalid.yml"])] pattern = "*.yaml" directory = "/some_directory" expected_result = [os.path.join(directory, "valid.yaml")] files = list(utils.iterfiles(directory, pattern)) mwalk.assert_called_once_with(directory) self.assertEqual(expected_result, files)
def test_iterfiles(self, mwalk): mwalk.return_value = [ ('/some_directory/', [], ['valid.yaml', 'invalid.yml'])] pattern = '*.yaml' directory = '/some_directory' expected_result = [os.path.join(directory, 'valid.yaml')] files = list(utils.iterfiles(directory, pattern)) mwalk.assert_called_once_with(directory, followlinks=True) self.assertEqual(expected_result, files)
def sync_deployment_tasks(self, params): """Upload tasks for different releases based on directories. The string identifier for the release(s) to update is expected to be found in the path (see `fuel release`), like: /etc/puppet/<release>/ /etc/puppet/liberty-9.0 fuel rel --sync-deployment-tasks --dir /etc/puppet/liberty-9.0/ fuel rel --sync-deployment-tasks --fp '*tasks.yaml' In case no directory was provided: fuel rel --sync-deployment-tasks The current directory will be used """ all_rels = Release.get_all_data() real_path = os.path.realpath(params.dir) serialized_tasks = defaultdict(list) versions = set([r['version'] for r in all_rels]) for file_name in utils.iterfiles(real_path, params.filepattern): for version in versions: if version in file_name: serialized_tasks[version].extend( self.serializer.read_from_full_path(file_name)) for rel in all_rels: release = Release(rel['id']) data = serialized_tasks.get(rel['version']) if data: release.update_deployment_tasks(data) print("Deployment tasks synchronized for release" " {0} of version {1}".format(rel['name'], rel['version'])) else: print("No tasks were synchronized for release {0} " "of version {1}.(Hint: nothing matched " "{2}/{1}/{3})".format(rel['name'], rel['version'], real_path, params.filepattern))
def sync_deployment_tasks(self, params): """Upload tasks for different releases based on directories. Unique identifier of the release should in the path, like: /etc/puppet/2014.2-6.0/ fuel rel --sync-deployment-tasks --dir /etc/puppet/2014.2-6.0/ fuel rel --sync-deployment-tasks --fp '*tasks.yaml' In case no directory will be provided: fuel rel --sync-deployment-tasks Current directory will be used """ all_rels = Release.get_all_data() real_path = os.path.realpath(params.dir) serialized_tasks = defaultdict(list) versions = set([r['version'] for r in all_rels]) for file_name in utils.iterfiles(real_path, params.filepattern): for version in versions: if version in file_name: serialized_tasks[version].extend( self.serializer.read_from_full_path(file_name)) for rel in all_rels: release = Release(rel['id']) data = serialized_tasks.get(rel['version']) if data: release.update_deployment_tasks(data) print("Deployment tasks syncronized for release" " {0} of version {1}".format(rel['name'], rel['version'])) else: print("No tasks found for release {0} " "of version {1}".format(rel['name'], rel['version']))
def sync_deployment_tasks(self, params): """Upload tasks for different releases based on directories. Unique identifier of the release should in the path, like: /etc/puppet/2014.2-6.0/ fuel rel --sync-deployment-tasks --dir /etc/puppet/2014.2-6.0/ fuel rel --sync-deployment-tasks --fp '*tasks.yaml' In case no directory will be provided: fuel rel --sync-deployment-tasks Current directory will be used """ all_rels = Release.get_all_data() real_path = os.path.realpath(params.dir) serialized_tasks = defaultdict(list) versions = set([r['version'] for r in all_rels]) for file_name in utils.iterfiles(real_path, params.filepattern): for version in versions: if version in file_name: serialized_tasks[version].extend( self.serializer.read_from_full_path(file_name)) for rel in all_rels: release = Release(rel['id']) data = serialized_tasks.get(rel['version']) if data: release.update_deployment_tasks(data) print("Deployment tasks synchronized for release" " {0} of version {1}".format(rel['name'], rel['version'])) else: print("No tasks found for release {0} " "of version {1}".format(rel['name'], rel['version']))