syndicate/core/resources/resources_provider.py (321 lines of code) (raw):
"""
Copyright 2018 EPAM Systems, Inc.
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 syndicate.connection import ConnectionProvider
from syndicate.core.resources.api_gateway_resource import ApiGatewayResource
from syndicate.core.resources.appsync_resource import AppSyncResource
from syndicate.core.resources.cloud_watch_alarm_resource import (
CloudWatchAlarmResource)
from syndicate.core.resources.cloud_watch_resource import CloudWatchResource
from syndicate.core.resources.cognito_identity_resource import (
CognitoIdentityResource)
from syndicate.core.resources.cognito_user_pool_resource import (
CognitoUserPoolResource)
from syndicate.core.resources.docdb_cluster_resource import \
DocumentDBClusterResource
from syndicate.core.resources.docdb_instance_resource import \
DocumentDBInstanceResource
from syndicate.core.resources.dynamo_db_resource import DynamoDBResource
from syndicate.core.resources.dax_resource import DaxResource
from syndicate.core.resources.ebs_resource import EbsResource
from syndicate.core.resources.ec2_resource import Ec2Resource
from syndicate.core.resources.firehose_resource import FirehoseResource
from syndicate.core.resources.eventbridge_scheduler_resource import EventBridgeSchedulerResource
from syndicate.core.resources.iam_resource import IamResource
from syndicate.core.resources.kinesis_resource import KinesisResource
from syndicate.core.resources.lambda_resource import LambdaResource
from syndicate.core.resources.s3_resource import S3Resource
from syndicate.core.resources.sns_resource import SnsResource
from syndicate.core.resources.sqs_resource import SqsResource
from syndicate.core.resources.step_functions_resource import (
StepFunctionResource)
from syndicate.core.resources.batch_compenv_resource import (
BatchComputeEnvironmentResource)
from syndicate.core.resources.batch_jobqueue_resource import (
BatchJobQueueResource)
from syndicate.core.resources.batch_jobdef_resource import (
BatchJobDefinitionResource)
from syndicate.core.resources.group_tagging_api_resource import TagsApiResource
from syndicate.core.resources.swagger_ui_resource import SwaggerUIResource
class ResourceProvider:
instance = None
def __init__(self, config, credentials, sts_conn) -> None:
self.sts_conn = sts_conn
if not ResourceProvider.instance:
ResourceProvider.instance = ResourceProvider.__Resources(
config=config,
credentials=credentials
)
def sts(self):
return self.sts_conn
def __getattr__(self, item):
return getattr(self.instance, item)
class __Resources:
_conn_provider = None
_cw_alarm_resource = None
_cw_resource = None
_sns_resource = None
_api_gateway_resource = None
_appsync_resource = None
_cognito_identity_resource = None
_cognito_user_pool_resource = None
_dynamodb_resource = None
_ebs_resource = None
_ec2_resource = None
_firehose_resource = None
_iam_resource = None
_kinesis_resource = None
_lambda_resource = None
_s3_resource = None
_sqs_resource = None
_step_functions_resource = None
_batch_compenv_resource = None
_batch_jobqueue_resource = None
_batch_jobdef_resource = None
_documentdb_cluster_resource = None
_documentdb_instance_resource = None
_tags_api_resource = None
_dax_cluster_resource = None
_eventbridge_scheduler_resource = None
_swagger_ui_resource = None
def __init__(self, config, credentials) -> None:
self.credentials = credentials
self._conn_provider = ConnectionProvider(credentials)
self.config = config
def cw_alarm(self, region=None):
if not region:
region = self.credentials.get('region')
if not self._cw_alarm_resource:
self._cw_alarm_resource = CloudWatchAlarmResource(
cw_conn=self._conn_provider.cw_metric(region=region),
sns_conn=self._conn_provider.sns(),
lambda_conn=self._conn_provider.lambda_conn(),
lambda_res=self.lambda_resource(),
account_id=self.config.account_id
)
return self._cw_alarm_resource
def cw(self):
if not self._cw_resource:
self._cw_resource = CloudWatchResource(
cw_events_conn_builder=self._conn_provider.cw_events,
account_id=self.config.account_id
)
return self._cw_resource
def sns(self):
if not self._sns_resource:
self._sns_resource = SnsResource(
conn_provider=self._conn_provider,
region=self.credentials.get('region'))
return self._sns_resource
def api_gw(self) -> ApiGatewayResource:
if not self._api_gateway_resource:
self._api_gateway_resource = ApiGatewayResource(
apigw_conn=self._conn_provider.api_gateway(),
apigw_v2_conn=self._conn_provider.api_gateway_v2(),
cw_logs_conn=self._conn_provider.cw_logs(),
lambda_res=self.lambda_resource(),
cognito_res=self.cognito_user_pool(),
account_id=self.config.account_id,
region=self.config.region
)
return self._api_gateway_resource
def appsync(self):
if not self._appsync_resource:
self._appsync_resource = AppSyncResource(
appsync_conn=self._conn_provider.appsync(),
s3_conn=self._conn_provider.s3(),
cup_conn=self._conn_provider.cognito_identity_provider(),
cw_logs_conn=self._conn_provider.cw_logs(),
deploy_target_bucket_key_compound=
self.config.deploy_target_bucket_key_compound,
deploy_target_bucket=self.config.deploy_target_bucket,
account_id=self.config.account_id
)
return self._appsync_resource
def cognito_identity(self):
self._cognito_identity_resource = CognitoIdentityResource(
cognito_conn=self._conn_provider.cognito_identity(),
account_id=self.config.account_id,
region=self.config.region
)
if not self._cognito_identity_resource:
pass
return self._cognito_identity_resource
def cognito_user_pool(self):
self._cognito_user_pool_resource = CognitoUserPoolResource(
cognito_idp_conn=
self._conn_provider.cognito_identity_provider(),
account_id=self.config.account_id,
region=self.config.region
)
if not self._cognito_user_pool_resource:
pass
return self._cognito_user_pool_resource
def dynamodb(self):
if not self._dynamodb_resource:
self._dynamodb_resource = DynamoDBResource(
dynamodb_conn=self._conn_provider.dynamodb(),
cw_alarm_conn=self._conn_provider.cw_metric(),
app_as_conn=self._conn_provider.application_autoscaling(),
iam_conn=self._conn_provider.iam()
)
return self._dynamodb_resource
def dax_cluster(self):
if not self._dax_cluster_resource:
self._dax_cluster_resource = DaxResource(
dax_conn=self._conn_provider.dax(),
iam_conn=self._conn_provider.iam()
)
return self._dax_cluster_resource
def ebs(self):
if not self._ebs_resource:
self._ebs_resource = EbsResource(
ec2_conn=self._conn_provider.ec2(),
iam_conn=self._conn_provider.iam(),
ebs_conn=self._conn_provider.beanstalk(),
sns_conn=self._conn_provider.sns(),
s3_conn=self._conn_provider.s3(),
account_id=self.config.account_id,
region=self.config.region,
deploy_target_bucket=self.config.deploy_target_bucket
)
return self._ebs_resource
def ec2(self):
if not self._ec2_resource:
self._ec2_resource = Ec2Resource(
ec2_conn=self._conn_provider.ec2(),
iam_conn=self._conn_provider.iam(),
account_id=self.config.account_id,
region=self.config.region
)
return self._ec2_resource
def firehose(self):
if not self._firehose_resource:
self._firehose_resource = FirehoseResource(
firehose_conn=self._conn_provider.firehose(),
s3_resource=self.s3(),
iam_resource=self.iam()
)
return self._firehose_resource
def eventbridge_scheduler(self):
if not self._eventbridge_scheduler_resource:
self._eventbridge_scheduler_resource = EventBridgeSchedulerResource(
eventbridge_conn=self._conn_provider.eventbridge_scheduler()
)
return self._eventbridge_scheduler_resource
def iam(self):
if not self._iam_resource:
self._iam_resource = IamResource(
iam_conn=self._conn_provider.iam(),
account_id=self.config.account_id,
region=self.config.region
)
return self._iam_resource
def kinesis(self):
if not self._kinesis_resource:
self._kinesis_resource = KinesisResource(
kin_conn=self._conn_provider.kinesis()
)
return self._kinesis_resource
def lambda_resource(self):
if not self._lambda_resource:
self._lambda_resource = LambdaResource(
lambda_conn=self._conn_provider.lambda_conn(),
s3_conn=self._conn_provider.s3(),
cw_logs_conn=self._conn_provider.cw_logs(),
sns_res=self.sns(),
sns_conn=self._conn_provider.sns(),
iam_conn=self._conn_provider.iam(),
dynamodb_conn=self._conn_provider.dynamodb(),
sqs_conn=self._conn_provider.sqs(),
kinesis_conn=self._conn_provider.kinesis(),
cw_events_conn=self._conn_provider.cw_events(),
cognito_idp_conn=
self._conn_provider.cognito_identity_provider(),
region=self.config.region,
account_id=self.config.account_id,
deploy_target_bucket=self.config.deploy_target_bucket
)
return self._lambda_resource
def s3(self):
if not self._s3_resource:
self._s3_resource = S3Resource(
s3_conn=self._conn_provider.s3(),
account_id=self.config.account_id
)
return self._s3_resource
def sqs(self):
if not self._sqs_resource:
self._sqs_resource = SqsResource(
sqs_conn_builder=self._conn_provider.sqs,
region=self.config.region,
account_id=self.config.account_id
)
return self._sqs_resource
def step_functions(self):
if not self._step_functions_resource:
self._step_functions_resource = StepFunctionResource(
sf_conn=self._conn_provider.step_functions(),
iam_conn=self._conn_provider.iam(),
cw_events_conn=self._conn_provider.cw_events(),
lambda_conn=self._conn_provider.lambda_conn(),
region=self.config.region,
account_id=self.config.account_id
)
return self._step_functions_resource
def batch_compenv(self):
if not self._batch_compenv_resource:
self._batch_compenv_resource = BatchComputeEnvironmentResource(
batch_conn=self._conn_provider.batch(),
iam_conn=self._conn_provider.iam(),
region=self.config.region,
account_id=self.config.account_id
)
return self._batch_compenv_resource
def batch_jobqueue(self):
if not self._batch_jobqueue_resource:
self._batch_jobqueue_resource = BatchJobQueueResource(
batch_conn=self._conn_provider.batch()
)
return self._batch_jobqueue_resource
def batch_jobdef(self):
if not self._batch_jobdef_resource:
self._batch_jobdef_resource = BatchJobDefinitionResource(
batch_conn=self._conn_provider.batch(),
iam_conn=self._conn_provider.iam()
)
return self._batch_jobdef_resource
def documentdb_cluster(self):
if not self._documentdb_cluster_resource:
self._documentdb_cluster_resource = DocumentDBClusterResource(
docdb_conn=self._conn_provider.documentdb(),
region=self.config.region,
account_id=self.config.account_id
)
return self._documentdb_cluster_resource
def documentdb_instance(self):
if not self._documentdb_instance_resource:
self._documentdb_instance_resource = \
DocumentDBInstanceResource(
docdb_conn=self._conn_provider.documentdb(),
region=self.config.region,
account_id=self.config.account_id
)
return self._documentdb_instance_resource
def tags_api(self):
if not self._tags_api_resource:
self._tags_api_resource = TagsApiResource(
connection=self._conn_provider.groups_tagging_api()
)
return self._tags_api_resource
def swagger_ui(self):
if not self._swagger_ui_resource:
self._swagger_ui_resource = SwaggerUIResource(
s3_conn=self._conn_provider.s3(),
deploy_target_bucket=self.config.deploy_target_bucket,
deploy_target_bucket_key_compound=(
self.config.deploy_target_bucket_key_compound),
region=self.config.region,
account_id=self.config.account_id,
extended_prefix_mode=self.config.extended_prefix_mode,
prefix=self.config.resources_prefix,
suffix=self.config.resources_suffix
)
return self._swagger_ui_resource