From 980bbb26c838e30644bcc3de04b5fc4afc25e798 Mon Sep 17 00:00:00 2001 From: Jeff Ching Date: Tue, 5 May 2020 13:40:11 -0700 Subject: [PATCH] feat: add resource names, fix pagination settings (#33) --- .../osconfig/v1/OsConfigServiceClient.java | 894 +++++++++++++++++- .../osconfig/v1/OsConfigServiceSettings.java | 38 +- .../cloud/osconfig/v1/package-info.java | 4 +- .../v1/stub/GrpcOsConfigServiceStub.java | 39 + .../osconfig/v1/stub/OsConfigServiceStub.java | 20 + .../v1/stub/OsConfigServiceStubSettings.java | 281 +++++- .../v1/OsConfigServiceClientTest.java | 184 ++-- proto-google-cloud-os-config-v1/pom.xml | 8 + .../cloud/osconfig/v1/InstanceName.java | 204 ++++ .../cloud/osconfig/v1/OsConfigProto.java | 110 ++- .../osconfig/v1/PatchDeploymentName.java | 184 ++++ .../cloud/osconfig/v1/PatchDeployments.java | 175 ++-- .../cloud/osconfig/v1/PatchJobName.java | 182 ++++ .../google/cloud/osconfig/v1/PatchJobs.java | 256 ++--- .../google/cloud/osconfig/v1/ProjectName.java | 162 ++++ .../cloud/osconfig/v1/osconfig_service.proto | 5 + .../cloud/osconfig/v1/patch_deployments.proto | 16 +- .../google/cloud/osconfig/v1/patch_jobs.proto | 33 +- synth.metadata | 8 +- 19 files changed, 2362 insertions(+), 441 deletions(-) create mode 100644 proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/InstanceName.java create mode 100644 proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/PatchDeploymentName.java create mode 100644 proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/PatchJobName.java create mode 100644 proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/ProjectName.java diff --git a/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/OsConfigServiceClient.java b/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/OsConfigServiceClient.java index 1e34bdb7..b27f179a 100644 --- a/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/OsConfigServiceClient.java +++ b/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/OsConfigServiceClient.java @@ -15,8 +15,15 @@ */ package com.google.cloud.osconfig.v1; +import com.google.api.core.ApiFunction; +import com.google.api.core.ApiFuture; +import com.google.api.core.ApiFutures; import com.google.api.core.BetaApi; import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.paging.AbstractFixedSizeCollection; +import com.google.api.gax.paging.AbstractPage; +import com.google.api.gax.paging.AbstractPagedListResponse; +import com.google.api.gax.rpc.PageContext; import com.google.api.gax.rpc.UnaryCallable; import com.google.cloud.osconfig.v1.PatchDeployments.CreatePatchDeploymentRequest; import com.google.cloud.osconfig.v1.PatchDeployments.DeletePatchDeploymentRequest; @@ -32,10 +39,13 @@ import com.google.cloud.osconfig.v1.PatchJobs.ListPatchJobsRequest; import com.google.cloud.osconfig.v1.PatchJobs.ListPatchJobsResponse; import com.google.cloud.osconfig.v1.PatchJobs.PatchJob; +import com.google.cloud.osconfig.v1.PatchJobs.PatchJobInstanceDetails; import com.google.cloud.osconfig.v1.stub.OsConfigServiceStub; import com.google.cloud.osconfig.v1.stub.OsConfigServiceStubSettings; +import com.google.common.util.concurrent.MoreExecutors; import com.google.protobuf.Empty; import java.io.IOException; +import java.util.List; import java.util.concurrent.TimeUnit; import javax.annotation.Generated; @@ -52,8 +62,8 @@ *
  * 
  * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
- *   ExecutePatchJobRequest request = ExecutePatchJobRequest.newBuilder().build();
- *   PatchJob response = osConfigServiceClient.executePatchJob(request);
+ *   PatchJobName name = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
+ *   PatchJob response = osConfigServiceClient.getPatchJob(name);
  * }
  * 
  * 
@@ -171,7 +181,12 @@ public OsConfigServiceStub getStub() { * *

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   ExecutePatchJobRequest request = ExecutePatchJobRequest.newBuilder().build();
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   PatchInstanceFilter instanceFilter = PatchInstanceFilter.newBuilder().build();
+   *   ExecutePatchJobRequest request = ExecutePatchJobRequest.newBuilder()
+   *     .setParent(parent.toString())
+   *     .setInstanceFilter(instanceFilter)
+   *     .build();
    *   PatchJob response = osConfigServiceClient.executePatchJob(request);
    * }
    * 
