Skip to content

Commit d57ed34

Browse files
authored
[Devtool]Add blob account preparer to enable versioning/lat/softdelete (Azure#19391)
* [Devtool]Add blob account preparer to enable versioning/lat/softdelete * update min dependency version
1 parent 2df4324 commit d57ed34

File tree

3 files changed

+59
-12
lines changed

3 files changed

+59
-12
lines changed

tools/azure-sdk-tools/devtools_testutils/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from .storage_testcase import (
1010
FakeStorageAccount,
1111
StorageAccountPreparer,
12+
BlobAccountPreparer,
1213
CachedStorageAccountPreparer,
1314
)
1415
from .keyvault_preparer import KeyVaultPreparer
@@ -20,6 +21,7 @@
2021
"FakeResource",
2122
"ResourceGroupPreparer",
2223
"StorageAccountPreparer",
24+
"BlobAccountPreparer",
2325
"CachedStorageAccountPreparer",
2426
"FakeStorageAccount",
2527
"AzureTestCase",

tools/azure-sdk-tools/devtools_testutils/storage_testcase.py

Lines changed: 56 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
pass
1515

1616
from azure.mgmt.storage import StorageManagementClient
17-
from azure.mgmt.storage.models import StorageAccount, Endpoints
17+
from azure.mgmt.storage.models import StorageAccount, Endpoints, BlobServiceProperties, DeleteRetentionPolicy, \
18+
LastAccessTimeTrackingPolicy
1819

1920
from azure_devtools.scenario_tests.exceptions import AzureTestError
2021

@@ -64,16 +65,8 @@ def create_resource(self, name, **kwargs):
6465
if self.is_live:
6566
self.client = self.create_mgmt_client(StorageManagementClient)
6667
group = self._get_resource_group(**kwargs)
67-
storage_async_operation = self.client.storage_accounts.begin_create(
68-
group.name,
69-
name,
70-
{
71-
"sku": {"name": self.sku},
72-
"location": self.location,
73-
"kind": self.kind,
74-
"enable_https_traffic_only": True,
75-
},
76-
)
68+
storage_async_operation = self._create_account(group.name, name)
69+
7770
self.resource = storage_async_operation.result()
7871
storage_keys = {v.key_name: v.value for v in self.client.storage_accounts.list_keys(group.name, name).keys}
7972
self.storage_key = storage_keys["key1"]
@@ -126,6 +119,18 @@ def remove_resource(self, name, **kwargs):
126119
)
127120
sleep(30)
128121

122+
def _create_account(self, resource_group_name, account_name):
123+
return self.client.storage_accounts.begin_create(
124+
resource_group_name,
125+
account_name,
126+
{
127+
"sku": {"name": self.sku},
128+
"location": self.location,
129+
"kind": self.kind,
130+
"enable_https_traffic_only": True,
131+
},
132+
)
133+
129134
def _get_resource_group(self, **kwargs):
130135
try:
131136
return kwargs.get(self.resource_group_parameter_name)
@@ -137,4 +142,44 @@ def _get_resource_group(self, **kwargs):
137142
raise AzureTestError(template.format(ResourceGroupPreparer.__name__))
138143

139144

145+
class BlobAccountPreparer(StorageAccountPreparer):
146+
def __init__(
147+
self,
148+
**kwargs
149+
):
150+
self.is_versioning_enabled = kwargs.pop("is_versioning_enabled", None)
151+
self.is_last_access_time_enabled = kwargs.pop("is_last_access_time_enabled", None)
152+
self.container_retention_days = kwargs.pop("container_retention_days", None)
153+
154+
super(BlobAccountPreparer, self).__init__(**kwargs)
155+
156+
def _create_account(self, resource_group_name, account_name):
157+
storage_async_operation = self.client.storage_accounts.begin_create(
158+
resource_group_name,
159+
account_name,
160+
{
161+
"sku": {"name": self.sku},
162+
"location": self.location,
163+
"kind": self.kind,
164+
"enable_https_traffic_only": True,
165+
},
166+
)
167+
168+
props = BlobServiceProperties()
169+
if self.is_versioning_enabled is True:
170+
props.is_versioning_enabled = True
171+
if self.container_retention_days:
172+
props.container_delete_retention_policy = DeleteRetentionPolicy(enabled=True,
173+
days=self.container_retention_days)
174+
if self.is_last_access_time_enabled:
175+
props.last_access_time_tracking_policy = LastAccessTimeTrackingPolicy(enable=True)
176+
177+
if not all(prop is None for prop in props.as_dict().values()):
178+
self.client.blob_services.set_service_properties(resource_group_name, account_name, props)
179+
180+
sleep(30)
181+
182+
return storage_async_operation
183+
184+
140185
CachedStorageAccountPreparer = functools.partial(StorageAccountPreparer, use_cache=True, random_name_enabled=True)

tools/azure-sdk-tools/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"azure-storage-common<1.4.1",
2121
"pyopenssl",
2222
"azure-mgmt-resource",
23-
"azure-mgmt-storage",
23+
"azure-mgmt-storage>=17.0.0",
2424
"azure-mgmt-keyvault",
2525
"python-dotenv",
2626
]

0 commit comments

Comments
 (0)