Exemplo n.º 1
0
    def test_diagnostic_settings_table_storage_type(self):
        p = self.load_policy(
            {
                'name':
                'test-azure-storage',
                'resource':
                'azure.storage',
                'filters': [{
                    'type': 'value',
                    'key': 'name',
                    'op': 'glob',
                    'value_type': 'normalize',
                    'value': 'cctstorage*'
                }, {
                    'type': 'storage-diagnostic-settings',
                    'storage-type': 'table',
                    'key': 'logging.delete',
                    'value': False
                }],
            },
            validate=True)

        resources = p.run()
        self.assertEqual(1, len(resources))
        self.assertTrue(get_annotation_prefix('table') in resources[0])
Exemplo n.º 2
0
    def get_backup_retention_policy(database, get_operation, cache_key):

        policy_key = get_annotation_prefix(cache_key)
        cached_policy = database.get(policy_key)
        if cached_policy:
            return cached_policy

        resource_group_name, server_name, database_name = \
            BackupRetentionPolicyHelper.get_backup_retention_policy_context(database)

        try:
            response = get_operation(resource_group_name, server_name,
                                     database_name)
        except CloudError as e:
            if e.status_code == 404:
                return None
            else:
                log.error(
                    "Unable to get backup retention policy. "
                    "(resourceGroup: {}, sqlserver: {}, sqldatabase: {})".
                    format(resource_group_name, server_name, database_name))
                raise e

        retention_policy = response.as_dict()
        database[policy_key] = retention_policy
        return retention_policy
Exemplo n.º 3
0
    def __call__(self, i):
        if not self.cached_costs:
            self.cached_costs = self._query_costs()

        id = i['id'].lower() + "/"

        costs = [
            k.copy() for k in self.cached_costs
            if (k['ResourceId'] + '/').startswith(id)
        ]

        if not costs:
            return False

        if any(c['Currency'] != costs[0]['Currency'] for c in costs):
            self.log.warning(
                'Detected different currencies for the resource {0}. Costs array: {1}'
                .format(i['id'], costs))

        total_cost = {
            'PreTaxCost': sum(c['PreTaxCost'] for c in costs),
            'Currency': costs[0]['Currency']
        }
        i[get_annotation_prefix('cost')] = total_cost
        result = super(CostFilter, self).__call__(total_cost)
        return result
Exemplo n.º 4
0
 def _write_metric_to_resource(self, resource, metrics_data, m):
     resource_metrics = resource.setdefault(
         get_annotation_prefix('metrics'), {})
     resource_metrics[self._get_metrics_cache_key()] = {
         'metrics_data': metrics_data.as_dict(),
         'measurement': m,
     }
Exemplo n.º 5
0
    def _get_settings(self, storage_account, session=None, token=None):
        storage_prefix_property = get_annotation_prefix(self.storage_type)

        if not (storage_prefix_property in storage_account):
            settings = StorageSettingsUtilities.get_settings(
                self.storage_type, storage_account, session, token)
            storage_account[storage_prefix_property] = json.loads(jsonpickle.encode(settings))

        return storage_account[storage_prefix_property]
Exemplo n.º 6
0
    def _get_settings(self, storage_account, session=None):
        storage_prefix_property = get_annotation_prefix(self.storage_type)

        if not (storage_prefix_property in storage_account):
            settings = StorageSettingsUtilities.get_settings(
                self.storage_type, storage_account, session)
            storage_account[storage_prefix_property] = serialize(settings)

        return storage_account[storage_prefix_property]
    def _check_resources(self, resources, event):
        result = []

        for r in resources:
            if get_annotation_prefix('last-execution') in r:
                continue
            history = self.client.exports.get_execution_history(self.scope, r['name'])

            # Include exports that has no execution history
            if not history.value:
                r[get_annotation_prefix('last-execution')] = 'None'
                result.append(r)
                continue

            last_execution = max(history.value, key=lambda execution: execution.submitted_time)
            if last_execution.submitted_time.date() <= self.min_date.date():
                r[get_annotation_prefix('last-execution')] = last_execution.serialize(True)
                result.append(r)

        return result
Exemplo n.º 8
0
    def _process_resource(self, database):
        update_operation = getattr(self.client, self.operations_property).create_or_update

        resource_group_name, server_name, database_name = \
            BackupRetentionPolicyHelper.get_backup_retention_policy_context(database)
        parameters = self._get_parameters_for_new_retention_policy(database)

        new_retention_policy = update_operation(
            resource_group_name, server_name, database_name, parameters).result()

        # Update the cached version
        database[get_annotation_prefix(self.operations_property)] = new_retention_policy.as_dict()
Exemplo n.º 9
0
 def _get_cached_metric_data(self, resource):
     metrics = resource.get(get_annotation_prefix('metrics'))
     if not metrics:
         return None
     return metrics.get(self._get_metrics_cache_key())