def __init__(self, customer_name, credentials, data_source, report_name=None, **kwargs): """ Constructor. Args: customer_name (String) Name of the customer credentials (Dict) credentials credential for S3 bucket (RoleARN) report_name (String) Name of the Cost Usage Report to download (optional) bucket (String) Name of the S3 bucket containing the CUR """ super().__init__(**kwargs) arn = credentials.get("role_arn") bucket = data_source.get("bucket") if customer_name[4:] in settings.DEMO_ACCOUNTS: demo_account = settings.DEMO_ACCOUNTS.get(customer_name[4:]) LOG.info(f"Info found for demo account {customer_name[4:]} = {demo_account}.") if arn in demo_account: demo_info = demo_account.get(arn) self.customer_name = customer_name.replace(" ", "_") self._provider_uuid = kwargs.get("provider_uuid") self.report_name = demo_info.get("report_name") self.report = {"S3Bucket": bucket, "S3Prefix": demo_info.get("report_prefix"), "Compression": "GZIP"} self.bucket = bucket session = utils.get_assume_role_session(utils.AwsArn(arn), "MasuDownloaderSession") self.s3_client = session.client("s3") return self.customer_name = customer_name.replace(" ", "_") self._provider_uuid = kwargs.get("provider_uuid") LOG.debug("Connecting to AWS...") session = utils.get_assume_role_session(utils.AwsArn(arn), "MasuDownloaderSession") self.cur = session.client("cur") # fetch details about the report from the cloud provider defs = self.cur.describe_report_definitions() if not report_name: report_names = [] for report in defs.get("ReportDefinitions", []): if bucket == report.get("S3Bucket"): report_names.append(report["ReportName"]) # FIXME: Get the first report in the bucket until Koku can specify # which report the user wants if report_names: report_name = report_names[0] self.report_name = report_name self.bucket = bucket report_defs = defs.get("ReportDefinitions", []) report = [rep for rep in report_defs if rep["ReportName"] == self.report_name] if not report: raise MasuProviderError("Cost and Usage Report definition not found.") self.report = report.pop() self.s3_client = session.client("s3")
def _init_session(self): """ Set or get a session client for aws organizations Args: session = aws session """ session = utils.get_assume_role_session(utils.AwsArn(self._auth_cred)) session_client = session.client("organizations") LOG.info("Starting aws organizations session for crawler.") self._client = session_client
def test_get_assume_role_session(self, mock_boto_client): session = utils.get_assume_role_session(self.arn) self.assertIsInstance(session, boto3.Session)
def test_get_assume_role_session(self, mock_boto_client): """Test get_assume_role_session is successful.""" session = utils.get_assume_role_session(self.arn) self.assertIsInstance(session, boto3.Session)