Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for including protos in synth #7114

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
178 changes: 178 additions & 0 deletions asset/protos/asset_service.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
// Copyright 2018 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.v1beta1;

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

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


// 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: "/v1beta1/{parent=projects/*}:exportAssets"
body: "*"
additional_bindings {
post: "/v1beta1/{parent=folders/*}:exportAssets"
body: "*"
}
additional_bindings {
post: "/v1beta1/{parent=organizations/*}: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.
rpc BatchGetAssetsHistory(BatchGetAssetsHistoryRequest) returns (BatchGetAssetsHistoryResponse) {
option (google.api.http) = {
get: "/v1beta1/{parent=projects/*}:batchGetAssetsHistory"
additional_bindings {
get: "/v1beta1/{parent=organizations/*}: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"), 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:
// "google.compute.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)
// 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;
}
114 changes: 114 additions & 0 deletions asset/protos/assets.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
// Copyright 2018 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.v1beta1;

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.V1Beta1";
option go_package = "google.golang.org/genproto/googleapis/cloud/asset/v1beta1;asset";
option java_multiple_files = true;
option java_outer_classname = "AssetProto";
option java_package = "com.google.cloud.asset.v1beta1";
option php_namespace = "Google\\Cloud\\Asset\\V1beta1";


// 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: "google.compute.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;
}
2 changes: 1 addition & 1 deletion asset/synth.metadata
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"updateTime": "2019-01-19T13:10:47.798665Z",
"updateTime": "2019-01-22T17:53:05.445272Z",
"sources": [
{
"generator": {
Expand Down
1 change: 1 addition & 0 deletions asset/synth.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
version,
config_path=f"/google/cloud/asset/artman_cloudasset_{version}.yaml",
artman_output_name=f"asset-{version}",
include_protos=True,
)

s.move(library, excludes=excludes)
Expand Down