@@ -191,7 +206,12 @@ public final PatchJob executePatchJob(ExecutePatchJobRequest request) { * *

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   ExecutePatchJobRequest request = ExecutePatchJobRequest.newBuilder().build();
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   PatchInstanceFilter instanceFilter = PatchInstanceFilter.newBuilder().build();
+   *   ExecutePatchJobRequest request = ExecutePatchJobRequest.newBuilder()
+   *     .setParent(parent.toString())
+   *     .setInstanceFilter(instanceFilter)
+   *     .build();
    *   ApiFuture<PatchJob> future = osConfigServiceClient.executePatchJobCallable().futureCall(request);
    *   // Do something
    *   PatchJob response = future.get();
@@ -211,7 +231,55 @@ public final UnaryCallable executePatchJobCall
    *
    * 

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   GetPatchJobRequest request = GetPatchJobRequest.newBuilder().build();
+   *   PatchJobName name = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
+   *   PatchJob response = osConfigServiceClient.getPatchJob(name);
+   * }
+   * 
+ * + * @param name Required. Name of the patch in the form `projects/*/patchJobs/*` + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final PatchJob getPatchJob(PatchJobName name) { + GetPatchJobRequest request = + GetPatchJobRequest.newBuilder().setName(name == null ? null : name.toString()).build(); + return getPatchJob(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Get the patch job. This can be used to track the progress of an ongoing patch job or review the + * details of completed jobs. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   PatchJobName name = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
+   *   PatchJob response = osConfigServiceClient.getPatchJob(name.toString());
+   * }
+   * 
+ * + * @param name Required. Name of the patch in the form `projects/*/patchJobs/*` + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final PatchJob getPatchJob(String name) { + GetPatchJobRequest request = GetPatchJobRequest.newBuilder().setName(name).build(); + return getPatchJob(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Get the patch job. This can be used to track the progress of an ongoing patch job or review the + * details of completed jobs. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   PatchJobName name = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
+   *   GetPatchJobRequest request = GetPatchJobRequest.newBuilder()
+   *     .setName(name.toString())
+   *     .build();
    *   PatchJob response = osConfigServiceClient.getPatchJob(request);
    * }
    * 
@@ -232,7 +300,10 @@ public final PatchJob getPatchJob(GetPatchJobRequest request) { * *

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   GetPatchJobRequest request = GetPatchJobRequest.newBuilder().build();
+   *   PatchJobName name = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
+   *   GetPatchJobRequest request = GetPatchJobRequest.newBuilder()
+   *     .setName(name.toString())
+   *     .build();
    *   ApiFuture<PatchJob> future = osConfigServiceClient.getPatchJobCallable().futureCall(request);
    *   // Do something
    *   PatchJob response = future.get();
@@ -251,7 +322,10 @@ public final UnaryCallable getPatchJobCallable() {
    *
    * 

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   CancelPatchJobRequest request = CancelPatchJobRequest.newBuilder().build();
+   *   PatchJobName name = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
+   *   CancelPatchJobRequest request = CancelPatchJobRequest.newBuilder()
+   *     .setName(name.toString())
+   *     .build();
    *   PatchJob response = osConfigServiceClient.cancelPatchJob(request);
    * }
    * 
@@ -271,7 +345,10 @@ public final PatchJob cancelPatchJob(CancelPatchJobRequest request) { * *

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   CancelPatchJobRequest request = CancelPatchJobRequest.newBuilder().build();
+   *   PatchJobName name = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
+   *   CancelPatchJobRequest request = CancelPatchJobRequest.newBuilder()
+   *     .setName(name.toString())
+   *     .build();
    *   ApiFuture<PatchJob> future = osConfigServiceClient.cancelPatchJobCallable().futureCall(request);
    *   // Do something
    *   PatchJob response = future.get();
@@ -290,16 +367,70 @@ public final UnaryCallable cancelPatchJobCallab
    *
    * 

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   ListPatchJobsRequest request = ListPatchJobsRequest.newBuilder().build();
-   *   ListPatchJobsResponse response = osConfigServiceClient.listPatchJobs(request);
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   for (PatchJob element : osConfigServiceClient.listPatchJobs(parent).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * 
+ * + * @param parent Required. In the form of `projects/*` + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListPatchJobsPagedResponse listPatchJobs(ProjectName parent) { + ListPatchJobsRequest request = + ListPatchJobsRequest.newBuilder() + .setParent(parent == null ? null : parent.toString()) + .build(); + return listPatchJobs(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Get a list of patch jobs. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   for (PatchJob element : osConfigServiceClient.listPatchJobs(parent.toString()).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * 
+ * + * @param parent Required. In the form of `projects/*` + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListPatchJobsPagedResponse listPatchJobs(String parent) { + ListPatchJobsRequest request = ListPatchJobsRequest.newBuilder().setParent(parent).build(); + return listPatchJobs(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Get a list of patch jobs. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   ListPatchJobsRequest request = ListPatchJobsRequest.newBuilder()
+   *     .setParent(parent.toString())
+   *     .build();
+   *   for (PatchJob element : osConfigServiceClient.listPatchJobs(request).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
    * }
    * 
* * @param request The request object containing all of the parameters for the API call. * @throws com.google.api.gax.rpc.ApiException if the remote call fails */ - public final ListPatchJobsResponse listPatchJobs(ListPatchJobsRequest request) { - return listPatchJobsCallable().call(request); + public final ListPatchJobsPagedResponse listPatchJobs(ListPatchJobsRequest request) { + return listPatchJobsPagedCallable().call(request); } // AUTO-GENERATED DOCUMENTATION AND METHOD @@ -310,10 +441,47 @@ public final ListPatchJobsResponse listPatchJobs(ListPatchJobsRequest request) { * *

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   ListPatchJobsRequest request = ListPatchJobsRequest.newBuilder().build();
-   *   ApiFuture<ListPatchJobsResponse> future = osConfigServiceClient.listPatchJobsCallable().futureCall(request);
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   ListPatchJobsRequest request = ListPatchJobsRequest.newBuilder()
+   *     .setParent(parent.toString())
+   *     .build();
+   *   ApiFuture<ListPatchJobsPagedResponse> future = osConfigServiceClient.listPatchJobsPagedCallable().futureCall(request);
    *   // Do something
-   *   ListPatchJobsResponse response = future.get();
+   *   for (PatchJob element : future.get().iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * 
+ */ + public final UnaryCallable + listPatchJobsPagedCallable() { + return stub.listPatchJobsPagedCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Get a list of patch jobs. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   ListPatchJobsRequest request = ListPatchJobsRequest.newBuilder()
+   *     .setParent(parent.toString())
+   *     .build();
+   *   while (true) {
+   *     ListPatchJobsResponse response = osConfigServiceClient.listPatchJobsCallable().call(request);
+   *     for (PatchJob element : response.getPatchJobsList()) {
+   *       // doThingsWith(element);
+   *     }
+   *     String nextPageToken = response.getNextPageToken();
+   *     if (!Strings.isNullOrEmpty(nextPageToken)) {
+   *       request = request.toBuilder().setPageToken(nextPageToken).build();
+   *     } else {
+   *       break;
+   *     }
+   *   }
    * }
    * 
*/ @@ -329,17 +497,75 @@ public final UnaryCallable listPatc * *

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   ListPatchJobInstanceDetailsRequest request = ListPatchJobInstanceDetailsRequest.newBuilder().build();
-   *   ListPatchJobInstanceDetailsResponse response = osConfigServiceClient.listPatchJobInstanceDetails(request);
+   *   PatchJobName parent = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
+   *   for (PatchJobInstanceDetails element : osConfigServiceClient.listPatchJobInstanceDetails(parent).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * 
+ * + * @param parent Required. The parent for the instances are in the form of + * `projects/*/patchJobs/*`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListPatchJobInstanceDetailsPagedResponse listPatchJobInstanceDetails( + PatchJobName parent) { + ListPatchJobInstanceDetailsRequest request = + ListPatchJobInstanceDetailsRequest.newBuilder() + .setParent(parent == null ? null : parent.toString()) + .build(); + return listPatchJobInstanceDetails(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Get a list of instance details for a given patch job. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   PatchJobName parent = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
+   *   for (PatchJobInstanceDetails element : osConfigServiceClient.listPatchJobInstanceDetails(parent.toString()).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * 
+ * + * @param parent Required. The parent for the instances are in the form of + * `projects/*/patchJobs/*`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListPatchJobInstanceDetailsPagedResponse listPatchJobInstanceDetails(String parent) { + ListPatchJobInstanceDetailsRequest request = + ListPatchJobInstanceDetailsRequest.newBuilder().setParent(parent).build(); + return listPatchJobInstanceDetails(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Get a list of instance details for a given patch job. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   PatchJobName parent = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
+   *   ListPatchJobInstanceDetailsRequest request = ListPatchJobInstanceDetailsRequest.newBuilder()
+   *     .setParent(parent.toString())
+   *     .build();
+   *   for (PatchJobInstanceDetails element : osConfigServiceClient.listPatchJobInstanceDetails(request).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
    * }
    * 
* * @param request The request object containing all of the parameters for the API call. * @throws com.google.api.gax.rpc.ApiException if the remote call fails */ - public final ListPatchJobInstanceDetailsResponse listPatchJobInstanceDetails( + public final ListPatchJobInstanceDetailsPagedResponse listPatchJobInstanceDetails( ListPatchJobInstanceDetailsRequest request) { - return listPatchJobInstanceDetailsCallable().call(request); + return listPatchJobInstanceDetailsPagedCallable().call(request); } // AUTO-GENERATED DOCUMENTATION AND METHOD @@ -350,10 +576,48 @@ public final ListPatchJobInstanceDetailsResponse listPatchJobInstanceDetails( * *

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   ListPatchJobInstanceDetailsRequest request = ListPatchJobInstanceDetailsRequest.newBuilder().build();
-   *   ApiFuture<ListPatchJobInstanceDetailsResponse> future = osConfigServiceClient.listPatchJobInstanceDetailsCallable().futureCall(request);
+   *   PatchJobName parent = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
+   *   ListPatchJobInstanceDetailsRequest request = ListPatchJobInstanceDetailsRequest.newBuilder()
+   *     .setParent(parent.toString())
+   *     .build();
+   *   ApiFuture<ListPatchJobInstanceDetailsPagedResponse> future = osConfigServiceClient.listPatchJobInstanceDetailsPagedCallable().futureCall(request);
    *   // Do something
-   *   ListPatchJobInstanceDetailsResponse response = future.get();
+   *   for (PatchJobInstanceDetails element : future.get().iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * 
+ */ + public final UnaryCallable< + ListPatchJobInstanceDetailsRequest, ListPatchJobInstanceDetailsPagedResponse> + listPatchJobInstanceDetailsPagedCallable() { + return stub.listPatchJobInstanceDetailsPagedCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Get a list of instance details for a given patch job. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   PatchJobName parent = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
+   *   ListPatchJobInstanceDetailsRequest request = ListPatchJobInstanceDetailsRequest.newBuilder()
+   *     .setParent(parent.toString())
+   *     .build();
+   *   while (true) {
+   *     ListPatchJobInstanceDetailsResponse response = osConfigServiceClient.listPatchJobInstanceDetailsCallable().call(request);
+   *     for (PatchJobInstanceDetails element : response.getPatchJobInstanceDetailsList()) {
+   *       // doThingsWith(element);
+   *     }
+   *     String nextPageToken = response.getNextPageToken();
+   *     if (!Strings.isNullOrEmpty(nextPageToken)) {
+   *       request = request.toBuilder().setPageToken(nextPageToken).build();
+   *     } else {
+   *       break;
+   *     }
+   *   }
    * }
    * 
*/ @@ -371,7 +635,86 @@ public final ListPatchJobInstanceDetailsResponse listPatchJobInstanceDetails( * *

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   CreatePatchDeploymentRequest request = CreatePatchDeploymentRequest.newBuilder().build();
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   PatchDeployment patchDeployment = PatchDeployment.newBuilder().build();
+   *   String patchDeploymentId = "";
+   *   PatchDeployment response = osConfigServiceClient.createPatchDeployment(parent, patchDeployment, patchDeploymentId);
+   * }
+   * 
+ * + * @param parent Required. The project to apply this patch deployment to in the form + * `projects/*`. + * @param patchDeployment Required. The patch deployment to create. + * @param patchDeploymentId Required. A name for the patch deployment in the project. When + * creating a name the following rules apply: * Must contain only lowercase letters, + * numbers, and hyphens. * Must start with a letter. * Must be between 1-63 + * characters. * Must end with a number or a letter. * Must be unique within the + * project. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final PatchDeployment createPatchDeployment( + ProjectName parent, PatchDeployment patchDeployment, String patchDeploymentId) { + CreatePatchDeploymentRequest request = + CreatePatchDeploymentRequest.newBuilder() + .setParent(parent == null ? null : parent.toString()) + .setPatchDeployment(patchDeployment) + .setPatchDeploymentId(patchDeploymentId) + .build(); + return createPatchDeployment(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Create an OS Config patch deployment. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   PatchDeployment patchDeployment = PatchDeployment.newBuilder().build();
+   *   String patchDeploymentId = "";
+   *   PatchDeployment response = osConfigServiceClient.createPatchDeployment(parent.toString(), patchDeployment, patchDeploymentId);
+   * }
+   * 
+ * + * @param parent Required. The project to apply this patch deployment to in the form + * `projects/*`. + * @param patchDeployment Required. The patch deployment to create. + * @param patchDeploymentId Required. A name for the patch deployment in the project. When + * creating a name the following rules apply: * Must contain only lowercase letters, + * numbers, and hyphens. * Must start with a letter. * Must be between 1-63 + * characters. * Must end with a number or a letter. * Must be unique within the + * project. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final PatchDeployment createPatchDeployment( + String parent, PatchDeployment patchDeployment, String patchDeploymentId) { + CreatePatchDeploymentRequest request = + CreatePatchDeploymentRequest.newBuilder() + .setParent(parent) + .setPatchDeployment(patchDeployment) + .setPatchDeploymentId(patchDeploymentId) + .build(); + return createPatchDeployment(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Create an OS Config patch deployment. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   String patchDeploymentId = "";
+   *   PatchDeployment patchDeployment = PatchDeployment.newBuilder().build();
+   *   CreatePatchDeploymentRequest request = CreatePatchDeploymentRequest.newBuilder()
+   *     .setParent(parent.toString())
+   *     .setPatchDeploymentId(patchDeploymentId)
+   *     .setPatchDeployment(patchDeployment)
+   *     .build();
    *   PatchDeployment response = osConfigServiceClient.createPatchDeployment(request);
    * }
    * 
@@ -391,7 +734,14 @@ public final PatchDeployment createPatchDeployment(CreatePatchDeploymentRequest * *

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   CreatePatchDeploymentRequest request = CreatePatchDeploymentRequest.newBuilder().build();
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   String patchDeploymentId = "";
+   *   PatchDeployment patchDeployment = PatchDeployment.newBuilder().build();
+   *   CreatePatchDeploymentRequest request = CreatePatchDeploymentRequest.newBuilder()
+   *     .setParent(parent.toString())
+   *     .setPatchDeploymentId(patchDeploymentId)
+   *     .setPatchDeployment(patchDeployment)
+   *     .build();
    *   ApiFuture<PatchDeployment> future = osConfigServiceClient.createPatchDeploymentCallable().futureCall(request);
    *   // Do something
    *   PatchDeployment response = future.get();
@@ -411,7 +761,58 @@ public final PatchDeployment createPatchDeployment(CreatePatchDeploymentRequest
    *
    * 

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   GetPatchDeploymentRequest request = GetPatchDeploymentRequest.newBuilder().build();
+   *   PatchDeploymentName name = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
+   *   PatchDeployment response = osConfigServiceClient.getPatchDeployment(name);
+   * }
+   * 
+ * + * @param name Required. The resource name of the patch deployment in the form + * `projects/*/patchDeployments/*`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final PatchDeployment getPatchDeployment(PatchDeploymentName name) { + GetPatchDeploymentRequest request = + GetPatchDeploymentRequest.newBuilder() + .setName(name == null ? null : name.toString()) + .build(); + return getPatchDeployment(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Get an OS Config patch deployment. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   PatchDeploymentName name = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
+   *   PatchDeployment response = osConfigServiceClient.getPatchDeployment(name.toString());
+   * }
+   * 
+ * + * @param name Required. The resource name of the patch deployment in the form + * `projects/*/patchDeployments/*`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final PatchDeployment getPatchDeployment(String name) { + GetPatchDeploymentRequest request = + GetPatchDeploymentRequest.newBuilder().setName(name).build(); + return getPatchDeployment(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Get an OS Config patch deployment. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   PatchDeploymentName name = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
+   *   GetPatchDeploymentRequest request = GetPatchDeploymentRequest.newBuilder()
+   *     .setName(name.toString())
+   *     .build();
    *   PatchDeployment response = osConfigServiceClient.getPatchDeployment(request);
    * }
    * 
@@ -431,7 +832,10 @@ public final PatchDeployment getPatchDeployment(GetPatchDeploymentRequest reques * *

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   GetPatchDeploymentRequest request = GetPatchDeploymentRequest.newBuilder().build();
+   *   PatchDeploymentName name = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
+   *   GetPatchDeploymentRequest request = GetPatchDeploymentRequest.newBuilder()
+   *     .setName(name.toString())
+   *     .build();
    *   ApiFuture<PatchDeployment> future = osConfigServiceClient.getPatchDeploymentCallable().futureCall(request);
    *   // Do something
    *   PatchDeployment response = future.get();
@@ -451,17 +855,72 @@ public final PatchDeployment getPatchDeployment(GetPatchDeploymentRequest reques
    *
    * 

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   ListPatchDeploymentsRequest request = ListPatchDeploymentsRequest.newBuilder().build();
-   *   ListPatchDeploymentsResponse response = osConfigServiceClient.listPatchDeployments(request);
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   for (PatchDeployment element : osConfigServiceClient.listPatchDeployments(parent).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * 
+ * + * @param parent Required. The resource name of the parent in the form `projects/*`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListPatchDeploymentsPagedResponse listPatchDeployments(ProjectName parent) { + ListPatchDeploymentsRequest request = + ListPatchDeploymentsRequest.newBuilder() + .setParent(parent == null ? null : parent.toString()) + .build(); + return listPatchDeployments(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Get a page of OS Config patch deployments. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   for (PatchDeployment element : osConfigServiceClient.listPatchDeployments(parent.toString()).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * 
+ * + * @param parent Required. The resource name of the parent in the form `projects/*`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListPatchDeploymentsPagedResponse listPatchDeployments(String parent) { + ListPatchDeploymentsRequest request = + ListPatchDeploymentsRequest.newBuilder().setParent(parent).build(); + return listPatchDeployments(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Get a page of OS Config patch deployments. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   ListPatchDeploymentsRequest request = ListPatchDeploymentsRequest.newBuilder()
+   *     .setParent(parent.toString())
+   *     .build();
+   *   for (PatchDeployment element : osConfigServiceClient.listPatchDeployments(request).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
    * }
    * 
* * @param request The request object containing all of the parameters for the API call. * @throws com.google.api.gax.rpc.ApiException if the remote call fails */ - public final ListPatchDeploymentsResponse listPatchDeployments( + public final ListPatchDeploymentsPagedResponse listPatchDeployments( ListPatchDeploymentsRequest request) { - return listPatchDeploymentsCallable().call(request); + return listPatchDeploymentsPagedCallable().call(request); } // AUTO-GENERATED DOCUMENTATION AND METHOD @@ -472,10 +931,47 @@ public final ListPatchDeploymentsResponse listPatchDeployments( * *

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   ListPatchDeploymentsRequest request = ListPatchDeploymentsRequest.newBuilder().build();
-   *   ApiFuture<ListPatchDeploymentsResponse> future = osConfigServiceClient.listPatchDeploymentsCallable().futureCall(request);
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   ListPatchDeploymentsRequest request = ListPatchDeploymentsRequest.newBuilder()
+   *     .setParent(parent.toString())
+   *     .build();
+   *   ApiFuture<ListPatchDeploymentsPagedResponse> future = osConfigServiceClient.listPatchDeploymentsPagedCallable().futureCall(request);
    *   // Do something
-   *   ListPatchDeploymentsResponse response = future.get();
+   *   for (PatchDeployment element : future.get().iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * 
+ */ + public final UnaryCallable + listPatchDeploymentsPagedCallable() { + return stub.listPatchDeploymentsPagedCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Get a page of OS Config patch deployments. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   ListPatchDeploymentsRequest request = ListPatchDeploymentsRequest.newBuilder()
+   *     .setParent(parent.toString())
+   *     .build();
+   *   while (true) {
+   *     ListPatchDeploymentsResponse response = osConfigServiceClient.listPatchDeploymentsCallable().call(request);
+   *     for (PatchDeployment element : response.getPatchDeploymentsList()) {
+   *       // doThingsWith(element);
+   *     }
+   *     String nextPageToken = response.getNextPageToken();
+   *     if (!Strings.isNullOrEmpty(nextPageToken)) {
+   *       request = request.toBuilder().setPageToken(nextPageToken).build();
+   *     } else {
+   *       break;
+   *     }
+   *   }
    * }
    * 
*/ @@ -492,7 +988,58 @@ public final ListPatchDeploymentsResponse listPatchDeployments( * *

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   DeletePatchDeploymentRequest request = DeletePatchDeploymentRequest.newBuilder().build();
+   *   PatchDeploymentName name = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
+   *   osConfigServiceClient.deletePatchDeployment(name);
+   * }
+   * 
+ * + * @param name Required. The resource name of the patch deployment in the form + * `projects/*/patchDeployments/*`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void deletePatchDeployment(PatchDeploymentName name) { + DeletePatchDeploymentRequest request = + DeletePatchDeploymentRequest.newBuilder() + .setName(name == null ? null : name.toString()) + .build(); + deletePatchDeployment(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Delete an OS Config patch deployment. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   PatchDeploymentName name = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
+   *   osConfigServiceClient.deletePatchDeployment(name.toString());
+   * }
+   * 
+ * + * @param name Required. The resource name of the patch deployment in the form + * `projects/*/patchDeployments/*`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void deletePatchDeployment(String name) { + DeletePatchDeploymentRequest request = + DeletePatchDeploymentRequest.newBuilder().setName(name).build(); + deletePatchDeployment(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Delete an OS Config patch deployment. + * + *

Sample code: + * + *


+   * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
+   *   PatchDeploymentName name = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
+   *   DeletePatchDeploymentRequest request = DeletePatchDeploymentRequest.newBuilder()
+   *     .setName(name.toString())
+   *     .build();
    *   osConfigServiceClient.deletePatchDeployment(request);
    * }
    * 
@@ -512,7 +1059,10 @@ public final void deletePatchDeployment(DeletePatchDeploymentRequest request) { * *

    * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
-   *   DeletePatchDeploymentRequest request = DeletePatchDeploymentRequest.newBuilder().build();
+   *   PatchDeploymentName name = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
+   *   DeletePatchDeploymentRequest request = DeletePatchDeploymentRequest.newBuilder()
+   *     .setName(name.toString())
+   *     .build();
    *   ApiFuture<Void> future = osConfigServiceClient.deletePatchDeploymentCallable().futureCall(request);
    *   // Do something
    *   future.get();
@@ -552,4 +1102,278 @@ public void shutdownNow() {
   public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException {
     return stub.awaitTermination(duration, unit);
   }
+
+  public static class ListPatchJobsPagedResponse
+      extends AbstractPagedListResponse<
+          ListPatchJobsRequest,
+          ListPatchJobsResponse,
+          PatchJob,
+          ListPatchJobsPage,
+          ListPatchJobsFixedSizeCollection> {
+
+    public static ApiFuture createAsync(
+        PageContext context,
+        ApiFuture futureResponse) {
+      ApiFuture futurePage =
+          ListPatchJobsPage.createEmptyPage().createPageAsync(context, futureResponse);
+      return ApiFutures.transform(
+          futurePage,
+          new ApiFunction() {
+            @Override
+            public ListPatchJobsPagedResponse apply(ListPatchJobsPage input) {
+              return new ListPatchJobsPagedResponse(input);
+            }
+          },
+          MoreExecutors.directExecutor());
+    }
+
+    private ListPatchJobsPagedResponse(ListPatchJobsPage page) {
+      super(page, ListPatchJobsFixedSizeCollection.createEmptyCollection());
+    }
+  }
+
+  public static class ListPatchJobsPage
+      extends AbstractPage<
+          ListPatchJobsRequest, ListPatchJobsResponse, PatchJob, ListPatchJobsPage> {
+
+    private ListPatchJobsPage(
+        PageContext context,
+        ListPatchJobsResponse response) {
+      super(context, response);
+    }
+
+    private static ListPatchJobsPage createEmptyPage() {
+      return new ListPatchJobsPage(null, null);
+    }
+
+    @Override
+    protected ListPatchJobsPage createPage(
+        PageContext context,
+        ListPatchJobsResponse response) {
+      return new ListPatchJobsPage(context, response);
+    }
+
+    @Override
+    public ApiFuture createPageAsync(
+        PageContext context,
+        ApiFuture futureResponse) {
+      return super.createPageAsync(context, futureResponse);
+    }
+  }
+
+  public static class ListPatchJobsFixedSizeCollection
+      extends AbstractFixedSizeCollection<
+          ListPatchJobsRequest,
+          ListPatchJobsResponse,
+          PatchJob,
+          ListPatchJobsPage,
+          ListPatchJobsFixedSizeCollection> {
+
+    private ListPatchJobsFixedSizeCollection(List pages, int collectionSize) {
+      super(pages, collectionSize);
+    }
+
+    private static ListPatchJobsFixedSizeCollection createEmptyCollection() {
+      return new ListPatchJobsFixedSizeCollection(null, 0);
+    }
+
+    @Override
+    protected ListPatchJobsFixedSizeCollection createCollection(
+        List pages, int collectionSize) {
+      return new ListPatchJobsFixedSizeCollection(pages, collectionSize);
+    }
+  }
+
+  public static class ListPatchJobInstanceDetailsPagedResponse
+      extends AbstractPagedListResponse<
+          ListPatchJobInstanceDetailsRequest,
+          ListPatchJobInstanceDetailsResponse,
+          PatchJobInstanceDetails,
+          ListPatchJobInstanceDetailsPage,
+          ListPatchJobInstanceDetailsFixedSizeCollection> {
+
+    public static ApiFuture createAsync(
+        PageContext<
+                ListPatchJobInstanceDetailsRequest,
+                ListPatchJobInstanceDetailsResponse,
+                PatchJobInstanceDetails>
+            context,
+        ApiFuture futureResponse) {
+      ApiFuture futurePage =
+          ListPatchJobInstanceDetailsPage.createEmptyPage()
+              .createPageAsync(context, futureResponse);
+      return ApiFutures.transform(
+          futurePage,
+          new ApiFunction<
+              ListPatchJobInstanceDetailsPage, ListPatchJobInstanceDetailsPagedResponse>() {
+            @Override
+            public ListPatchJobInstanceDetailsPagedResponse apply(
+                ListPatchJobInstanceDetailsPage input) {
+              return new ListPatchJobInstanceDetailsPagedResponse(input);
+            }
+          },
+          MoreExecutors.directExecutor());
+    }
+
+    private ListPatchJobInstanceDetailsPagedResponse(ListPatchJobInstanceDetailsPage page) {
+      super(page, ListPatchJobInstanceDetailsFixedSizeCollection.createEmptyCollection());
+    }
+  }
+
+  public static class ListPatchJobInstanceDetailsPage
+      extends AbstractPage<
+          ListPatchJobInstanceDetailsRequest,
+          ListPatchJobInstanceDetailsResponse,
+          PatchJobInstanceDetails,
+          ListPatchJobInstanceDetailsPage> {
+
+    private ListPatchJobInstanceDetailsPage(
+        PageContext<
+                ListPatchJobInstanceDetailsRequest,
+                ListPatchJobInstanceDetailsResponse,
+                PatchJobInstanceDetails>
+            context,
+        ListPatchJobInstanceDetailsResponse response) {
+      super(context, response);
+    }
+
+    private static ListPatchJobInstanceDetailsPage createEmptyPage() {
+      return new ListPatchJobInstanceDetailsPage(null, null);
+    }
+
+    @Override
+    protected ListPatchJobInstanceDetailsPage createPage(
+        PageContext<
+                ListPatchJobInstanceDetailsRequest,
+                ListPatchJobInstanceDetailsResponse,
+                PatchJobInstanceDetails>
+            context,
+        ListPatchJobInstanceDetailsResponse response) {
+      return new ListPatchJobInstanceDetailsPage(context, response);
+    }
+
+    @Override
+    public ApiFuture createPageAsync(
+        PageContext<
+                ListPatchJobInstanceDetailsRequest,
+                ListPatchJobInstanceDetailsResponse,
+                PatchJobInstanceDetails>
+            context,
+        ApiFuture futureResponse) {
+      return super.createPageAsync(context, futureResponse);
+    }
+  }
+
+  public static class ListPatchJobInstanceDetailsFixedSizeCollection
+      extends AbstractFixedSizeCollection<
+          ListPatchJobInstanceDetailsRequest,
+          ListPatchJobInstanceDetailsResponse,
+          PatchJobInstanceDetails,
+          ListPatchJobInstanceDetailsPage,
+          ListPatchJobInstanceDetailsFixedSizeCollection> {
+
+    private ListPatchJobInstanceDetailsFixedSizeCollection(
+        List pages, int collectionSize) {
+      super(pages, collectionSize);
+    }
+
+    private static ListPatchJobInstanceDetailsFixedSizeCollection createEmptyCollection() {
+      return new ListPatchJobInstanceDetailsFixedSizeCollection(null, 0);
+    }
+
+    @Override
+    protected ListPatchJobInstanceDetailsFixedSizeCollection createCollection(
+        List pages, int collectionSize) {
+      return new ListPatchJobInstanceDetailsFixedSizeCollection(pages, collectionSize);
+    }
+  }
+
+  public static class ListPatchDeploymentsPagedResponse
+      extends AbstractPagedListResponse<
+          ListPatchDeploymentsRequest,
+          ListPatchDeploymentsResponse,
+          PatchDeployment,
+          ListPatchDeploymentsPage,
+          ListPatchDeploymentsFixedSizeCollection> {
+
+    public static ApiFuture createAsync(
+        PageContext
+            context,
+        ApiFuture futureResponse) {
+      ApiFuture futurePage =
+          ListPatchDeploymentsPage.createEmptyPage().createPageAsync(context, futureResponse);
+      return ApiFutures.transform(
+          futurePage,
+          new ApiFunction() {
+            @Override
+            public ListPatchDeploymentsPagedResponse apply(ListPatchDeploymentsPage input) {
+              return new ListPatchDeploymentsPagedResponse(input);
+            }
+          },
+          MoreExecutors.directExecutor());
+    }
+
+    private ListPatchDeploymentsPagedResponse(ListPatchDeploymentsPage page) {
+      super(page, ListPatchDeploymentsFixedSizeCollection.createEmptyCollection());
+    }
+  }
+
+  public static class ListPatchDeploymentsPage
+      extends AbstractPage<
+          ListPatchDeploymentsRequest,
+          ListPatchDeploymentsResponse,
+          PatchDeployment,
+          ListPatchDeploymentsPage> {
+
+    private ListPatchDeploymentsPage(
+        PageContext
+            context,
+        ListPatchDeploymentsResponse response) {
+      super(context, response);
+    }
+
+    private static ListPatchDeploymentsPage createEmptyPage() {
+      return new ListPatchDeploymentsPage(null, null);
+    }
+
+    @Override
+    protected ListPatchDeploymentsPage createPage(
+        PageContext
+            context,
+        ListPatchDeploymentsResponse response) {
+      return new ListPatchDeploymentsPage(context, response);
+    }
+
+    @Override
+    public ApiFuture createPageAsync(
+        PageContext
+            context,
+        ApiFuture futureResponse) {
+      return super.createPageAsync(context, futureResponse);
+    }
+  }
+
+  public static class ListPatchDeploymentsFixedSizeCollection
+      extends AbstractFixedSizeCollection<
+          ListPatchDeploymentsRequest,
+          ListPatchDeploymentsResponse,
+          PatchDeployment,
+          ListPatchDeploymentsPage,
+          ListPatchDeploymentsFixedSizeCollection> {
+
+    private ListPatchDeploymentsFixedSizeCollection(
+        List pages, int collectionSize) {
+      super(pages, collectionSize);
+    }
+
+    private static ListPatchDeploymentsFixedSizeCollection createEmptyCollection() {
+      return new ListPatchDeploymentsFixedSizeCollection(null, 0);
+    }
+
+    @Override
+    protected ListPatchDeploymentsFixedSizeCollection createCollection(
+        List pages, int collectionSize) {
+      return new ListPatchDeploymentsFixedSizeCollection(pages, collectionSize);
+    }
+  }
 }
diff --git a/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/OsConfigServiceSettings.java b/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/OsConfigServiceSettings.java
index f53fab0d..8ad5304c 100644
--- a/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/OsConfigServiceSettings.java
+++ b/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/OsConfigServiceSettings.java
@@ -15,6 +15,10 @@
  */
 package com.google.cloud.osconfig.v1;
 
+import static com.google.cloud.osconfig.v1.OsConfigServiceClient.ListPatchDeploymentsPagedResponse;
+import static com.google.cloud.osconfig.v1.OsConfigServiceClient.ListPatchJobInstanceDetailsPagedResponse;
+import static com.google.cloud.osconfig.v1.OsConfigServiceClient.ListPatchJobsPagedResponse;
+
 import com.google.api.core.ApiFunction;
 import com.google.api.core.BetaApi;
 import com.google.api.gax.core.GoogleCredentialsProvider;
@@ -23,6 +27,7 @@
 import com.google.api.gax.rpc.ApiClientHeaderProvider;
 import com.google.api.gax.rpc.ClientContext;
 import com.google.api.gax.rpc.ClientSettings;
+import com.google.api.gax.rpc.PagedCallSettings;
 import com.google.api.gax.rpc.TransportChannelProvider;
 import com.google.api.gax.rpc.UnaryCallSettings;
 import com.google.cloud.osconfig.v1.PatchDeployments.CreatePatchDeploymentRequest;
@@ -60,16 +65,16 @@
  * 

The builder of this class is recursive, so contained classes are themselves builders. When * build() is called, the tree of builders is called to create the complete settings object. * - *

For example, to set the total timeout of executePatchJob to 30 seconds: + *

For example, to set the total timeout of getPatchJob to 30 seconds: * *

  * 
  * OsConfigServiceSettings.Builder osConfigServiceSettingsBuilder =
  *     OsConfigServiceSettings.newBuilder();
  * osConfigServiceSettingsBuilder
- *     .executePatchJobSettings()
+ *     .getPatchJobSettings()
  *     .setRetrySettings(
- *         osConfigServiceSettingsBuilder.executePatchJobSettings().getRetrySettings().toBuilder()
+ *         osConfigServiceSettingsBuilder.getPatchJobSettings().getRetrySettings().toBuilder()
  *             .setTotalTimeout(Duration.ofSeconds(30))
  *             .build());
  * OsConfigServiceSettings osConfigServiceSettings = osConfigServiceSettingsBuilder.build();
@@ -95,12 +100,16 @@ public UnaryCallSettings cancelPatchJobSettings
   }
 
   /** Returns the object with the settings used for calls to listPatchJobs. */
-  public UnaryCallSettings listPatchJobsSettings() {
+  public PagedCallSettings
+      listPatchJobsSettings() {
     return ((OsConfigServiceStubSettings) getStubSettings()).listPatchJobsSettings();
   }
 
   /** Returns the object with the settings used for calls to listPatchJobInstanceDetails. */
-  public UnaryCallSettings
+  public PagedCallSettings<
+          ListPatchJobInstanceDetailsRequest,
+          ListPatchJobInstanceDetailsResponse,
+          ListPatchJobInstanceDetailsPagedResponse>
       listPatchJobInstanceDetailsSettings() {
     return ((OsConfigServiceStubSettings) getStubSettings()).listPatchJobInstanceDetailsSettings();
   }
@@ -118,7 +127,10 @@ public UnaryCallSettings listPatchJ
   }
 
   /** Returns the object with the settings used for calls to listPatchDeployments. */
-  public UnaryCallSettings
+  public PagedCallSettings<
+          ListPatchDeploymentsRequest,
+          ListPatchDeploymentsResponse,
+          ListPatchDeploymentsPagedResponse>
       listPatchDeploymentsSettings() {
     return ((OsConfigServiceStubSettings) getStubSettings()).listPatchDeploymentsSettings();
   }
@@ -241,14 +253,17 @@ public UnaryCallSettings.Builder cancelPatchJob
     }
 
     /** Returns the builder for the settings used for calls to listPatchJobs. */
-    public UnaryCallSettings.Builder
+    public PagedCallSettings.Builder<
+            ListPatchJobsRequest, ListPatchJobsResponse, ListPatchJobsPagedResponse>
         listPatchJobsSettings() {
       return getStubSettingsBuilder().listPatchJobsSettings();
     }
 
     /** Returns the builder for the settings used for calls to listPatchJobInstanceDetails. */
-    public UnaryCallSettings.Builder<
-            ListPatchJobInstanceDetailsRequest, ListPatchJobInstanceDetailsResponse>
+    public PagedCallSettings.Builder<
+            ListPatchJobInstanceDetailsRequest,
+            ListPatchJobInstanceDetailsResponse,
+            ListPatchJobInstanceDetailsPagedResponse>
         listPatchJobInstanceDetailsSettings() {
       return getStubSettingsBuilder().listPatchJobInstanceDetailsSettings();
     }
@@ -266,7 +281,10 @@ public UnaryCallSettings.Builder cancelPatchJob
     }
 
     /** Returns the builder for the settings used for calls to listPatchDeployments. */
-    public UnaryCallSettings.Builder
+    public PagedCallSettings.Builder<
+            ListPatchDeploymentsRequest,
+            ListPatchDeploymentsResponse,
+            ListPatchDeploymentsPagedResponse>
         listPatchDeploymentsSettings() {
       return getStubSettingsBuilder().listPatchDeploymentsSettings();
     }
diff --git a/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/package-info.java b/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/package-info.java
index 4e797fdf..57e71b31 100644
--- a/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/package-info.java
+++ b/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/package-info.java
@@ -31,8 +31,8 @@
  * 
  * 
  * try (OsConfigServiceClient osConfigServiceClient = OsConfigServiceClient.create()) {
- *   ExecutePatchJobRequest request = ExecutePatchJobRequest.newBuilder().build();
- *   PatchJob response = osConfigServiceClient.executePatchJob(request);
+ *   PatchJobName name = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
+ *   PatchJob response = osConfigServiceClient.getPatchJob(name);
  * }
  * 
  * 
diff --git a/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/stub/GrpcOsConfigServiceStub.java b/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/stub/GrpcOsConfigServiceStub.java index 5b7d6d41..f42ba237 100644 --- a/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/stub/GrpcOsConfigServiceStub.java +++ b/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/stub/GrpcOsConfigServiceStub.java @@ -15,6 +15,10 @@ */ package com.google.cloud.osconfig.v1.stub; +import static com.google.cloud.osconfig.v1.OsConfigServiceClient.ListPatchDeploymentsPagedResponse; +import static com.google.cloud.osconfig.v1.OsConfigServiceClient.ListPatchJobInstanceDetailsPagedResponse; +import static com.google.cloud.osconfig.v1.OsConfigServiceClient.ListPatchJobsPagedResponse; + import com.google.api.core.BetaApi; import com.google.api.gax.core.BackgroundResource; import com.google.api.gax.core.BackgroundResourceAggregation; @@ -148,15 +152,22 @@ public class GrpcOsConfigServiceStub extends OsConfigServiceStub { private final UnaryCallable getPatchJobCallable; private final UnaryCallable cancelPatchJobCallable; private final UnaryCallable listPatchJobsCallable; + private final UnaryCallable + listPatchJobsPagedCallable; private final UnaryCallable< ListPatchJobInstanceDetailsRequest, ListPatchJobInstanceDetailsResponse> listPatchJobInstanceDetailsCallable; + private final UnaryCallable< + ListPatchJobInstanceDetailsRequest, ListPatchJobInstanceDetailsPagedResponse> + listPatchJobInstanceDetailsPagedCallable; private final UnaryCallable createPatchDeploymentCallable; private final UnaryCallable getPatchDeploymentCallable; private final UnaryCallable listPatchDeploymentsCallable; + private final UnaryCallable + listPatchDeploymentsPagedCallable; private final UnaryCallable deletePatchDeploymentCallable; private final GrpcStubCallableFactory callableFactory; @@ -337,11 +348,19 @@ public Map extract(DeletePatchDeploymentRequest request) { this.listPatchJobsCallable = callableFactory.createUnaryCallable( listPatchJobsTransportSettings, settings.listPatchJobsSettings(), clientContext); + this.listPatchJobsPagedCallable = + callableFactory.createPagedCallable( + listPatchJobsTransportSettings, settings.listPatchJobsSettings(), clientContext); this.listPatchJobInstanceDetailsCallable = callableFactory.createUnaryCallable( listPatchJobInstanceDetailsTransportSettings, settings.listPatchJobInstanceDetailsSettings(), clientContext); + this.listPatchJobInstanceDetailsPagedCallable = + callableFactory.createPagedCallable( + listPatchJobInstanceDetailsTransportSettings, + settings.listPatchJobInstanceDetailsSettings(), + clientContext); this.createPatchDeploymentCallable = callableFactory.createUnaryCallable( createPatchDeploymentTransportSettings, @@ -357,6 +376,11 @@ public Map extract(DeletePatchDeploymentRequest request) { listPatchDeploymentsTransportSettings, settings.listPatchDeploymentsSettings(), clientContext); + this.listPatchDeploymentsPagedCallable = + callableFactory.createPagedCallable( + listPatchDeploymentsTransportSettings, + settings.listPatchDeploymentsSettings(), + clientContext); this.deletePatchDeploymentCallable = callableFactory.createUnaryCallable( deletePatchDeploymentTransportSettings, @@ -378,10 +402,20 @@ public UnaryCallable cancelPatchJobCallable() { return cancelPatchJobCallable; } + public UnaryCallable + listPatchJobsPagedCallable() { + return listPatchJobsPagedCallable; + } + public UnaryCallable listPatchJobsCallable() { return listPatchJobsCallable; } + public UnaryCallable + listPatchJobInstanceDetailsPagedCallable() { + return listPatchJobInstanceDetailsPagedCallable; + } + public UnaryCallable listPatchJobInstanceDetailsCallable() { return listPatchJobInstanceDetailsCallable; @@ -396,6 +430,11 @@ public UnaryCallable getPatchDeploym return getPatchDeploymentCallable; } + public UnaryCallable + listPatchDeploymentsPagedCallable() { + return listPatchDeploymentsPagedCallable; + } + public UnaryCallable listPatchDeploymentsCallable() { return listPatchDeploymentsCallable; diff --git a/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/stub/OsConfigServiceStub.java b/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/stub/OsConfigServiceStub.java index f176cbd6..1037f5ca 100644 --- a/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/stub/OsConfigServiceStub.java +++ b/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/stub/OsConfigServiceStub.java @@ -15,6 +15,10 @@ */ package com.google.cloud.osconfig.v1.stub; +import static com.google.cloud.osconfig.v1.OsConfigServiceClient.ListPatchDeploymentsPagedResponse; +import static com.google.cloud.osconfig.v1.OsConfigServiceClient.ListPatchJobInstanceDetailsPagedResponse; +import static com.google.cloud.osconfig.v1.OsConfigServiceClient.ListPatchJobsPagedResponse; + import com.google.api.core.BetaApi; import com.google.api.gax.core.BackgroundResource; import com.google.api.gax.rpc.UnaryCallable; @@ -57,10 +61,21 @@ public UnaryCallable cancelPatchJobCallable() { throw new UnsupportedOperationException("Not implemented: cancelPatchJobCallable()"); } + public UnaryCallable + listPatchJobsPagedCallable() { + throw new UnsupportedOperationException("Not implemented: listPatchJobsPagedCallable()"); + } + public UnaryCallable listPatchJobsCallable() { throw new UnsupportedOperationException("Not implemented: listPatchJobsCallable()"); } + public UnaryCallable + listPatchJobInstanceDetailsPagedCallable() { + throw new UnsupportedOperationException( + "Not implemented: listPatchJobInstanceDetailsPagedCallable()"); + } + public UnaryCallable listPatchJobInstanceDetailsCallable() { throw new UnsupportedOperationException( @@ -76,6 +91,11 @@ public UnaryCallable getPatchDeploym throw new UnsupportedOperationException("Not implemented: getPatchDeploymentCallable()"); } + public UnaryCallable + listPatchDeploymentsPagedCallable() { + throw new UnsupportedOperationException("Not implemented: listPatchDeploymentsPagedCallable()"); + } + public UnaryCallable listPatchDeploymentsCallable() { throw new UnsupportedOperationException("Not implemented: listPatchDeploymentsCallable()"); diff --git a/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/stub/OsConfigServiceStubSettings.java b/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/stub/OsConfigServiceStubSettings.java index d6bb4f84..d734fb4c 100644 --- a/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/stub/OsConfigServiceStubSettings.java +++ b/google-cloud-os-config/src/main/java/com/google/cloud/osconfig/v1/stub/OsConfigServiceStubSettings.java @@ -15,7 +15,12 @@ */ package com.google.cloud.osconfig.v1.stub; +import static com.google.cloud.osconfig.v1.OsConfigServiceClient.ListPatchDeploymentsPagedResponse; +import static com.google.cloud.osconfig.v1.OsConfigServiceClient.ListPatchJobInstanceDetailsPagedResponse; +import static com.google.cloud.osconfig.v1.OsConfigServiceClient.ListPatchJobsPagedResponse; + import com.google.api.core.ApiFunction; +import com.google.api.core.ApiFuture; import com.google.api.core.BetaApi; import com.google.api.gax.core.GaxProperties; import com.google.api.gax.core.GoogleCredentialsProvider; @@ -24,12 +29,18 @@ import com.google.api.gax.grpc.GrpcTransportChannel; import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; import com.google.api.gax.retrying.RetrySettings; +import com.google.api.gax.rpc.ApiCallContext; import com.google.api.gax.rpc.ApiClientHeaderProvider; import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.PageContext; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.PagedListDescriptor; +import com.google.api.gax.rpc.PagedListResponseFactory; import com.google.api.gax.rpc.StatusCode; import com.google.api.gax.rpc.StubSettings; import com.google.api.gax.rpc.TransportChannelProvider; import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.api.gax.rpc.UnaryCallable; import com.google.cloud.osconfig.v1.PatchDeployments.CreatePatchDeploymentRequest; import com.google.cloud.osconfig.v1.PatchDeployments.DeletePatchDeploymentRequest; import com.google.cloud.osconfig.v1.PatchDeployments.GetPatchDeploymentRequest; @@ -44,6 +55,7 @@ import com.google.cloud.osconfig.v1.PatchJobs.ListPatchJobsRequest; import com.google.cloud.osconfig.v1.PatchJobs.ListPatchJobsResponse; import com.google.cloud.osconfig.v1.PatchJobs.PatchJob; +import com.google.cloud.osconfig.v1.PatchJobs.PatchJobInstanceDetails; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -69,16 +81,16 @@ *

The builder of this class is recursive, so contained classes are themselves builders. When * build() is called, the tree of builders is called to create the complete settings object. * - *

For example, to set the total timeout of executePatchJob to 30 seconds: + *

For example, to set the total timeout of getPatchJob to 30 seconds: * *

  * 
  * OsConfigServiceStubSettings.Builder osConfigServiceSettingsBuilder =
  *     OsConfigServiceStubSettings.newBuilder();
  * osConfigServiceSettingsBuilder
- *     .executePatchJobSettings()
+ *     .getPatchJobSettings()
  *     .setRetrySettings(
- *         osConfigServiceSettingsBuilder.executePatchJobSettings().getRetrySettings().toBuilder()
+ *         osConfigServiceSettingsBuilder.getPatchJobSettings().getRetrySettings().toBuilder()
  *             .setTotalTimeout(Duration.ofSeconds(30))
  *             .build());
  * OsConfigServiceStubSettings osConfigServiceSettings = osConfigServiceSettingsBuilder.build();
@@ -95,16 +107,22 @@ public class OsConfigServiceStubSettings extends StubSettings executePatchJobSettings;
   private final UnaryCallSettings getPatchJobSettings;
   private final UnaryCallSettings cancelPatchJobSettings;
-  private final UnaryCallSettings
+  private final PagedCallSettings<
+          ListPatchJobsRequest, ListPatchJobsResponse, ListPatchJobsPagedResponse>
       listPatchJobsSettings;
-  private final UnaryCallSettings<
-          ListPatchJobInstanceDetailsRequest, ListPatchJobInstanceDetailsResponse>
+  private final PagedCallSettings<
+          ListPatchJobInstanceDetailsRequest,
+          ListPatchJobInstanceDetailsResponse,
+          ListPatchJobInstanceDetailsPagedResponse>
       listPatchJobInstanceDetailsSettings;
   private final UnaryCallSettings
       createPatchDeploymentSettings;
   private final UnaryCallSettings
       getPatchDeploymentSettings;
-  private final UnaryCallSettings
+  private final PagedCallSettings<
+          ListPatchDeploymentsRequest,
+          ListPatchDeploymentsResponse,
+          ListPatchDeploymentsPagedResponse>
       listPatchDeploymentsSettings;
   private final UnaryCallSettings
       deletePatchDeploymentSettings;
@@ -125,12 +143,16 @@ public UnaryCallSettings cancelPatchJobSettings
   }
 
   /** Returns the object with the settings used for calls to listPatchJobs. */
-  public UnaryCallSettings listPatchJobsSettings() {
+  public PagedCallSettings
+      listPatchJobsSettings() {
     return listPatchJobsSettings;
   }
 
   /** Returns the object with the settings used for calls to listPatchJobInstanceDetails. */
-  public UnaryCallSettings
+  public PagedCallSettings<
+          ListPatchJobInstanceDetailsRequest,
+          ListPatchJobInstanceDetailsResponse,
+          ListPatchJobInstanceDetailsPagedResponse>
       listPatchJobInstanceDetailsSettings() {
     return listPatchJobInstanceDetailsSettings;
   }
@@ -148,7 +170,10 @@ public UnaryCallSettings listPatchJ
   }
 
   /** Returns the object with the settings used for calls to listPatchDeployments. */
-  public UnaryCallSettings
+  public PagedCallSettings<
+          ListPatchDeploymentsRequest,
+          ListPatchDeploymentsResponse,
+          ListPatchDeploymentsPagedResponse>
       listPatchDeploymentsSettings() {
     return listPatchDeploymentsSettings;
   }
@@ -239,6 +264,205 @@ protected OsConfigServiceStubSettings(Builder settingsBuilder) throws IOExceptio
     deletePatchDeploymentSettings = settingsBuilder.deletePatchDeploymentSettings().build();
   }
 
+  private static final PagedListDescriptor
+      LIST_PATCH_JOBS_PAGE_STR_DESC =
+          new PagedListDescriptor() {
+            @Override
+            public String emptyToken() {
+              return "";
+            }
+
+            @Override
+            public ListPatchJobsRequest injectToken(ListPatchJobsRequest payload, String token) {
+              return ListPatchJobsRequest.newBuilder(payload).setPageToken(token).build();
+            }
+
+            @Override
+            public ListPatchJobsRequest injectPageSize(ListPatchJobsRequest payload, int pageSize) {
+              return ListPatchJobsRequest.newBuilder(payload).setPageSize(pageSize).build();
+            }
+
+            @Override
+            public Integer extractPageSize(ListPatchJobsRequest payload) {
+              return payload.getPageSize();
+            }
+
+            @Override
+            public String extractNextToken(ListPatchJobsResponse payload) {
+              return payload.getNextPageToken();
+            }
+
+            @Override
+            public Iterable extractResources(ListPatchJobsResponse payload) {
+              return payload.getPatchJobsList() != null
+                  ? payload.getPatchJobsList()
+                  : ImmutableList.of();
+            }
+          };
+
+  private static final PagedListDescriptor<
+          ListPatchJobInstanceDetailsRequest,
+          ListPatchJobInstanceDetailsResponse,
+          PatchJobInstanceDetails>
+      LIST_PATCH_JOB_INSTANCE_DETAILS_PAGE_STR_DESC =
+          new PagedListDescriptor<
+              ListPatchJobInstanceDetailsRequest,
+              ListPatchJobInstanceDetailsResponse,
+              PatchJobInstanceDetails>() {
+            @Override
+            public String emptyToken() {
+              return "";
+            }
+
+            @Override
+            public ListPatchJobInstanceDetailsRequest injectToken(
+                ListPatchJobInstanceDetailsRequest payload, String token) {
+              return ListPatchJobInstanceDetailsRequest.newBuilder(payload)
+                  .setPageToken(token)
+                  .build();
+            }
+
+            @Override
+            public ListPatchJobInstanceDetailsRequest injectPageSize(
+                ListPatchJobInstanceDetailsRequest payload, int pageSize) {
+              return ListPatchJobInstanceDetailsRequest.newBuilder(payload)
+                  .setPageSize(pageSize)
+                  .build();
+            }
+
+            @Override
+            public Integer extractPageSize(ListPatchJobInstanceDetailsRequest payload) {
+              return payload.getPageSize();
+            }
+
+            @Override
+            public String extractNextToken(ListPatchJobInstanceDetailsResponse payload) {
+              return payload.getNextPageToken();
+            }
+
+            @Override
+            public Iterable extractResources(
+                ListPatchJobInstanceDetailsResponse payload) {
+              return payload.getPatchJobInstanceDetailsList() != null
+                  ? payload.getPatchJobInstanceDetailsList()
+                  : ImmutableList.of();
+            }
+          };
+
+  private static final PagedListDescriptor<
+          ListPatchDeploymentsRequest, ListPatchDeploymentsResponse, PatchDeployment>
+      LIST_PATCH_DEPLOYMENTS_PAGE_STR_DESC =
+          new PagedListDescriptor<
+              ListPatchDeploymentsRequest, ListPatchDeploymentsResponse, PatchDeployment>() {
+            @Override
+            public String emptyToken() {
+              return "";
+            }
+
+            @Override
+            public ListPatchDeploymentsRequest injectToken(
+                ListPatchDeploymentsRequest payload, String token) {
+              return ListPatchDeploymentsRequest.newBuilder(payload).setPageToken(token).build();
+            }
+
+            @Override
+            public ListPatchDeploymentsRequest injectPageSize(
+                ListPatchDeploymentsRequest payload, int pageSize) {
+              return ListPatchDeploymentsRequest.newBuilder(payload).setPageSize(pageSize).build();
+            }
+
+            @Override
+            public Integer extractPageSize(ListPatchDeploymentsRequest payload) {
+              return payload.getPageSize();
+            }
+
+            @Override
+            public String extractNextToken(ListPatchDeploymentsResponse payload) {
+              return payload.getNextPageToken();
+            }
+
+            @Override
+            public Iterable extractResources(
+                ListPatchDeploymentsResponse payload) {
+              return payload.getPatchDeploymentsList() != null
+                  ? payload.getPatchDeploymentsList()
+                  : ImmutableList.of();
+            }
+          };
+
+  private static final PagedListResponseFactory<
+          ListPatchJobsRequest, ListPatchJobsResponse, ListPatchJobsPagedResponse>
+      LIST_PATCH_JOBS_PAGE_STR_FACT =
+          new PagedListResponseFactory<
+              ListPatchJobsRequest, ListPatchJobsResponse, ListPatchJobsPagedResponse>() {
+            @Override
+            public ApiFuture getFuturePagedResponse(
+                UnaryCallable callable,
+                ListPatchJobsRequest request,
+                ApiCallContext context,
+                ApiFuture futureResponse) {
+              PageContext pageContext =
+                  PageContext.create(callable, LIST_PATCH_JOBS_PAGE_STR_DESC, request, context);
+              return ListPatchJobsPagedResponse.createAsync(pageContext, futureResponse);
+            }
+          };
+
+  private static final PagedListResponseFactory<
+          ListPatchJobInstanceDetailsRequest,
+          ListPatchJobInstanceDetailsResponse,
+          ListPatchJobInstanceDetailsPagedResponse>
+      LIST_PATCH_JOB_INSTANCE_DETAILS_PAGE_STR_FACT =
+          new PagedListResponseFactory<
+              ListPatchJobInstanceDetailsRequest,
+              ListPatchJobInstanceDetailsResponse,
+              ListPatchJobInstanceDetailsPagedResponse>() {
+            @Override
+            public ApiFuture getFuturePagedResponse(
+                UnaryCallable<
+                        ListPatchJobInstanceDetailsRequest, ListPatchJobInstanceDetailsResponse>
+                    callable,
+                ListPatchJobInstanceDetailsRequest request,
+                ApiCallContext context,
+                ApiFuture futureResponse) {
+              PageContext<
+                      ListPatchJobInstanceDetailsRequest,
+                      ListPatchJobInstanceDetailsResponse,
+                      PatchJobInstanceDetails>
+                  pageContext =
+                      PageContext.create(
+                          callable,
+                          LIST_PATCH_JOB_INSTANCE_DETAILS_PAGE_STR_DESC,
+                          request,
+                          context);
+              return ListPatchJobInstanceDetailsPagedResponse.createAsync(
+                  pageContext, futureResponse);
+            }
+          };
+
+  private static final PagedListResponseFactory<
+          ListPatchDeploymentsRequest,
+          ListPatchDeploymentsResponse,
+          ListPatchDeploymentsPagedResponse>
+      LIST_PATCH_DEPLOYMENTS_PAGE_STR_FACT =
+          new PagedListResponseFactory<
+              ListPatchDeploymentsRequest,
+              ListPatchDeploymentsResponse,
+              ListPatchDeploymentsPagedResponse>() {
+            @Override
+            public ApiFuture getFuturePagedResponse(
+                UnaryCallable callable,
+                ListPatchDeploymentsRequest request,
+                ApiCallContext context,
+                ApiFuture futureResponse) {
+              PageContext<
+                      ListPatchDeploymentsRequest, ListPatchDeploymentsResponse, PatchDeployment>
+                  pageContext =
+                      PageContext.create(
+                          callable, LIST_PATCH_DEPLOYMENTS_PAGE_STR_DESC, request, context);
+              return ListPatchDeploymentsPagedResponse.createAsync(pageContext, futureResponse);
+            }
+          };
+
   /** Builder for OsConfigServiceStubSettings. */
   public static class Builder extends StubSettings.Builder {
     private final ImmutableList> unaryMethodSettingsBuilders;
@@ -247,17 +471,22 @@ public static class Builder extends StubSettings.Builder getPatchJobSettings;
     private final UnaryCallSettings.Builder cancelPatchJobSettings;
-    private final UnaryCallSettings.Builder
+    private final PagedCallSettings.Builder<
+            ListPatchJobsRequest, ListPatchJobsResponse, ListPatchJobsPagedResponse>
         listPatchJobsSettings;
-    private final UnaryCallSettings.Builder<
-            ListPatchJobInstanceDetailsRequest, ListPatchJobInstanceDetailsResponse>
+    private final PagedCallSettings.Builder<
+            ListPatchJobInstanceDetailsRequest,
+            ListPatchJobInstanceDetailsResponse,
+            ListPatchJobInstanceDetailsPagedResponse>
         listPatchJobInstanceDetailsSettings;
     private final UnaryCallSettings.Builder
         createPatchDeploymentSettings;
     private final UnaryCallSettings.Builder
         getPatchDeploymentSettings;
-    private final UnaryCallSettings.Builder<
-            ListPatchDeploymentsRequest, ListPatchDeploymentsResponse>
+    private final PagedCallSettings.Builder<
+            ListPatchDeploymentsRequest,
+            ListPatchDeploymentsResponse,
+            ListPatchDeploymentsPagedResponse>
         listPatchDeploymentsSettings;
     private final UnaryCallSettings.Builder
         deletePatchDeploymentSettings;
@@ -309,15 +538,17 @@ protected Builder(ClientContext clientContext) {
 
       cancelPatchJobSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
 
-      listPatchJobsSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
+      listPatchJobsSettings = PagedCallSettings.newBuilder(LIST_PATCH_JOBS_PAGE_STR_FACT);
 
-      listPatchJobInstanceDetailsSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
+      listPatchJobInstanceDetailsSettings =
+          PagedCallSettings.newBuilder(LIST_PATCH_JOB_INSTANCE_DETAILS_PAGE_STR_FACT);
 
       createPatchDeploymentSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
 
       getPatchDeploymentSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
 
-      listPatchDeploymentsSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
+      listPatchDeploymentsSettings =
+          PagedCallSettings.newBuilder(LIST_PATCH_DEPLOYMENTS_PAGE_STR_FACT);
 
       deletePatchDeploymentSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
 
@@ -454,14 +685,17 @@ public UnaryCallSettings.Builder cancelPatchJob
     }
 
     /** Returns the builder for the settings used for calls to listPatchJobs. */
-    public UnaryCallSettings.Builder
+    public PagedCallSettings.Builder<
+            ListPatchJobsRequest, ListPatchJobsResponse, ListPatchJobsPagedResponse>
         listPatchJobsSettings() {
       return listPatchJobsSettings;
     }
 
     /** Returns the builder for the settings used for calls to listPatchJobInstanceDetails. */
-    public UnaryCallSettings.Builder<
-            ListPatchJobInstanceDetailsRequest, ListPatchJobInstanceDetailsResponse>
+    public PagedCallSettings.Builder<
+            ListPatchJobInstanceDetailsRequest,
+            ListPatchJobInstanceDetailsResponse,
+            ListPatchJobInstanceDetailsPagedResponse>
         listPatchJobInstanceDetailsSettings() {
       return listPatchJobInstanceDetailsSettings;
     }
@@ -479,7 +713,10 @@ public UnaryCallSettings.Builder cancelPatchJob
     }
 
     /** Returns the builder for the settings used for calls to listPatchDeployments. */
-    public UnaryCallSettings.Builder
+    public PagedCallSettings.Builder<
+            ListPatchDeploymentsRequest,
+            ListPatchDeploymentsResponse,
+            ListPatchDeploymentsPagedResponse>
         listPatchDeploymentsSettings() {
       return listPatchDeploymentsSettings;
     }
diff --git a/google-cloud-os-config/src/test/java/com/google/cloud/osconfig/v1/OsConfigServiceClientTest.java b/google-cloud-os-config/src/test/java/com/google/cloud/osconfig/v1/OsConfigServiceClientTest.java
index ecf126f6..a13da9a9 100644
--- a/google-cloud-os-config/src/test/java/com/google/cloud/osconfig/v1/OsConfigServiceClientTest.java
+++ b/google-cloud-os-config/src/test/java/com/google/cloud/osconfig/v1/OsConfigServiceClientTest.java
@@ -15,6 +15,10 @@
  */
 package com.google.cloud.osconfig.v1;
 
+import static com.google.cloud.osconfig.v1.OsConfigServiceClient.ListPatchDeploymentsPagedResponse;
+import static com.google.cloud.osconfig.v1.OsConfigServiceClient.ListPatchJobInstanceDetailsPagedResponse;
+import static com.google.cloud.osconfig.v1.OsConfigServiceClient.ListPatchJobsPagedResponse;
+
 import com.google.api.gax.core.NoCredentialsProvider;
 import com.google.api.gax.grpc.GaxGrpcProperties;
 import com.google.api.gax.grpc.testing.LocalChannelProvider;
@@ -35,7 +39,10 @@
 import com.google.cloud.osconfig.v1.PatchJobs.ListPatchJobInstanceDetailsResponse;
 import com.google.cloud.osconfig.v1.PatchJobs.ListPatchJobsRequest;
 import com.google.cloud.osconfig.v1.PatchJobs.ListPatchJobsResponse;
+import com.google.cloud.osconfig.v1.PatchJobs.PatchInstanceFilter;
 import com.google.cloud.osconfig.v1.PatchJobs.PatchJob;
+import com.google.cloud.osconfig.v1.PatchJobs.PatchJobInstanceDetails;
+import com.google.common.collect.Lists;
 import com.google.protobuf.AbstractMessage;
 import com.google.protobuf.Empty;
 import io.grpc.Status;
@@ -92,26 +99,32 @@ public void tearDown() throws Exception {
   @Test
   @SuppressWarnings("all")
   public void executePatchJobTest() {
-    String name = "name3373707";
+    PatchJobName name = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
     String displayName = "displayName1615086568";
     String description = "description-1724546052";
     boolean dryRun = false;
     String errorMessage = "errorMessage-1938755376";
     double percentComplete = -1.96096922E8;
-    String patchDeployment = "patchDeployment633565980";
+    PatchDeploymentName patchDeployment = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
     PatchJob expectedResponse =
         PatchJob.newBuilder()
-            .setName(name)
+            .setName(name.toString())
             .setDisplayName(displayName)
             .setDescription(description)
             .setDryRun(dryRun)
             .setErrorMessage(errorMessage)
             .setPercentComplete(percentComplete)
-            .setPatchDeployment(patchDeployment)
+            .setPatchDeployment(patchDeployment.toString())
             .build();
     mockOsConfigService.addResponse(expectedResponse);
 
-    ExecutePatchJobRequest request = ExecutePatchJobRequest.newBuilder().build();
+    ProjectName parent = ProjectName.of("[PROJECT]");
+    PatchInstanceFilter instanceFilter = PatchInstanceFilter.newBuilder().build();
+    ExecutePatchJobRequest request =
+        ExecutePatchJobRequest.newBuilder()
+            .setParent(parent.toString())
+            .setInstanceFilter(instanceFilter)
+            .build();
 
     PatchJob actualResponse = client.executePatchJob(request);
     Assert.assertEquals(expectedResponse, actualResponse);
@@ -120,6 +133,8 @@ public void executePatchJobTest() {
     Assert.assertEquals(1, actualRequests.size());
     ExecutePatchJobRequest actualRequest = (ExecutePatchJobRequest) actualRequests.get(0);
 
+    Assert.assertEquals(parent, ProjectName.parse(actualRequest.getParent()));
+    Assert.assertEquals(instanceFilter, actualRequest.getInstanceFilter());
     Assert.assertTrue(
         channelProvider.isHeaderSent(
             ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
@@ -133,7 +148,13 @@ public void executePatchJobExceptionTest() throws Exception {
     mockOsConfigService.addException(exception);
 
     try {
-      ExecutePatchJobRequest request = ExecutePatchJobRequest.newBuilder().build();
+      ProjectName parent = ProjectName.of("[PROJECT]");
+      PatchInstanceFilter instanceFilter = PatchInstanceFilter.newBuilder().build();
+      ExecutePatchJobRequest request =
+          ExecutePatchJobRequest.newBuilder()
+              .setParent(parent.toString())
+              .setInstanceFilter(instanceFilter)
+              .build();
 
       client.executePatchJob(request);
       Assert.fail("No exception raised");
@@ -145,34 +166,35 @@ public void executePatchJobExceptionTest() throws Exception {
   @Test
   @SuppressWarnings("all")
   public void getPatchJobTest() {
-    String name = "name3373707";
+    PatchJobName name2 = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
     String displayName = "displayName1615086568";
     String description = "description-1724546052";
     boolean dryRun = false;
     String errorMessage = "errorMessage-1938755376";
     double percentComplete = -1.96096922E8;
-    String patchDeployment = "patchDeployment633565980";
+    PatchDeploymentName patchDeployment = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
     PatchJob expectedResponse =
         PatchJob.newBuilder()
-            .setName(name)
+            .setName(name2.toString())
             .setDisplayName(displayName)
             .setDescription(description)
             .setDryRun(dryRun)
             .setErrorMessage(errorMessage)
             .setPercentComplete(percentComplete)
-            .setPatchDeployment(patchDeployment)
+            .setPatchDeployment(patchDeployment.toString())
             .build();
     mockOsConfigService.addResponse(expectedResponse);
 
-    GetPatchJobRequest request = GetPatchJobRequest.newBuilder().build();
+    PatchJobName name = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
 
-    PatchJob actualResponse = client.getPatchJob(request);
+    PatchJob actualResponse = client.getPatchJob(name);
     Assert.assertEquals(expectedResponse, actualResponse);
 
     List actualRequests = mockOsConfigService.getRequests();
     Assert.assertEquals(1, actualRequests.size());
     GetPatchJobRequest actualRequest = (GetPatchJobRequest) actualRequests.get(0);
 
+    Assert.assertEquals(name, PatchJobName.parse(actualRequest.getName()));
     Assert.assertTrue(
         channelProvider.isHeaderSent(
             ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
@@ -186,9 +208,9 @@ public void getPatchJobExceptionTest() throws Exception {
     mockOsConfigService.addException(exception);
 
     try {
-      GetPatchJobRequest request = GetPatchJobRequest.newBuilder().build();
+      PatchJobName name = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
 
-      client.getPatchJob(request);
+      client.getPatchJob(name);
       Assert.fail("No exception raised");
     } catch (InvalidArgumentException e) {
       // Expected exception
@@ -198,26 +220,28 @@ public void getPatchJobExceptionTest() throws Exception {
   @Test
   @SuppressWarnings("all")
   public void cancelPatchJobTest() {
-    String name = "name3373707";
+    PatchJobName name2 = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
     String displayName = "displayName1615086568";
     String description = "description-1724546052";
     boolean dryRun = false;
     String errorMessage = "errorMessage-1938755376";
     double percentComplete = -1.96096922E8;
-    String patchDeployment = "patchDeployment633565980";
+    PatchDeploymentName patchDeployment = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
     PatchJob expectedResponse =
         PatchJob.newBuilder()
-            .setName(name)
+            .setName(name2.toString())
             .setDisplayName(displayName)
             .setDescription(description)
             .setDryRun(dryRun)
             .setErrorMessage(errorMessage)
             .setPercentComplete(percentComplete)
-            .setPatchDeployment(patchDeployment)
+            .setPatchDeployment(patchDeployment.toString())
             .build();
     mockOsConfigService.addResponse(expectedResponse);
 
-    CancelPatchJobRequest request = CancelPatchJobRequest.newBuilder().build();
+    PatchJobName name = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
+    CancelPatchJobRequest request =
+        CancelPatchJobRequest.newBuilder().setName(name.toString()).build();
 
     PatchJob actualResponse = client.cancelPatchJob(request);
     Assert.assertEquals(expectedResponse, actualResponse);
@@ -226,6 +250,7 @@ public void cancelPatchJobTest() {
     Assert.assertEquals(1, actualRequests.size());
     CancelPatchJobRequest actualRequest = (CancelPatchJobRequest) actualRequests.get(0);
 
+    Assert.assertEquals(name, PatchJobName.parse(actualRequest.getName()));
     Assert.assertTrue(
         channelProvider.isHeaderSent(
             ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
@@ -239,7 +264,9 @@ public void cancelPatchJobExceptionTest() throws Exception {
     mockOsConfigService.addException(exception);
 
     try {
-      CancelPatchJobRequest request = CancelPatchJobRequest.newBuilder().build();
+      PatchJobName name = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
+      CancelPatchJobRequest request =
+          CancelPatchJobRequest.newBuilder().setName(name.toString()).build();
 
       client.cancelPatchJob(request);
       Assert.fail("No exception raised");
@@ -251,20 +278,29 @@ public void cancelPatchJobExceptionTest() throws Exception {
   @Test
   @SuppressWarnings("all")
   public void listPatchJobsTest() {
-    String nextPageToken = "nextPageToken-1530815211";
+    String nextPageToken = "";
+    PatchJob patchJobsElement = PatchJob.newBuilder().build();
+    List patchJobs = Arrays.asList(patchJobsElement);
     ListPatchJobsResponse expectedResponse =
-        ListPatchJobsResponse.newBuilder().setNextPageToken(nextPageToken).build();
+        ListPatchJobsResponse.newBuilder()
+            .setNextPageToken(nextPageToken)
+            .addAllPatchJobs(patchJobs)
+            .build();
     mockOsConfigService.addResponse(expectedResponse);
 
-    ListPatchJobsRequest request = ListPatchJobsRequest.newBuilder().build();
+    ProjectName parent = ProjectName.of("[PROJECT]");
 
-    ListPatchJobsResponse actualResponse = client.listPatchJobs(request);
-    Assert.assertEquals(expectedResponse, actualResponse);
+    ListPatchJobsPagedResponse pagedListResponse = client.listPatchJobs(parent);
+
+    List resources = Lists.newArrayList(pagedListResponse.iterateAll());
+    Assert.assertEquals(1, resources.size());
+    Assert.assertEquals(expectedResponse.getPatchJobsList().get(0), resources.get(0));
 
     List actualRequests = mockOsConfigService.getRequests();
     Assert.assertEquals(1, actualRequests.size());
     ListPatchJobsRequest actualRequest = (ListPatchJobsRequest) actualRequests.get(0);
 
+    Assert.assertEquals(parent, ProjectName.parse(actualRequest.getParent()));
     Assert.assertTrue(
         channelProvider.isHeaderSent(
             ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
@@ -278,9 +314,9 @@ public void listPatchJobsExceptionTest() throws Exception {
     mockOsConfigService.addException(exception);
 
     try {
-      ListPatchJobsRequest request = ListPatchJobsRequest.newBuilder().build();
+      ProjectName parent = ProjectName.of("[PROJECT]");
 
-      client.listPatchJobs(request);
+      client.listPatchJobs(parent);
       Assert.fail("No exception raised");
     } catch (InvalidArgumentException e) {
       // Expected exception
@@ -290,23 +326,33 @@ public void listPatchJobsExceptionTest() throws Exception {
   @Test
   @SuppressWarnings("all")
   public void listPatchJobInstanceDetailsTest() {
-    String nextPageToken = "nextPageToken-1530815211";
+    String nextPageToken = "";
+    PatchJobInstanceDetails patchJobInstanceDetailsElement =
+        PatchJobInstanceDetails.newBuilder().build();
+    List patchJobInstanceDetails =
+        Arrays.asList(patchJobInstanceDetailsElement);
     ListPatchJobInstanceDetailsResponse expectedResponse =
-        ListPatchJobInstanceDetailsResponse.newBuilder().setNextPageToken(nextPageToken).build();
+        ListPatchJobInstanceDetailsResponse.newBuilder()
+            .setNextPageToken(nextPageToken)
+            .addAllPatchJobInstanceDetails(patchJobInstanceDetails)
+            .build();
     mockOsConfigService.addResponse(expectedResponse);
 
-    ListPatchJobInstanceDetailsRequest request =
-        ListPatchJobInstanceDetailsRequest.newBuilder().build();
+    PatchJobName parent = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
 
-    ListPatchJobInstanceDetailsResponse actualResponse =
-        client.listPatchJobInstanceDetails(request);
-    Assert.assertEquals(expectedResponse, actualResponse);
+    ListPatchJobInstanceDetailsPagedResponse pagedListResponse =
+        client.listPatchJobInstanceDetails(parent);
+
+    List resources = Lists.newArrayList(pagedListResponse.iterateAll());
+    Assert.assertEquals(1, resources.size());
+    Assert.assertEquals(expectedResponse.getPatchJobInstanceDetailsList().get(0), resources.get(0));
 
     List actualRequests = mockOsConfigService.getRequests();
     Assert.assertEquals(1, actualRequests.size());
     ListPatchJobInstanceDetailsRequest actualRequest =
         (ListPatchJobInstanceDetailsRequest) actualRequests.get(0);
 
+    Assert.assertEquals(parent, PatchJobName.parse(actualRequest.getParent()));
     Assert.assertTrue(
         channelProvider.isHeaderSent(
             ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
@@ -320,10 +366,9 @@ public void listPatchJobInstanceDetailsExceptionTest() throws Exception {
     mockOsConfigService.addException(exception);
 
     try {
-      ListPatchJobInstanceDetailsRequest request =
-          ListPatchJobInstanceDetailsRequest.newBuilder().build();
+      PatchJobName parent = PatchJobName.of("[PROJECT]", "[PATCH_JOB]");
 
-      client.listPatchJobInstanceDetails(request);
+      client.listPatchJobInstanceDetails(parent);
       Assert.fail("No exception raised");
     } catch (InvalidArgumentException e) {
       // Expected exception
@@ -333,15 +378,18 @@ public void listPatchJobInstanceDetailsExceptionTest() throws Exception {
   @Test
   @SuppressWarnings("all")
   public void createPatchDeploymentTest() {
-    String name = "name3373707";
+    PatchDeploymentName name = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
     String description = "description-1724546052";
     PatchDeployment expectedResponse =
-        PatchDeployment.newBuilder().setName(name).setDescription(description).build();
+        PatchDeployment.newBuilder().setName(name.toString()).setDescription(description).build();
     mockOsConfigService.addResponse(expectedResponse);
 
-    CreatePatchDeploymentRequest request = CreatePatchDeploymentRequest.newBuilder().build();
+    ProjectName parent = ProjectName.of("[PROJECT]");
+    PatchDeployment patchDeployment = PatchDeployment.newBuilder().build();
+    String patchDeploymentId = "patchDeploymentId-1817061090";
 
-    PatchDeployment actualResponse = client.createPatchDeployment(request);
+    PatchDeployment actualResponse =
+        client.createPatchDeployment(parent, patchDeployment, patchDeploymentId);
     Assert.assertEquals(expectedResponse, actualResponse);
 
     List actualRequests = mockOsConfigService.getRequests();
@@ -349,6 +397,9 @@ public void createPatchDeploymentTest() {
     CreatePatchDeploymentRequest actualRequest =
         (CreatePatchDeploymentRequest) actualRequests.get(0);
 
+    Assert.assertEquals(parent, ProjectName.parse(actualRequest.getParent()));
+    Assert.assertEquals(patchDeployment, actualRequest.getPatchDeployment());
+    Assert.assertEquals(patchDeploymentId, actualRequest.getPatchDeploymentId());
     Assert.assertTrue(
         channelProvider.isHeaderSent(
             ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
@@ -362,9 +413,11 @@ public void createPatchDeploymentExceptionTest() throws Exception {
     mockOsConfigService.addException(exception);
 
     try {
-      CreatePatchDeploymentRequest request = CreatePatchDeploymentRequest.newBuilder().build();
+      ProjectName parent = ProjectName.of("[PROJECT]");
+      PatchDeployment patchDeployment = PatchDeployment.newBuilder().build();
+      String patchDeploymentId = "patchDeploymentId-1817061090";
 
-      client.createPatchDeployment(request);
+      client.createPatchDeployment(parent, patchDeployment, patchDeploymentId);
       Assert.fail("No exception raised");
     } catch (InvalidArgumentException e) {
       // Expected exception
@@ -374,21 +427,22 @@ public void createPatchDeploymentExceptionTest() throws Exception {
   @Test
   @SuppressWarnings("all")
   public void getPatchDeploymentTest() {
-    String name = "name3373707";
+    PatchDeploymentName name2 = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
     String description = "description-1724546052";
     PatchDeployment expectedResponse =
-        PatchDeployment.newBuilder().setName(name).setDescription(description).build();
+        PatchDeployment.newBuilder().setName(name2.toString()).setDescription(description).build();
     mockOsConfigService.addResponse(expectedResponse);
 
-    GetPatchDeploymentRequest request = GetPatchDeploymentRequest.newBuilder().build();
+    PatchDeploymentName name = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
 
-    PatchDeployment actualResponse = client.getPatchDeployment(request);
+    PatchDeployment actualResponse = client.getPatchDeployment(name);
     Assert.assertEquals(expectedResponse, actualResponse);
 
     List actualRequests = mockOsConfigService.getRequests();
     Assert.assertEquals(1, actualRequests.size());
     GetPatchDeploymentRequest actualRequest = (GetPatchDeploymentRequest) actualRequests.get(0);
 
+    Assert.assertEquals(name, PatchDeploymentName.parse(actualRequest.getName()));
     Assert.assertTrue(
         channelProvider.isHeaderSent(
             ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
@@ -402,9 +456,9 @@ public void getPatchDeploymentExceptionTest() throws Exception {
     mockOsConfigService.addException(exception);
 
     try {
-      GetPatchDeploymentRequest request = GetPatchDeploymentRequest.newBuilder().build();
+      PatchDeploymentName name = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
 
-      client.getPatchDeployment(request);
+      client.getPatchDeployment(name);
       Assert.fail("No exception raised");
     } catch (InvalidArgumentException e) {
       // Expected exception
@@ -414,20 +468,29 @@ public void getPatchDeploymentExceptionTest() throws Exception {
   @Test
   @SuppressWarnings("all")
   public void listPatchDeploymentsTest() {
-    String nextPageToken = "nextPageToken-1530815211";
+    String nextPageToken = "";
+    PatchDeployment patchDeploymentsElement = PatchDeployment.newBuilder().build();
+    List patchDeployments = Arrays.asList(patchDeploymentsElement);
     ListPatchDeploymentsResponse expectedResponse =
-        ListPatchDeploymentsResponse.newBuilder().setNextPageToken(nextPageToken).build();
+        ListPatchDeploymentsResponse.newBuilder()
+            .setNextPageToken(nextPageToken)
+            .addAllPatchDeployments(patchDeployments)
+            .build();
     mockOsConfigService.addResponse(expectedResponse);
 
-    ListPatchDeploymentsRequest request = ListPatchDeploymentsRequest.newBuilder().build();
+    ProjectName parent = ProjectName.of("[PROJECT]");
 
-    ListPatchDeploymentsResponse actualResponse = client.listPatchDeployments(request);
-    Assert.assertEquals(expectedResponse, actualResponse);
+    ListPatchDeploymentsPagedResponse pagedListResponse = client.listPatchDeployments(parent);
+
+    List resources = Lists.newArrayList(pagedListResponse.iterateAll());
+    Assert.assertEquals(1, resources.size());
+    Assert.assertEquals(expectedResponse.getPatchDeploymentsList().get(0), resources.get(0));
 
     List actualRequests = mockOsConfigService.getRequests();
     Assert.assertEquals(1, actualRequests.size());
     ListPatchDeploymentsRequest actualRequest = (ListPatchDeploymentsRequest) actualRequests.get(0);
 
+    Assert.assertEquals(parent, ProjectName.parse(actualRequest.getParent()));
     Assert.assertTrue(
         channelProvider.isHeaderSent(
             ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
@@ -441,9 +504,9 @@ public void listPatchDeploymentsExceptionTest() throws Exception {
     mockOsConfigService.addException(exception);
 
     try {
-      ListPatchDeploymentsRequest request = ListPatchDeploymentsRequest.newBuilder().build();
+      ProjectName parent = ProjectName.of("[PROJECT]");
 
-      client.listPatchDeployments(request);
+      client.listPatchDeployments(parent);
       Assert.fail("No exception raised");
     } catch (InvalidArgumentException e) {
       // Expected exception
@@ -456,15 +519,16 @@ public void deletePatchDeploymentTest() {
     Empty expectedResponse = Empty.newBuilder().build();
     mockOsConfigService.addResponse(expectedResponse);
 
-    DeletePatchDeploymentRequest request = DeletePatchDeploymentRequest.newBuilder().build();
+    PatchDeploymentName name = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
 
-    client.deletePatchDeployment(request);
+    client.deletePatchDeployment(name);
 
     List actualRequests = mockOsConfigService.getRequests();
     Assert.assertEquals(1, actualRequests.size());
     DeletePatchDeploymentRequest actualRequest =
         (DeletePatchDeploymentRequest) actualRequests.get(0);
 
+    Assert.assertEquals(name, PatchDeploymentName.parse(actualRequest.getName()));
     Assert.assertTrue(
         channelProvider.isHeaderSent(
             ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
@@ -478,9 +542,9 @@ public void deletePatchDeploymentExceptionTest() throws Exception {
     mockOsConfigService.addException(exception);
 
     try {
-      DeletePatchDeploymentRequest request = DeletePatchDeploymentRequest.newBuilder().build();
+      PatchDeploymentName name = PatchDeploymentName.of("[PROJECT]", "[PATCH_DEPLOYMENT]");
 
-      client.deletePatchDeployment(request);
+      client.deletePatchDeployment(name);
       Assert.fail("No exception raised");
     } catch (InvalidArgumentException e) {
       // Expected exception
diff --git a/proto-google-cloud-os-config-v1/pom.xml b/proto-google-cloud-os-config-v1/pom.xml
index 85dbb77b..188e5845 100644
--- a/proto-google-cloud-os-config-v1/pom.xml
+++ b/proto-google-cloud-os-config-v1/pom.xml
@@ -21,6 +21,14 @@
       com.google.api.grpc
       proto-google-common-protos
     
+    
+      com.google.api
+      api-common
+    
+    
+      com.google.guava
+      guava
+    
   
 
   
diff --git a/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/InstanceName.java b/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/InstanceName.java
new file mode 100644
index 00000000..214c82d2
--- /dev/null
+++ b/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/InstanceName.java
@@ -0,0 +1,204 @@
+/*
+ * 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
+ *
+ *     https://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.
+ */
+
+package com.google.cloud.osconfig.v1;
+
+import com.google.api.pathtemplate.PathTemplate;
+import com.google.api.resourcenames.ResourceName;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/** AUTO-GENERATED DOCUMENTATION AND CLASS */
+@javax.annotation.Generated("by GAPIC protoc plugin")
+public class InstanceName implements ResourceName {
+
+  private static final PathTemplate PATH_TEMPLATE =
+      PathTemplate.createWithoutUrlEncoding("projects/{project}/zones/{zone}/instances/{instance}");
+
+  private volatile Map fieldValuesMap;
+
+  private final String project;
+  private final String zone;
+  private final String instance;
+
+  public String getProject() {
+    return project;
+  }
+
+  public String getZone() {
+    return zone;
+  }
+
+  public String getInstance() {
+    return instance;
+  }
+
+  public static Builder newBuilder() {
+    return new Builder();
+  }
+
+  public Builder toBuilder() {
+    return new Builder(this);
+  }
+
+  private InstanceName(Builder builder) {
+    project = Preconditions.checkNotNull(builder.getProject());
+    zone = Preconditions.checkNotNull(builder.getZone());
+    instance = Preconditions.checkNotNull(builder.getInstance());
+  }
+
+  public static InstanceName of(String project, String zone, String instance) {
+    return newBuilder().setProject(project).setZone(zone).setInstance(instance).build();
+  }
+
+  public static String format(String project, String zone, String instance) {
+    return newBuilder().setProject(project).setZone(zone).setInstance(instance).build().toString();
+  }
+
+  public static InstanceName parse(String formattedString) {
+    if (formattedString.isEmpty()) {
+      return null;
+    }
+    Map matchMap =
+        PATH_TEMPLATE.validatedMatch(
+            formattedString, "InstanceName.parse: formattedString not in valid format");
+    return of(matchMap.get("project"), matchMap.get("zone"), matchMap.get("instance"));
+  }
+
+  public static List parseList(List formattedStrings) {
+    List list = new ArrayList<>(formattedStrings.size());
+    for (String formattedString : formattedStrings) {
+      list.add(parse(formattedString));
+    }
+    return list;
+  }
+
+  public static List toStringList(List values) {
+    List list = new ArrayList(values.size());
+    for (InstanceName value : values) {
+      if (value == null) {
+        list.add("");
+      } else {
+        list.add(value.toString());
+      }
+    }
+    return list;
+  }
+
+  public static boolean isParsableFrom(String formattedString) {
+    return PATH_TEMPLATE.matches(formattedString);
+  }
+
+  public Map getFieldValuesMap() {
+    if (fieldValuesMap == null) {
+      synchronized (this) {
+        if (fieldValuesMap == null) {
+          ImmutableMap.Builder fieldMapBuilder = ImmutableMap.builder();
+          fieldMapBuilder.put("project", project);
+          fieldMapBuilder.put("zone", zone);
+          fieldMapBuilder.put("instance", instance);
+          fieldValuesMap = fieldMapBuilder.build();
+        }
+      }
+    }
+    return fieldValuesMap;
+  }
+
+  public String getFieldValue(String fieldName) {
+    return getFieldValuesMap().get(fieldName);
+  }
+
+  @Override
+  public String toString() {
+    return PATH_TEMPLATE.instantiate("project", project, "zone", zone, "instance", instance);
+  }
+
+  /** Builder for InstanceName. */
+  public static class Builder {
+
+    private String project;
+    private String zone;
+    private String instance;
+
+    public String getProject() {
+      return project;
+    }
+
+    public String getZone() {
+      return zone;
+    }
+
+    public String getInstance() {
+      return instance;
+    }
+
+    public Builder setProject(String project) {
+      this.project = project;
+      return this;
+    }
+
+    public Builder setZone(String zone) {
+      this.zone = zone;
+      return this;
+    }
+
+    public Builder setInstance(String instance) {
+      this.instance = instance;
+      return this;
+    }
+
+    private Builder() {}
+
+    private Builder(InstanceName instanceName) {
+      project = instanceName.project;
+      zone = instanceName.zone;
+      instance = instanceName.instance;
+    }
+
+    public InstanceName build() {
+      return new InstanceName(this);
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (o == this) {
+      return true;
+    }
+    if (o instanceof InstanceName) {
+      InstanceName that = (InstanceName) o;
+      return (this.project.equals(that.project))
+          && (this.zone.equals(that.zone))
+          && (this.instance.equals(that.instance));
+    }
+    return false;
+  }
+
+  @Override
+  public int hashCode() {
+    int h = 1;
+    h *= 1000003;
+    h ^= project.hashCode();
+    h *= 1000003;
+    h ^= zone.hashCode();
+    h *= 1000003;
+    h ^= instance.hashCode();
+    return h;
+  }
+}
diff --git a/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/OsConfigProto.java b/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/OsConfigProto.java
index 6c349a0e..b07278e9 100644
--- a/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/OsConfigProto.java
+++ b/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/OsConfigProto.java
@@ -38,58 +38,61 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
       "\n/google/cloud/osconfig/v1/osconfig_serv"
           + "ice.proto\022\030google.cloud.osconfig.v1\032\034goo"
           + "gle/api/annotations.proto\032\027google/api/cl"
-          + "ient.proto\0320google/cloud/osconfig/v1/pat"
-          + "ch_deployments.proto\032)google/cloud/oscon"
-          + "fig/v1/patch_jobs.proto\032\033google/protobuf"
-          + "/empty.proto2\276\r\n\017OsConfigService\022\235\001\n\017Exe"
-          + "cutePatchJob\0220.google.cloud.osconfig.v1."
-          + "ExecutePatchJobRequest\032\".google.cloud.os"
-          + "config.v1.PatchJob\"4\202\323\344\223\002.\")/v1/{parent="
-          + "projects/*}/patchJobs:execute:\001*\022\221\001\n\013Get"
-          + "PatchJob\022,.google.cloud.osconfig.v1.GetP"
-          + "atchJobRequest\032\".google.cloud.osconfig.v"
-          + "1.PatchJob\"0\202\323\344\223\002#\022!/v1/{name=projects/*"
-          + "/patchJobs/*}\332A\004name\022\232\001\n\016CancelPatchJob\022"
-          + "/.google.cloud.osconfig.v1.CancelPatchJo"
-          + "bRequest\032\".google.cloud.osconfig.v1.Patc"
-          + "hJob\"3\202\323\344\223\002-\"(/v1/{name=projects/*/patch"
-          + "Jobs/*}:cancel:\001*\022\244\001\n\rListPatchJobs\022..go"
-          + "ogle.cloud.osconfig.v1.ListPatchJobsRequ"
-          + "est\032/.google.cloud.osconfig.v1.ListPatch"
-          + "JobsResponse\"2\202\323\344\223\002#\022!/v1/{parent=projec"
-          + "ts/*}/patchJobs\332A\006parent\022\340\001\n\033ListPatchJo"
-          + "bInstanceDetails\022<.google.cloud.osconfig"
-          + ".v1.ListPatchJobInstanceDetailsRequest\032="
-          + ".google.cloud.osconfig.v1.ListPatchJobIn"
-          + "stanceDetailsResponse\"D\202\323\344\223\0025\0223/v1/{pare"
-          + "nt=projects/*/patchJobs/*}/instanceDetai"
-          + "ls\332A\006parent\022\354\001\n\025CreatePatchDeployment\0226."
-          + "google.cloud.osconfig.v1.CreatePatchDepl"
-          + "oymentRequest\032).google.cloud.osconfig.v1"
-          + ".PatchDeployment\"p\202\323\344\223\002<\"(/v1/{parent=pr"
-          + "ojects/*}/patchDeployments:\020patch_deploy"
-          + "ment\332A+parent,patch_deployment,patch_dep"
-          + "loyment_id\022\255\001\n\022GetPatchDeployment\0223.goog"
-          + "le.cloud.osconfig.v1.GetPatchDeploymentR"
-          + "equest\032).google.cloud.osconfig.v1.PatchD"
-          + "eployment\"7\202\323\344\223\002*\022(/v1/{name=projects/*/"
-          + "patchDeployments/*}\332A\004name\022\300\001\n\024ListPatch"
-          + "Deployments\0225.google.cloud.osconfig.v1.L"
-          + "istPatchDeploymentsRequest\0326.google.clou"
-          + "d.osconfig.v1.ListPatchDeploymentsRespon"
-          + "se\"9\202\323\344\223\002*\022(/v1/{parent=projects/*}/patc"
-          + "hDeployments\332A\006parent\022\240\001\n\025DeletePatchDep"
-          + "loyment\0226.google.cloud.osconfig.v1.Delet"
-          + "ePatchDeploymentRequest\032\026.google.protobu"
-          + "f.Empty\"7\202\323\344\223\002**(/v1/{name=projects/*/pa"
-          + "tchDeployments/*}\332A\004name\032K\312A\027osconfig.go"
-          + "ogleapis.com\322A.https://www.googleapis.co"
-          + "m/auth/cloud-platformB\303\001\n\034com.google.clo"
-          + "ud.osconfig.v1B\rOsConfigProtoZ@google.go"
-          + "lang.org/genproto/googleapis/cloud/oscon"
-          + "fig/v1;osconfig\252\002\030Google.Cloud.OsConfig."
-          + "V1\312\002\030Google\\Cloud\\OsConfig\\V1\352\002\033Google::"
-          + "Cloud::OsConfig::V1b\006proto3"
+          + "ient.proto\032\031google/api/resource.proto\0320g"
+          + "oogle/cloud/osconfig/v1/patch_deployment"
+          + "s.proto\032)google/cloud/osconfig/v1/patch_"
+          + "jobs.proto\032\033google/protobuf/empty.proto2"
+          + "\276\r\n\017OsConfigService\022\235\001\n\017ExecutePatchJob\022"
+          + "0.google.cloud.osconfig.v1.ExecutePatchJ"
+          + "obRequest\032\".google.cloud.osconfig.v1.Pat"
+          + "chJob\"4\202\323\344\223\002.\")/v1/{parent=projects/*}/p"
+          + "atchJobs:execute:\001*\022\221\001\n\013GetPatchJob\022,.go"
+          + "ogle.cloud.osconfig.v1.GetPatchJobReques"
+          + "t\032\".google.cloud.osconfig.v1.PatchJob\"0\202"
+          + "\323\344\223\002#\022!/v1/{name=projects/*/patchJobs/*}"
+          + "\332A\004name\022\232\001\n\016CancelPatchJob\022/.google.clou"
+          + "d.osconfig.v1.CancelPatchJobRequest\032\".go"
+          + "ogle.cloud.osconfig.v1.PatchJob\"3\202\323\344\223\002-\""
+          + "(/v1/{name=projects/*/patchJobs/*}:cance"
+          + "l:\001*\022\244\001\n\rListPatchJobs\022..google.cloud.os"
+          + "config.v1.ListPatchJobsRequest\032/.google."
+          + "cloud.osconfig.v1.ListPatchJobsResponse\""
+          + "2\202\323\344\223\002#\022!/v1/{parent=projects/*}/patchJo"
+          + "bs\332A\006parent\022\340\001\n\033ListPatchJobInstanceDeta"
+          + "ils\022<.google.cloud.osconfig.v1.ListPatch"
+          + "JobInstanceDetailsRequest\032=.google.cloud"
+          + ".osconfig.v1.ListPatchJobInstanceDetails"
+          + "Response\"D\202\323\344\223\0025\0223/v1/{parent=projects/*"
+          + "/patchJobs/*}/instanceDetails\332A\006parent\022\354"
+          + "\001\n\025CreatePatchDeployment\0226.google.cloud."
+          + "osconfig.v1.CreatePatchDeploymentRequest"
+          + "\032).google.cloud.osconfig.v1.PatchDeploym"
+          + "ent\"p\202\323\344\223\002<\"(/v1/{parent=projects/*}/pat"
+          + "chDeployments:\020patch_deployment\332A+parent"
+          + ",patch_deployment,patch_deployment_id\022\255\001"
+          + "\n\022GetPatchDeployment\0223.google.cloud.osco"
+          + "nfig.v1.GetPatchDeploymentRequest\032).goog"
+          + "le.cloud.osconfig.v1.PatchDeployment\"7\202\323"
+          + "\344\223\002*\022(/v1/{name=projects/*/patchDeployme"
+          + "nts/*}\332A\004name\022\300\001\n\024ListPatchDeployments\0225"
+          + ".google.cloud.osconfig.v1.ListPatchDeplo"
+          + "ymentsRequest\0326.google.cloud.osconfig.v1"
+          + ".ListPatchDeploymentsResponse\"9\202\323\344\223\002*\022(/"
+          + "v1/{parent=projects/*}/patchDeployments\332"
+          + "A\006parent\022\240\001\n\025DeletePatchDeployment\0226.goo"
+          + "gle.cloud.osconfig.v1.DeletePatchDeploym"
+          + "entRequest\032\026.google.protobuf.Empty\"7\202\323\344\223"
+          + "\002**(/v1/{name=projects/*/patchDeployment"
+          + "s/*}\332A\004name\032K\312A\027osconfig.googleapis.com\322"
+          + "A.https://www.googleapis.com/auth/cloud-"
+          + "platformB\235\002\n\034com.google.cloud.osconfig.v"
+          + "1B\rOsConfigProtoZ@google.golang.org/genp"
+          + "roto/googleapis/cloud/osconfig/v1;osconf"
+          + "ig\252\002\030Google.Cloud.OsConfig.V1\312\002\030Google\\C"
+          + "loud\\OsConfig\\V1\352\002\033Google::Cloud::OsConf"
+          + "ig::V1\352AW\n\037compute.googleapis.com/Instan"
+          + "ce\0224projects/{project}/zones/{zone}/inst"
+          + "ances/{instance}b\006proto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
@@ -97,6 +100,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
             new com.google.protobuf.Descriptors.FileDescriptor[] {
               com.google.api.AnnotationsProto.getDescriptor(),
               com.google.api.ClientProto.getDescriptor(),
+              com.google.api.ResourceProto.getDescriptor(),
               com.google.cloud.osconfig.v1.PatchDeployments.getDescriptor(),
               com.google.cloud.osconfig.v1.PatchJobs.getDescriptor(),
               com.google.protobuf.EmptyProto.getDescriptor(),
@@ -107,10 +111,12 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
     registry.add(com.google.api.AnnotationsProto.http);
     registry.add(com.google.api.ClientProto.methodSignature);
     registry.add(com.google.api.ClientProto.oauthScopes);
+    registry.add(com.google.api.ResourceProto.resourceDefinition);
     com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor(
         descriptor, registry);
     com.google.api.AnnotationsProto.getDescriptor();
     com.google.api.ClientProto.getDescriptor();
+    com.google.api.ResourceProto.getDescriptor();
     com.google.cloud.osconfig.v1.PatchDeployments.getDescriptor();
     com.google.cloud.osconfig.v1.PatchJobs.getDescriptor();
     com.google.protobuf.EmptyProto.getDescriptor();
diff --git a/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/PatchDeploymentName.java b/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/PatchDeploymentName.java
new file mode 100644
index 00000000..5623d1b7
--- /dev/null
+++ b/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/PatchDeploymentName.java
@@ -0,0 +1,184 @@
+/*
+ * 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
+ *
+ *     https://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.
+ */
+
+package com.google.cloud.osconfig.v1;
+
+import com.google.api.pathtemplate.PathTemplate;
+import com.google.api.resourcenames.ResourceName;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/** AUTO-GENERATED DOCUMENTATION AND CLASS */
+@javax.annotation.Generated("by GAPIC protoc plugin")
+public class PatchDeploymentName implements ResourceName {
+
+  private static final PathTemplate PATH_TEMPLATE =
+      PathTemplate.createWithoutUrlEncoding(
+          "projects/{project}/patchDeployments/{patch_deployment}");
+
+  private volatile Map fieldValuesMap;
+
+  private final String project;
+  private final String patchDeployment;
+
+  public String getProject() {
+    return project;
+  }
+
+  public String getPatchDeployment() {
+    return patchDeployment;
+  }
+
+  public static Builder newBuilder() {
+    return new Builder();
+  }
+
+  public Builder toBuilder() {
+    return new Builder(this);
+  }
+
+  private PatchDeploymentName(Builder builder) {
+    project = Preconditions.checkNotNull(builder.getProject());
+    patchDeployment = Preconditions.checkNotNull(builder.getPatchDeployment());
+  }
+
+  public static PatchDeploymentName of(String project, String patchDeployment) {
+    return newBuilder().setProject(project).setPatchDeployment(patchDeployment).build();
+  }
+
+  public static String format(String project, String patchDeployment) {
+    return newBuilder().setProject(project).setPatchDeployment(patchDeployment).build().toString();
+  }
+
+  public static PatchDeploymentName parse(String formattedString) {
+    if (formattedString.isEmpty()) {
+      return null;
+    }
+    Map matchMap =
+        PATH_TEMPLATE.validatedMatch(
+            formattedString, "PatchDeploymentName.parse: formattedString not in valid format");
+    return of(matchMap.get("project"), matchMap.get("patch_deployment"));
+  }
+
+  public static List parseList(List formattedStrings) {
+    List list = new ArrayList<>(formattedStrings.size());
+    for (String formattedString : formattedStrings) {
+      list.add(parse(formattedString));
+    }
+    return list;
+  }
+
+  public static List toStringList(List values) {
+    List list = new ArrayList(values.size());
+    for (PatchDeploymentName value : values) {
+      if (value == null) {
+        list.add("");
+      } else {
+        list.add(value.toString());
+      }
+    }
+    return list;
+  }
+
+  public static boolean isParsableFrom(String formattedString) {
+    return PATH_TEMPLATE.matches(formattedString);
+  }
+
+  public Map getFieldValuesMap() {
+    if (fieldValuesMap == null) {
+      synchronized (this) {
+        if (fieldValuesMap == null) {
+          ImmutableMap.Builder fieldMapBuilder = ImmutableMap.builder();
+          fieldMapBuilder.put("project", project);
+          fieldMapBuilder.put("patchDeployment", patchDeployment);
+          fieldValuesMap = fieldMapBuilder.build();
+        }
+      }
+    }
+    return fieldValuesMap;
+  }
+
+  public String getFieldValue(String fieldName) {
+    return getFieldValuesMap().get(fieldName);
+  }
+
+  @Override
+  public String toString() {
+    return PATH_TEMPLATE.instantiate("project", project, "patch_deployment", patchDeployment);
+  }
+
+  /** Builder for PatchDeploymentName. */
+  public static class Builder {
+
+    private String project;
+    private String patchDeployment;
+
+    public String getProject() {
+      return project;
+    }
+
+    public String getPatchDeployment() {
+      return patchDeployment;
+    }
+
+    public Builder setProject(String project) {
+      this.project = project;
+      return this;
+    }
+
+    public Builder setPatchDeployment(String patchDeployment) {
+      this.patchDeployment = patchDeployment;
+      return this;
+    }
+
+    private Builder() {}
+
+    private Builder(PatchDeploymentName patchDeploymentName) {
+      project = patchDeploymentName.project;
+      patchDeployment = patchDeploymentName.patchDeployment;
+    }
+
+    public PatchDeploymentName build() {
+      return new PatchDeploymentName(this);
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (o == this) {
+      return true;
+    }
+    if (o instanceof PatchDeploymentName) {
+      PatchDeploymentName that = (PatchDeploymentName) o;
+      return (this.project.equals(that.project))
+          && (this.patchDeployment.equals(that.patchDeployment));
+    }
+    return false;
+  }
+
+  @Override
+  public int hashCode() {
+    int h = 1;
+    h *= 1000003;
+    h ^= project.hashCode();
+    h *= 1000003;
+    h ^= patchDeployment.hashCode();
+    return h;
+  }
+}
diff --git a/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/PatchDeployments.java b/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/PatchDeployments.java
index 034c62f5..ea6c8c7b 100644
--- a/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/PatchDeployments.java
+++ b/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/PatchDeployments.java
@@ -300,8 +300,7 @@ public interface PatchDeploymentOrBuilder
      *
      * 
      * Output only. Time the patch deployment was created. Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
      * 
* * @@ -316,8 +315,7 @@ public interface PatchDeploymentOrBuilder * *
      * Output only. Time the patch deployment was created. Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
      * 
* * @@ -332,8 +330,7 @@ public interface PatchDeploymentOrBuilder * *
      * Output only. Time the patch deployment was created. Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
      * 
* * @@ -347,8 +344,7 @@ public interface PatchDeploymentOrBuilder * *
      * Output only. Time the patch deployment was last updated. Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * [RFC3339]("https://www.ietf.org/rfc/rfc3339.txt) text format.
      * 
* * @@ -363,8 +359,7 @@ public interface PatchDeploymentOrBuilder * *
      * Output only. Time the patch deployment was last updated. Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * [RFC3339]("https://www.ietf.org/rfc/rfc3339.txt) text format.
      * 
* * @@ -379,8 +374,7 @@ public interface PatchDeploymentOrBuilder * *
      * Output only. Time the patch deployment was last updated. Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * [RFC3339]("https://www.ietf.org/rfc/rfc3339.txt) text format.
      * 
* * @@ -394,9 +388,8 @@ public interface PatchDeploymentOrBuilder * *
      * Output only. The last time a patch job was started by this deployment.
-     * Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
+     * format.
      * 
* * @@ -411,9 +404,8 @@ public interface PatchDeploymentOrBuilder * *
      * Output only. The last time a patch job was started by this deployment.
-     * Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
+     * format.
      * 
* * @@ -428,9 +420,8 @@ public interface PatchDeploymentOrBuilder * *
      * Output only. The last time a patch job was started by this deployment.
-     * Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
+     * format.
      * 
* * @@ -450,7 +441,7 @@ public interface PatchDeploymentOrBuilder * complete a patch. These configurations include instance filter, package * repository settings, and a schedule. For more information about creating and * managing patch deployments, see [Scheduling patch - * jobs](/compute/docs/os-patch-management/schedule-patch-jobs). + * jobs](https://cloud.google.com/compute/docs/os-patch-management/schedule-patch-jobs). *
* * Protobuf type {@code google.cloud.osconfig.v1.PatchDeployment} @@ -1099,8 +1090,7 @@ public com.google.cloud.osconfig.v1.PatchDeployments.RecurringSchedule getRecurr * *
      * Output only. Time the patch deployment was created. Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
      * 
* * @@ -1117,8 +1107,7 @@ public boolean hasCreateTime() { * *
      * Output only. Time the patch deployment was created. Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
      * 
* * @@ -1135,8 +1124,7 @@ public com.google.protobuf.Timestamp getCreateTime() { * *
      * Output only. Time the patch deployment was created. Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
      * 
* * @@ -1154,8 +1142,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { * *
      * Output only. Time the patch deployment was last updated. Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * [RFC3339]("https://www.ietf.org/rfc/rfc3339.txt) text format.
      * 
* * @@ -1172,8 +1159,7 @@ public boolean hasUpdateTime() { * *
      * Output only. Time the patch deployment was last updated. Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * [RFC3339]("https://www.ietf.org/rfc/rfc3339.txt) text format.
      * 
* * @@ -1190,8 +1176,7 @@ public com.google.protobuf.Timestamp getUpdateTime() { * *
      * Output only. Time the patch deployment was last updated. Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * [RFC3339]("https://www.ietf.org/rfc/rfc3339.txt) text format.
      * 
* * @@ -1209,9 +1194,8 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { * *
      * Output only. The last time a patch job was started by this deployment.
-     * Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
+     * format.
      * 
* * @@ -1228,9 +1212,8 @@ public boolean hasLastExecuteTime() { * *
      * Output only. The last time a patch job was started by this deployment.
-     * Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
+     * format.
      * 
* * @@ -1249,9 +1232,8 @@ public com.google.protobuf.Timestamp getLastExecuteTime() { * *
      * Output only. The last time a patch job was started by this deployment.
-     * Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
+     * format.
      * 
* * @@ -1565,7 +1547,7 @@ protected Builder newBuilderForType( * complete a patch. These configurations include instance filter, package * repository settings, and a schedule. For more information about creating and * managing patch deployments, see [Scheduling patch - * jobs](/compute/docs/os-patch-management/schedule-patch-jobs). + * jobs](https://cloud.google.com/compute/docs/os-patch-management/schedule-patch-jobs). *
* * Protobuf type {@code google.cloud.osconfig.v1.PatchDeployment} @@ -3176,8 +3158,7 @@ public Builder clearRecurringSchedule() { * *
        * Output only. Time the patch deployment was created. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3194,8 +3175,7 @@ public boolean hasCreateTime() { * *
        * Output only. Time the patch deployment was created. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3218,8 +3198,7 @@ public com.google.protobuf.Timestamp getCreateTime() { * *
        * Output only. Time the patch deployment was created. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3244,8 +3223,7 @@ public Builder setCreateTime(com.google.protobuf.Timestamp value) { * *
        * Output only. Time the patch deployment was created. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3267,8 +3245,7 @@ public Builder setCreateTime(com.google.protobuf.Timestamp.Builder builderForVal * *
        * Output only. Time the patch deployment was created. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3297,8 +3274,7 @@ public Builder mergeCreateTime(com.google.protobuf.Timestamp value) { * *
        * Output only. Time the patch deployment was created. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3321,8 +3297,7 @@ public Builder clearCreateTime() { * *
        * Output only. Time the patch deployment was created. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3339,8 +3314,7 @@ public com.google.protobuf.Timestamp.Builder getCreateTimeBuilder() { * *
        * Output only. Time the patch deployment was created. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3361,8 +3335,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { * *
        * Output only. Time the patch deployment was created. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3397,8 +3370,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { * *
        * Output only. Time the patch deployment was last updated. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339]("https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3415,8 +3387,7 @@ public boolean hasUpdateTime() { * *
        * Output only. Time the patch deployment was last updated. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339]("https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3439,8 +3410,7 @@ public com.google.protobuf.Timestamp getUpdateTime() { * *
        * Output only. Time the patch deployment was last updated. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339]("https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3465,8 +3435,7 @@ public Builder setUpdateTime(com.google.protobuf.Timestamp value) { * *
        * Output only. Time the patch deployment was last updated. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339]("https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3488,8 +3457,7 @@ public Builder setUpdateTime(com.google.protobuf.Timestamp.Builder builderForVal * *
        * Output only. Time the patch deployment was last updated. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339]("https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3518,8 +3486,7 @@ public Builder mergeUpdateTime(com.google.protobuf.Timestamp value) { * *
        * Output only. Time the patch deployment was last updated. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339]("https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3542,8 +3509,7 @@ public Builder clearUpdateTime() { * *
        * Output only. Time the patch deployment was last updated. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339]("https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3560,8 +3526,7 @@ public com.google.protobuf.Timestamp.Builder getUpdateTimeBuilder() { * *
        * Output only. Time the patch deployment was last updated. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339]("https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3582,8 +3547,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { * *
        * Output only. Time the patch deployment was last updated. Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * [RFC3339]("https://www.ietf.org/rfc/rfc3339.txt) text format.
        * 
* * @@ -3618,9 +3582,8 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { * *
        * Output only. The last time a patch job was started by this deployment.
-       * Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
+       * format.
        * 
* * @@ -3637,9 +3600,8 @@ public boolean hasLastExecuteTime() { * *
        * Output only. The last time a patch job was started by this deployment.
-       * Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
+       * format.
        * 
* * @@ -3662,9 +3624,8 @@ public com.google.protobuf.Timestamp getLastExecuteTime() { * *
        * Output only. The last time a patch job was started by this deployment.
-       * Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
+       * format.
        * 
* * @@ -3689,9 +3650,8 @@ public Builder setLastExecuteTime(com.google.protobuf.Timestamp value) { * *
        * Output only. The last time a patch job was started by this deployment.
-       * Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
+       * format.
        * 
* * @@ -3713,9 +3673,8 @@ public Builder setLastExecuteTime(com.google.protobuf.Timestamp.Builder builderF * *
        * Output only. The last time a patch job was started by this deployment.
-       * Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
+       * format.
        * 
* * @@ -3744,9 +3703,8 @@ public Builder mergeLastExecuteTime(com.google.protobuf.Timestamp value) { * *
        * Output only. The last time a patch job was started by this deployment.
-       * Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
+       * format.
        * 
* * @@ -3769,9 +3727,8 @@ public Builder clearLastExecuteTime() { * *
        * Output only. The last time a patch job was started by this deployment.
-       * Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
+       * format.
        * 
* * @@ -3788,9 +3745,8 @@ public com.google.protobuf.Timestamp.Builder getLastExecuteTimeBuilder() { * *
        * Output only. The last time a patch job was started by this deployment.
-       * Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
+       * format.
        * 
* * @@ -3811,9 +3767,8 @@ public com.google.protobuf.TimestampOrBuilder getLastExecuteTimeOrBuilder() { * *
        * Output only. The last time a patch job was started by this deployment.
-       * Timestamp is in
-       * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-       * text format.
+       * Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
+       * format.
        * 
* * @@ -3940,8 +3895,7 @@ public interface OneTimeScheduleOrBuilder * *
    * Sets the time for a one time patch deployment. Timestamp is in
-   * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-   * text format.
+   * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
    * 
* * Protobuf type {@code google.cloud.osconfig.v1.OneTimeSchedule} @@ -4255,8 +4209,7 @@ protected Builder newBuilderForType( * *
      * Sets the time for a one time patch deployment. Timestamp is in
-     * <a href="https://www.ietf.org/rfc/rfc3339.txt" target="_blank">RFC3339</a>
-     * text format.
+     * [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
      * 
* * Protobuf type {@code google.cloud.osconfig.v1.OneTimeSchedule} diff --git a/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/PatchJobName.java b/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/PatchJobName.java new file mode 100644 index 00000000..aa966a4b --- /dev/null +++ b/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/PatchJobName.java @@ -0,0 +1,182 @@ +/* + * 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 + * + * https://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. + */ + +package com.google.cloud.osconfig.v1; + +import com.google.api.pathtemplate.PathTemplate; +import com.google.api.resourcenames.ResourceName; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** AUTO-GENERATED DOCUMENTATION AND CLASS */ +@javax.annotation.Generated("by GAPIC protoc plugin") +public class PatchJobName implements ResourceName { + + private static final PathTemplate PATH_TEMPLATE = + PathTemplate.createWithoutUrlEncoding("projects/{project}/patchJobs/{patch_job}"); + + private volatile Map fieldValuesMap; + + private final String project; + private final String patchJob; + + public String getProject() { + return project; + } + + public String getPatchJob() { + return patchJob; + } + + public static Builder newBuilder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder(this); + } + + private PatchJobName(Builder builder) { + project = Preconditions.checkNotNull(builder.getProject()); + patchJob = Preconditions.checkNotNull(builder.getPatchJob()); + } + + public static PatchJobName of(String project, String patchJob) { + return newBuilder().setProject(project).setPatchJob(patchJob).build(); + } + + public static String format(String project, String patchJob) { + return newBuilder().setProject(project).setPatchJob(patchJob).build().toString(); + } + + public static PatchJobName parse(String formattedString) { + if (formattedString.isEmpty()) { + return null; + } + Map matchMap = + PATH_TEMPLATE.validatedMatch( + formattedString, "PatchJobName.parse: formattedString not in valid format"); + return of(matchMap.get("project"), matchMap.get("patch_job")); + } + + public static List parseList(List formattedStrings) { + List list = new ArrayList<>(formattedStrings.size()); + for (String formattedString : formattedStrings) { + list.add(parse(formattedString)); + } + return list; + } + + public static List toStringList(List values) { + List list = new ArrayList(values.size()); + for (PatchJobName value : values) { + if (value == null) { + list.add(""); + } else { + list.add(value.toString()); + } + } + return list; + } + + public static boolean isParsableFrom(String formattedString) { + return PATH_TEMPLATE.matches(formattedString); + } + + public Map getFieldValuesMap() { + if (fieldValuesMap == null) { + synchronized (this) { + if (fieldValuesMap == null) { + ImmutableMap.Builder fieldMapBuilder = ImmutableMap.builder(); + fieldMapBuilder.put("project", project); + fieldMapBuilder.put("patchJob", patchJob); + fieldValuesMap = fieldMapBuilder.build(); + } + } + } + return fieldValuesMap; + } + + public String getFieldValue(String fieldName) { + return getFieldValuesMap().get(fieldName); + } + + @Override + public String toString() { + return PATH_TEMPLATE.instantiate("project", project, "patch_job", patchJob); + } + + /** Builder for PatchJobName. */ + public static class Builder { + + private String project; + private String patchJob; + + public String getProject() { + return project; + } + + public String getPatchJob() { + return patchJob; + } + + public Builder setProject(String project) { + this.project = project; + return this; + } + + public Builder setPatchJob(String patchJob) { + this.patchJob = patchJob; + return this; + } + + private Builder() {} + + private Builder(PatchJobName patchJobName) { + project = patchJobName.project; + patchJob = patchJobName.patchJob; + } + + public PatchJobName build() { + return new PatchJobName(this); + } + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o instanceof PatchJobName) { + PatchJobName that = (PatchJobName) o; + return (this.project.equals(that.project)) && (this.patchJob.equals(that.patchJob)); + } + return false; + } + + @Override + public int hashCode() { + int h = 1; + h *= 1000003; + h ^= project.hashCode(); + h *= 1000003; + h ^= patchJob.hashCode(); + return h; + } +} diff --git a/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/PatchJobs.java b/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/PatchJobs.java index 21642e89..d7607830 100644 --- a/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/PatchJobs.java +++ b/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/PatchJobs.java @@ -252,7 +252,7 @@ public interface ExecutePatchJobRequestOrBuilder * * *
-   * A request message to initiate patching across Google Compute Engine
+   * A request message to initiate patching across Compute Engine
    * instances.
    * 
* @@ -961,7 +961,7 @@ protected Builder newBuilderForType( * * *
-     * A request message to initiate patching across Google Compute Engine
+     * A request message to initiate patching across Compute Engine
      * instances.
      * 
* @@ -5567,7 +5567,7 @@ public interface PatchJobInstanceDetailsOrBuilder * Patch details for a VM instance. For more information about reviewing VM * instance details, see * [Listing all VM instance details for a specific patch - * job](/compute/docs/os-patch-management/manage-patch-jobs#list-instance-details). + * job](https://cloud.google.com/compute/docs/os-patch-management/manage-patch-jobs#list-instance-details). *
* * Protobuf type {@code google.cloud.osconfig.v1.PatchJobInstanceDetails} @@ -6089,7 +6089,7 @@ protected Builder newBuilderForType( * Patch details for a VM instance. For more information about reviewing VM * instance details, see * [Listing all VM instance details for a specific patch - * job](/compute/docs/os-patch-management/manage-patch-jobs#list-instance-details). + * job](https://cloud.google.com/compute/docs/os-patch-management/manage-patch-jobs#list-instance-details). *
* * Protobuf type {@code google.cloud.osconfig.v1.PatchJobInstanceDetails} @@ -9629,7 +9629,8 @@ public interface PatchJobOrBuilder * Instances details are not included in the job. To paginate through instance * details, use ListPatchJobInstanceDetails. * For more information about patch jobs, see - * [Creating patch jobs](/compute/docs/os-patch-management/create-patch-job). + * [Creating patch + * jobs](https://cloud.google.com/compute/docs/os-patch-management/create-patch-job). *
* * Protobuf type {@code google.cloud.osconfig.v1.PatchJob} @@ -13081,7 +13082,8 @@ protected Builder newBuilderForType( * Instances details are not included in the job. To paginate through instance * details, use ListPatchJobInstanceDetails. * For more information about patch jobs, see - * [Creating patch jobs](/compute/docs/os-patch-management/create-patch-job). + * [Creating patch + * jobs](https://cloud.google.com/compute/docs/os-patch-management/create-patch-job). *
* * Protobuf type {@code google.cloud.osconfig.v1.PatchJob} @@ -28462,7 +28464,7 @@ public interface ExecStepConfigOrBuilder * * *
-     * A Google Cloud Storage object containing the executable.
+     * A Cloud Storage object containing the executable.
      * 
* * .google.cloud.osconfig.v1.GcsObject gcs_object = 2; @@ -28474,7 +28476,7 @@ public interface ExecStepConfigOrBuilder * * *
-     * A Google Cloud Storage object containing the executable.
+     * A Cloud Storage object containing the executable.
      * 
* * .google.cloud.osconfig.v1.GcsObject gcs_object = 2; @@ -28486,7 +28488,7 @@ public interface ExecStepConfigOrBuilder * * *
-     * A Google Cloud Storage object containing the executable.
+     * A Cloud Storage object containing the executable.
      * 
* * .google.cloud.osconfig.v1.GcsObject gcs_object = 2; @@ -28985,7 +28987,7 @@ public com.google.protobuf.ByteString getLocalPathBytes() { * * *
-     * A Google Cloud Storage object containing the executable.
+     * A Cloud Storage object containing the executable.
      * 
* * .google.cloud.osconfig.v1.GcsObject gcs_object = 2; @@ -28999,7 +29001,7 @@ public boolean hasGcsObject() { * * *
-     * A Google Cloud Storage object containing the executable.
+     * A Cloud Storage object containing the executable.
      * 
* * .google.cloud.osconfig.v1.GcsObject gcs_object = 2; @@ -29016,7 +29018,7 @@ public com.google.cloud.osconfig.v1.PatchJobs.GcsObject getGcsObject() { * * *
-     * A Google Cloud Storage object containing the executable.
+     * A Cloud Storage object containing the executable.
      * 
* * .google.cloud.osconfig.v1.GcsObject gcs_object = 2; @@ -29704,7 +29706,7 @@ public Builder setLocalPathBytes(com.google.protobuf.ByteString value) { * * *
-       * A Google Cloud Storage object containing the executable.
+       * A Cloud Storage object containing the executable.
        * 
* * .google.cloud.osconfig.v1.GcsObject gcs_object = 2; @@ -29718,7 +29720,7 @@ public boolean hasGcsObject() { * * *
-       * A Google Cloud Storage object containing the executable.
+       * A Cloud Storage object containing the executable.
        * 
* * .google.cloud.osconfig.v1.GcsObject gcs_object = 2; @@ -29742,7 +29744,7 @@ public com.google.cloud.osconfig.v1.PatchJobs.GcsObject getGcsObject() { * * *
-       * A Google Cloud Storage object containing the executable.
+       * A Cloud Storage object containing the executable.
        * 
* * .google.cloud.osconfig.v1.GcsObject gcs_object = 2; @@ -29764,7 +29766,7 @@ public Builder setGcsObject(com.google.cloud.osconfig.v1.PatchJobs.GcsObject val * * *
-       * A Google Cloud Storage object containing the executable.
+       * A Cloud Storage object containing the executable.
        * 
* * .google.cloud.osconfig.v1.GcsObject gcs_object = 2; @@ -29784,7 +29786,7 @@ public Builder setGcsObject( * * *
-       * A Google Cloud Storage object containing the executable.
+       * A Cloud Storage object containing the executable.
        * 
* * .google.cloud.osconfig.v1.GcsObject gcs_object = 2; @@ -29816,7 +29818,7 @@ public Builder mergeGcsObject(com.google.cloud.osconfig.v1.PatchJobs.GcsObject v * * *
-       * A Google Cloud Storage object containing the executable.
+       * A Cloud Storage object containing the executable.
        * 
* * .google.cloud.osconfig.v1.GcsObject gcs_object = 2; @@ -29841,7 +29843,7 @@ public Builder clearGcsObject() { * * *
-       * A Google Cloud Storage object containing the executable.
+       * A Cloud Storage object containing the executable.
        * 
* * .google.cloud.osconfig.v1.GcsObject gcs_object = 2; @@ -29853,7 +29855,7 @@ public com.google.cloud.osconfig.v1.PatchJobs.GcsObject.Builder getGcsObjectBuil * * *
-       * A Google Cloud Storage object containing the executable.
+       * A Cloud Storage object containing the executable.
        * 
* * .google.cloud.osconfig.v1.GcsObject gcs_object = 2; @@ -29872,7 +29874,7 @@ public com.google.cloud.osconfig.v1.PatchJobs.GcsObjectOrBuilder getGcsObjectOrB * * *
-       * A Google Cloud Storage object containing the executable.
+       * A Cloud Storage object containing the executable.
        * 
* * .google.cloud.osconfig.v1.GcsObject gcs_object = 2; @@ -30203,7 +30205,7 @@ public interface GcsObjectOrBuilder * * *
-     * Required. Bucket of the Google Cloud Storage object.
+     * Required. Bucket of the Cloud Storage object.
      * 
* * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -30215,7 +30217,7 @@ public interface GcsObjectOrBuilder * * *
-     * Required. Bucket of the Google Cloud Storage object.
+     * Required. Bucket of the Cloud Storage object.
      * 
* * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -30228,7 +30230,7 @@ public interface GcsObjectOrBuilder * * *
-     * Required. Name of the Google Cloud Storage object.
+     * Required. Name of the Cloud Storage object.
      * 
* * string object = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -30240,7 +30242,7 @@ public interface GcsObjectOrBuilder * * *
-     * Required. Name of the Google Cloud Storage object.
+     * Required. Name of the Cloud Storage object.
      * 
* * string object = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -30253,7 +30255,7 @@ public interface GcsObjectOrBuilder * * *
-     * Required. Generation number of the Google Cloud Storage object. This is used to
+     * Required. Generation number of the Cloud Storage object. This is used to
      * ensure that the ExecStep specified by this PatchJob does not change.
      * 
* @@ -30267,7 +30269,7 @@ public interface GcsObjectOrBuilder * * *
-   * Google Cloud Storage object representation.
+   * Cloud Storage object representation.
    * 
* * Protobuf type {@code google.cloud.osconfig.v1.GcsObject} @@ -30375,7 +30377,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { * * *
-     * Required. Bucket of the Google Cloud Storage object.
+     * Required. Bucket of the Cloud Storage object.
      * 
* * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -30397,7 +30399,7 @@ public java.lang.String getBucket() { * * *
-     * Required. Bucket of the Google Cloud Storage object.
+     * Required. Bucket of the Cloud Storage object.
      * 
* * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -30422,7 +30424,7 @@ public com.google.protobuf.ByteString getBucketBytes() { * * *
-     * Required. Name of the Google Cloud Storage object.
+     * Required. Name of the Cloud Storage object.
      * 
* * string object = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -30444,7 +30446,7 @@ public java.lang.String getObject() { * * *
-     * Required. Name of the Google Cloud Storage object.
+     * Required. Name of the Cloud Storage object.
      * 
* * string object = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -30469,7 +30471,7 @@ public com.google.protobuf.ByteString getObjectBytes() { * * *
-     * Required. Generation number of the Google Cloud Storage object. This is used to
+     * Required. Generation number of the Cloud Storage object. This is used to
      * ensure that the ExecStep specified by this PatchJob does not change.
      * 
* @@ -30663,7 +30665,7 @@ protected Builder newBuilderForType( * * *
-     * Google Cloud Storage object representation.
+     * Cloud Storage object representation.
      * 
* * Protobuf type {@code google.cloud.osconfig.v1.GcsObject} @@ -30839,7 +30841,7 @@ public Builder mergeFrom( * * *
-       * Required. Bucket of the Google Cloud Storage object.
+       * Required. Bucket of the Cloud Storage object.
        * 
* * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -30861,7 +30863,7 @@ public java.lang.String getBucket() { * * *
-       * Required. Bucket of the Google Cloud Storage object.
+       * Required. Bucket of the Cloud Storage object.
        * 
* * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -30883,7 +30885,7 @@ public com.google.protobuf.ByteString getBucketBytes() { * * *
-       * Required. Bucket of the Google Cloud Storage object.
+       * Required. Bucket of the Cloud Storage object.
        * 
* * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -30904,7 +30906,7 @@ public Builder setBucket(java.lang.String value) { * * *
-       * Required. Bucket of the Google Cloud Storage object.
+       * Required. Bucket of the Cloud Storage object.
        * 
* * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -30921,7 +30923,7 @@ public Builder clearBucket() { * * *
-       * Required. Bucket of the Google Cloud Storage object.
+       * Required. Bucket of the Cloud Storage object.
        * 
* * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; @@ -30945,7 +30947,7 @@ public Builder setBucketBytes(com.google.protobuf.ByteString value) { * * *
-       * Required. Name of the Google Cloud Storage object.
+       * Required. Name of the Cloud Storage object.
        * 
* * string object = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -30967,7 +30969,7 @@ public java.lang.String getObject() { * * *
-       * Required. Name of the Google Cloud Storage object.
+       * Required. Name of the Cloud Storage object.
        * 
* * string object = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -30989,7 +30991,7 @@ public com.google.protobuf.ByteString getObjectBytes() { * * *
-       * Required. Name of the Google Cloud Storage object.
+       * Required. Name of the Cloud Storage object.
        * 
* * string object = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -31010,7 +31012,7 @@ public Builder setObject(java.lang.String value) { * * *
-       * Required. Name of the Google Cloud Storage object.
+       * Required. Name of the Cloud Storage object.
        * 
* * string object = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -31027,7 +31029,7 @@ public Builder clearObject() { * * *
-       * Required. Name of the Google Cloud Storage object.
+       * Required. Name of the Cloud Storage object.
        * 
* * string object = 2 [(.google.api.field_behavior) = REQUIRED]; @@ -31051,7 +31053,7 @@ public Builder setObjectBytes(com.google.protobuf.ByteString value) { * * *
-       * Required. Generation number of the Google Cloud Storage object. This is used to
+       * Required. Generation number of the Cloud Storage object. This is used to
        * ensure that the ExecStep specified by this PatchJob does not change.
        * 
* @@ -31066,7 +31068,7 @@ public long getGenerationNumber() { * * *
-       * Required. Generation number of the Google Cloud Storage object. This is used to
+       * Required. Generation number of the Cloud Storage object. This is used to
        * ensure that the ExecStep specified by this PatchJob does not change.
        * 
* @@ -31085,7 +31087,7 @@ public Builder setGenerationNumber(long value) { * * *
-       * Required. Generation number of the Google Cloud Storage object. This is used to
+       * Required. Generation number of the Cloud Storage object. This is used to
        * ensure that the ExecStep specified by this PatchJob does not change.
        * 
* @@ -31175,8 +31177,8 @@ public interface PatchInstanceFilterOrBuilder * * *
-     * Targets VM instances matching at least one of these label sets. This allows
-     * targeting of disparate groups, for example "env=prod or env=staging".
+     * Targets VM instances matching ANY of these GroupLabels. This allows
+     * targeting of disparate groups of VM instances.
      * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -31188,8 +31190,8 @@ public interface PatchInstanceFilterOrBuilder * * *
-     * Targets VM instances matching at least one of these label sets. This allows
-     * targeting of disparate groups, for example "env=prod or env=staging".
+     * Targets VM instances matching ANY of these GroupLabels. This allows
+     * targeting of disparate groups of VM instances.
      * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -31200,8 +31202,8 @@ public interface PatchInstanceFilterOrBuilder * * *
-     * Targets VM instances matching at least one of these label sets. This allows
-     * targeting of disparate groups, for example "env=prod or env=staging".
+     * Targets VM instances matching ANY of these GroupLabels. This allows
+     * targeting of disparate groups of VM instances.
      * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -31212,8 +31214,8 @@ public interface PatchInstanceFilterOrBuilder * * *
-     * Targets VM instances matching at least one of these label sets. This allows
-     * targeting of disparate groups, for example "env=prod or env=staging".
+     * Targets VM instances matching ANY of these GroupLabels. This allows
+     * targeting of disparate groups of VM instances.
      * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -31227,8 +31229,8 @@ public interface PatchInstanceFilterOrBuilder * * *
-     * Targets VM instances matching at least one of these label sets. This allows
-     * targeting of disparate groups, for example "env=prod or env=staging".
+     * Targets VM instances matching ANY of these GroupLabels. This allows
+     * targeting of disparate groups of VM instances.
      * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -31578,7 +31580,7 @@ public interface GroupLabelOrBuilder * * *
-       * Google Compute Engine instance labels that must be present for a VM
+       * Compute Engine instance labels that must be present for a VM
        * instance to be targeted by this filter.
        * 
* @@ -31589,7 +31591,7 @@ public interface GroupLabelOrBuilder * * *
-       * Google Compute Engine instance labels that must be present for a VM
+       * Compute Engine instance labels that must be present for a VM
        * instance to be targeted by this filter.
        * 
* @@ -31603,7 +31605,7 @@ public interface GroupLabelOrBuilder * * *
-       * Google Compute Engine instance labels that must be present for a VM
+       * Compute Engine instance labels that must be present for a VM
        * instance to be targeted by this filter.
        * 
* @@ -31614,7 +31616,7 @@ public interface GroupLabelOrBuilder * * *
-       * Google Compute Engine instance labels that must be present for a VM
+       * Compute Engine instance labels that must be present for a VM
        * instance to be targeted by this filter.
        * 
* @@ -31625,7 +31627,7 @@ public interface GroupLabelOrBuilder * * *
-       * Google Compute Engine instance labels that must be present for a VM
+       * Compute Engine instance labels that must be present for a VM
        * instance to be targeted by this filter.
        * 
* @@ -31637,8 +31639,13 @@ public interface GroupLabelOrBuilder * * *
-     * Represents a group of VMs that can be identified as having all these
-     * labels, for example "env=prod and app=web".
+     * Targets a group of VM instances by using their [assigned
+     * labels](https://cloud.google.com/compute/docs/labeling-resources). Labels
+     * are key-value pairs. A `GroupLabel` is a combination of labels
+     * that is used to target VMs for a patch job.
+     * For example, a patch job can target VMs that have the following
+     * `GroupLabel`: `{"env":"test", "app":"web"}`. This means that the patch job
+     * is applied to VMs that have both the labels `env=test` and `app=web`.
      * 
* * Protobuf type {@code google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel} @@ -31776,7 +31783,7 @@ public int getLabelsCount() { * * *
-       * Google Compute Engine instance labels that must be present for a VM
+       * Compute Engine instance labels that must be present for a VM
        * instance to be targeted by this filter.
        * 
* @@ -31797,7 +31804,7 @@ public java.util.Map getLabels() { * * *
-       * Google Compute Engine instance labels that must be present for a VM
+       * Compute Engine instance labels that must be present for a VM
        * instance to be targeted by this filter.
        * 
* @@ -31810,7 +31817,7 @@ public java.util.Map getLabelsMap() { * * *
-       * Google Compute Engine instance labels that must be present for a VM
+       * Compute Engine instance labels that must be present for a VM
        * instance to be targeted by this filter.
        * 
* @@ -31828,7 +31835,7 @@ public java.lang.String getLabelsOrDefault( * * *
-       * Google Compute Engine instance labels that must be present for a VM
+       * Compute Engine instance labels that must be present for a VM
        * instance to be targeted by this filter.
        * 
* @@ -32021,8 +32028,13 @@ protected Builder newBuilderForType( * * *
-       * Represents a group of VMs that can be identified as having all these
-       * labels, for example "env=prod and app=web".
+       * Targets a group of VM instances by using their [assigned
+       * labels](https://cloud.google.com/compute/docs/labeling-resources). Labels
+       * are key-value pairs. A `GroupLabel` is a combination of labels
+       * that is used to target VMs for a patch job.
+       * For example, a patch job can target VMs that have the following
+       * `GroupLabel`: `{"env":"test", "app":"web"}`. This means that the patch job
+       * is applied to VMs that have both the labels `env=test` and `app=web`.
        * 
* * Protobuf type {@code google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel} @@ -32244,7 +32256,7 @@ public int getLabelsCount() { * * *
-         * Google Compute Engine instance labels that must be present for a VM
+         * Compute Engine instance labels that must be present for a VM
          * instance to be targeted by this filter.
          * 
* @@ -32265,7 +32277,7 @@ public java.util.Map getLabels() { * * *
-         * Google Compute Engine instance labels that must be present for a VM
+         * Compute Engine instance labels that must be present for a VM
          * instance to be targeted by this filter.
          * 
* @@ -32278,7 +32290,7 @@ public java.util.Map getLabelsMap() { * * *
-         * Google Compute Engine instance labels that must be present for a VM
+         * Compute Engine instance labels that must be present for a VM
          * instance to be targeted by this filter.
          * 
* @@ -32296,7 +32308,7 @@ public java.lang.String getLabelsOrDefault( * * *
-         * Google Compute Engine instance labels that must be present for a VM
+         * Compute Engine instance labels that must be present for a VM
          * instance to be targeted by this filter.
          * 
* @@ -32321,7 +32333,7 @@ public Builder clearLabels() { * * *
-         * Google Compute Engine instance labels that must be present for a VM
+         * Compute Engine instance labels that must be present for a VM
          * instance to be targeted by this filter.
          * 
* @@ -32343,7 +32355,7 @@ public java.util.Map getMutableLabels() { * * *
-         * Google Compute Engine instance labels that must be present for a VM
+         * Compute Engine instance labels that must be present for a VM
          * instance to be targeted by this filter.
          * 
* @@ -32363,7 +32375,7 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { * * *
-         * Google Compute Engine instance labels that must be present for a VM
+         * Compute Engine instance labels that must be present for a VM
          * instance to be targeted by this filter.
          * 
* @@ -32455,8 +32467,8 @@ public boolean getAll() { * * *
-     * Targets VM instances matching at least one of these label sets. This allows
-     * targeting of disparate groups, for example "env=prod or env=staging".
+     * Targets VM instances matching ANY of these GroupLabels. This allows
+     * targeting of disparate groups of VM instances.
      * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -32470,8 +32482,8 @@ public boolean getAll() { * * *
-     * Targets VM instances matching at least one of these label sets. This allows
-     * targeting of disparate groups, for example "env=prod or env=staging".
+     * Targets VM instances matching ANY of these GroupLabels. This allows
+     * targeting of disparate groups of VM instances.
      * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -32487,8 +32499,8 @@ public boolean getAll() { * * *
-     * Targets VM instances matching at least one of these label sets. This allows
-     * targeting of disparate groups, for example "env=prod or env=staging".
+     * Targets VM instances matching ANY of these GroupLabels. This allows
+     * targeting of disparate groups of VM instances.
      * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -32501,8 +32513,8 @@ public int getGroupLabelsCount() { * * *
-     * Targets VM instances matching at least one of these label sets. This allows
-     * targeting of disparate groups, for example "env=prod or env=staging".
+     * Targets VM instances matching ANY of these GroupLabels. This allows
+     * targeting of disparate groups of VM instances.
      * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -32516,8 +32528,8 @@ public com.google.cloud.osconfig.v1.PatchJobs.PatchInstanceFilter.GroupLabel get * * *
-     * Targets VM instances matching at least one of these label sets. This allows
-     * targeting of disparate groups, for example "env=prod or env=staging".
+     * Targets VM instances matching ANY of these GroupLabels. This allows
+     * targeting of disparate groups of VM instances.
      * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33297,8 +33309,8 @@ private void ensureGroupLabelsIsMutable() { * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33316,8 +33328,8 @@ private void ensureGroupLabelsIsMutable() { * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33334,8 +33346,8 @@ public int getGroupLabelsCount() { * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33353,8 +33365,8 @@ public com.google.cloud.osconfig.v1.PatchJobs.PatchInstanceFilter.GroupLabel get * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33378,8 +33390,8 @@ public Builder setGroupLabels( * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33402,8 +33414,8 @@ public Builder setGroupLabels( * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33427,8 +33439,8 @@ public Builder addGroupLabels( * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33452,8 +33464,8 @@ public Builder addGroupLabels( * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33475,8 +33487,8 @@ public Builder addGroupLabels( * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33499,8 +33511,8 @@ public Builder addGroupLabels( * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33523,8 +33535,8 @@ public Builder addAllGroupLabels( * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33544,8 +33556,8 @@ public Builder clearGroupLabels() { * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33565,8 +33577,8 @@ public Builder removeGroupLabels(int index) { * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33580,8 +33592,8 @@ public Builder removeGroupLabels(int index) { * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33599,8 +33611,8 @@ public Builder removeGroupLabels(int index) { * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33620,8 +33632,8 @@ public Builder removeGroupLabels(int index) { * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33638,8 +33650,8 @@ public Builder removeGroupLabels(int index) { * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; @@ -33657,8 +33669,8 @@ public Builder removeGroupLabels(int index) { * * *
-       * Targets VM instances matching at least one of these label sets. This allows
-       * targeting of disparate groups, for example "env=prod or env=staging".
+       * Targets VM instances matching ANY of these GroupLabels. This allows
+       * targeting of disparate groups of VM instances.
        * 
* * repeated .google.cloud.osconfig.v1.PatchInstanceFilter.GroupLabel group_labels = 2; diff --git a/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/ProjectName.java b/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/ProjectName.java new file mode 100644 index 00000000..802da170 --- /dev/null +++ b/proto-google-cloud-os-config-v1/src/main/java/com/google/cloud/osconfig/v1/ProjectName.java @@ -0,0 +1,162 @@ +/* + * 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 + * + * https://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. + */ + +package com.google.cloud.osconfig.v1; + +import com.google.api.pathtemplate.PathTemplate; +import com.google.api.resourcenames.ResourceName; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** AUTO-GENERATED DOCUMENTATION AND CLASS */ +@javax.annotation.Generated("by GAPIC protoc plugin") +public class ProjectName implements ResourceName { + + private static final PathTemplate PATH_TEMPLATE = + PathTemplate.createWithoutUrlEncoding("projects/{project}"); + + private volatile Map fieldValuesMap; + + private final String project; + + public String getProject() { + return project; + } + + public static Builder newBuilder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder(this); + } + + private ProjectName(Builder builder) { + project = Preconditions.checkNotNull(builder.getProject()); + } + + public static ProjectName of(String project) { + return newBuilder().setProject(project).build(); + } + + public static String format(String project) { + return newBuilder().setProject(project).build().toString(); + } + + public static ProjectName parse(String formattedString) { + if (formattedString.isEmpty()) { + return null; + } + Map matchMap = + PATH_TEMPLATE.validatedMatch( + formattedString, "ProjectName.parse: formattedString not in valid format"); + return of(matchMap.get("project")); + } + + public static List parseList(List formattedStrings) { + List list = new ArrayList<>(formattedStrings.size()); + for (String formattedString : formattedStrings) { + list.add(parse(formattedString)); + } + return list; + } + + public static List toStringList(List values) { + List list = new ArrayList(values.size()); + for (ProjectName value : values) { + if (value == null) { + list.add(""); + } else { + list.add(value.toString()); + } + } + return list; + } + + public static boolean isParsableFrom(String formattedString) { + return PATH_TEMPLATE.matches(formattedString); + } + + public Map getFieldValuesMap() { + if (fieldValuesMap == null) { + synchronized (this) { + if (fieldValuesMap == null) { + ImmutableMap.Builder fieldMapBuilder = ImmutableMap.builder(); + fieldMapBuilder.put("project", project); + fieldValuesMap = fieldMapBuilder.build(); + } + } + } + return fieldValuesMap; + } + + public String getFieldValue(String fieldName) { + return getFieldValuesMap().get(fieldName); + } + + @Override + public String toString() { + return PATH_TEMPLATE.instantiate("project", project); + } + + /** Builder for ProjectName. */ + public static class Builder { + + private String project; + + public String getProject() { + return project; + } + + public Builder setProject(String project) { + this.project = project; + return this; + } + + private Builder() {} + + private Builder(ProjectName projectName) { + project = projectName.project; + } + + public ProjectName build() { + return new ProjectName(this); + } + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o instanceof ProjectName) { + ProjectName that = (ProjectName) o; + return (this.project.equals(that.project)); + } + return false; + } + + @Override + public int hashCode() { + int h = 1; + h *= 1000003; + h ^= project.hashCode(); + return h; + } +} diff --git a/proto-google-cloud-os-config-v1/src/main/proto/google/cloud/osconfig/v1/osconfig_service.proto b/proto-google-cloud-os-config-v1/src/main/proto/google/cloud/osconfig/v1/osconfig_service.proto index 6fada486..2a654eaa 100644 --- a/proto-google-cloud-os-config-v1/src/main/proto/google/cloud/osconfig/v1/osconfig_service.proto +++ b/proto-google-cloud-os-config-v1/src/main/proto/google/cloud/osconfig/v1/osconfig_service.proto @@ -18,6 +18,7 @@ package google.cloud.osconfig.v1; import "google/api/annotations.proto"; import "google/api/client.proto"; +import "google/api/resource.proto"; import "google/cloud/osconfig/v1/patch_deployments.proto"; import "google/cloud/osconfig/v1/patch_jobs.proto"; import "google/protobuf/empty.proto"; @@ -28,6 +29,10 @@ option java_outer_classname = "OsConfigProto"; option java_package = "com.google.cloud.osconfig.v1"; option php_namespace = "Google\\Cloud\\OsConfig\\V1"; option ruby_package = "Google::Cloud::OsConfig::V1"; +option (google.api.resource_definition) = { + type: "compute.googleapis.com/Instance" + pattern: "projects/{project}/zones/{zone}/instances/{instance}" +}; // OS Config API // diff --git a/proto-google-cloud-os-config-v1/src/main/proto/google/cloud/osconfig/v1/patch_deployments.proto b/proto-google-cloud-os-config-v1/src/main/proto/google/cloud/osconfig/v1/patch_deployments.proto index 6760e1cf..7d699222 100644 --- a/proto-google-cloud-os-config-v1/src/main/proto/google/cloud/osconfig/v1/patch_deployments.proto +++ b/proto-google-cloud-os-config-v1/src/main/proto/google/cloud/osconfig/v1/patch_deployments.proto @@ -36,7 +36,7 @@ option ruby_package = "Google::Cloud::OsConfig::V1"; // complete a patch. These configurations include instance filter, package // repository settings, and a schedule. For more information about creating and // managing patch deployments, see [Scheduling patch -// jobs](/compute/docs/os-patch-management/schedule-patch-jobs). +// jobs](https://cloud.google.com/compute/docs/os-patch-management/schedule-patch-jobs). message PatchDeployment { option (google.api.resource) = { type: "osconfig.googleapis.com/PatchDeployment" @@ -72,25 +72,21 @@ message PatchDeployment { } // Output only. Time the patch deployment was created. Timestamp is in - // RFC3339 - // text format. + // [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. google.protobuf.Timestamp create_time = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. Time the patch deployment was last updated. Timestamp is in - // RFC3339 - // text format. + // [RFC3339]("https://www.ietf.org/rfc/rfc3339.txt) text format. google.protobuf.Timestamp update_time = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The last time a patch job was started by this deployment. - // Timestamp is in - // RFC3339 - // text format. + // Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text + // format. google.protobuf.Timestamp last_execute_time = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; } // Sets the time for a one time patch deployment. Timestamp is in -// RFC3339 -// text format. +// [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. message OneTimeSchedule { // Required. The desired patch job execution time. google.protobuf.Timestamp execute_time = 1 [(google.api.field_behavior) = REQUIRED]; diff --git a/proto-google-cloud-os-config-v1/src/main/proto/google/cloud/osconfig/v1/patch_jobs.proto b/proto-google-cloud-os-config-v1/src/main/proto/google/cloud/osconfig/v1/patch_jobs.proto index 26c2eb83..cd274d64 100644 --- a/proto-google-cloud-os-config-v1/src/main/proto/google/cloud/osconfig/v1/patch_jobs.proto +++ b/proto-google-cloud-os-config-v1/src/main/proto/google/cloud/osconfig/v1/patch_jobs.proto @@ -28,7 +28,7 @@ option java_package = "com.google.cloud.osconfig.v1"; option php_namespace = "Google\\Cloud\\OsConfig\\V1"; option ruby_package = "Google::Cloud::OsConfig::V1"; -// A request message to initiate patching across Google Compute Engine +// A request message to initiate patching across Compute Engine // instances. message ExecutePatchJobRequest { // Required. The project in which to run this patch in the form `projects/*` @@ -109,7 +109,7 @@ message ListPatchJobInstanceDetailsResponse { // Patch details for a VM instance. For more information about reviewing VM // instance details, see // [Listing all VM instance details for a specific patch -// job](/compute/docs/os-patch-management/manage-patch-jobs#list-instance-details). +// job](https://cloud.google.com/compute/docs/os-patch-management/manage-patch-jobs#list-instance-details). message PatchJobInstanceDetails { // The instance name in the form `projects/*/zones/*/instances/*` string name = 1 [(google.api.resource_reference) = { @@ -169,7 +169,8 @@ message ListPatchJobsResponse { // details, use ListPatchJobInstanceDetails. // // For more information about patch jobs, see -// [Creating patch jobs](/compute/docs/os-patch-management/create-patch-job). +// [Creating patch +// jobs](https://cloud.google.com/compute/docs/os-patch-management/create-patch-job). message PatchJob { option (google.api.resource) = { type: "osconfig.googleapis.com/PatchJob" @@ -612,7 +613,7 @@ message ExecStepConfig { // An absolute path to the executable on the VM. string local_path = 1; - // A Google Cloud Storage object containing the executable. + // A Cloud Storage object containing the executable. GcsObject gcs_object = 2; } @@ -627,15 +628,15 @@ message ExecStepConfig { Interpreter interpreter = 4; } -// Google Cloud Storage object representation. +// Cloud Storage object representation. message GcsObject { - // Required. Bucket of the Google Cloud Storage object. + // Required. Bucket of the Cloud Storage object. string bucket = 1 [(google.api.field_behavior) = REQUIRED]; - // Required. Name of the Google Cloud Storage object. + // Required. Name of the Cloud Storage object. string object = 2 [(google.api.field_behavior) = REQUIRED]; - // Required. Generation number of the Google Cloud Storage object. This is used to + // Required. Generation number of the Cloud Storage object. This is used to // ensure that the ExecStep specified by this PatchJob does not change. int64 generation_number = 3 [(google.api.field_behavior) = REQUIRED]; } @@ -645,10 +646,16 @@ message GcsObject { // specified, the patch job targets only VMs with those labels and in those // zones. message PatchInstanceFilter { - // Represents a group of VMs that can be identified as having all these - // labels, for example "env=prod and app=web". + // Targets a group of VM instances by using their [assigned + // labels](https://cloud.google.com/compute/docs/labeling-resources). Labels + // are key-value pairs. A `GroupLabel` is a combination of labels + // that is used to target VMs for a patch job. + // + // For example, a patch job can target VMs that have the following + // `GroupLabel`: `{"env":"test", "app":"web"}`. This means that the patch job + // is applied to VMs that have both the labels `env=test` and `app=web`. message GroupLabel { - // Google Compute Engine instance labels that must be present for a VM + // Compute Engine instance labels that must be present for a VM // instance to be targeted by this filter. map labels = 1; } @@ -657,8 +664,8 @@ message PatchInstanceFilter { // permitted. bool all = 1; - // Targets VM instances matching at least one of these label sets. This allows - // targeting of disparate groups, for example "env=prod or env=staging". + // Targets VM instances matching ANY of these GroupLabels. This allows + // targeting of disparate groups of VM instances. repeated GroupLabel group_labels = 2; // Targets VM instances in ANY of these zones. Leave empty to target VM diff --git a/synth.metadata b/synth.metadata index 87ed4f29..213bf177 100644 --- a/synth.metadata +++ b/synth.metadata @@ -4,22 +4,22 @@ "git": { "name": ".", "remote": "git@github.com:googleapis/java-os-config.git", - "sha": "91d111abedcbd10c6fd8c9bb4a2d0f8eb87e19c8" + "sha": "5d5e1a40a0d1df52adf70b73ec7acf1d9c4e5c87" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "23848c8f64a5e81a239d6133378468185f1756dc", - "internalRef": "304696192" + "sha": "4bef0001ac7040431ea24b6187424fdec9c08b1b", + "internalRef": "309990843" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "a2c1c4f89a5e220e7b39420ebea33623c7c72804" + "sha": "ab883569eb0257bbf16a6d825fd018b3adde3912" } } ],