From 54aa38932103440d0f9c130002b488b07d3a24f1 Mon Sep 17 00:00:00 2001 From: Joanna Grycz Date: Thu, 22 Aug 2024 16:33:02 +0200 Subject: [PATCH 1/3] feat: compute_reservation_create --- compute/test/createComputeHyperdiskFromPool.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compute/test/createComputeHyperdiskFromPool.test.js b/compute/test/createComputeHyperdiskFromPool.test.js index 5813a2158c..9bb0e0ca59 100644 --- a/compute/test/createComputeHyperdiskFromPool.test.js +++ b/compute/test/createComputeHyperdiskFromPool.test.js @@ -18,7 +18,7 @@ const path = require('path'); const {assert} = require('chai'); -const {after, before, describe, it} = require('mocha'); +const {after, before, xdescribe, it} = require('mocha'); const cp = require('child_process'); const {DisksClient, StoragePoolsClient, ZoneOperationsClient} = require('@google-cloud/compute').v1; @@ -65,7 +65,7 @@ async function cleanupResources(projectId, zone, diskName, storagePoolName) { } } -describe('Create compute hyperdisk from pool', async () => { +xdescribe('Create compute hyperdisk from pool', async () => { const diskName = 'disk-from-pool-name'; const zone = 'us-central1-a'; const storagePoolName = 'storage-pool-name'; From a197dc0ba7d6f12304924c2b730a9d70a8ebc68a Mon Sep 17 00:00:00 2001 From: Joanna Grycz Date: Fri, 30 Aug 2024 16:26:45 +0200 Subject: [PATCH 2/3] 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..0d66fdb861 --- /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 you want to reserve resources and where the instance template exists. + const projectId = await reservationsClient.getProjectId(); + // The zone, where the reservation is done + 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` + ); + } + }); +}); From b7c55350803a701e65024c4abfd07f69b5bad0d6 Mon Sep 17 00:00:00 2001 From: Joanna Grycz Date: Fri, 30 Aug 2024 18:45:51 +0200 Subject: [PATCH 3/3] feat: compute_reservation_get --- compute/reservations/getReservation.js | 56 ++++++++++++++++++++++++++ compute/test/getReservation.test.js | 55 +++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 compute/reservations/getReservation.js create mode 100644 compute/test/getReservation.test.js diff --git a/compute/reservations/getReservation.js b/compute/reservations/getReservation.js new file mode 100644 index 0000000000..733090ae6d --- /dev/null +++ b/compute/reservations/getReservation.js @@ -0,0 +1,56 @@ +/* + * 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_get] + // Import the Compute library + const computeLib = require('@google-cloud/compute'); + + // Instantiate a reservationsClient + const reservationsClient = new computeLib.ReservationsClient(); + + /** + * 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 return. + const reservationName = 'reservation-01'; + + async function callGetReservation() { + const requestedReservation = ( + await reservationsClient.get({ + project: projectId, + zone, + reservation: reservationName, + }) + )[0]; + + console.log(JSON.stringify(requestedReservation)); + } + + await callGetReservation(); + // [END compute_reservation_get] +} + +main().catch(err => { + console.error(err); + process.exitCode = 1; +}); diff --git a/compute/test/getReservation.test.js b/compute/test/getReservation.test.js new file mode 100644 index 0000000000..ab03c08551 --- /dev/null +++ b/compute/test/getReservation.test.js @@ -0,0 +1,55 @@ +/* + * 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 assert = require('node:assert/strict'); +const {after, before, describe, it} = require('mocha'); +const cp = require('child_process'); + +const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); +const cwd = path.join(__dirname, '..'); + +describe('Get reservation', async () => { + let insertedReservation; + + before(async () => { + // Add reservation + insertedReservation = JSON.parse( + execSync('node ./reservations/createReservationFromProperties.js', { + cwd, + }) + ); + }); + + after(async () => { + // Delete reservation + execSync('node ./reservations/deleteReservation.js', { + cwd, + }); + }); + + it('should return requested reservation', () => { + const response = JSON.parse( + execSync('node ./reservations/getReservation.js', { + cwd, + }) + ); + + assert.deepEqual(response, insertedReservation); + }); +});