示例#1
0
    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")
示例#2
0
    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
示例#3
0
 def test_get_assume_role_session(self, mock_boto_client):
     session = utils.get_assume_role_session(self.arn)
     self.assertIsInstance(session, boto3.Session)
示例#4
0
 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)