Skip to content

Commit

Permalink
feat: add the v1 version of the API (#120)
Browse files Browse the repository at this point in the history
  • Loading branch information
JustinBeckwith authored Mar 18, 2019
1 parent f665c7d commit 1d1860e
Show file tree
Hide file tree
Showing 18 changed files with 2,049 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
// Copyright 2019 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.
//

syntax = "proto3";

package google.cloud.asset.v1;

import "google/api/annotations.proto";
import "google/cloud/asset/v1/assets.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/timestamp.proto";

option csharp_namespace = "Google.Cloud.Asset.V1";
option go_package = "google.golang.org/genproto/googleapis/cloud/asset/v1;asset";
option java_multiple_files = true;
option java_outer_classname = "AssetServiceProto";
option java_package = "com.google.cloud.asset.v1";
option php_namespace = "Google\\Cloud\\Asset\\V1";


// Asset service definition.
service AssetService {
// Exports assets with time and resource types to a given Cloud Storage
// location. The output format is newline-delimited JSON.
// This API implements the [google.longrunning.Operation][google.longrunning.Operation] API allowing you
// to keep track of the export.
rpc ExportAssets(ExportAssetsRequest) returns (google.longrunning.Operation) {
option (google.api.http) = {
post: "/v1/{parent=*/*}:exportAssets"
body: "*"
};
}

// Batch gets the update history of assets that overlap a time window.
// For RESOURCE content, this API outputs history with asset in both
// non-delete or deleted status.
// For IAM_POLICY content, this API outputs history when the asset and its
// attached IAM POLICY both exist. This can create gaps in the output history.
// If a specified asset does not exist, this API returns an INVALID_ARGUMENT
// error.
rpc BatchGetAssetsHistory(BatchGetAssetsHistoryRequest) returns (BatchGetAssetsHistoryResponse) {
option (google.api.http) = {
get: "/v1/{parent=*/*}:batchGetAssetsHistory"
};
}
}

// Export asset request.
message ExportAssetsRequest {
// Required. The relative name of the root asset. This can only be an
// organization number (such as "organizations/123"), a project ID (such as
// "projects/my-project-id"), or a project number (such as "projects/12345"),
// or a folder number (such as "folders/123").
string parent = 1;

// Timestamp to take an asset snapshot. This can only be set to a timestamp
// between 2018-10-02 UTC (inclusive) and the current time. If not specified,
// the current time will be used. Due to delays in resource data collection
// and indexing, there is a volatile window during which running the same
// query may get different results.
google.protobuf.Timestamp read_time = 2;

// A list of asset types of which to take a snapshot for. For example:
// "compute.googleapis.com/Disk". If specified, only matching assets will be returned.
// See [Introduction to Cloud Asset
// Inventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)
// for all supported asset types.
repeated string asset_types = 3;

// Asset content type. If not specified, no content but the asset name will be
// returned.
ContentType content_type = 4;

// Required. Output configuration indicating where the results will be output
// to. All results will be in newline delimited JSON format.
OutputConfig output_config = 5;
}

// The export asset response. This message is returned by the
// [google.longrunning.Operations.GetOperation][google.longrunning.Operations.GetOperation] method in the returned
// [google.longrunning.Operation.response][google.longrunning.Operation.response] field.
message ExportAssetsResponse {
// Time the snapshot was taken.
google.protobuf.Timestamp read_time = 1;

// Output configuration indicating where the results were output to.
// All results are in JSON format.
OutputConfig output_config = 2;
}

// Batch get assets history request.
message BatchGetAssetsHistoryRequest {
// Required. The relative name of the root asset. It can only be an
// organization number (such as "organizations/123"), a project ID (such as
// "projects/my-project-id")", or a project number (such as "projects/12345").
string parent = 1;

// A list of the full names of the assets. For example:
// `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
// See [Resource
// Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
// and [Resource Name Format](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/resource-name-format)
// for more info.
//
// The request becomes a no-op if the asset name list is empty, and the max
// size of the asset name list is 100 in one request.
repeated string asset_names = 2;

// Required. The content type.
ContentType content_type = 3;

// Optional. The time window for the asset history. Both start_time and
// end_time are optional and if set, it must be after 2018-10-02 UTC. If
// end_time is not set, it is default to current timestamp. If start_time is
// not set, the snapshot of the assets at end_time will be returned. The
// returned results contain all temporal assets whose time window overlap with
// read_time_window.
TimeWindow read_time_window = 4;
}

// Batch get assets history response.
message BatchGetAssetsHistoryResponse {
// A list of assets with valid time windows.
repeated TemporalAsset assets = 1;
}

// Output configuration for export assets destination.
message OutputConfig {
// Asset export destination.
oneof destination {
// Destination on Cloud Storage.
GcsDestination gcs_destination = 1;
}
}

// A Cloud Storage location.
message GcsDestination {
// Required.
oneof object_uri {
// The uri of the Cloud Storage object. It's the same uri that is used by
// gsutil. For example: "gs://bucket_name/object_name". See [Viewing and
// Editing Object
// Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata)
// for more information.
string uri = 1;
}
}

// Asset content type.
enum ContentType {
// Unspecified content type.
CONTENT_TYPE_UNSPECIFIED = 0;

// Resource metadata.
RESOURCE = 1;

// The actual IAM policy set on a resource.
IAM_POLICY = 2;
}
118 changes: 118 additions & 0 deletions packages/google-cloud-asset/protos/google/cloud/asset/v1/assets.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
// Copyright 2019 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.
//

syntax = "proto3";

package google.cloud.asset.v1;

import "google/api/annotations.proto";
import "google/iam/v1/policy.proto";
import "google/protobuf/any.proto";
import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";

option csharp_namespace = "Google.Cloud.Asset.V1";
option go_package = "google.golang.org/genproto/googleapis/cloud/asset/v1;asset";
option java_multiple_files = true;
option java_outer_classname = "AssetProto";
option java_package = "com.google.cloud.asset.v1";
option php_namespace = "Google\\Cloud\\Asset\\V1";


// Temporal asset. In addition to the asset, the temporal asset includes the
// status of the asset and valid from and to time of it.
message TemporalAsset {
// The time window when the asset data and state was observed.
TimeWindow window = 1;

// If the asset is deleted or not.
bool deleted = 2;

// Asset.
Asset asset = 3;
}

// A time window of (start_time, end_time].
message TimeWindow {
// Start time of the time window (exclusive).
google.protobuf.Timestamp start_time = 1;

// End time of the time window (inclusive).
// Current timestamp if not specified.
google.protobuf.Timestamp end_time = 2;
}

// Cloud asset. This includes all Google Cloud Platform resources,
// Cloud IAM policies, and other non-GCP assets.
message Asset {
// The full name of the asset. For example:
// `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`.
// See [Resource
// Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
// for more information.
string name = 1;

// Type of the asset. Example: "compute.googleapis.com/Disk".
string asset_type = 2;

// Representation of the resource.
Resource resource = 3;

// Representation of the actual Cloud IAM policy set on a cloud resource. For
// each resource, there must be at most one Cloud IAM policy set on it.
google.iam.v1.Policy iam_policy = 4;
}

// Representation of a cloud resource.
message Resource {
// The API version. Example: "v1".
string version = 1;

// The URL of the discovery document containing the resource's JSON schema.
// For example:
// `"https://www.googleapis.com/discovery/v1/apis/compute/v1/rest"`.
// It will be left unspecified for resources without a discovery-based API,
// such as Cloud Bigtable.
string discovery_document_uri = 2;

// The JSON schema name listed in the discovery document.
// Example: "Project". It will be left unspecified for resources (such as
// Cloud Bigtable) without a discovery-based API.
string discovery_name = 3;

// The REST URL for accessing the resource. An HTTP GET operation using this
// URL returns the resource itself.
// Example:
// `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123`.
// It will be left unspecified for resources without a REST API.
string resource_url = 4;

// The full name of the immediate parent of this resource. See
// [Resource
// Names](https://cloud.google.com/apis/design/resource_names#full_resource_name)
// for more information.
//
// For GCP assets, it is the parent resource defined in the [Cloud IAM policy
// hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy).
// For example:
// `"//cloudresourcemanager.googleapis.com/projects/my_project_123"`.
//
// For third-party assets, it is up to the users to define.
string parent = 5;

// The content of the resource, in which some sensitive fields are scrubbed
// away and may not be present.
google.protobuf.Struct data = 6;
}
8 changes: 4 additions & 4 deletions packages/google-cloud-asset/samples/quickstart.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@

async function exportAssets(dumpFilePath) {
// [START asset_quickstart_export_assets]
const asset = require('@google-cloud/asset');
const client = new asset.v1beta1.AssetServiceClient({
const {AssetServiceClient} = require('@google-cloud/asset');
const client = new AssetServiceClient({
// optional auth parameters.
});

Expand Down Expand Up @@ -49,8 +49,8 @@ async function exportAssets(dumpFilePath) {
async function batchGetAssetsHistory(assetNames) {
// [START asset_quickstart_batch_get_assets_history]
const util = require('util');
const asset = require('@google-cloud/asset');
const client = new asset.v1beta1.AssetServiceClient({
const {AssetServiceClient} = require('@google-cloud/asset');
const client = new AssetServiceClient({
// optional auth parameters.
});

Expand Down
13 changes: 12 additions & 1 deletion packages/google-cloud-asset/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
/**
* @namespace google.cloud.asset.v1beta1
*/
/**
* @namespace google.cloud.asset.v1
*/
/**
* @namespace google.protobuf
*/
Expand All @@ -45,6 +48,7 @@
// Import the clients for each version supported by this package.
const gapic = Object.freeze({
v1beta1: require('./v1beta1'),
v1: require('./v1'),
});

/**
Expand Down Expand Up @@ -81,7 +85,7 @@ const gapic = Object.freeze({
* @property {constructor} AssetServiceClient
* Reference to {@link v1beta1.AssetServiceClient}
*/
module.exports = gapic.v1beta1;
module.exports = gapic.v1;

/**
* @type {object}
Expand All @@ -90,5 +94,12 @@ module.exports = gapic.v1beta1;
*/
module.exports.v1beta1 = gapic.v1beta1;

/**
* @type {object}
* @property {constructor} AssetServiceClient
* Reference to {@link v1.AssetServiceClient}
*/
module.exports.v1 = gapic.v1;

// Alias `module.exports` as `module.exports.default`, for future-proofing.
module.exports.default = Object.assign({}, module.exports);
Loading

0 comments on commit 1d1860e

Please sign in to comment.