-
Notifications
You must be signed in to change notification settings - Fork 102
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
samples: add support for CMMR Phase 2 (#1718)
* feat: support customer managed instance configurations Co-authored-by: Knut Olav Løite <[email protected]> Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
- Loading branch information
1 parent
bbe8f69
commit bf16afd
Showing
7 changed files
with
453 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,80 @@ | ||
/** | ||
* 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. | ||
*/ | ||
|
||
// sample-metadata: | ||
// title: Creates a user-managed instance configuration. | ||
// usage: node instance-config-create <INSTANCE_CONFIG_ID> <BASE_INSTANCE_CONFIG_ID> <PROJECT_ID> | ||
|
||
'use strict'; | ||
|
||
function main( | ||
instanceConfigId = 'custom-my-instance-config', | ||
baseInstanceConfigId = 'my-base-instance-config', | ||
projectId = 'my-project-id' | ||
) { | ||
// [START spanner_create_instance_config] | ||
|
||
/** | ||
* TODO(developer): Uncomment the following lines before running the sample. | ||
*/ | ||
// const instanceConfigId = 'custom-my-instance-config-id' | ||
// const baseInstanceConfigId = 'my-base-instance-config-id'; | ||
// const projectId = 'my-project-id'; | ||
|
||
// Imports the Google Cloud client library | ||
const {Spanner} = require('@google-cloud/spanner'); | ||
|
||
// Creates a client | ||
const spanner = new Spanner({ | ||
projectId: projectId, | ||
}); | ||
async function createInstanceConfig() { | ||
// Creates a new instance config | ||
const instanceConfig = spanner.instanceConfig(instanceConfigId); | ||
try { | ||
const [baseInstanceConfig] = await spanner.getInstanceConfig( | ||
baseInstanceConfigId | ||
); | ||
console.log(`Creating instance config ${instanceConfig.formattedName_}.`); | ||
const [, operation] = await instanceConfig.create({ | ||
displayName: instanceConfigId, | ||
baseConfig: baseInstanceConfig.name, | ||
replicas: baseInstanceConfig.replicas.concat( | ||
baseInstanceConfig.optionalReplicas[0] | ||
), | ||
}); | ||
console.log( | ||
`Waiting for create operation for ${instanceConfig.id} to complete...` | ||
); | ||
await operation.promise(); | ||
console.log(`Created instance config ${instanceConfigId}.`); | ||
} catch (err) { | ||
console.error( | ||
'ERROR: Creating instance config ', | ||
instanceConfigId, | ||
' failed with error message ', | ||
err | ||
); | ||
} | ||
} | ||
createInstanceConfig(); | ||
// [END spanner_create_instance_config] | ||
} | ||
|
||
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,76 @@ | ||
/** | ||
* 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. | ||
*/ | ||
|
||
// sample-metadata: | ||
// title: Deletes a user-managed instance configuration. | ||
// usage: node instance-config-delete <INSTANCE_CONFIG_ID> <PROJECT_ID> | ||
|
||
'use strict'; | ||
|
||
function main( | ||
instanceConfigId = 'custom-my-instance-config', | ||
projectId = 'my-project-id' | ||
) { | ||
// [START spanner_delete_instance_config] | ||
|
||
/** | ||
* TODO(developer): Uncomment the following lines before running the sample. | ||
*/ | ||
// const instanceConfigId = 'custom-my-instance-config-id'; | ||
// const projectId = 'my-project-id'; | ||
|
||
// Imports the Google Cloud client library | ||
const {Spanner} = require('@google-cloud/spanner'); | ||
|
||
// Creates a client | ||
const spanner = new Spanner({ | ||
projectId: projectId, | ||
}); | ||
async function deleteInstanceConfig() { | ||
// Deletes an instance config. | ||
const instanceConfig = spanner.instanceConfig(instanceConfigId); | ||
try { | ||
// Delete the instance config. | ||
console.log(`Deleting ${instanceConfig.id}...\n`); | ||
await instanceConfig.delete(); | ||
// Verify that the instance config no longer exists | ||
const exists = await instanceConfig.exists(); | ||
if (exists) { | ||
console.error( | ||
'Error: Instance config ', | ||
instanceConfigId, | ||
' still exists' | ||
); | ||
} else { | ||
console.log(`Deleted instance config ${instanceConfigId}.\n`); | ||
} | ||
} catch (err) { | ||
console.error( | ||
'ERROR: Deleting instance config ', | ||
instanceConfigId, | ||
' failed with error message ', | ||
err | ||
); | ||
} | ||
} | ||
deleteInstanceConfig(); | ||
// [END spanner_delete_instance_config] | ||
} | ||
|
||
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,76 @@ | ||
/** | ||
* 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. | ||
*/ | ||
|
||
// sample-metadata: | ||
// title: Lists the instance configuration operations. | ||
// usage: node instance-config-get-operations <PROJECT_ID> | ||
|
||
'use strict'; | ||
|
||
function main(projectId = 'my-project-id') { | ||
// [START spanner_list_instance_config_operations] | ||
|
||
/** | ||
* TODO(developer): Uncomment the following lines before running the sample. | ||
*/ | ||
// const projectId = 'my-project-id'; | ||
|
||
// Imports the Google Cloud client library | ||
const {Spanner, protos} = require('@google-cloud/spanner'); | ||
|
||
// Creates a client | ||
const spanner = new Spanner({ | ||
projectId: projectId, | ||
}); | ||
async function getInstanceConfigOperations() { | ||
// Lists the instance config operations. | ||
try { | ||
console.log( | ||
`Getting list of instance config operations on project ${projectId}...\n` | ||
); | ||
const [instanceConfigOperations] = | ||
await spanner.getInstanceConfigOperations({ | ||
filter: | ||
'(metadata.@type=type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)', | ||
}); | ||
console.log( | ||
`Available instance config operations for project ${projectId}:` | ||
); | ||
instanceConfigOperations.forEach(instanceConfigOperation => { | ||
const metadata = instanceConfigOperation.metadata; | ||
const instanceConfig = | ||
protos.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata.decode( | ||
instanceConfigOperation.metadata.value | ||
).instanceConfig; | ||
console.log( | ||
`Instance config operation for ${instanceConfig.name} of type` + | ||
` ${metadata.type_url} has status ${ | ||
instanceConfigOperation.done ? 'done' : 'running' | ||
}.` | ||
); | ||
}); | ||
} catch (err) { | ||
console.error('ERROR:', err); | ||
} | ||
} | ||
getInstanceConfigOperations(); | ||
// [END spanner_list_instance_config_operations] | ||
} | ||
|
||
process.on('unhandledRejection', err => { | ||
console.error(err.message); | ||
process.exitCode = 1; | ||
}); | ||
main(...process.argv.slice(2)); |
Oops, something went wrong.