123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import { checkBucketName } from '../utils/checkBucketName';
- import { obj2xml } from '../utils/obj2xml';
- type Field = 'Size | LastModifiedDate | ETag | StorageClass | IsMultipartUploaded | EncryptionStatus';
- interface Inventory {
- id: string;
- isEnabled: true | false;
- prefix?: string;
- OSSBucketDestination: {
- format: 'CSV';
- accountId: string;
- rolename: string;
- bucket: string;
- prefix?: string;
- encryption?:
- | { 'SSE-OSS': '' }
- | {
- 'SSE-KMS': {
- keyId: string;
- };
- };
- };
- frequency: 'Daily' | 'Weekly';
- includedObjectVersions: 'Current' | 'All';
- optionalFields?: {
- field?: Field[];
- };
- }
- /**
- * putBucketInventory
- * @param {String} bucketName - bucket name
- * @param {Inventory} inventory
- * @param {Object} options
- */
- export async function putBucketInventory(this: any, bucketName: string, inventory: Inventory, options: any = {}) {
- const subres: any = Object.assign({ inventory: '', inventoryId: inventory.id }, options.subres);
- checkBucketName(bucketName);
- const { OSSBucketDestination, optionalFields, includedObjectVersions } = inventory;
- const destinationBucketPrefix = 'acs:oss:::';
- const rolePrefix = `acs:ram::${OSSBucketDestination.accountId}:role/`;
- const paramXMLObj: any = {
- InventoryConfiguration: {
- Id: inventory.id,
- IsEnabled: inventory.isEnabled,
- Filter: {
- Prefix: inventory.prefix || ''
- },
- Destination: {
- OSSBucketDestination: {
- Format: OSSBucketDestination.format,
- AccountId: OSSBucketDestination.accountId,
- RoleArn: `${rolePrefix}${OSSBucketDestination.rolename}`,
- Bucket: `${destinationBucketPrefix}${OSSBucketDestination.bucket}`,
- Prefix: OSSBucketDestination.prefix || '',
- Encryption: OSSBucketDestination.encryption || ''
- }
- },
- Schedule: {
- Frequency: inventory.frequency
- },
- IncludedObjectVersions: includedObjectVersions,
- OptionalFields: {
- Field: optionalFields?.field || []
- }
- }
- };
- const paramXML = obj2xml(paramXMLObj, {
- headers: true,
- firstUpperCase: true
- });
- const params = this._bucketRequestParams('PUT', bucketName, subres, options);
- params.successStatuses = [200];
- params.mime = 'xml';
- params.content = paramXML;
- const result = await this.request(params);
- return {
- status: result.status,
- res: result.res
- };
- }
|