From bfdfe28bc729e9a292de2bdef36badf73b358227 Mon Sep 17 00:00:00 2001 From: Joanna Grycz Date: Fri, 30 Aug 2024 16:26:45 +0200 Subject: [PATCH] feat: Add compute_reservation_delete sample --- compute/reservations/deleteReservation.js | 58 +++++++++++++++++++++ compute/test/deleteReservation.test.js | 63 +++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 compute/reservations/deleteReservation.js create mode 100644 compute/test/deleteReservation.test.js diff --git a/compute/reservations/deleteReservation.js b/compute/reservations/deleteReservation.js new file mode 100644 index 0000000000..c5e02e0867 --- /dev/null +++ b/compute/reservations/deleteReservation.js @@ -0,0 +1,58 @@ +/* + * Copyright 2024 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 + * + * https://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'; +async function main() { + // [START compute_reservation_delete] + // Import the Compute library + const computeLib = require('@google-cloud/compute'); + // Instantiate a reservationsClient + const reservationsClient = new computeLib.ReservationsClient(); + // Instantiate a zoneOperationsClient + const zoneOperationsClient = new computeLib.ZoneOperationsClient(); + /** + * TODO(developer): Update these variables before running the sample. + */ + // The ID of the project where your reservation is located. + const projectId = await reservationsClient.getProjectId(); + // The zone where your reservation is located. + const zone = 'us-central1-a'; + // The name of the reservation to delete. + const reservationName = 'reservation-01'; + + async function callDeleteReservation() { + // Delete the reservation + const [response] = await reservationsClient.delete({ + project: projectId, + reservation: reservationName, + zone, + }); + let operation = response.latestResponse; + // Wait for the delete reservation operation to complete. + while (operation.status !== 'DONE') { + [operation] = await zoneOperationsClient.wait({ + operation: operation.name, + project: projectId, + zone: operation.zone.split('/').pop(), + }); + } + } + await callDeleteReservation(); + // [END compute_reservation_delete] +} +main().catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/compute/test/deleteReservation.test.js b/compute/test/deleteReservation.test.js new file mode 100644 index 0000000000..f1702d3742 --- /dev/null +++ b/compute/test/deleteReservation.test.js @@ -0,0 +1,63 @@ +/* + * Copyright 2024 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 + * + * https://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 path = require('path'); +const {before, describe, it} = require('mocha'); +const {expect} = require('chai'); +const cp = require('child_process'); +const {ReservationsClient} = require('@google-cloud/compute').v1; +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +describe('Delete compute reservation', async () => { + const reservationName = 'reservation-01'; + const zone = 'us-central1-a'; + const reservationsClient = new ReservationsClient(); + let projectId; + + before(async () => { + projectId = await reservationsClient.getProjectId(); + }); + + it('should delete reservation', async () => { + // Create reservation + execSync('node ./reservations/createReservationFromProperties.js', { + cwd, + }); + + // Delete created reservation + execSync('node ./reservations/deleteReservation.js', { + cwd, + }); + + try { + // Try to get the deleted reservation + await reservationsClient.get({ + project: projectId, + zone, + reservation: reservationName, + }); + + // If the reservation is found, the test should fail + throw new Error('Reservation was not deleted.'); + } catch (error) { + // Assert that the error message indicates the reservation wasn't found + expect(error.message).to.include( + `The resource 'projects/${projectId}/zones/${zone}/reservations/reservation-01' was not found` + ); + } + }); +});