| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to You 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 typing import Dict |
| |
| from libcloud.backup.providers import Provider as BackupProvider |
| from libcloud.backup.providers import get_driver as get_backup_driver |
| |
| from libcloud.compute.providers import Provider as ComputeProvider |
| from libcloud.compute.providers import get_driver as get_compute_driver |
| |
| from libcloud.container.providers import Provider as ContainerProvider |
| from libcloud.container.providers import get_driver as get_container_driver |
| |
| from libcloud.dns.providers import Provider as DnsProvider |
| from libcloud.dns.providers import get_driver as get_dns_driver |
| |
| from libcloud.loadbalancer.providers import Provider as LoadBalancerProvider |
| from libcloud.loadbalancer.providers import get_driver as get_loadbalancer_driver |
| |
| from libcloud.storage.providers import Provider as StorageProvider |
| from libcloud.storage.providers import get_driver as get_storage_driver |
| |
| |
| class DriverType(object): |
| """Backup-as-a-service driver""" |
| |
| BACKUP = BackupProvider |
| |
| """ Compute-as-a-Service driver """ |
| COMPUTE = ComputeProvider |
| |
| """ Container-as-a-Service driver """ |
| CONTAINER = ContainerProvider |
| |
| """ DNS service provider driver """ |
| DNS = DnsProvider |
| |
| """ Load balancer provider-driver """ |
| LOADBALANCER = LoadBalancerProvider |
| |
| """ Storage-as-a-Service driver """ |
| STORAGE = StorageProvider |
| |
| |
| DriverTypeFactoryMap = { |
| DriverType.BACKUP: get_backup_driver, |
| DriverType.COMPUTE: get_compute_driver, |
| DriverType.CONTAINER: get_container_driver, |
| DriverType.DNS: get_dns_driver, |
| DriverType.LOADBALANCER: get_loadbalancer_driver, |
| DriverType.STORAGE: get_storage_driver, |
| } # type: Dict |
| |
| |
| class DriverTypeNotFoundError(KeyError): |
| def __init__(self, type): |
| self.message = "Driver type '%s' not found." % type |
| |
| def __repr__(self): |
| return self.message |
| |
| |
| def get_driver(type, provider): |
| """ |
| Get a driver |
| """ |
| try: |
| return DriverTypeFactoryMap[type](provider) |
| except KeyError: |
| raise DriverTypeNotFoundError(type) |