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/reservations/getReservations.js b/compute/reservations/getReservations.js new file mode 100644 index 0000000000..69f6f095b2 --- /dev/null +++ b/compute/reservations/getReservations.js @@ -0,0 +1,53 @@ +/* + * 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_list] + // 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 reservations are located. + const projectId = await reservationsClient.getProjectId(); + // The zone where your reservations are located. + const zone = 'us-central1-a'; + + async function callGetReservations() { + const reservations = ( + await reservationsClient.list({ + project: projectId, + zone, + }) + )[0]; + + console.log(JSON.stringify(reservations)); + } + + await callGetReservations(); + // [END compute_reservation_list] +} + +main().catch(err => { + console.error(err); + process.exitCode = 1; +}); 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'; 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` + ); + } + }); +}); diff --git a/compute/test/getReservations.test.js b/compute/test/getReservations.test.js new file mode 100644 index 0000000000..01d834ffbb --- /dev/null +++ b/compute/test/getReservations.test.js @@ -0,0 +1,73 @@ +/* + + * 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 reservations', 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 list of reservations', () => { + const response = JSON.parse( + execSync('node ./reservations/getReservations.js', { + cwd, + }) + ); + + assert.deepEqual(response, [insertedReservation]); + }); +});