Esempio n. 1
0
        public async Task PutLifecycleConfigurationTest()
        {
            await CreateTempBucketAsync(async x =>
            {
                IList <S3Rule> rules = new List <S3Rule>
                {
                    new S3Rule(true, "Transition logs after 30 days to StandardIa and after 60 days to OneZoneIa")
                    {
                        Transitions = new List <S3Transition>
                        {
                            new S3Transition(30, StorageClass.StandardIa),
                            new S3Transition(60, StorageClass.OneZoneIa)
                        },
                        Filter = new S3Filter {
                            Prefix = "logs/"
                        }
                    },
                    new S3Rule(true, "Expire temp folder after 5 days")
                    {
                        Expiration = new S3Expiration(5),
                        Filter     = new S3Filter {
                            Prefix = "temp/"
                        }
                    }
                };

                PutBucketLifecycleConfigurationResponse putResp = await BucketClient.PutBucketLifecycleConfigurationAsync(x, rules).ConfigureAwait(false);
                Assert.True(putResp.IsSuccess);
            }).ConfigureAwait(false);
        }
    public async Task PutLifecycleConfigurationWithLogicalAndTest(S3Provider provider, string _, ISimpleClient client)
    {
        await CreateTempBucketAsync(provider, client, async tempBucket =>
        {
            S3AndCondition conditions = new S3AndCondition();
            conditions.Prefix         = "temp/";
            conditions.Tags.Add(new KeyValuePair <string, string>("Type1", "Temp1"));
            conditions.Tags.Add(new KeyValuePair <string, string>("Type2", "Temp2"));

            S3Filter filter      = new S3Filter();
            filter.AndConditions = conditions;

            S3Rule rule     = new S3Rule("Test logical and", true);
            rule.Filter     = filter;
            rule.Expiration = new S3Expiration(DateTimeOffset.UtcNow.AddDays(1));

            PutBucketLifecycleConfigurationResponse putResp = await client.PutBucketLifecycleConfigurationAsync(tempBucket, new[] { rule }).ConfigureAwait(false);
            Assert.True(putResp.IsSuccess);

            GetBucketLifecycleConfigurationResponse getResp = await client.GetBucketLifecycleConfigurationAsync(tempBucket).ConfigureAwait(false);
            Assert.True(getResp.IsSuccess);

            S3Rule?rule1 = Assert.Single(getResp.Rules);
            S3AndCondition?conditions1 = rule1.Filter?.AndConditions;

            Assert.NotNull(conditions1);
            Assert.Equal(conditions.Prefix, conditions1 !.Prefix);
            Assert.Equal(conditions.Tags, conditions1.Tags);
        }).ConfigureAwait(false);
    }
    public async Task PutGetLifecycleConfigurationTest(S3Provider provider, string _, ISimpleClient client)
    {
        await CreateTempBucketAsync(provider, client, async tempBucket =>
        {
            S3Rule rule1 = new S3Rule("Transition logs after 30 days to StandardIa and after 60 days to OneZoneIa", true);
            rule1.Transitions.Add(new S3Transition(30, StorageClass.StandardIa));
            rule1.Transitions.Add(new S3Transition(60, StorageClass.OneZoneIa));
            rule1.Filter = new S3Filter {
                Prefix = "logs/"
            };

            S3Rule rule2     = new S3Rule("Expire temp folder after 5 days", true);
            rule2.Expiration = new S3Expiration(5);
            rule2.Filter     = new S3Filter {
                Prefix = "temp/"
            };

            S3Rule rule3     = new S3Rule("Expire things tagged with temp tomorrow", false); //disabled
            rule3.Expiration = new S3Expiration(DateTimeOffset.UtcNow.AddDays(1));
            rule3.Filter     = new S3Filter {
                Tag = new KeyValuePair <string, string>("type", "temp")
            };

            PutBucketLifecycleConfigurationResponse putResp = await client.PutBucketLifecycleConfigurationAsync(tempBucket, new[] { rule1, rule2, rule3 }).ConfigureAwait(false);
            Assert.True(putResp.IsSuccess);

            GetBucketLifecycleConfigurationResponse getResp = await client.GetBucketLifecycleConfigurationAsync(tempBucket).ConfigureAwait(false);
            Assert.True(getResp.IsSuccess);

            S3Rule rule1A = getResp.Rules[0];
            Assert.Equal(rule1.Id, rule1A.Id);
            Assert.Equal(rule1.Enabled, rule1A.Enabled);
            Assert.Equal(rule1.Filter.Prefix, rule1A.Filter?.Prefix);
            Assert.Equal(rule1.Transitions[0].StorageClass, rule1A.Transitions[0].StorageClass);
            Assert.Equal(rule1.Transitions[0].TransitionAfterDays, rule1A.Transitions[0].TransitionAfterDays);
            Assert.Equal(rule1.Transitions[1].StorageClass, rule1A.Transitions[1].StorageClass);
            Assert.Equal(rule1.Transitions[1].TransitionAfterDays, rule1A.Transitions[1].TransitionAfterDays);

            S3Rule rule2A = getResp.Rules[1];
            Assert.Equal(rule2.Id, rule2A.Id);
            Assert.Equal(rule2.Enabled, rule2A.Enabled);
            Assert.Equal(rule2.Filter.Prefix, rule2A.Filter?.Prefix);
            Assert.Equal(rule2.Expiration.ExpireAfterDays, rule2A.Expiration?.ExpireAfterDays);

            S3Rule rule3A = getResp.Rules[2];
            Assert.Equal(rule3.Id, rule3A.Id);
            Assert.Equal(rule3.Enabled, rule3A.Enabled);
            Assert.Equal(rule3.Filter.Tag, rule3A.Filter?.Tag);
            Assert.Equal(rule3.Expiration.ExpireOnDate?.Date, rule3A.Expiration?.ExpireOnDate?.Date); //Amazon round the date to the day instead
        }).ConfigureAwait(false);
    }
