static async Task Main(string[] args) { var jsonSerializer = new Serializers.JsonSerializer(new JsonSerializerSettings()); var fileStorageProvider = new LocalStorageProvider(@".\"); var memoryStorageProvider = new MemoryStorageProvider(); var rawFileStorage = new RawStorageClient(fileStorageProvider); var rawMemoryStorage = new RawStorageClient(memoryStorageProvider); var fileStorage = new ObjectStorageClient(rawFileStorage, jsonSerializer); var memoryStorage = new ObjectStorageClient(rawMemoryStorage, jsonSerializer); Console.WriteLine("object memory storage"); await TryStorage("test", memoryStorage); Console.WriteLine("object file storage"); await TryStorage("test", fileStorage); Console.WriteLine("raw file storage"); await TryRawStorage("test", rawFileStorage); Console.WriteLine("raw memory storage"); await TryRawStorage("test", rawMemoryStorage); Console.WriteLine("Concurrent writes and reads"); var tasks = Enumerable.Repeat(Enumerable.Range(1, 3).ToList(), 3) .SelectMany(x => x) .Select(x => TryRawStorage(x.ToString(), rawMemoryStorage)); await Task.WhenAll(tasks); }
protected override void ProcessRecord() { base.ProcessRecord(); try { client?.Dispose(); int timeout = GetPreferredTimeout(); WriteDebug($"Cmdlet Timeout : {timeout} milliseconds."); client = new ObjectStorageClient(AuthProvider, new Oci.Common.ClientConfiguration { RetryConfiguration = retryConfig, TimeoutMillis = timeout, ClientUserAgent = PSUserAgent }); string region = GetPreferredRegion(); if (region != null) { WriteDebug("Choosing Region:" + region); client.SetRegion(region); } if (Endpoint != null) { WriteDebug("Choosing Endpoint:" + Endpoint); client.SetEndpoint(Endpoint); } } catch (Exception ex) { TerminatingErrorDuringExecution(ex); } }
/// <summary> /// すべてのバケットを取得する /// </summary> /// <param name="nameSpaceName"></param> /// <param name="compartmentId"></param> /// <returns></returns> public IEnumerable <BucketInfo> GetAllBuckets(string nameSpaceName, string compartmentId) { List <BucketInfo> res = new List <BucketInfo>(); var regions = GetRegions(); var request = new ListBucketsRequest { NamespaceName = nameSpaceName, CompartmentId = compartmentId, Limit = 10 }; Parallel.ForEach(regions, region => { ObjectStorageClient objectStorageClient = new ObjectStorageClient(ClientConfig); objectStorageClient.SetRegion(region.RegionName); while (true) { var buckets = objectStorageClient.ListBuckets(request); foreach (var item in buckets.Items) { res.Add(new BucketInfo() { Name = item.Name, Region = region.RegionName, Id = item.Id, ModifiedTime = item.TimeCreated }); } if (string.IsNullOrEmpty(buckets.OpcNextPage)) { break; } request.Page = buckets.OpcNextPage; } }); return(res); }
public static List <ObjectSummary> GetUsageReportNames(ClientConfig config, ObjectStorageClient client, string startName = "") { List <ObjectSummary> res = new List <ObjectSummary>(); client.SetRegion(Regions.US_ASHBURN_1); var listORequest = new ListObjectsRequest() { NamespaceName = "bling", BucketName = config.TenancyId, Fields = new List <string>() { "name" }, Start = startName, Limit = 10 }; var reports = client.ListObjects(listORequest); res.AddRange(reports.ListObjects.Objects); if (!string.IsNullOrEmpty(reports.ListObjects.NextStartWith)) { res.AddRange(GetUsageReportNames(config, client, reports.ListObjects.NextStartWith)); } return(res); }
public static async Task <GetObjectResponse> GetObjectExample(ObjectStorageClient osClient) { var getObjectObjectRequest = new GetObjectRequest() { BucketName = Environment.GetEnvironmentVariable("BUCKET_NAME"), NamespaceName = Environment.GetEnvironmentVariable("NAMESPACE_NAME"), ObjectName = Environment.GetEnvironmentVariable("OBJECT_NAME"), Range = new Common.Model.Range() { StartByte = 2, EndByte = 10 } }; try { var response = await osClient.GetObject(getObjectObjectRequest); logger.Info($"Get Object is successful: " + response.ETag); var fileContents = new StreamReader(response.InputStream).ReadToEnd(); logger.Info($"file contents: {fileContents}"); logger.Info($"Range: Start Index: {response.ContentRange.StartByte}, End Index: {response.ContentRange.EndByte}"); return(response); } catch (Exception e) { logger.Error($"Failed at GetObjectExample:\n{e}"); throw; } }
public MultipartTransferManager(MultipartManifest manifest, ObjectStorageClient osClient, SemaphoreSlim executor, CancellationToken cancellationToken = default, RetryConfiguration retryConfiguration = null) { this.Manifest = manifest; this.OSClient = osClient; this.Executor = executor; this._cancellationToken = cancellationToken; this._retryConfiguration = retryConfiguration; }
private static async Task TryStorage(string key, ObjectStorageClient fileStorage) { Model model = new Model { Value = 5 }; Console.WriteLine($"thread [{Thread.CurrentThread.ManagedThreadId}] wrote message: [{model}] to key [{key}]."); await fileStorage.WriteAsync(key, model); model = await fileStorage.ReadAsync <Model>(key); Console.WriteLine($"thread [{Thread.CurrentThread.ManagedThreadId}] read message: [{model}] from key [{key}]."); }
public static void PutObject(ClientConfig config, string namespaceName, ObjectStorageClient client) { string targetBucketName = "TestBucket"; string fileName = "HelloWorld.txt"; // Test file create using (var streamWriter = new StreamWriter(fileName)) { streamWriter.WriteLine("hello world"); } // put PutObjectRequest putObjectRequest = new PutObjectRequest { NamespaceName = namespaceName, BucketName = targetBucketName, ObjectName = fileName }; PutObjectResponse updateRes; using (FileStream stream = new FileStream(fileName, FileMode.Open)) { putObjectRequest.UploadPartBody = stream; updateRes = client.PutObject(putObjectRequest); } // rename RenameObjectRequest renameObjectRequest = new RenameObjectRequest { NamespaceName = namespaceName, BucketName = targetBucketName, RenameObjectDetails = new RenameObjectDetails { SourceName = fileName, NewName = "NewName.txt" } }; var renameRes = client.RenameObject(renameObjectRequest); // delete DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest { NamespaceName = namespaceName, BucketName = targetBucketName, ObjectName = "NewName.txt", IfMatch = renameRes.ETag }; var deleteRes = client.DeleteObject(deleteObjectRequest); }
public static async Task MainUploadManager() { logger.Info("Starting Upload Manager Example"); var provider = new ConfigFileAuthenticationDetailsProvider("DEFAULT"); var osClient = new ObjectStorageClient(provider, new ClientConfiguration() { TimeoutMillis = 1000 * 1000 // 1000 secs. Setting large timeouts is required for uploading large objects to avoid httpclient timeout exceptions. }); var putObjectRequest = new PutObjectRequest() { BucketName = Environment.GetEnvironmentVariable("BUCKET_NAME"), NamespaceName = Environment.GetEnvironmentVariable("NAMESPACE_NAME"), ObjectName = Environment.GetEnvironmentVariable("OBJECT_NAME"), PutObjectBody = System.IO.File.OpenRead(Environment.GetEnvironmentVariable("FILE_TO_UPLOAD")), ContentLength = Convert.ToInt64(Environment.GetEnvironmentVariable("CONTENT_LENGTH")), ContentType = Environment.GetEnvironmentVariable("CONTENT_TYPE") }; var uploadConfiguration = new UploadConfiguration() { AllowMultipartUploads = true }; var uploadManager = new UploadManager(osClient, uploadConfiguration); var uploadRequest = new UploadManager.UploadRequest(putObjectRequest) { AllowOverwrite = true, OnProgress = OnProgres }; var uploadResponse = await uploadManager.Upload(uploadRequest); logger.Info(uploadResponse); var headObject = await osClient.HeadObject(new HeadObjectRequest() { BucketName = Environment.GetEnvironmentVariable("BUCKET_NAME"), NamespaceName = Environment.GetEnvironmentVariable("NAMESPACE_NAME"), ObjectName = Environment.GetEnvironmentVariable("OBJECT_NAME") }); logger.Info($"{headObject.ETag}"); osClient.Dispose(); }
public MultipartObjectAssembler(ObjectStorageClient service, string namespaceName, string bucketName, string objectName, bool allowOverwrite, SemaphoreSlim executor, string opcClientRequestId, bool enforceContentMD5Upload = false, RetryConfiguration retryConfiguration = null) { _service = service; _namespaceName = namespaceName; _bucketName = bucketName; _objectName = objectName; _allowOverwrite = allowOverwrite; _executorServiceToUse = executor; _retryConfiguration = retryConfiguration; _opcClientRequestId = opcClientRequestId; _enforceContentMD5Upload = enforceContentMD5Upload; _tokenSource = new CancellationTokenSource(); }
public static async Task MainOS() { logger.Info("Starting Object Storage Examples"); var provider = new ConfigFileAuthenticationDetailsProvider("DEFAULT"); var osClient = new ObjectStorageClient(provider, new ClientConfiguration()); try { await PutObjectExample(osClient); await GetObjectExample(osClient); } catch (Exception e) { logger.Error($"Failed ObjectStorage example: {e.Message}"); } finally { osClient.Dispose(); } }
public static void ClassInitialize(TestContext testContext) { ClientConfig clientConfig = new ClientConfig { TenancyId = TenantOCID, UserId = UserOCID, Fingerprint = Fingerprint, PrivateKey = KeyFilePath, Password = PassPhrase, PrivateKeyPassphrase = PassPhrase }; var signer = new ThreadSafeSigner(new OciSigner(clientConfig)); ObjectStorageClient objectStorageClient = new ObjectStorageClient(clientConfig, signer) { Region = Region }; ObjectStorageClient = objectStorageClient; NameSpaceName = ObjectStorageClient.GetNamespace(new GetNamespaceRequest()); }
public static void DisplayUsageReport(ClientConfig config, ObjectStorageClient client) { // UsageReport // Example policy: // define tenancy usage-report as ocid1.tenancy.oc1..aaaaaaaaned4fkpkisbwjlr56u7cj63lf3wffbilvqknstgtvzub7vhqkggq // endorse group group_name to read objects in tenancy usage-report try { var reports = GetUsageReportNames(config, client); Console.WriteLine($"* UsageReport------------------------"); reports.ForEach(r => { Console.WriteLine($" {r.Name}"); /* * // download object * if (!Directory.Exists("./ExampleDownload/report")) * { * Directory.CreateDirectory("./ExampleDownload/report"); * } * * if (!File.Exists($"./ExampleDownload/report/{r.Name.Replace('/', '_')}")) * { * var getObjectRequest = new GetObjectRequest() * { * NamespaceName = "bling", * BucketName = config.TenancyId, * ObjectName = r.Name, * }; * client.DownloadObject(getObjectRequest, "./ExampleDownload/report/", r.Name.Replace('/', '_')); * }*/ }); } catch (Exception e) { Console.WriteLine($"Does not meet UsageReport usage requirements. message:{e.Message}"); } }
public static void ClassInitialize(TestContext testContext) { foreach (var dir in TestFileInfos.Keys) { foreach (var fileName in TestFileInfos[dir]) { if (string.IsNullOrEmpty(dir)) { TestFileRemotePaths.Add(fileName); } else { TestFileRemotePaths.Add($"{dir}/{fileName}"); } } } ClientConfig clientConfig = new ClientConfig { TenancyId = TenantOCID, UserId = UserOCID, Fingerprint = Fingerprint, PrivateKey = KeyFilePath, Password = PassPhrase, PrivateKeyPassphrase = PassPhrase }; var signer = new ThreadSafeSigner(new OciSigner(clientConfig)); ObjectStorageClient objectStorageClient = new ObjectStorageClient(clientConfig, signer) { Region = Region }; ObjectStorageClient = objectStorageClient; NameSpaceName = ObjectStorageClient.GetNamespace(new GetNamespaceRequest()); }
public static async Task <PutObjectResponse> PutObjectExample(ObjectStorageClient osClient) { var putObjectRequest = new PutObjectRequest() { BucketName = Environment.GetEnvironmentVariable("BUCKET_NAME"), NamespaceName = Environment.GetEnvironmentVariable("NAMESPACE_NAME"), ObjectName = Environment.GetEnvironmentVariable("OBJECT_NAME"), PutObjectBody = GenerateStreamFromString("Hello World!!!!") }; try { var response = await osClient.PutObject(putObjectRequest); logger.Info($"Put Object is successful: " + response.ETag); return(response); } catch (Exception e) { logger.Error($"Failed at PutObjectExample:\n{e}"); throw; } }
public static void DisplayObjectStorage(ClientConfig config) { var client = new ObjectStorageClient(config) { Region = Regions.US_ASHBURN_1 }; // get namespace GetNamespaceRequest getNamespaceRequest = new GetNamespaceRequest(); var namespaceName = client.GetNamespace(getNamespaceRequest); // get namespace metadata GetNamespaceMetadataRequest getNamespaceMetadataRequest = new GetNamespaceMetadataRequest() { NamespaceName = namespaceName }; var namespaceMetadata = client.GetNamespaceMetadata(getNamespaceMetadataRequest).NamespaceMetadata; Console.WriteLine("* Namespace------------------------"); Console.WriteLine($" namespace : {namespaceMetadata.Namespace}"); Console.WriteLine($" defaultS3CompartmentId : {namespaceMetadata.DefaultS3CompartmentId}"); Console.WriteLine($" defaultSwiftCompartmentId : {namespaceMetadata.DefaultSwiftCompartmentId}"); // list bucket ListBucketsRequest listBucketsRequest = new ListBucketsRequest() { NamespaceName = namespaceName, CompartmentId = config.TenancyId }; var listBucket = client.ListBuckets(listBucketsRequest); Console.WriteLine($"* Bucket------------------------"); Console.WriteLine($" namespace : {namespaceName}"); Console.WriteLine($" comaprtment : {config.TenancyId}"); listBucket.Items.ForEach(bucket => { HeadBucketRequest headBucketRequest = new HeadBucketRequest() { NamespaceName = bucket.Namespace, BucketName = bucket.Name }; var buckethead = client.HeadBucket(headBucketRequest); // get bucket details GetBucketRequest getBucketRequest = new GetBucketRequest() { NamespaceName = bucket.Namespace, BucketName = bucket.Name, IfMatch = buckethead.ETag }; var bucketDetail = client.GetBucket(getBucketRequest); Console.WriteLine($"\t|- name : {bucketDetail.Bucket.Name}"); Console.WriteLine($"\t| timeCreated : {bucketDetail.Bucket.TimeCreated}"); Console.WriteLine($"\t|* Object------------------------"); ListObjectsRequest listObjectsRequest = new ListObjectsRequest() { NamespaceName = bucketDetail.Bucket.Namespace, BucketName = bucketDetail.Bucket.Name }; var Objs = client.ListObjects(listObjectsRequest); Objs.ListObjects.Objects.ForEach(obj => { Console.WriteLine($"\t|\t|- name : {obj.Name}"); GetObjectRequest getObjectRequest = new GetObjectRequest() { NamespaceName = bucketDetail.Bucket.Namespace, BucketName = bucketDetail.Bucket.Name, ObjectName = obj.Name, }; var ObjDetails = client.GetObject(getObjectRequest); Console.WriteLine($"\t|\t|- contentLength : {ObjDetails.ContentLength}"); // download if (!Directory.Exists("./ExampleDownload")) { Directory.CreateDirectory("./ExampleDownload"); } if (!File.Exists($"./ExampleDownload/{obj.Name.Replace('/', '_')}")) { client.DownloadObject(getObjectRequest, "./ExampleDownload/", obj.Name.Replace('/', '_')); } }); }); // UsageReport // Example policy: // define tenancy usage-report as ocid1.tenancy.oc1..aaaaaaaaned4fkpkisbwjlr56u7cj63lf3wffbilvqknstgtvzub7vhqkggq // endorse group group_name to read objects in tenancy usage-report try { var listORequest = new ListObjectsRequest() { NamespaceName = "bling", BucketName = config.TenancyId }; var reports = client.ListObjects(listORequest); Console.WriteLine($"* UsageReport------------------------"); reports.ListObjects.Objects.ForEach(r => { Console.WriteLine($" {r.Name}"); if (!Directory.Exists("./ExampleDownload/report")) { Directory.CreateDirectory("./ExampleDownload/report"); } // download object /* * if (!File.Exists($"./ExampleDownload/report/{r.Name.Replace('/', '_')}")) * { * var getObjectRequest = new GetObjectRequest() * { * NamespaceName = "bling", * BucketName = config.TenancyId, * ObjectName = r.Name, * }; * client.DownloadObject(getObjectRequest, "./ExampleDownload/report/", r.Name.Replace('/', '_')); * }*/ }); } catch (Exception e) { Console.WriteLine($"Does not meet UsageReport usage requirements. message:{e.Message}"); } }
public ObjectStoragePaginators(ObjectStorageClient client) { this.client = client; }
public ObjectStorageWaiters(ObjectStorageClient client) { this.client = client; }
public static void DisplayObjectStorage(ClientConfig config) { var client = new ObjectStorageClient(config) { Region = Regions.US_ASHBURN_1 }; var identityClient = new IdentityClient(config) { Region = Regions.US_ASHBURN_1 }; // get namespace GetNamespaceRequest getNamespaceRequest = new GetNamespaceRequest(); var namespaceName = client.GetNamespace(getNamespaceRequest); // get namespace metadata GetNamespaceMetadataRequest getNamespaceMetadataRequest = new GetNamespaceMetadataRequest() { NamespaceName = namespaceName }; var namespaceMetadata = client.GetNamespaceMetadata(getNamespaceMetadataRequest).NamespaceMetadata; Console.WriteLine("* Namespace------------------------"); Console.WriteLine($" namespace : {namespaceMetadata.Namespace}"); Console.WriteLine($" defaultS3CompartmentId : {namespaceMetadata.DefaultS3CompartmentId}"); Console.WriteLine($" defaultSwiftCompartmentId : {namespaceMetadata.DefaultSwiftCompartmentId}"); Console.WriteLine(); Console.WriteLine("ObjectStorage Example Menu"); Console.WriteLine("[1]: Display List"); Console.WriteLine("[2]: Upload Example"); Console.WriteLine("[3]: UsageReport Example"); Console.WriteLine("[ESC] or [E(e)] : Back Example Menu"); Console.WriteLine(); var presskey = Console.ReadKey(true); if (presskey.Key == ConsoleKey.Escape || presskey.KeyChar == 'E' || presskey.KeyChar == 'e') { Console.WriteLine("Back Example Menu"); return; } var select = presskey.KeyChar; if (!int.TryParse(select.ToString(), out int mode)) { Console.WriteLine("Incorrect input..."); return; } if (mode == 1) { DisplayBucketAndObject(config, namespaceName, client, identityClient); } else if (mode == 2) { PutObject(config, namespaceName, client); } else if (mode == 3) { DisplayUsageReport(config, client); } else { Console.WriteLine("Incorrect input..."); return; } }
public static void DisplayBucketAndObject(ClientConfig config, string namespaceName, ObjectStorageClient client, IdentityClient identityClient) { // Compartment required only to get a bucket var listCompartmentRequest = new ListCompartmentRequest() { CompartmentId = config.TenancyId, CompartmentIdInSubtree = true, AccessLevel = ListCompartmentRequest.AccessLevels.ACCESSIBLE }; var compartments = identityClient.ListCompartment(listCompartmentRequest).Items; // root(tenant) add compartments.Add(new OCISDK.Core.Identity.Model.Compartment { Id = config.TenancyId, Name = "root" }); foreach (var compartment in compartments) { Console.WriteLine($"## Compartment<{compartment.Name}>--------"); // list bucket ListBucketsRequest listBucketsRequest = new ListBucketsRequest() { NamespaceName = namespaceName, CompartmentId = compartment.Id }; var listBucket = client.ListBuckets(listBucketsRequest); Console.WriteLine($"* Bucket------------------------"); Console.WriteLine($" namespace : {namespaceName}"); Console.WriteLine($" comaprtment : {config.TenancyId}"); listBucket.Items.ForEach(bucket => { HeadBucketRequest headBucketRequest = new HeadBucketRequest() { NamespaceName = bucket.Namespace, BucketName = bucket.Name }; var buckethead = client.HeadBucket(headBucketRequest); // get bucket details GetBucketRequest getBucketRequest = new GetBucketRequest() { NamespaceName = bucket.Namespace, BucketName = bucket.Name, IfMatch = buckethead.ETag }; var bucketDetail = client.GetBucket(getBucketRequest); Console.WriteLine($"\t|- * name : {bucketDetail.Bucket.Name}"); Console.WriteLine($"\t| timeCreated : {bucketDetail.Bucket.TimeCreated}"); // Bucket workrequests ListWorkRequestsRequest listWorkRequestsRequest = new ListWorkRequestsRequest { CompartmentId = bucketDetail.Bucket.CompartmentId, BucketName = bucket.Name }; var wrs = client.ListWorkRequests(listWorkRequestsRequest); Console.WriteLine($"\t|* WorkRequest------------------------"); foreach (var wr in wrs.Items) { Console.WriteLine($"\t|\t|- name : {wr.OperationType}"); Console.WriteLine($"\t|\t|- status : {wr.Status}"); Console.WriteLine($"\t|\t|- start : {wr.TimeStarted}"); Console.WriteLine($"\t|\t|- finish : {wr.TimeFinished}"); } // objects Console.WriteLine($"\t|* Object------------------------"); ListObjectsRequest listObjectsRequest = new ListObjectsRequest() { NamespaceName = bucketDetail.Bucket.Namespace, BucketName = bucketDetail.Bucket.Name, Fields = new List <string> { "size", "timeCreated", "md5" } }; var Objs = client.ListObjects(listObjectsRequest); Objs.ListObjects.Objects.ForEach(obj => { Console.WriteLine($"\t|\t|- name : {obj.Name}"); GetObjectRequest getObjectRequest = new GetObjectRequest() { NamespaceName = bucketDetail.Bucket.Namespace, BucketName = bucketDetail.Bucket.Name, ObjectName = obj.Name, }; var ObjDetails = client.GetObject(getObjectRequest); Console.WriteLine($"\t|\t|- contentLength : {ObjDetails.ContentLength}"); // download /*if (!Directory.Exists("./ExampleDownload")) * { * Directory.CreateDirectory("./ExampleDownload"); * } * if (!File.Exists($"./ExampleDownload/{obj.Name.Replace('/', '_')}")) * { * client.DownloadObject(getObjectRequest, "./ExampleDownload/", obj.Name.Replace('/', '_')); * }*/ }); }); } }
public UploadManager(ObjectStorageClient objectStorageClient, UploadConfiguration uploadConfiguration) { this._osClient = objectStorageClient; this._configuration = uploadConfiguration; }
public static async Task MainOSBucketTagging() { string compartmentId = Environment.GetEnvironmentVariable("OCI_COMPARTMENT_ID"); string bucketName = Environment.GetEnvironmentVariable("BUCKET_NAME"); string tagNamespace = Environment.GetEnvironmentVariable("TAG_NAMESPACE"); string tagName = Environment.GetEnvironmentVariable("TAG_NAME"); logger.Info("Starting example"); // Create Object Storage Client var provider = new ConfigFileAuthenticationDetailsProvider("DEFAULT"); var osClient = new ObjectStorageClient(provider, new ClientConfiguration()); logger.Info("Object Storage client created."); GetNamespaceRequest getNamespaceRequest = new GetNamespaceRequest { CompartmentId = compartmentId }; GetNamespaceResponse getNamespaceResponse = await osClient.GetNamespace(getNamespaceRequest); string nSpace = getNamespaceResponse.Value.Trim('"'); logger.Info($"namespace is {nSpace}"); /* * We can assign tags to a bucket at creation time. Like other taggable resources, we can * assign freeform and defined tags to a bucket. Freeform tags are a dictionary of * string-to-string, where the key is the tag name and the value is the tag value. * * Defined tags are a dictionary where the key is the tag namespace (string) and the value is another dictionary. In * this second dictionary, the key is the tag name (string) and the value is the tag value. The tag names have to * correspond to the name of a tag within the specified namespace (and the namespace must exist). */ try { Dictionary <string, string> freeformTags = new Dictionary <string, string>() { { "free", "form" }, { "another", "item" } }; Dictionary <string, object> definedTagsMap = new Dictionary <string, object>() { { tagName, "original value" } }; Dictionary <string, Dictionary <string, object> > definedTags = new Dictionary <string, Dictionary <string, object> >() { { tagNamespace, definedTagsMap } }; CreateBucketDetails createBucketDetails = new CreateBucketDetails { Name = bucketName, CompartmentId = compartmentId, FreeformTags = freeformTags, DefinedTags = definedTags, ObjectEventsEnabled = false }; CreateBucketRequest createBucketRequest = new CreateBucketRequest { CreateBucketDetails = createBucketDetails, NamespaceName = nSpace }; CreateBucketResponse createBucketResponse = await osClient.CreateBucket(createBucketRequest); logger.Info($"Created a bucket with tags Bucket name: {createBucketResponse.Bucket.Name}"); logger.Info("========================================"); definedTags = createBucketResponse.Bucket.DefinedTags; foreach (KeyValuePair <string, Dictionary <string, object> > kvp in definedTags) { foreach (KeyValuePair <string, object> tags in kvp.Value) { logger.Info($"tag key name: {tags.Key} and tag value is {tags.Value}"); } } // Tags come back when retrieving the bucket GetBucketRequest getBucketRequest = new GetBucketRequest { NamespaceName = nSpace, BucketName = bucketName }; GetBucketResponse getBucketResponse = await osClient.GetBucket(getBucketRequest); logger.Info($"Retrieved a bucket with tags Bucket name: {getBucketResponse.Bucket.Name}"); logger.Info("=========================================="); definedTags = getBucketResponse.Bucket.DefinedTags; foreach (KeyValuePair <string, Dictionary <string, object> > kvp in definedTags) { foreach (KeyValuePair <string, object> tags in kvp.Value) { logger.Info($"tag key name: {tags.Key} and tag value is {tags.Value}"); } } /* * Unlike other resources (e.g. instances, VCNs, and block volumes), when listing buckets * tags are not returned by default. Instead, you need to provide a value to the fields * parameter when listing buckets in order to have those tags returned. * * Here we can see the result of providing and not providing that parameter. */ ListBucketsRequest listBucketsRequest = new ListBucketsRequest { CompartmentId = compartmentId, NamespaceName = nSpace }; IEnumerable <BucketSummary> bucketSummaries = osClient.Paginators.ListBucketsRecordEnumerator(listBucketsRequest); foreach (BucketSummary bucketSummary in bucketSummaries) { if (bucketSummary.Name.Equals(bucketName)) { logger.Info($"Bucket summary without tags: Bucket Name: {bucketSummary.Name}"); logger.Info("========================================="); if (bucketSummary.DefinedTags != null) { logger.Error($"expected tags to be zero but got: {bucketSummary.DefinedTags.Count}"); } break; } } List <ListBucketsRequest.FieldsEnum> fields = new List <ListBucketsRequest.FieldsEnum>() { ListBucketsRequest.FieldsEnum.Tags }; listBucketsRequest = new ListBucketsRequest { CompartmentId = compartmentId, NamespaceName = nSpace, Fields = fields }; bucketSummaries = osClient.Paginators.ListBucketsRecordEnumerator(listBucketsRequest); foreach (BucketSummary bucketSummary in bucketSummaries) { if (bucketSummary.Name.Equals(bucketName)) { logger.Info($"Bucket summary with tags: Bucket Name: {bucketSummary.Name}"); logger.Info("======================================"); definedTags = bucketSummary.DefinedTags; foreach (KeyValuePair <string, Dictionary <string, object> > kvp in definedTags) { foreach (KeyValuePair <string, object> tags in kvp.Value) { logger.Info($"tag key name: {tags.Key} and tag value is {tags.Value}"); } } } } /* * We can also update tags on a bucket. Note that this is a total replacement for any * previously set freeform or defined tags. */ Dictionary <string, string> updateFreeformTags = new Dictionary <string, string>() { { "new", "freeform" } }; Dictionary <string, object> updateDefinedTagsMap = new Dictionary <string, object>() { { tagName, "replaced" } }; Dictionary <string, Dictionary <string, object> > updateDefinedTags = new Dictionary <string, Dictionary <string, object> >() { { tagNamespace, updateDefinedTagsMap } }; UpdateBucketDetails updateBucketDetails = new UpdateBucketDetails { Name = bucketName, FreeformTags = updateFreeformTags, DefinedTags = updateDefinedTags }; UpdateBucketRequest updateBucketRequest = new UpdateBucketRequest { NamespaceName = nSpace, BucketName = bucketName, UpdateBucketDetails = updateBucketDetails }; UpdateBucketResponse updateBucketResponse = await osClient.UpdateBucket(updateBucketRequest); logger.Info($"Updated the bucket with new tags Bucket name: {updateBucketResponse.Bucket.Name}"); logger.Info("=============================================="); definedTags = updateBucketResponse.Bucket.DefinedTags; foreach (KeyValuePair <string, Dictionary <string, object> > kvp in definedTags) { foreach (KeyValuePair <string, object> tags in kvp.Value) { logger.Info($"tag key name: {tags.Key} and tag value is {tags.Value}"); } } updateBucketDetails = new UpdateBucketDetails { Name = bucketName, FreeformTags = new Dictionary <string, string>(), DefinedTags = new Dictionary <string, Dictionary <string, object> >() }; updateBucketRequest = new UpdateBucketRequest { NamespaceName = nSpace, BucketName = bucketName, UpdateBucketDetails = updateBucketDetails }; updateBucketResponse = await osClient.UpdateBucket(updateBucketRequest); logger.Info($"cleared the tags for the bucket: {updateBucketResponse.Bucket.Name}"); logger.Info("================================="); // Clean up DeleteBucketRequest deleteBucketRequest = new DeleteBucketRequest { NamespaceName = nSpace, BucketName = bucketName }; await osClient.DeleteBucket(deleteBucketRequest); logger.Info("Deleted the bucket"); logger.Info("Ending example."); } catch (Exception e) { logger.Error($"Failed Object Storage example: {e.Message}"); } finally { osClient.Dispose(); } }
public static void Example(ClientConfig config) { ThreadSafeSigner threadSafeSigner = new ThreadSafeSigner(new OciSigner(config)); var client = new ObjectStorageClient(config, threadSafeSigner) { Region = Regions.AP_TOKYO_1 }; var identityClient = new IdentityClient(config, threadSafeSigner) { Region = Regions.AP_TOKYO_1 }; var nameSpaceName = client.GetNamespace(new GetNamespaceRequest()); // Compartment required only to get a bucket var listCompartmentRequest = new ListCompartmentRequest() { CompartmentId = config.TenancyId, CompartmentIdInSubtree = true, AccessLevel = ListCompartmentRequest.AccessLevels.ACCESSIBLE }; var compartments = identityClient.ListCompartment(listCompartmentRequest).Items; // root(tenant) add compartments.Add(new OCISDK.Core.Identity.Model.Compartment { Id = config.TenancyId, Name = "root" }); foreach (var compartment in compartments) { ListBucketsRequest listBucketsRequest = new ListBucketsRequest { NamespaceName = nameSpaceName, CompartmentId = compartment.Id, Limit = 10 }; var bukcets = client.ListBuckets(listBucketsRequest); foreach (var bukcet in bukcets.Items) { ObjectStorageDirectoryInfo directoryInfo = new ObjectStorageDirectoryInfo(client, nameSpaceName, bukcet.Name); Console.WriteLine($"* {bukcet.Name}"); // top files var files = directoryInfo.EnumerateFiles("*", System.IO.SearchOption.TopDirectoryOnly); foreach (var file in files) { Console.WriteLine($"\t|- {file.Name}"); } // top directories and files var topDirs = directoryInfo.EnumerateDirectories("*", System.IO.SearchOption.TopDirectoryOnly); foreach (var dir in topDirs) { Console.WriteLine($"\t|- {dir.Name}"); files = dir.EnumerateFiles("*", System.IO.SearchOption.TopDirectoryOnly); foreach (var file in files) { Console.WriteLine($"\t|\t|- {file.Name}"); } // sub directories and files var subDirInfo = new ObjectStorageDirectoryInfo(client, nameSpaceName, bukcet.Name, dir.Name + "/"); var subDirs = subDirInfo.EnumerateDirectories("*", System.IO.SearchOption.TopDirectoryOnly); foreach (var sub in subDirs) { Console.WriteLine($"\t|\t|- {sub.Name}"); files = sub.EnumerateFiles("*", System.IO.SearchOption.TopDirectoryOnly); foreach (var file in files) { Console.WriteLine($"\t|\t|\t|- {file.Name}"); } } } foreach (var dir in topDirs) { // prefix directories Console.WriteLine("TopDirectoryOnly prefix-----[" + dir.Name + "]"); var preDir = new ObjectStorageDirectoryInfo(client, nameSpaceName, bukcet.Name, dir.Name); var preFiles = preDir.EnumerateFiles("*", System.IO.SearchOption.TopDirectoryOnly); foreach (var file in preFiles) { Console.WriteLine($"\t|- {file.FullName}"); } } foreach (var dir in topDirs) { // prefix directories Console.WriteLine("AllDirectories prefix-----[" + dir.Name + "]"); var preDir = new ObjectStorageDirectoryInfo(client, nameSpaceName, bukcet.Name, dir.Name); var preFiles = preDir.EnumerateFiles("*", System.IO.SearchOption.AllDirectories); foreach (var file in preFiles) { Console.WriteLine($"\t|- {file.FullName}"); } } } } }