community/dm-scaffolder/providers/folder.py (45 lines of code) (raw):

# Copyright 2018 Google Inc. All rights reserved. # # 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. """ Provider classes for GCP Folders""" import sys import providers.baseprovider as base class FolderBase(base.BaseProvider): """ Common implementation of Folder APIs""" folder_readonly_properties = [ "createTime", "lifecycleState"] def __init__(self, dm_api, gcloud_stage, gcloud_flags=''): self.readonly_properties += self.folder_readonly_properties base.BaseProvider.__init__( self, "resource-manager", "folders", dm_api, gcloud_stage, gcloud_flags) def get_new(self): """ Virtual class to return a new instane of the matching provider class""" raise NotImplementedError('subclasses must override get_new()!') def get_list(self, gcloud_flags=""): return self.get_list_by_parent(" --organization=" + self.config.configs['organization_id'] + " " + gcloud_flags, 0) def get_list_by_parent(self, parent, level): """ List of the folders under a specific parent node.""" folders = [] folders_tmp = super(FolderBase, self).get_list(parent) if level < 4: for folder in folders_tmp: folders.append(folder) folders += self.get_list_by_parent(" --folder=" + folder.properties["name"][8:], level+1) return folders def get_folder_ids(self, forced_update=False): """ Return all folder IDs under the ORG recursively""" folder_ids = self.config.configs['folders_list_cache'] if forced_update or len(folder_ids) == 0: folder_ids=[] for folder in self.get_list(): folder_ids.append(folder.properties["name"][8:]) self.config.update_folders(folder_ids) return folder_ids class FolderAlpha(FolderBase): """ Folder Alpha API provider""" def __init__(self, gcloud_flags=''): FolderBase.__init__( self, "gcp-types/cloudresourcemanager-v2:folders", "alpha ", gcloud_flags) def get_new(self): return FolderAlpha() class FolderCFT(FolderBase): """ Folder CFT API provider""" def __init__(self, gcloud_flags=''): FolderBase.__init__( self, "../templates/folder/folder.py", "alpha ", gcloud_flags) def get_new(self): return FolderCFT() def fill_properties(self): self.base_yaml['properties']['folders'] = [self.properties]