Esempio n. 4
0
    private static async Task PostConfigureAmazonS3(IBucketClient bucketClient, string bucketName)
    {
        Console.WriteLine("Adding lock configuration");

        PutBucketLockConfigurationResponse putLockResp = await bucketClient.PutBucketLockConfigurationAsync(bucketName, true).ConfigureAwait(false);

        if (putLockResp.IsSuccess)
        {
            Console.WriteLine("Successfully applied lock configuration.");
        }
        else
        {
            Console.Error.WriteLine("Failed to apply lock configuration.");
        }

        List <S3Rule> rules = new List <S3Rule>
        {
            new S3Rule("ExpireAll", true)
            {
                AbortIncompleteMultipartUploadDays = 1,
                NonCurrentVersionExpirationDays    = 1,
                Expiration = new S3Expiration(1),
                Filter     = new S3Filter {
                    Prefix = ""
                }
            }
        };

        Console.WriteLine("Adding lifecycle configuration");

        PutBucketLifecycleConfigurationResponse putLifecycleResp = await bucketClient.PutBucketLifecycleConfigurationAsync(bucketName, rules).ConfigureAwait(false);

        if (putLifecycleResp.IsSuccess)
        {
            Console.WriteLine("Successfully applied lifecycle configuration.");
        }
        else
        {
            Console.Error.WriteLine("Failed to apply lifecycle configuration.");
        }
    }
    public async Task PutLifecycleConfigurationBucketWideTest(S3Provider provider, string _, ISimpleClient client)
    {
        await CreateTempBucketAsync(provider, client, async tempBucket =>
        {
            S3Rule rule     = new S3Rule("Expire the whole bucket after 10 days", true);
            rule.Expiration = new S3Expiration(DateTimeOffset.UtcNow.AddDays(10));
            rule.Filter     = new S3Filter(); //Empty filter means the whole bucket is affected

            PutBucketLifecycleConfigurationResponse putResp = await client.PutBucketLifecycleConfigurationAsync(tempBucket, new[] { rule }).ConfigureAwait(false);
            Assert.True(putResp.IsSuccess);

            GetBucketLifecycleConfigurationResponse getResp = await client.GetBucketLifecycleConfigurationAsync(tempBucket);
            Assert.True(getResp.IsSuccess);

            S3Rule rule1A = getResp.Rules[0];
            Assert.Equal(rule.Id, rule1A.Id);
            Assert.Equal(rule.Enabled, rule1A.Enabled);
            Assert.Equal(rule.Filter.Prefix, rule1A.Filter?.Prefix);
            Assert.Equal(rule.Expiration.ExpireAfterDays, rule1A.Expiration?.ExpireAfterDays);
        }).ConfigureAwait(false);
    }
