def crawl_metadata(self):
        """Crawl metadata service when available.

        @returns: Dictionary of crawled metadata content containing the keys:
          meta-data, user-data and dynamic.
        """
        if not self.wait_for_metadata_service():
            return {}
        api_version = self.get_metadata_api_version()
        crawled_metadata = {}
        try:
            crawled_metadata['user-data'] = ec2.get_instance_userdata(
                api_version, self.metadata_address)
            crawled_metadata['meta-data'] = ec2.get_instance_metadata(
                api_version, self.metadata_address)
            if self.cloud_name == CloudNames.AWS:
                identity = ec2.get_instance_identity(
                    api_version, self.metadata_address)
                crawled_metadata['dynamic'] = {'instance-identity': identity}
        except Exception:
            util.logexc(
                LOG, "Failed reading from metadata address %s",
                self.metadata_address)
            return {}
        crawled_metadata['_metadata_api_version'] = api_version
        return crawled_metadata
Exemple #2
0
 def get_instance_id(self):
     if self.cloud_platform == Platforms.AWS:
         # Prefer the ID from the instance identity document, but fall back
         if not getattr(self, 'identity', None):
             # If re-using cached datasource, it's get_data run didn't
             # setup self.identity. So we need to do that now.
             api_version = self.get_metadata_api_version()
             self.identity = ec2.get_instance_identity(
                 api_version, self.metadata_address).get('document', {})
         return self.identity.get(
             'instanceId', self.metadata['instance-id'])
     else:
         return self.metadata['instance-id']
Exemple #3
0
 def get_instance_id(self):
     if self.cloud_name == CloudNames.AWS:
         # Prefer the ID from the instance identity document, but fall back
         if not getattr(self, 'identity', None):
             # If re-using cached datasource, it's get_data run didn't
             # setup self.identity. So we need to do that now.
             api_version = self.get_metadata_api_version()
             self.identity = ec2.get_instance_identity(
                 api_version, self.metadata_address).get('document', {})
         return self.identity.get(
             'instanceId', self.metadata['instance-id'])
     else:
         return self.metadata['instance-id']
Exemple #4
0
    def crawl_metadata(self):
        """Crawl metadata service when available.

        @returns: Dictionary of crawled metadata content containing the keys:
          meta-data, user-data and dynamic.
        """
        if not self.wait_for_metadata_service():
            return {}
        api_version = self.get_metadata_api_version()
        redact = AWS_TOKEN_REDACT
        crawled_metadata = {}
        if self.cloud_name == CloudNames.AWS:
            exc_cb = self._refresh_stale_aws_token_cb
            exc_cb_ud = self._skip_or_refresh_stale_aws_token_cb
        else:
            exc_cb = exc_cb_ud = None
        try:
            crawled_metadata["user-data"] = ec2.get_instance_userdata(
                api_version,
                self.metadata_address,
                headers_cb=self._get_headers,
                headers_redact=redact,
                exception_cb=exc_cb_ud,
            )
            crawled_metadata["meta-data"] = ec2.get_instance_metadata(
                api_version,
                self.metadata_address,
                headers_cb=self._get_headers,
                headers_redact=redact,
                exception_cb=exc_cb,
            )
            if self.cloud_name == CloudNames.AWS:
                identity = ec2.get_instance_identity(
                    api_version,
                    self.metadata_address,
                    headers_cb=self._get_headers,
                    headers_redact=redact,
                    exception_cb=exc_cb,
                )
                crawled_metadata["dynamic"] = {"instance-identity": identity}
        except Exception:
            util.logexc(
                LOG,
                "Failed reading from metadata address %s",
                self.metadata_address,
            )
            return {}
        crawled_metadata["_metadata_api_version"] = api_version
        return crawled_metadata
 def get_instance_id(self):
     if self.cloud_name == CloudNames.AWS:
         # Prefer the ID from the instance identity document, but fall back
         if not getattr(self, 'identity', None):
             # If re-using cached datasource, it's get_data run didn't
             # setup self.identity. So we need to do that now.
             api_version = self.get_metadata_api_version()
             self.identity = ec2.get_instance_identity(
                 api_version, self.metadata_address,
                 headers_cb=self._get_headers,
                 headers_redact=AWS_TOKEN_REDACT,
                 exception_cb=self._refresh_stale_aws_token_cb).get(
                     'document', {})
         return self.identity.get(
             'instanceId', self.metadata['instance-id'])
     else:
         return self.metadata['instance-id']
Exemple #6
0
    def _crawl_metadata(self):
        """Crawl metadata service when available.

        @returns: True on success, False otherwise.
        """
        if not self.wait_for_metadata_service():
            return False
        api_version = self.get_metadata_api_version()
        try:
            self.userdata_raw = ec2.get_instance_userdata(
                api_version, self.metadata_address)
            self.metadata = ec2.get_instance_metadata(api_version,
                                                      self.metadata_address)
            if self.cloud_platform == Platforms.AWS:
                self.identity = ec2.get_instance_identity(
                    api_version, self.metadata_address).get('document', {})
        except Exception:
            util.logexc(LOG, "Failed reading from metadata address %s",
                        self.metadata_address)
            return False
        return True