This repository has been archived by the owner on Jul 13, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 113
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore(samples): add moving instances between zones samples (#747)
- Loading branch information
1 parent
ec6cbed
commit 2eda181
Showing
14 changed files
with
1,114 additions
and
0 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
// Copyright 2022 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. | ||
|
||
/** | ||
* Creates a new disk in a project in given zone. | ||
* | ||
* @param {string} projectId - Project ID or project number of the Cloud project you want to use. | ||
* @param {string} zone - Name of the zone to create the instance in. For example: "us-west3-b". | ||
* @param {string} diskName - Name of the disk you want to create. | ||
* @param {string} diskType - The type of disk you want to create. This value uses the following format: | ||
* "zones/{zone}/diskTypes/(pd-standard|pd-ssd|pd-balanced|pd-extreme)". | ||
* For example: "zones/us-west3-b/diskTypes/pd-ssd". | ||
* @param {int} diskSizeGb - Size of the new disk in gigabytes. | ||
* @param {string} snapshotLink - A link to the snapshot you want to use as a source for the new disk. | ||
* This value uses the following format: "projects/{project_name}/global/snapshots/{snapshot_name}" | ||
*/ | ||
|
||
function main(projectId, zone, diskName, diskType, diskSizeGb, snapshotLink) { | ||
// [START compute_disk_create_from_snapshot] | ||
/** | ||
* TODO(developer): Uncomment and replace these variables before running the sample. | ||
*/ | ||
// const projectId = 'YOUR_PROJECT_ID'; | ||
// const zone = 'europe-central2-b'; | ||
// const diskName = 'YOUR_DISK_NAME'; | ||
// const diskType = 'zones/us-west3-b/diskTypes/pd-ssd'; | ||
// const diskSizeGb = 10; | ||
// const snapshotLink = 'projects/project_name/global/snapshots/snapshot_name'; | ||
|
||
const compute = require('@google-cloud/compute'); | ||
|
||
async function createDiskFromSnapshot() { | ||
const disksClient = new compute.DisksClient(); | ||
|
||
const [response] = await disksClient.insert({ | ||
project: projectId, | ||
zone, | ||
diskResource: { | ||
sizeGb: diskSizeGb, | ||
name: diskName, | ||
zone, | ||
type: diskType, | ||
sourceSnapshot: snapshotLink, | ||
}, | ||
}); | ||
let operation = response.latestResponse; | ||
const operationsClient = new compute.ZoneOperationsClient(); | ||
|
||
// Wait for the create disk operation to complete. | ||
while (operation.status !== 'DONE') { | ||
[operation] = await operationsClient.wait({ | ||
operation: operation.name, | ||
project: projectId, | ||
zone: operation.zone.split('/').pop(), | ||
}); | ||
} | ||
|
||
console.log('Disk created.'); | ||
} | ||
|
||
createDiskFromSnapshot(); | ||
// [END compute_disk_create_from_snapshot] | ||
} | ||
|
||
process.on('unhandledRejection', err => { | ||
console.error(err.message); | ||
process.exitCode = 1; | ||
}); | ||
|
||
const args = process.argv.slice(2); | ||
args[4] = parseInt(args[4]); | ||
main(...args); |
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,78 @@ | ||
// Copyright 2022 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. | ||
|
||
/** | ||
* Creates a new empty disk in a project in given zone. | ||
* | ||
* @param {string} projectId - Project ID or project number of the Cloud project you want to use. | ||
* @param {string} zone - Name of the zone to create the instance in. For example: "us-west3-b". | ||
* @param {string} diskName - Name of the disk you want to create. | ||
* @param {string} diskType - The type of disk you want to create. This value uses the following format: | ||
* "zones/{zone}/diskTypes/(pd-standard|pd-ssd|pd-balanced|pd-extreme)". | ||
* For example: "zones/us-west3-b/diskTypes/pd-ssd". | ||
* @param {int} diskSizeGb - Size of the new disk in gigabytes. | ||
*/ | ||
function main(projectId, zone, diskName, diskType, diskSizeGb) { | ||
// [START compute_disk_create_empty_disk] | ||
/** | ||
* TODO(developer): Uncomment and replace these variables before running the sample. | ||
*/ | ||
// const projectId = 'YOUR_PROJECT_ID'; | ||
// const zone = 'europe-central2-b'; | ||
// const diskName = 'YOUR_DISK_NAME'; | ||
// const diskType = 'zones/us-west3-b/diskTypes/pd-ssd'; | ||
// const diskSizeGb = 10; | ||
|
||
const compute = require('@google-cloud/compute'); | ||
|
||
async function createEmptyDisk() { | ||
const disksClient = new compute.DisksClient(); | ||
|
||
const [response] = await disksClient.insert({ | ||
project: projectId, | ||
zone, | ||
diskResource: { | ||
sizeGb: diskSizeGb, | ||
name: diskName, | ||
zone, | ||
type: diskType, | ||
}, | ||
}); | ||
let operation = response.latestResponse; | ||
const operationsClient = new compute.ZoneOperationsClient(); | ||
|
||
// Wait for the create disk operation to complete. | ||
while (operation.status !== 'DONE') { | ||
[operation] = await operationsClient.wait({ | ||
operation: operation.name, | ||
project: projectId, | ||
zone: operation.zone.split('/').pop(), | ||
}); | ||
} | ||
|
||
console.log('Disk created.'); | ||
} | ||
|
||
createEmptyDisk(); | ||
// [END compute_disk_create_empty_disk] | ||
} | ||
|
||
process.on('unhandledRejection', err => { | ||
console.error(err.message); | ||
process.exitCode = 1; | ||
}); | ||
|
||
const args = process.argv.slice(2); | ||
args[4] = parseInt(args[4]); | ||
main(...args); |
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,65 @@ | ||
// Copyright 2022 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. | ||
|
||
/** | ||
* Deletes a disk from a project. | ||
* | ||
* @param {string} projectId - Project ID or project number of the Cloud project you want to use. | ||
* @param {string} zone - Name of the zone in which is the disk you want to delete. | ||
* @param {string} diskName - Name of the disk you want to delete. | ||
*/ | ||
function main(projectId, zone, diskName) { | ||
// [START compute_disk_delete] | ||
/** | ||
* TODO(developer): Uncomment and replace these variables before running the sample. | ||
*/ | ||
// const projectId = 'YOUR_PROJECT_ID'; | ||
// const zone = 'europe-central2-b'; | ||
// const diskName = 'YOUR_DISK_NAME'; | ||
|
||
const compute = require('@google-cloud/compute'); | ||
|
||
async function deleteDisk() { | ||
const disksClient = new compute.DisksClient(); | ||
|
||
const [response] = await disksClient.delete({ | ||
project: projectId, | ||
zone, | ||
disk: diskName, | ||
}); | ||
let operation = response.latestResponse; | ||
const operationsClient = new compute.ZoneOperationsClient(); | ||
|
||
// Wait for the create disk operation to complete. | ||
while (operation.status !== 'DONE') { | ||
[operation] = await operationsClient.wait({ | ||
operation: operation.name, | ||
project: projectId, | ||
zone: operation.zone.split('/').pop(), | ||
}); | ||
} | ||
|
||
console.log('Disk deleted.'); | ||
} | ||
|
||
deleteDisk(); | ||
// [END compute_disk_delete] | ||
} | ||
|
||
process.on('unhandledRejection', err => { | ||
console.error(err.message); | ||
process.exitCode = 1; | ||
}); | ||
|
||
main(...process.argv.slice(2)); |
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,85 @@ | ||
// Copyright 2022 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. | ||
|
||
/** | ||
* Sets the autodelete flag of a disk to given value. | ||
* | ||
* @param {string} projectId - Project ID or project number of the Cloud project you want to use. | ||
* @param {string} zone - Name of the zone in which is the disk you want to modify. | ||
* @param {string} instanceName - Name of the instance the disk is attached to. | ||
* @param {string} diskName - The name of the disk which flag you want to modify. | ||
* @param {boolean} autoDelete - The new value of the autodelete flag. | ||
*/ | ||
function main(projectId, zone, instanceName, diskName, autoDelete) { | ||
// [START compute_disk_autodelete_change] | ||
/** | ||
* TODO(developer): Uncomment and replace these variables before running the sample. | ||
*/ | ||
// const projectId = 'YOUR_PROJECT_ID'; | ||
// const zone = 'europe-central2-b'; | ||
// const instanceName = 'YOUR_INSTANCE_NAME'; | ||
// const diskName = 'YOUR_DISK_NAME'; | ||
// const autoDelete = true; | ||
|
||
const compute = require('@google-cloud/compute'); | ||
|
||
async function setDiskAutodelete() { | ||
const instancesClient = new compute.InstancesClient(); | ||
|
||
const [instance] = await instancesClient.get({ | ||
project: projectId, | ||
zone, | ||
instance: instanceName, | ||
}); | ||
|
||
if (!instance.disks.some(disk => disk.deviceName === diskName)) { | ||
throw new Error( | ||
`Instance ${instanceName} doesn't have a disk named ${diskName} attached.` | ||
); | ||
} | ||
|
||
const [response] = await instancesClient.setDiskAutoDelete({ | ||
project: projectId, | ||
zone, | ||
instance: instanceName, | ||
deviceName: diskName, | ||
autoDelete, | ||
}); | ||
let operation = response.latestResponse; | ||
const operationsClient = new compute.ZoneOperationsClient(); | ||
|
||
// Wait for the update instance operation to complete. | ||
while (operation.status !== 'DONE') { | ||
[operation] = await operationsClient.wait({ | ||
operation: operation.name, | ||
project: projectId, | ||
zone: operation.zone.split('/').pop(), | ||
}); | ||
} | ||
|
||
console.log('Disk autoDelete field updated.'); | ||
} | ||
|
||
setDiskAutodelete(); | ||
// [END compute_disk_autodelete_change] | ||
} | ||
|
||
process.on('unhandledRejection', err => { | ||
console.error(err.message); | ||
process.exitCode = 1; | ||
}); | ||
|
||
const args = process.argv.slice(2); | ||
args[4] = args[4] === 'true'; | ||
main(...args); |
Oops, something went wrong.