Esempio n. 6
0
        private static async Task Main(string[] args)
        {
            IConfigurationRoot root = new ConfigurationBuilder()
                                      .AddJsonFile("Config.json", false)
                                      .Build();

            ServiceCollection services = new ServiceCollection();

            services.Configure <S3Config>(root);

            IS3ClientBuilder clientBuilder = services.AddSimpleS3();

            clientBuilder.CoreBuilder.UseProfileManager()
            .BindConfigToDefaultProfile()
            .UseDataProtection();

            IConfigurationSection proxySection = root.GetSection("Proxy");

            if (proxySection != null && proxySection["UseProxy"].Equals("true", StringComparison.OrdinalIgnoreCase))
            {
                clientBuilder.HttpBuilder.WithProxy(proxySection["ProxyAddress"]);
            }

            using (ServiceProvider provider = services.BuildServiceProvider())
            {
                IProfileManager manager = provider.GetRequiredService <IProfileManager>();
                IProfile?       profile = manager.GetDefaultProfile();

                //If profile is null, then we do not yet have a profile stored on disk. We use ConsoleSetup as an easy and secure way of asking for credentials
                if (profile == null)
                {
                    Console.WriteLine("No profile found. Starting setup.");
                    ConsoleSetup.SetupDefaultProfile(manager);
                }

                IBucketClient bucketClient = provider.GetRequiredService <IBucketClient>();

                string bucketName = root["BucketName"];

                Console.WriteLine($"Setting up bucket '{bucketName}'");

                HeadBucketResponse headResp = await bucketClient.HeadBucketAsync(bucketName).ConfigureAwait(false);

                if (headResp.IsSuccess)
                {
                    Console.WriteLine($"'{bucketName}' already exist.");
                }
                else
                {
                    Console.WriteLine($"'{bucketName}' does not exist - creating.");
                    CreateBucketResponse createResp = await bucketClient.CreateBucketAsync(bucketName, x => x.EnableObjectLocking = true).ConfigureAwait(false);

                    if (createResp.IsSuccess)
                    {
                        Console.WriteLine($"Successfully created '{bucketName}'.");
                    }
                    else
                    {
                        Console.Error.WriteLine($"Failed to create '{bucketName}'. Exiting.");
                        return;
                    }
                }

                Console.WriteLine("Adding lock configuration");

                PutBucketLockConfigurationResponse putLockResp = await bucketClient.PutBucketLockConfigurationAsync(bucketName, true).ConfigureAwait(false);

                if (putLockResp.IsSuccess)
                {
                    Console.WriteLine("Successfully applied lock configuration.");
                }
                else
                {
                    Console.Error.WriteLine("Failed to apply lock configuration.");
                }

                List <S3Rule> rules = new List <S3Rule>
                {
                    new S3Rule("ExpireAll", true)
                    {
                        AbortIncompleteMultipartUploadDays = 1,
                        NonCurrentVersionExpirationDays    = 1,
                        Expiration = new S3Expiration(1),
                        Filter     = new S3Filter {
                            Prefix = ""
                        }
                    }
                };

                Console.WriteLine("Adding lifecycle configuration");

                PutBucketLifecycleConfigurationResponse putLifecycleResp = await bucketClient.PutBucketLifecycleConfigurationAsync(bucketName, rules).ConfigureAwait(false);

                if (putLifecycleResp.IsSuccess)
                {
                    Console.WriteLine("Successfully applied lifecycle configuration.");
                }
                else
                {
                    Console.Error.WriteLine("Failed to apply lifecycle configuration.");
                }
            }
        }
        /// <summary>
        /// Unmarshaller the response from the service to the response class.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context)
        {
            PutBucketLifecycleConfigurationResponse response = new PutBucketLifecycleConfigurationResponse();

            return(response);
        }