1# Licensed to the Apache Software Foundation (ASF) under one or more 2# contributor license agreements. See the NOTICE file distributed with 3# this work for additional information regarding copyright ownership. 4# The ASF licenses this file to You under the Apache License, Version 2.0 5# (the "License"); you may not use this file except in compliance with 6# the License. You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15 16from typing import Dict 17 18from libcloud.backup.providers import Provider as BackupProvider 19from libcloud.backup.providers import get_driver as get_backup_driver 20 21from libcloud.compute.providers import Provider as ComputeProvider 22from libcloud.compute.providers import get_driver as get_compute_driver 23 24from libcloud.container.providers import Provider as ContainerProvider 25from libcloud.container.providers import get_driver as get_container_driver 26 27from libcloud.dns.providers import Provider as DnsProvider 28from libcloud.dns.providers import get_driver as get_dns_driver 29 30from libcloud.loadbalancer.providers import Provider as LoadBalancerProvider 31from libcloud.loadbalancer.providers import get_driver as \ 32 get_loadbalancer_driver 33 34from libcloud.storage.providers import Provider as StorageProvider 35from libcloud.storage.providers import get_driver as get_storage_driver 36 37 38class DriverType(object): 39 """ Backup-as-a-service driver """ 40 BACKUP = BackupProvider 41 42 """ Compute-as-a-Service driver """ 43 COMPUTE = ComputeProvider 44 45 """ Container-as-a-Service driver """ 46 CONTAINER = ContainerProvider 47 48 """ DNS service provider driver """ 49 DNS = DnsProvider 50 51 """ Load balancer provider-driver """ 52 LOADBALANCER = LoadBalancerProvider 53 54 """ Storage-as-a-Service driver """ 55 STORAGE = StorageProvider 56 57 58DriverTypeFactoryMap = { 59 DriverType.BACKUP: get_backup_driver, 60 DriverType.COMPUTE: get_compute_driver, 61 DriverType.CONTAINER: get_container_driver, 62 DriverType.DNS: get_dns_driver, 63 DriverType.LOADBALANCER: get_loadbalancer_driver, 64 DriverType.STORAGE: get_storage_driver 65} # type: Dict 66 67 68class DriverTypeNotFoundError(KeyError): 69 def __init__(self, type): 70 self.message = "Driver type '%s' not found." % type 71 72 def __repr__(self): 73 return self.message 74 75 76def get_driver(type, provider): 77 """ 78 Get a driver 79 """ 80 try: 81 return DriverTypeFactoryMap[type](provider) 82 except KeyError: 83 raise DriverTypeNotFoundError(type) 84