generate/resources/_myfolders.py (30 lines of code) (raw):

# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from collections import deque from cdktf_cdktf_provider_google.folder import Folder import util def bfs_navigate_folder(dictionary): add_folders = [] queue = deque([("", "", dictionary)]) new_folder_path = "" while queue: folder_parent, folder_name, current_folders = queue.popleft() if folder_name: new_folder_path = "/".join([folder_parent, folder_name]) add_folders.append((folder_parent, new_folder_path, folder_name)) # Enqueue child folders for node, sub_nodes in current_folders.items(): queue.append((new_folder_path, node, sub_nodes)) return add_folders def create_folder(self, folder_path, new_folder_path, folder_name): if self.which_node(folder_path) == "folder": folder_parent = self.tf_ref("folder", folder_path) else: folder_parent = f'organizations/{self.tf_ref("organization", "/")}' self.created["folders"][new_folder_path] = Folder( self, f"fldr_{util.clean_tf_folder(new_folder_path)}", display_name=folder_name, parent=folder_parent, ) def generate_folders(self, my_resource, resource): add_folders = bfs_navigate_folder(self.eztf_config.get(my_resource, {})) for fldr_parent, fldr_path, fldr_name in add_folders: create_folder(self, fldr_parent, fldr_path, fldr_name)