From 443734048597e1fb74d45d39de150296b0d30218 Mon Sep 17 00:00:00 2001 From: yuyifan-google <65194920+yuyifan-google@users.noreply.github.com> Date: Tue, 16 Jun 2020 10:24:49 -0700 Subject: [PATCH] docs(samples): add sample code for SearchAllResources and SearchAllIamPolicies (#343) --- .../google-cloud-asset/samples/package.json | 1 + .../samples/searchAllIamPolicies.js | 61 +++++++++++++++++ .../samples/searchAllResources.js | 65 +++++++++++++++++++ .../samples/test/sample.test.js | 20 ++++++ 4 files changed, 147 insertions(+) create mode 100644 packages/google-cloud-asset/samples/searchAllIamPolicies.js create mode 100644 packages/google-cloud-asset/samples/searchAllResources.js diff --git a/packages/google-cloud-asset/samples/package.json b/packages/google-cloud-asset/samples/package.json index 50294a59590..5194b2df1f5 100644 --- a/packages/google-cloud-asset/samples/package.json +++ b/packages/google-cloud-asset/samples/package.json @@ -16,6 +16,7 @@ }, "dependencies": { "@google-cloud/asset": "^3.1.0", + "@google-cloud/compute": "^2.0.0", "@google-cloud/storage": "^5.0.0", "uuid": "^8.0.0", "yargs": "^15.0.0" diff --git a/packages/google-cloud-asset/samples/searchAllIamPolicies.js b/packages/google-cloud-asset/samples/searchAllIamPolicies.js new file mode 100644 index 00000000000..965fd029f1b --- /dev/null +++ b/packages/google-cloud-asset/samples/searchAllIamPolicies.js @@ -0,0 +1,61 @@ +// Copyright 2020 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. + +'use strict'; + +// sample-metadata: +// title: Search All Iam Policies +// description: Search All Iam Policies. +// usage: node searchAllIamPolicies + +async function main(scope, query, pageSize, pageToken) { + // [START asset_quickstart_search_all_iam_policies] + /** + * TODO(developer): Uncomment these variables before running the sample. + */ + // const scope = ''; + // const query = ''; + // const pageSize = 0; + // const pageToken = ''; + + const util = require('util'); + const {AssetServiceClient} = require('@google-cloud/asset'); + + const client = new AssetServiceClient(); + const projectId = await client.getProjectId(); + + async function searchAllIamPolicies() { + const request = { + scope: `projects/${projectId}`, + query: query, + pageSize: pageSize, + pageToken: pageToken, + }; + const options = { + autoPaginate: false, + }; + + // Handle the operation using the promise pattern. + const result = await client.searchAllIamPolicies(request, options); + // Do things with with the response. + console.log(util.inspect(result, {depth: null})); + } + // [END asset_quickstart_search_all_iam_policies] + searchAllIamPolicies(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err.message); + process.exitCode = 1; +}); diff --git a/packages/google-cloud-asset/samples/searchAllResources.js b/packages/google-cloud-asset/samples/searchAllResources.js new file mode 100644 index 00000000000..0fa25bbaa20 --- /dev/null +++ b/packages/google-cloud-asset/samples/searchAllResources.js @@ -0,0 +1,65 @@ +// Copyright 2020 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. + +'use strict'; + +// sample-metadata: +// title: Search All Resources +// description: Search All Resources. +// usage: node searchAllResources + +async function main(scope, query, assetTypes, pageSize, pageToken, orderBy) { + // [START asset_quickstart_search_all_resources] + /** + * TODO(developer): Uncomment these variables before running the sample. + */ + // const scope = ''; + // const query = ''; + // const assetTypes = []; + // const pageSize = 0; + // const pageToken = ''; + // const orderBy = ''; + + const util = require('util'); + const {AssetServiceClient} = require('@google-cloud/asset'); + + const client = new AssetServiceClient(); + const projectId = await client.getProjectId(); + + async function searchAllResources() { + const request = { + scope: `projects/${projectId}`, + query: query, + assetTypes: assetTypes, + pageSize: pageSize, + pageToken: pageToken, + orderBy: orderBy, + }; + const options = { + autoPaginate: false, + }; + + // Handle the operation using the promise pattern. + const result = await client.searchAllResources(request, options); + // Do things with with the response. + console.log(util.inspect(result, {depth: null})); + } + // [END asset_quickstart_search_all_resources] + searchAllResources(); +} + +main(...process.argv.slice(2)).catch(err => { + console.error(err.message); + process.exitCode = 1; +}); diff --git a/packages/google-cloud-asset/samples/test/sample.test.js b/packages/google-cloud-asset/samples/test/sample.test.js index f2b12b3a43e..dee632efa29 100644 --- a/packages/google-cloud-asset/samples/test/sample.test.js +++ b/packages/google-cloud-asset/samples/test/sample.test.js @@ -26,6 +26,12 @@ const storage = new Storage(); const bucketName = `asset-nodejs-${uuid.v4()}`; const bucket = storage.bucket(bucketName); +const Compute = require('@google-cloud/compute'); +const zone = new Compute().zone('us-central1-c'); +const vmName = `asset-nodejs-${uuid.v4()}`; + +let vm; + // Some of these tests can take an extremely long time, and occasionally // timeout, see: // "Timeout of 180000ms exceeded. For async tests and hooks". @@ -43,10 +49,12 @@ const delay = async test => { describe('quickstart sample tests', () => { before(async () => { await bucket.create(); + [vm] = await zone.createVM(vmName, {os: 'ubuntu'}); }); after(async () => { await bucket.delete(); + await vm.delete(); }); it('should export assets to specified path', async function () { @@ -71,4 +79,16 @@ describe('quickstart sample tests', () => { const stdout = execSync(`node quickstart ${assetName}`); assert.include(stdout, assetName); }); + + it('should search all resources successfully', async () => { + const query = `name:${vmName}`; + const stdout = execSync(`node searchAllResources '' ${query}`); + assert.include(stdout, vmName); + }); + + it('should search all iam policies successfully', async () => { + const query = 'policy:roles/owner'; + const stdout = execSync(`node searchAllIamPolicies '' ${query}`); + assert.include(stdout, 'roles/owner'); + }); });