diff --git a/storage/disableBucketLifecycleManagement.js b/storage/disableBucketLifecycleManagement.js new file mode 100644 index 0000000000..04569982f9 --- /dev/null +++ b/storage/disableBucketLifecycleManagement.js @@ -0,0 +1,55 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +'use strict'; + +/** + * This application demonstrates how to disable Object Lifecycle Management for + * a bucket. + * + * For more information, see the documentation at https://cloud.google.com/storage/docs/lifecycle. + */ + +function main(bucketName = 'my-bucket') { + // [START storage_disable_bucket_lifecycle_management] + /** + * TODO(developer): Uncomment the following lines before running the sample. + */ + // The ID of your GCS bucket + // const bucketName = 'your-unique-bucket-name'; + + // Imports the Google Cloud client library + const {Storage} = require('@google-cloud/storage'); + + // Creates a client + const storage = new Storage(); + + async function disableBucketLifecycleManagement() { + try { + await storage.bucket(bucketName).setMetadata({lifecycle: null}); + + console.log(`Lifecycle management is disabled for bucket ${bucketName}`); + } catch (error) { + console.error( + 'Error executing disable bucket lifecycle management:', + error.message || error + ); + } + } + + disableBucketLifecycleManagement(); + // [END storage_disable_bucket_lifecycle_management] +} + +main(...process.argv.slice(2)); diff --git a/storage/enableBucketLifecycleManagement.js b/storage/enableBucketLifecycleManagement.js new file mode 100644 index 0000000000..a3157c93d3 --- /dev/null +++ b/storage/enableBucketLifecycleManagement.js @@ -0,0 +1,64 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +'use strict'; + +/** + * This application demonstrates how to enable Object Lifecycle Management for + * a bucket. + * + * For more information, see the documentation at https://cloud.google.com/storage/docs/lifecycle. + */ + +function main(bucketName = 'my-bucket') { + // [START storage_enable_bucket_lifecycle_management] + /** + * TODO(developer): Uncomment the following lines before running the sample. + */ + // The ID of your GCS bucket + // const bucketName = 'your-unique-bucket-name'; + + // Imports the Google Cloud client library + const {Storage} = require('@google-cloud/storage'); + + // Creates a client + const storage = new Storage(); + + async function enableBucketLifecycleManagement() { + try { + const [metadata] = await storage.bucket(bucketName).addLifecycleRule({ + action: { + type: 'Delete', + }, + condition: {age: 100}, + }); + + console.log( + `Lifecycle management is enabled for bucket ${bucketName} and the rules are:` + ); + + console.log(metadata.lifecycle.rule); + } catch (error) { + console.error( + 'Error executing enable bucket lifecycle management:', + error.message || error + ); + } + } + + enableBucketLifecycleManagement(); + // [END storage_enable_bucket_lifecycle_management] +} + +main(...process.argv.slice(2)); diff --git a/storage/system-test/bucketLifecycle.test.js b/storage/system-test/bucketLifecycle.test.js new file mode 100644 index 0000000000..8b1adf9b55 --- /dev/null +++ b/storage/system-test/bucketLifecycle.test.js @@ -0,0 +1,80 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +'use strict'; + +const {Storage} = require('@google-cloud/storage'); +const {assert} = require('chai'); +const {before, beforeEach, after, describe, it} = require('mocha'); +const cp = require('child_process'); +const uuid = require('uuid'); + +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); + +const storage = new Storage(); +const bucketName = `nodejs-storage-samples-${uuid.v4()}`; +const bucket = storage.bucket(bucketName); + +describe('Bucket lifecycle management', () => { + before(async () => { + await bucket.create(); + }); + + beforeEach(async () => { + await bucket.setMetadata({lifecycle: null}); + }); + + after(async () => { + await bucket.delete().catch(console.error); + }); + + it('should add a lifecycle delete rule', async () => { + const output = execSync( + `node enableBucketLifecycleManagement.js ${bucketName}` + ); + assert.include( + output, + `Lifecycle management is enabled for bucket ${bucketName} and the rules are:` + ); + const [metadata] = await bucket.getMetadata(); + assert.deepStrictEqual(metadata.lifecycle.rule[0], { + action: {type: 'Delete'}, + condition: {age: 100}, + }); + }); + + it('should disable all lifecycle rules', async () => { + // Add a lifecycle rule in order for the sample to delete. + await bucket.addLifecycleRule({ + action: {type: 'Delete'}, + condition: {age: 100}, + }); + + const [metadata] = await bucket.getMetadata(); + assert.deepStrictEqual(metadata.lifecycle.rule[0], { + action: {type: 'Delete'}, + condition: {age: 100}, + }); + + const output = execSync( + `node disableBucketLifecycleManagement.js ${bucketName}` + ); + assert.include( + output, + `Lifecycle management is disabled for bucket ${bucketName}` + ); + const [newMetadata] = await bucket.getMetadata(); + assert.isUndefined(newMetadata.lifecycle); + }); +});