首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java中获取和更新azure生命周期规则

如何在java中获取和更新azure生命周期规则
EN

Stack Overflow用户
提问于 2021-01-18 05:59:17
回答 1查看 254关注 0票数 0

在下面的代码帮助下,我为azure存储帐户创建了一个生命周期策略。

代码语言:javascript
复制
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?删除现有的天青存储帐户的生命周期规则。

此外,当我试图通过使用下面的代码片段获取现有的生命周期策略时。

代码语言:javascript
复制
ManagementPolicyInner managementPolicy1 =
        manager2
            .inner()
            .managementPolicies()
            .getAsync(resourceGroup, storageAcc)
            .toBlocking()
            .last();

我只能得到最后一次修改/创建的策略。如果我们去掉"last()",它就会给出可观察的值,所以。

2)如何获取现有策略,迭代它们,并在需要时使用java?更新其中的一个策略。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-19 02:17:44

如何避免使用java?删除现有的azure存储帐户的生命周期规则

关于这个问题,我们可以使用类com.azure.resourcemanager.storage.implementation.StorageManagementClientImpl来实现它。有关更多细节,请参阅这里

例如

代码语言:javascript
复制
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?更新其中的一个策略。

请参阅以下代码列表

代码语言:javascript
复制
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));
        }

更新

代码语言:javascript
复制
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();

有关更多细节,请参阅这里

更新

关于如何更新现有规则,请参阅家禽代码。

代码语言:javascript
复制
        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();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65769510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档