Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

azure - redis.filters.redis-firewall-filter #9045

Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7887b76
Add redis.filters.redis-firewall-filter
dmytro-afanasiev Oct 6, 2023
ea8a116
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Oct 13, 2023
6758510
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Oct 22, 2023
40709fa
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Oct 27, 2023
5457e9e
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Oct 27, 2023
7788c27
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Oct 31, 2023
a6520c6
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Nov 3, 2023
d60df77
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Nov 17, 2023
78625f4
Rename redis-firewall-filter to firewall
dmytro-afanasiev Nov 17, 2023
12b6ebc
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Nov 21, 2023
11286aa
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Dec 1, 2023
531e33d
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Dec 8, 2023
ef90fd4
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Dec 14, 2023
ca92597
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Jan 12, 2024
e63901b
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Jan 19, 2024
6272230
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Jan 29, 2024
ba1065b
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Jan 31, 2024
35bfd69
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Feb 2, 2024
77608c6
Rewrite redis firewall filter
dmytro-afanasiev Feb 3, 2024
23829d5
Merge remote-tracking branch 'origin/main' into redis.filters.redis-f…
dmytro-afanasiev Feb 6, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 6 additions & 0 deletions c7n/filters/core.py
Expand Up @@ -1201,3 +1201,9 @@ def __call__(self, resource):
if self.process((resource,)):
return True
return False


# function for checking the values as at ValueFilter
def op(data, a, b):
op = OPERATORS[data.get('op', 'eq')]
return op(a, b)
26 changes: 26 additions & 0 deletions tools/c7n_azure/c7n_azure/resources/redis.py
Expand Up @@ -3,6 +3,9 @@

from c7n_azure.provider import resources
from c7n_azure.resources.arm import ArmResourceManager
from c7n.filters import ValueFilter
from c7n.utils import type_schema
from c7n.filters.core import op


@resources.register('redis')
Expand Down Expand Up @@ -42,3 +45,26 @@ class resource_type(ArmResourceManager.resource_type):
'properties.sku.[name, family, capacity]'
)
resource_type = 'Microsoft.Cache/Redis'


@Redis.filter_registry.register('redis-firewall-filter')
dmytro-afanasiev marked this conversation as resolved.
Show resolved Hide resolved
class RedisFirewallFilter(ValueFilter):
schema = type_schema('redis-firewall-filter', rinherit=ValueFilter.schema)

def process(self, resources, event=None):
accepted = []
client = self.manager.get_client('azure.mgmt.redis.RedisManagementClient')
for resource in resources:
firewall_rules = list(
client.firewall_rules.list_by_redis_resource(
cache_name=resource['name'],
resource_group_name=resource['resourceGroup']))
any_of = []
for rule in firewall_rules:
key = getattr(rule, self.data.get('key'))
if key and op(self.data, key, self.data.get('value')):
any_of.append(True)
if any(any_of):
accepted.append(resource)

return accepted
@@ -0,0 +1,128 @@
{
"version": 1,
"interactions": [
{
"request": {
"method": "GET",
"uri": "https://management.azure.com/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Cache/Redis?api-version=2019-07-01",
"body": null,
"headers": {}
},
"response": {
"status": {
"code": 200,
"message": "OK"
},
"headers": {
"date": [
"Fri, 18 Mar 2022 12:28:45 GMT"
],
"x-rp-server-mvid": [
"19a02dbb-9d02-4c5d-9811-de1a634c04aa"
],
"content-type": [
"application/json; charset=utf-8"
],
"cache-control": [
"no-cache"
],
"content-length": [
"783"
]
},
"body": {
"data": {
"value": [
{
"id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/resourceGroups/301-green-resources/providers/Microsoft.Cache/Redis/301-redis-green",
"location": "East US",
"name": "301-redis-green",
"type": "Microsoft.Cache/Redis",
"tags": {},
"properties": {
"provisioningState": "Succeeded",
"redisVersion": "4.1.14",
"sku": {
"name": "Premium",
"family": "P",
"capacity": 1
},
"enableNonSslPort": false,
"instances": [
{
"sslPort": 15000,
"isMaster": true
},
{
"sslPort": 15001,
"isMaster": false
}
],
"minimumTlsVersion": "1.0",
"redisConfiguration": {
"maxmemory-policy": "volatile-lru",
"maxclients": "7500",
"maxmemory-reserved": "642",
"maxfragmentationmemory-reserved": "642",
"maxmemory-delta": "642"
},
"accessKeys": null,
"hostName": "301-redis-green.redis.cache.windows.net",
"port": 6379,
"sslPort": 6380,
"linkedServers": []
}
}
]
}
}
}
},
{
"request": {
"method": "GET",
"uri": "https://management.azure.com/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/resourceGroups/301-green-resources/providers/Microsoft.Cache/Redis/301-redis-green/firewallRules?api-version=2019-07-01",
"body": null,
"headers": {}
},
"response": {
"status": {
"code": 200,
"message": "OK"
},
"headers": {
"date": [
"Fri, 18 Mar 2022 12:28:46 GMT"
],
"x-rp-server-mvid": [
"19a02dbb-9d02-4c5d-9811-de1a634c04aa"
],
"content-type": [
"application/json; charset=utf-8"
],
"cache-control": [
"no-cache"
],
"content-length": [
"316"
]
},
"body": {
"data": {
"value": [
{
"id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/resourceGroups/301-green-resources/providers/Microsoft.Cache/Redis/301-redis-green/firewallRules/someIPrange",
"name": "301-redis-green/someIPrange",
"type": "Microsoft.Cache/Redis/firewallRules",
"properties": {
"startIP": "1.2.3.4",
"endIP": "2.3.4.5"
}
}
]
}
}
}
}
]
}
18 changes: 18 additions & 0 deletions tools/c7n_azure/tests_azure/tests_resources/test_redis.py
Expand Up @@ -29,3 +29,21 @@ def test_find_by_name(self):
})
resources = p.run()
self.assertEqual(len(resources), 1)


class TestRedisFirewallFilter(BaseTest):

def test_redis_firewall_filter_query(self):
p = self.load_policy({
'name': 'redis-firewall-filter',
'resource': 'azure.redis',
'filters': [
{'type': 'redis-firewall-filter',
'key': 'start_ip',
'op': 'eq',
'value': '1.2.3.4'}],
})
resources = p.run()

self.assertEqual(len(resources), 1)
self.assertEqual(resources[0]['name'], '301-redis-green')