-
Notifications
You must be signed in to change notification settings - Fork 2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: compute_reservation_create_shared, compute_reservation_create_f…
…rom_vm (#3894) * feat: compute_reservation_create_shared * feat: compute_reservation_create_from_vm * Cleanup resources before tests * Pass zone as parameter to prevent inconsictencies between resources
- Loading branch information
Showing
14 changed files
with
577 additions
and
75 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
/* | ||
* 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(reservationName, vmName, zone) { | ||
// [START compute_reservation_create_from_vm] | ||
// Import the Compute library | ||
const computeLib = require('@google-cloud/compute'); | ||
const compute = computeLib.protos.google.cloud.compute.v1; | ||
|
||
// Instantiate a reservationsClient | ||
const reservationsClient = new computeLib.ReservationsClient(); | ||
// Instantiate a zoneOperationsClient | ||
const zoneOperationsClient = new computeLib.ZoneOperationsClient(); | ||
// Instantiate a instancesClient | ||
const instancesClient = new computeLib.InstancesClient(); | ||
|
||
/** | ||
* TODO(developer): Update/uncomment 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 in which to reserve resources. | ||
zone = 'us-central1-a'; | ||
// The name of the reservation to create. | ||
// reservationName = 'reservation-02'; | ||
// The name of the VM which properties you want to use to create the reservation. | ||
// vmName = 'vm-01'; | ||
// The number of VMs to reserve. | ||
const vmsNumber = 3; | ||
|
||
async function callCreateComputeReservationFromVM() { | ||
// Get specified VM | ||
const [vm] = await instancesClient.get({ | ||
project: projectId, | ||
zone, | ||
instance: vmName, | ||
}); | ||
|
||
// Create reservation for 3 VMs in zone us-central1-a by specifying directly the properties from the desired VM | ||
const specificReservation = new compute.AllocationSpecificSKUReservation({ | ||
count: vmsNumber, | ||
instanceProperties: { | ||
machineType: vm.machineType.split('/').pop(), | ||
minCpuPlatform: vm.minCpuPlatform, | ||
guestAccelerators: vm.guestAccelerators | ||
? [...vm.guestAccelerators] | ||
: [], | ||
localSsds: vm.localSsds ? [...vm.localSsds] : [], | ||
}, | ||
}); | ||
|
||
// Create a reservation. | ||
const reservation = new compute.Reservation({ | ||
name: reservationName, | ||
zone, | ||
specificReservation, | ||
specificReservationRequired: true, | ||
}); | ||
|
||
const [response] = await reservationsClient.insert({ | ||
project: projectId, | ||
reservationResource: reservation, | ||
zone, | ||
}); | ||
|
||
let operation = response.latestResponse; | ||
|
||
// Wait for the create reservation operation to complete. | ||
while (operation.status !== 'DONE') { | ||
[operation] = await zoneOperationsClient.wait({ | ||
operation: operation.name, | ||
project: projectId, | ||
zone: operation.zone.split('/').pop(), | ||
}); | ||
} | ||
|
||
console.log(`Reservation: ${reservationName} created.`); | ||
} | ||
|
||
await callCreateComputeReservationFromVM(); | ||
// [END compute_reservation_create_from_vm] | ||
} | ||
|
||
main(...process.argv.slice(2)).catch(err => { | ||
console.error(err.message); | ||
process.exitCode = 1; | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
/* | ||
* 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(reservationsClient, zoneOperationsClient) { | ||
// [START compute_reservation_create_shared] | ||
// Import the Compute library | ||
const computeLib = require('@google-cloud/compute'); | ||
const compute = computeLib.protos.google.cloud.compute.v1; | ||
|
||
/** | ||
* TODO(developer): Uncomment reservationsClient and zoneOperationsClient before running the sample. | ||
*/ | ||
// Instantiate a reservationsClient | ||
// reservationsClient = new computeLib.ReservationsClient(); | ||
// Instantiate a zoneOperationsClient | ||
// 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 in which to reserve resources. | ||
const zone = 'us-central1-a'; | ||
// The name of the reservation to create. | ||
const reservationName = 'reservation-01'; | ||
// The number of VMs to reserve. | ||
const vmsNumber = 3; | ||
// The name of an existing instance template. | ||
const instanceTemplateName = 'global-instance-template-name'; | ||
// The location of the instance template. | ||
const location = 'global'; | ||
|
||
async function callCreateComputeSharedReservation() { | ||
// Create reservation for 3 VMs in zone us-central1-a by specifying a instance template. | ||
const specificReservation = new compute.AllocationSpecificSKUReservation({ | ||
count: vmsNumber, | ||
sourceInstanceTemplate: `projects/${projectId}/${location}/instanceTemplates/${instanceTemplateName}`, | ||
}); | ||
|
||
// Create share settings. Share reservation with one customer project. | ||
const shareSettings = new compute.ShareSettings({ | ||
shareType: 'SPECIFIC_PROJECTS', | ||
projectMap: { | ||
// The IDs of projects that can consume this reservation. You can include up to 100 consumer projects. | ||
// These projects must be in the same organization as the owner project. | ||
// Don't include the owner project. By default, it is already allowed to consume the reservation. | ||
consumer_project_id: { | ||
projectId: 'consumer_project_id', | ||
}, | ||
}, | ||
}); | ||
|
||
// Create a reservation. | ||
const reservation = new compute.Reservation({ | ||
name: reservationName, | ||
specificReservation, | ||
specificReservationRequired: true, | ||
shareSettings, | ||
}); | ||
|
||
const [response] = await reservationsClient.insert({ | ||
project: projectId, | ||
reservationResource: reservation, | ||
zone, | ||
}); | ||
|
||
let operation = response.latestResponse; | ||
|
||
// Wait for the create reservation operation to complete. | ||
while (operation.status !== 'DONE') { | ||
[operation] = await zoneOperationsClient.wait({ | ||
operation: operation.name, | ||
project: projectId, | ||
zone: operation.zone.split('/').pop(), | ||
}); | ||
} | ||
|
||
console.log(`Reservation: ${reservationName} created.`); | ||
return response; | ||
} | ||
|
||
return await callCreateComputeSharedReservation(); | ||
// [END compute_reservation_create_shared] | ||
} | ||
|
||
module.exports = main; | ||
|
||
// TODO(developer): Uncomment below lines before running the sample. | ||
// main(...process.argv.slice(2)).catch(err => { | ||
// console.error(err); | ||
// process.exitCode = 1; | ||
// }); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.