在下面的代码帮助下,我为azure存储帐户创建了一个生命周期策略。
StorageManager manager = StorageManager.authenticate(credential, subId); //credentilas and subscription iD
manager.managementPolicies()
.define("testprefix")
.withExistingStorageAccount(resourceGroup, storageAcc)
.defineRule("testprefixrulenew")
.withLifecycleRuleType()
.withBlobTypeToFilterFor(BlobTypes.BLOCK_BLOB)
.withPrefixToFilterFor("prefix1")
.withDeleteActionOnBaseBlob(1)
.attach()
.create();当我运行这个程序时,存储帐户的所有现有生命周期规则都会被删除,只有新创建的规则才会出现。
1)如何避免使用java?删除现有的天青存储帐户的生命周期规则。
此外,当我试图通过使用下面的代码片段获取现有的生命周期策略时。
ManagementPolicyInner managementPolicy1 =
manager2
.inner()
.managementPolicies()
.getAsync(resourceGroup, storageAcc)
.toBlocking()
.last();我只能得到最后一次修改/创建的策略。如果我们去掉"last()",它就会给出可观察的值,所以。
2)如何获取现有策略,迭代它们,并在需要时使用java?更新其中的一个策略。
发布于 2021-01-19 02:17:44
如何避免使用java?删除现有的azure存储帐户的生命周期规则
关于这个问题,我们可以使用类com.azure.resourcemanager.storage.implementation.StorageManagementClientImpl来实现它。有关更多细节,请参阅这里
例如
String clientId="<the service principal client id>";
String clientSecret="<the service principal client secret>"";
String tenant="";
String subId="";
AzureProfile profile = new AzureProfile(tenant,subId,AzureEnvironment.AZURE);
TokenCredential credential = new ClientSecretCredentialBuilder()
.clientId(clientId)
.clientSecret(clientSecret)
.authorityHost(profile.getEnvironment().getActiveDirectoryEndpoint())
.tenantId(tenant)
.build();
StorageManagementClientImpl storageManagementClient = new StorageManagementClientBuilder()
.pipeline(HttpPipelineProvider.buildHttpPipeline(credential,profile))
.endpoint(profile.getEnvironment().getResourceManagerEndpoint())
.subscriptionId(profile.getSubscriptionId())
.buildClient();
ManagementPolicyInner policyInner= storageManagementClient.getManagementPolicies()
.get("andywin7","andyprivate",ManagementPolicyName.DEFAULT);
ManagementPolicyDefinition definition = new ManagementPolicyDefinition()
.withActions( new ManagementPolicyAction().withBaseBlob(
new ManagementPolicyBaseBlob().withTierToCool(
new DateAfterModification().withDaysAfterModificationGreaterThan(180))))
.withFilters(new ManagementPolicyFilter().withBlobTypes(Arrays.asList("blockBlob")));
ManagementPolicyRule newRule = new ManagementPolicyRule()
.withName("changeTier")
.withEnabled(true)
.withType(RuleType.LIFECYCLE)
.withDefinition(definition);
policyInner.policy().rules().add(newRule);
Response<ManagementPolicyInner> res =storageManagementClient.getManagementPolicies().createOrUpdateWithResponse(
"andywin7","andyprivate",ManagementPolicyName.DEFAULT,
policyInner.policy(), Context.NONE);


如何获取现有策略,迭代它们,并在需要时使用java?更新其中的一个策略。
请参阅以下代码列表
String clientId="<the service principal client id>";
String clientSecret="<the service principal client secret>"";
String tenant="";
String subId="";
AzureProfile profile = new AzureProfile(tenant,subId,AzureEnvironment.AZURE);
TokenCredential credential = new ClientSecretCredentialBuilder()
.clientId(clientId)
.clientSecret(clientSecret)
.authorityHost(profile.getEnvironment().getActiveDirectoryEndpoint())
.tenantId(tenant)
.build();
StorageManager manager = StorageManager.authenticate(credential,profile);
ManagementPolicy managementPolicy = manager.managementPolicies()
.getAsync("andywin7","andyprivate")
.block();
ObjectMapper mapper = new ObjectMapper();
for ( ManagementPolicyRule rule : managementPolicy.policy().rules()){
System.out.println(mapper.writeValueAsString(rule));
}更新
String clientId="<the service principal client id>";
String clientSecret="<the service principal client secret>"";
String tenant="";
String subId="";
AzureProfile profile = new AzureProfile(tenant,subId,AzureEnvironment.AZURE);
TokenCredential credential = new ClientSecretCredentialBuilder()
.clientId(clientId)
.clientSecret(clientSecret)
.authorityHost(profile.getEnvironment().getActiveDirectoryEndpoint())
.tenantId(tenant)
.build();
StorageManager manager = StorageManager.authenticate(credential,profile);
ManagementPolicy managementPolicy = manager.managementPolicies()
.getAsync("andywin7","andyprivate")
.block();
managementPolicy.update()
.updateRule("<the rule name you want to update>")
... the action you want to update
.parent()
.withoutRule("<the rule name you do not want to update>")
.apply();有关更多细节,请参阅这里
更新
关于如何更新现有规则,请参阅家禽代码。
StorageManager manager = StorageManager.authenticate(credential,profile);
ManagementPolicy managementPolicy = manager.managementPolicies()
.getAsync("andywin7","andyprivate")
.block();
ObjectMapper mapper = new ObjectMapper();
for ( ManagementPolicyRule rule : managementPolicy.policy().rules()){
System.out.println(mapper.writeValueAsString(rule));
if(rule.name().equals("deleteAppend")){
int i= managementPolicy.policy().rules().indexOf(rule);
ManagementPolicyRule newRule= managementPolicy.policy().rules().get(i);
managementPolicy.policy().rules().remove(rule);
newRule.definition()
.actions()
.withBaseBlob(new ManagementPolicyBaseBlob().withDelete(new DateAfterModification().withDaysAfterModificationGreaterThan(18) ));
managementPolicy.policy().rules().add(newRule);
}
}
managementPolicy.update()
.withPolicy(managementPolicy.policy())
.apply();

https://stackoverflow.com/questions/65769510
复制相似问题