<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="osconfig_v1.html">Cloud OS Config API</a> . <a href="osconfig_v1.projects.html">projects</a> . <a href="osconfig_v1.projects.patchDeployments.html">patchDeployments</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, patchDeploymentId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Create an OS Config patch deployment.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Delete an OS Config patch deployment.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Get an OS Config patch deployment.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Get a page of OS Config patch deployments.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body=None, patchDeploymentId=None, x__xgafv=None)</code>
  <pre>Create an OS Config patch deployment.

Args:
  parent: string, Required. The project to apply this patch deployment to in the form `projects/*`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Patch deployments are configurations that individual patch jobs use to
      # 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](https://cloud.google.com/compute/docs/os-patch-management/schedule-patch-jobs).
    &quot;lastExecuteTime&quot;: &quot;A String&quot;, # Output only. The last time a patch job was started by this deployment.
        # Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
        # format.
    &quot;patchConfig&quot;: { # Patch configuration specifications. Contains details on how to apply the # Optional. Patch configuration that is applied.
        # patch(es) to a VM instance.
      &quot;apt&quot;: { # Apt patching is completed by executing `apt-get update &amp;&amp; apt-get # Apt update settings. Use this setting to override the default `apt` patch
          # rules.
          # upgrade`. Additional options can be set to control how this is executed.
        &quot;excludes&quot;: [ # List of packages to exclude from update. These packages will be excluded
          &quot;A String&quot;,
        ],
        &quot;exclusivePackages&quot;: [ # An exclusive list of packages to be updated. These are the only packages
            # that will be updated. If these packages are not installed, they will be
            # ignored. This field cannot be specified with any other patch configuration
            # fields.
          &quot;A String&quot;,
        ],
        &quot;type&quot;: &quot;A String&quot;, # By changing the type to DIST, the patching is performed
            # using `apt-get dist-upgrade` instead.
      },
      &quot;yum&quot;: { # Yum patching is performed by executing `yum update`. Additional options # Yum update settings. Use this setting to override the default `yum` patch
          # rules.
          # can be set to control how this is executed.
          #
          # Note that not all settings are supported on all platforms.
        &quot;minimal&quot;: True or False, # Will cause patch to run `yum update-minimal` instead.
        &quot;excludes&quot;: [ # List of packages to exclude from update. These packages are excluded by
            # using the yum `--exclude` flag.
          &quot;A String&quot;,
        ],
        &quot;exclusivePackages&quot;: [ # An exclusive list of packages to be updated. These are the only packages
            # that will be updated. If these packages are not installed, they will be
            # ignored. This field must not be specified with any other patch
            # configuration fields.
          &quot;A String&quot;,
        ],
        &quot;security&quot;: True or False, # Adds the `--security` flag to `yum update`. Not supported on
            # all platforms.
      },
      &quot;goo&quot;: { # Googet patching is performed by running `googet update`. # Goo update settings. Use this setting to override the default `goo` patch
          # rules.
      },
      &quot;rebootConfig&quot;: &quot;A String&quot;, # Post-patch reboot settings.
      &quot;preStep&quot;: { # A step that runs an executable for a PatchJob. # The `ExecStep` to run before the patch update.
        &quot;linuxExecStepConfig&quot;: { # Common configurations for an ExecStep. # The ExecStepConfig for all Linux VMs targeted by the PatchJob.
          &quot;localPath&quot;: &quot;A String&quot;, # An absolute path to the executable on the VM.
          &quot;allowedSuccessCodes&quot;: [ # Defaults to [0]. A list of possible return values that the
              # execution can return to indicate a success.
            42,
          ],
          &quot;gcsObject&quot;: { # Cloud Storage object representation. # A Cloud Storage object containing the executable.
            &quot;bucket&quot;: &quot;A String&quot;, # Required. Bucket of the Cloud Storage object.
            &quot;object&quot;: &quot;A String&quot;, # Required. Name of the Cloud Storage object.
            &quot;generationNumber&quot;: &quot;A String&quot;, # Required. Generation number of the Cloud Storage object. This is used to
                # ensure that the ExecStep specified by this PatchJob does not change.
          },
          &quot;interpreter&quot;: &quot;A String&quot;, # The script interpreter to use to run the script. If no interpreter is
              # specified the script will be executed directly, which will likely
              # only succeed for scripts with [shebang lines]
              # (https://en.wikipedia.org/wiki/Shebang_\(Unix\)).
        },
        &quot;windowsExecStepConfig&quot;: { # Common configurations for an ExecStep. # The ExecStepConfig for all Windows VMs targeted by the PatchJob.
          &quot;localPath&quot;: &quot;A String&quot;, # An absolute path to the executable on the VM.
          &quot;allowedSuccessCodes&quot;: [ # Defaults to [0]. A list of possible return values that the
              # execution can return to indicate a success.
            42,
          ],
          &quot;gcsObject&quot;: { # Cloud Storage object representation. # A Cloud Storage object containing the executable.
            &quot;bucket&quot;: &quot;A String&quot;, # Required. Bucket of the Cloud Storage object.
            &quot;object&quot;: &quot;A String&quot;, # Required. Name of the Cloud Storage object.
            &quot;generationNumber&quot;: &quot;A String&quot;, # Required. Generation number of the Cloud Storage object. This is used to
                # ensure that the ExecStep specified by this PatchJob does not change.
          },
          &quot;interpreter&quot;: &quot;A String&quot;, # The script interpreter to use to run the script. If no interpreter is
              # specified the script will be executed directly, which will likely
              # only succeed for scripts with [shebang lines]
              # (https://en.wikipedia.org/wiki/Shebang_\(Unix\)).
        },
      },
      &quot;windowsUpdate&quot;: { # Windows patching is performed using the Windows Update Agent. # Windows update settings. Use this override the default windows patch rules.
        &quot;excludes&quot;: [ # List of KBs to exclude from update.
          &quot;A String&quot;,
        ],
        &quot;exclusivePatches&quot;: [ # An exclusive list of kbs to be updated. These are the only patches
            # that will be updated. This field must not be used with other
            # patch configurations.
          &quot;A String&quot;,
        ],
        &quot;classifications&quot;: [ # Only apply updates of these windows update classifications. If empty, all
            # updates are applied.
          &quot;A String&quot;,
        ],
      },
      &quot;zypper&quot;: { # Zypper patching is performed by running `zypper patch`. # Zypper update settings. Use this setting to override the default `zypper`
          # patch rules.
          # See also https://en.opensuse.org/SDB:Zypper_manual.
        &quot;exclusivePatches&quot;: [ # An exclusive list of patches to be updated. These are the only patches
            # that will be installed using &#x27;zypper patch patch:&lt;patch_name&gt;&#x27; command.
            # This field must not be used with any other patch configuration fields.
          &quot;A String&quot;,
        ],
        &quot;excludes&quot;: [ # List of patches to exclude from update.
          &quot;A String&quot;,
        ],
        &quot;withUpdate&quot;: True or False, # Adds the `--with-update` flag, to `zypper patch`.
        &quot;withOptional&quot;: True or False, # Adds the `--with-optional` flag to `zypper patch`.
        &quot;severities&quot;: [ # Install only patches with these severities.
            # Common severities include critical, important, moderate, and low.
          &quot;A String&quot;,
        ],
        &quot;categories&quot;: [ # Install only patches with these categories.
            # Common categories include security, recommended, and feature.
          &quot;A String&quot;,
        ],
      },
      &quot;postStep&quot;: { # A step that runs an executable for a PatchJob. # The `ExecStep` to run after the patch update.
        &quot;linuxExecStepConfig&quot;: { # Common configurations for an ExecStep. # The ExecStepConfig for all Linux VMs targeted by the PatchJob.
          &quot;localPath&quot;: &quot;A String&quot;, # An absolute path to the executable on the VM.
          &quot;allowedSuccessCodes&quot;: [ # Defaults to [0]. A list of possible return values that the
              # execution can return to indicate a success.
            42,
          ],
          &quot;gcsObject&quot;: { # Cloud Storage object representation. # A Cloud Storage object containing the executable.
            &quot;bucket&quot;: &quot;A String&quot;, # Required. Bucket of the Cloud Storage object.
            &quot;object&quot;: &quot;A String&quot;, # Required. Name of the Cloud Storage object.
            &quot;generationNumber&quot;: &quot;A String&quot;, # Required. Generation number of the Cloud Storage object. This is used to
                # ensure that the ExecStep specified by this PatchJob does not change.
          },
          &quot;interpreter&quot;: &quot;A String&quot;, # The script interpreter to use to run the script. If no interpreter is
              # specified the script will be executed directly, which will likely
              # only succeed for scripts with [shebang lines]
              # (https://en.wikipedia.org/wiki/Shebang_\(Unix\)).
        },
        &quot;windowsExecStepConfig&quot;: { # Common configurations for an ExecStep. # The ExecStepConfig for all Windows VMs targeted by the PatchJob.
          &quot;localPath&quot;: &quot;A String&quot;, # An absolute path to the executable on the VM.
          &quot;allowedSuccessCodes&quot;: [ # Defaults to [0]. A list of possible return values that the
              # execution can return to indicate a success.
            42,
          ],
          &quot;gcsObject&quot;: { # Cloud Storage object representation. # A Cloud Storage object containing the executable.
            &quot;bucket&quot;: &quot;A String&quot;, # Required. Bucket of the Cloud Storage object.
            &quot;object&quot;: &quot;A String&quot;, # Required. Name of the Cloud Storage object.
            &quot;generationNumber&quot;: &quot;A String&quot;, # Required. Generation number of the Cloud Storage object. This is used to
                # ensure that the ExecStep specified by this PatchJob does not change.
          },
          &quot;interpreter&quot;: &quot;A String&quot;, # The script interpreter to use to run the script. If no interpreter is
              # specified the script will be executed directly, which will likely
              # only succeed for scripts with [shebang lines]
              # (https://en.wikipedia.org/wiki/Shebang_\(Unix\)).
        },
      },
    },
    &quot;duration&quot;: &quot;A String&quot;, # Optional. Duration of the patch. After the duration ends, the patch times out.
    &quot;instanceFilter&quot;: { # A filter to target VM instances for patching. The targeted # Required. VM instances to patch.
        # VMs must meet all criteria specified. So if both labels and zones are
        # specified, the patch job targets only VMs with those labels and in those
        # zones.
      &quot;all&quot;: True or False, # Target all VM instances in the project. If true, no other criteria is
          # permitted.
      &quot;instances&quot;: [ # Targets any of the VM instances specified. Instances are specified by their
          # URI in the form `zones/[ZONE]/instances/[INSTANCE_NAME],
          # `projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]`, or
          # `https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]`
        &quot;A String&quot;,
      ],
      &quot;instanceNamePrefixes&quot;: [ # Targets VMs whose name starts with one of these prefixes. Similar to
          # labels, this is another way to group VMs when targeting configs, for
          # example prefix=&quot;prod-&quot;.
        &quot;A String&quot;,
      ],
      &quot;zones&quot;: [ # Targets VM instances in ANY of these zones. Leave empty to target VM
          # instances in any zone.
        &quot;A String&quot;,
      ],
      &quot;groupLabels&quot;: [ # Targets VM instances matching ANY of these GroupLabels. This allows
          # targeting of disparate groups of VM instances.
        { # 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`: `{&quot;env&quot;:&quot;test&quot;, &quot;app&quot;:&quot;web&quot;}`. This means that the patch job
            # is applied to VMs that have both the labels `env=test` and `app=web`.
          &quot;labels&quot;: { # Compute Engine instance labels that must be present for a VM
              # instance to be targeted by this filter.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
      ],
    },
    &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the patch deployment. Length of the description is limited
        # to 1024 characters.
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time the patch deployment was created. Timestamp is in
        # [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time the patch deployment was last updated. Timestamp is in
        # [RFC3339](&quot;https://www.ietf.org/rfc/rfc3339.txt) text format.
    &quot;name&quot;: &quot;A String&quot;, # Unique name for the patch deployment resource in a project. The patch
        # deployment name is in the form:
        # `projects/{project_id}/patchDeployments/{patch_deployment_id}`.
        # This field is ignored when you create a new patch deployment.
    &quot;recurringSchedule&quot;: { # Sets the time for recurring patch deployments. # Required. Schedule recurring executions.
      &quot;timeOfDay&quot;: { # Represents a time of day. The date and time zone are either not significant # Required. Time of the day to run a recurring deployment.
          # or are specified elsewhere. An API may choose to allow leap seconds. Related
          # types are google.type.Date and `google.protobuf.Timestamp`.
        &quot;minutes&quot;: 42, # Minutes of hour of day. Must be from 0 to 59.
        &quot;hours&quot;: 42, # Hours of day in 24 hour format. Should be from 0 to 23. An API may choose
            # to allow the value &quot;24:00:00&quot; for scenarios like business closing time.
        &quot;nanos&quot;: 42, # Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
        &quot;seconds&quot;: 42, # Seconds of minutes of the time. Must normally be from 0 to 59. An API may
            # allow the value 60 if it allows leap-seconds.
      },
      &quot;weekly&quot;: { # Represents a weekly schedule. # Required. Schedule with weekly executions.
        &quot;dayOfWeek&quot;: &quot;A String&quot;, # Required. Day of the week.
      },
      &quot;lastExecuteTime&quot;: &quot;A String&quot;, # Output only. The time the last patch job ran successfully.
      &quot;frequency&quot;: &quot;A String&quot;, # Required. The frequency unit of this recurring schedule.
      &quot;timeZone&quot;: { # Represents a time zone from the # Required. Defines the time zone that `time_of_day` is relative to.
          # The rules for daylight saving time are determined by the chosen time zone.
          # [IANA Time Zone Database](https://www.iana.org/time-zones).
        &quot;id&quot;: &quot;A String&quot;, # IANA Time Zone Database time zone, e.g. &quot;America/New_York&quot;.
        &quot;version&quot;: &quot;A String&quot;, # Optional. IANA Time Zone Database version number, e.g. &quot;2019a&quot;.
      },
      &quot;endTime&quot;: &quot;A String&quot;, # Optional. The end time at which a recurring patch deployment schedule is no longer
          # active.
      &quot;nextExecuteTime&quot;: &quot;A String&quot;, # Output only. The time the next patch job is scheduled to run.
      &quot;startTime&quot;: &quot;A String&quot;, # Optional. The time that the recurring schedule becomes effective.
          # Defaults to `create_time` of the patch deployment.
      &quot;monthly&quot;: { # Represents a monthly schedule. An example of a valid monthly schedule is # Required. Schedule with monthly executions.
          # &quot;on the third Tuesday of the month&quot; or &quot;on the 15th of the month&quot;.
        &quot;weekDayOfMonth&quot;: { # Represents one week day in a month. An example is &quot;the 4th Sunday&quot;. # Required. Week day in a month.
          &quot;weekOrdinal&quot;: 42, # Required. Week number in a month. 1-4 indicates the 1st to 4th week of the month. -1
              # indicates the last week of the month.
          &quot;dayOfWeek&quot;: &quot;A String&quot;, # Required. A day of the week.
        },
        &quot;monthDay&quot;: 42, # Required. One day of the month. 1-31 indicates the 1st to the 31st day. -1
            # indicates the last day of the month.
            # Months without the target day will be skipped. For example, a schedule to
            # run &quot;every month on the 31st&quot; will not run in February, April, June, etc.
      },
    },
    &quot;oneTimeSchedule&quot;: { # Sets the time for a one time patch deployment. Timestamp is in # Required. Schedule a one-time execution.
        # [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
      &quot;executeTime&quot;: &quot;A String&quot;, # Required. The desired patch job execution time.
    },
  }

  patchDeploymentId: string, 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.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Patch deployments are configurations that individual patch jobs use to
        # 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](https://cloud.google.com/compute/docs/os-patch-management/schedule-patch-jobs).
      &quot;lastExecuteTime&quot;: &quot;A String&quot;, # Output only. The last time a patch job was started by this deployment.
          # Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
          # format.
      &quot;patchConfig&quot;: { # Patch configuration specifications. Contains details on how to apply the # Optional. Patch configuration that is applied.
          # patch(es) to a VM instance.
        &quot;apt&quot;: { # Apt patching is completed by executing `apt-get update &amp;&amp; apt-get # Apt update settings. Use this setting to override the default `apt` patch
            # rules.
            # upgrade`. Additional options can be set to control how this is executed.
          &quot;excludes&quot;: [ # List of packages to exclude from update. These packages will be excluded
            &quot;A String&quot;,
          ],
          &quot;exclusivePackages&quot;: [ # An exclusive list of packages to be updated. These are the only packages
              # that will be updated. If these packages are not installed, they will be
              # ignored. This field cannot be specified with any other patch configuration
              # fields.
            &quot;A String&quot;,
          ],
          &quot;type&quot;: &quot;A String&quot;, # By changing the type to DIST, the patching is performed
              # using `apt-get dist-upgrade` instead.
        },
        &quot;yum&quot;: { # Yum patching is performed by executing `yum update`. Additional options # Yum update settings. Use this setting to override the default `yum` patch
            # rules.
            # can be set to control how this is executed.
            #
            # Note that not all settings are supported on all platforms.
          &quot;minimal&quot;: True or False, # Will cause patch to run `yum update-minimal` instead.
          &quot;excludes&quot;: [ # List of packages to exclude from update. These packages are excluded by
              # using the yum `--exclude` flag.
            &quot;A String&quot;,
          ],
          &quot;exclusivePackages&quot;: [ # An exclusive list of packages to be updated. These are the only packages
              # that will be updated. If these packages are not installed, they will be
              # ignored. This field must not be specified with any other patch
              # configuration fields.
            &quot;A String&quot;,
          ],
          &quot;security&quot;: True or False, # Adds the `--security` flag to `yum update`. Not supported on
              # all platforms.
        },
        &quot;goo&quot;: { # Googet patching is performed by running `googet update`. # Goo update settings. Use this setting to override the default `goo` patch
            # rules.
        },
        &quot;rebootConfig&quot;: &quot;A String&quot;, # Post-patch reboot settings.
        &quot;preStep&quot;: { # A step that runs an executable for a PatchJob. # The `ExecStep` to run before the patch update.
          &quot;linuxExecStepConfig&quot;: { # Common configurations for an ExecStep. # The ExecStepConfig for all Linux VMs targeted by the PatchJob.
            &quot;localPath&quot;: &quot;A String&quot;, # An absolute path to the executable on the VM.
            &quot;allowedSuccessCodes&quot;: [ # Defaults to [0]. A list of possible return values that the
                # execution can return to indicate a success.
              42,
            ],
            &quot;gcsObject&quot;: { # Cloud Storage object representation. # A Cloud Storage object containing the executable.
              &quot;bucket&quot;: &quot;A String&quot;, # Required. Bucket of the Cloud Storage object.
              &quot;object&quot;: &quot;A String&quot;, # Required. Name of the Cloud Storage object.
              &quot;generationNumber&quot;: &quot;A String&quot;, # Required. Generation number of the Cloud Storage object. This is used to
                  # ensure that the ExecStep specified by this PatchJob does not change.
            },
            &quot;interpreter&quot;: &quot;A String&quot;, # The script interpreter to use to run the script. If no interpreter is
                # specified the script will be executed directly, which will likely
                # only succeed for scripts with [shebang lines]
                # (https://en.wikipedia.org/wiki/Shebang_\(Unix\)).
          },
          &quot;windowsExecStepConfig&quot;: { # Common configurations for an ExecStep. # The ExecStepConfig for all Windows VMs targeted by the PatchJob.
            &quot;localPath&quot;: &quot;A String&quot;, # An absolute path to the executable on the VM.
            &quot;allowedSuccessCodes&quot;: [ # Defaults to [0]. A list of possible return values that the
                # execution can return to indicate a success.
              42,
            ],
            &quot;gcsObject&quot;: { # Cloud Storage object representation. # A Cloud Storage object containing the executable.
              &quot;bucket&quot;: &quot;A String&quot;, # Required. Bucket of the Cloud Storage object.
              &quot;object&quot;: &quot;A String&quot;, # Required. Name of the Cloud Storage object.
              &quot;generationNumber&quot;: &quot;A String&quot;, # Required. Generation number of the Cloud Storage object. This is used to
                  # ensure that the ExecStep specified by this PatchJob does not change.
            },
            &quot;interpreter&quot;: &quot;A String&quot;, # The script interpreter to use to run the script. If no interpreter is
                # specified the script will be executed directly, which will likely
                # only succeed for scripts with [shebang lines]
                # (https://en.wikipedia.org/wiki/Shebang_\(Unix\)).
          },
        },
        &quot;windowsUpdate&quot;: { # Windows patching is performed using the Windows Update Agent. # Windows update settings. Use this override the default windows patch rules.
          &quot;excludes&quot;: [ # List of KBs to exclude from update.
            &quot;A String&quot;,
          ],
          &quot;exclusivePatches&quot;: [ # An exclusive list of kbs to be updated. These are the only patches
              # that will be updated. This field must not be used with other
              # patch configurations.
            &quot;A String&quot;,
          ],
          &quot;classifications&quot;: [ # Only apply updates of these windows update classifications. If empty, all
              # updates are applied.
            &quot;A String&quot;,
          ],
        },
        &quot;zypper&quot;: { # Zypper patching is performed by running `zypper patch`. # Zypper update settings. Use this setting to override the default `zypper`
            # patch rules.
            # See also https://en.opensuse.org/SDB:Zypper_manual.
          &quot;exclusivePatches&quot;: [ # An exclusive list of patches to be updated. These are the only patches
              # that will be installed using &#x27;zypper patch patch:&lt;patch_name&gt;&#x27; command.
              # This field must not be used with any other patch configuration fields.
            &quot;A String&quot;,
          ],
          &quot;excludes&quot;: [ # List of patches to exclude from update.
            &quot;A String&quot;,
          ],
          &quot;withUpdate&quot;: True or False, # Adds the `--with-update` flag, to `zypper patch`.
          &quot;withOptional&quot;: True or False, # Adds the `--with-optional` flag to `zypper patch`.
          &quot;severities&quot;: [ # Install only patches with these severities.
              # Common severities include critical, important, moderate, and low.
            &quot;A String&quot;,
          ],
          &quot;categories&quot;: [ # Install only patches with these categories.
              # Common categories include security, recommended, and feature.
            &quot;A String&quot;,
          ],
        },
        &quot;postStep&quot;: { # A step that runs an executable for a PatchJob. # The `ExecStep` to run after the patch update.
          &quot;linuxExecStepConfig&quot;: { # Common configurations for an ExecStep. # The ExecStepConfig for all Linux VMs targeted by the PatchJob.
            &quot;localPath&quot;: &quot;A String&quot;, # An absolute path to the executable on the VM.
            &quot;allowedSuccessCodes&quot;: [ # Defaults to [0]. A list of possible return values that the
                # execution can return to indicate a success.
              42,
            ],
            &quot;gcsObject&quot;: { # Cloud Storage object representation. # A Cloud Storage object containing the executable.
              &quot;bucket&quot;: &quot;A String&quot;, # Required. Bucket of the Cloud Storage object.
              &quot;object&quot;: &quot;A String&quot;, # Required. Name of the Cloud Storage object.
              &quot;generationNumber&quot;: &quot;A String&quot;, # Required. Generation number of the Cloud Storage object. This is used to
                  # ensure that the ExecStep specified by this PatchJob does not change.
            },
            &quot;interpreter&quot;: &quot;A String&quot;, # The script interpreter to use to run the script. If no interpreter is
                # specified the script will be executed directly, which will likely
                # only succeed for scripts with [shebang lines]
                # (https://en.wikipedia.org/wiki/Shebang_\(Unix\)).
          },
          &quot;windowsExecStepConfig&quot;: { # Common configurations for an ExecStep. # The ExecStepConfig for all Windows VMs targeted by the PatchJob.
            &quot;localPath&quot;: &quot;A String&quot;, # An absolute path to the executable on the VM.
            &quot;allowedSuccessCodes&quot;: [ # Defaults to [0]. A list of possible return values that the
                # execution can return to indicate a success.
              42,
            ],
            &quot;gcsObject&quot;: { # Cloud Storage object representation. # A Cloud Storage object containing the executable.
              &quot;bucket&quot;: &quot;A String&quot;, # Required. Bucket of the Cloud Storage object.
              &quot;object&quot;: &quot;A String&quot;, # Required. Name of the Cloud Storage object.
              &quot;generationNumber&quot;: &quot;A String&quot;, # Required. Generation number of the Cloud Storage object. This is used to
                  # ensure that the ExecStep specified by this PatchJob does not change.
            },
            &quot;interpreter&quot;: &quot;A String&quot;, # The script interpreter to use to run the script. If no interpreter is
                # specified the script will be executed directly, which will likely
                # only succeed for scripts with [shebang lines]
                # (https://en.wikipedia.org/wiki/Shebang_\(Unix\)).
          },
        },
      },
      &quot;duration&quot;: &quot;A String&quot;, # Optional. Duration of the patch. After the duration ends, the patch times out.
      &quot;instanceFilter&quot;: { # A filter to target VM instances for patching. The targeted # Required. VM instances to patch.
          # VMs must meet all criteria specified. So if both labels and zones are
          # specified, the patch job targets only VMs with those labels and in those
          # zones.
        &quot;all&quot;: True or False, # Target all VM instances in the project. If true, no other criteria is
            # permitted.
        &quot;instances&quot;: [ # Targets any of the VM instances specified. Instances are specified by their
            # URI in the form `zones/[ZONE]/instances/[INSTANCE_NAME],
            # `projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]`, or
            # `https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]`
          &quot;A String&quot;,
        ],
        &quot;instanceNamePrefixes&quot;: [ # Targets VMs whose name starts with one of these prefixes. Similar to
            # labels, this is another way to group VMs when targeting configs, for
            # example prefix=&quot;prod-&quot;.
          &quot;A String&quot;,
        ],
        &quot;zones&quot;: [ # Targets VM instances in ANY of these zones. Leave empty to target VM
            # instances in any zone.
          &quot;A String&quot;,
        ],
        &quot;groupLabels&quot;: [ # Targets VM instances matching ANY of these GroupLabels. This allows
            # targeting of disparate groups of VM instances.
          { # 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`: `{&quot;env&quot;:&quot;test&quot;, &quot;app&quot;:&quot;web&quot;}`. This means that the patch job
              # is applied to VMs that have both the labels `env=test` and `app=web`.
            &quot;labels&quot;: { # Compute Engine instance labels that must be present for a VM
                # instance to be targeted by this filter.
              &quot;a_key&quot;: &quot;A String&quot;,
            },
          },
        ],
      },
      &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the patch deployment. Length of the description is limited
          # to 1024 characters.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time the patch deployment was created. Timestamp is in
          # [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time the patch deployment was last updated. Timestamp is in
          # [RFC3339](&quot;https://www.ietf.org/rfc/rfc3339.txt) text format.
      &quot;name&quot;: &quot;A String&quot;, # Unique name for the patch deployment resource in a project. The patch
          # deployment name is in the form:
          # `projects/{project_id}/patchDeployments/{patch_deployment_id}`.
          # This field is ignored when you create a new patch deployment.
      &quot;recurringSchedule&quot;: { # Sets the time for recurring patch deployments. # Required. Schedule recurring executions.
        &quot;timeOfDay&quot;: { # Represents a time of day. The date and time zone are either not significant # Required. Time of the day to run a recurring deployment.
            # or are specified elsewhere. An API may choose to allow leap seconds. Related
            # types are google.type.Date and `google.protobuf.Timestamp`.
          &quot;minutes&quot;: 42, # Minutes of hour of day. Must be from 0 to 59.
          &quot;hours&quot;: 42, # Hours of day in 24 hour format. Should be from 0 to 23. An API may choose
              # to allow the value &quot;24:00:00&quot; for scenarios like business closing time.
          &quot;nanos&quot;: 42, # Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
          &quot;seconds&quot;: 42, # Seconds of minutes of the time. Must normally be from 0 to 59. An API may
              # allow the value 60 if it allows leap-seconds.
        },
        &quot;weekly&quot;: { # Represents a weekly schedule. # Required. Schedule with weekly executions.
          &quot;dayOfWeek&quot;: &quot;A String&quot;, # Required. Day of the week.
        },
        &quot;lastExecuteTime&quot;: &quot;A String&quot;, # Output only. The time the last patch job ran successfully.
        &quot;frequency&quot;: &quot;A String&quot;, # Required. The frequency unit of this recurring schedule.
        &quot;timeZone&quot;: { # Represents a time zone from the # Required. Defines the time zone that `time_of_day` is relative to.
            # The rules for daylight saving time are determined by the chosen time zone.
            # [IANA Time Zone Database](https://www.iana.org/time-zones).
          &quot;id&quot;: &quot;A String&quot;, # IANA Time Zone Database time zone, e.g. &quot;America/New_York&quot;.
          &quot;version&quot;: &quot;A String&quot;, # Optional. IANA Time Zone Database version number, e.g. &quot;2019a&quot;.
        },
        &quot;endTime&quot;: &quot;A String&quot;, # Optional. The end time at which a recurring patch deployment schedule is no longer
            # active.
        &quot;nextExecuteTime&quot;: &quot;A String&quot;, # Output only. The time the next patch job is scheduled to run.
        &quot;startTime&quot;: &quot;A String&quot;, # Optional. The time that the recurring schedule becomes effective.
            # Defaults to `create_time` of the patch deployment.
        &quot;monthly&quot;: { # Represents a monthly schedule. An example of a valid monthly schedule is # Required. Schedule with monthly executions.
            # &quot;on the third Tuesday of the month&quot; or &quot;on the 15th of the month&quot;.
          &quot;weekDayOfMonth&quot;: { # Represents one week day in a month. An example is &quot;the 4th Sunday&quot;. # Required. Week day in a month.
            &quot;weekOrdinal&quot;: 42, # Required. Week number in a month. 1-4 indicates the 1st to 4th week of the month. -1
                # indicates the last week of the month.
            &quot;dayOfWeek&quot;: &quot;A String&quot;, # Required. A day of the week.
          },
          &quot;monthDay&quot;: 42, # Required. One day of the month. 1-31 indicates the 1st to the 31st day. -1
              # indicates the last day of the month.
              # Months without the target day will be skipped. For example, a schedule to
              # run &quot;every month on the 31st&quot; will not run in February, April, June, etc.
        },
      },
      &quot;oneTimeSchedule&quot;: { # Sets the time for a one time patch deployment. Timestamp is in # Required. Schedule a one-time execution.
          # [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
        &quot;executeTime&quot;: &quot;A String&quot;, # Required. The desired patch job execution time.
      },
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Delete an OS Config patch deployment.

Args:
  name: string, Required. The resource name of the patch deployment in the form
`projects/*/patchDeployments/*`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      #
      #     service Foo {
      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Get an OS Config patch deployment.

Args:
  name: string, Required. The resource name of the patch deployment in the form
`projects/*/patchDeployments/*`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Patch deployments are configurations that individual patch jobs use to
        # 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](https://cloud.google.com/compute/docs/os-patch-management/schedule-patch-jobs).
      &quot;lastExecuteTime&quot;: &quot;A String&quot;, # Output only. The last time a patch job was started by this deployment.
          # Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
          # format.
      &quot;patchConfig&quot;: { # Patch configuration specifications. Contains details on how to apply the # Optional. Patch configuration that is applied.
          # patch(es) to a VM instance.
        &quot;apt&quot;: { # Apt patching is completed by executing `apt-get update &amp;&amp; apt-get # Apt update settings. Use this setting to override the default `apt` patch
            # rules.
            # upgrade`. Additional options can be set to control how this is executed.
          &quot;excludes&quot;: [ # List of packages to exclude from update. These packages will be excluded
            &quot;A String&quot;,
          ],
          &quot;exclusivePackages&quot;: [ # An exclusive list of packages to be updated. These are the only packages
              # that will be updated. If these packages are not installed, they will be
              # ignored. This field cannot be specified with any other patch configuration
              # fields.
            &quot;A String&quot;,
          ],
          &quot;type&quot;: &quot;A String&quot;, # By changing the type to DIST, the patching is performed
              # using `apt-get dist-upgrade` instead.
        },
        &quot;yum&quot;: { # Yum patching is performed by executing `yum update`. Additional options # Yum update settings. Use this setting to override the default `yum` patch
            # rules.
            # can be set to control how this is executed.
            #
            # Note that not all settings are supported on all platforms.
          &quot;minimal&quot;: True or False, # Will cause patch to run `yum update-minimal` instead.
          &quot;excludes&quot;: [ # List of packages to exclude from update. These packages are excluded by
              # using the yum `--exclude` flag.
            &quot;A String&quot;,
          ],
          &quot;exclusivePackages&quot;: [ # An exclusive list of packages to be updated. These are the only packages
              # that will be updated. If these packages are not installed, they will be
              # ignored. This field must not be specified with any other patch
              # configuration fields.
            &quot;A String&quot;,
          ],
          &quot;security&quot;: True or False, # Adds the `--security` flag to `yum update`. Not supported on
              # all platforms.
        },
        &quot;goo&quot;: { # Googet patching is performed by running `googet update`. # Goo update settings. Use this setting to override the default `goo` patch
            # rules.
        },
        &quot;rebootConfig&quot;: &quot;A String&quot;, # Post-patch reboot settings.
        &quot;preStep&quot;: { # A step that runs an executable for a PatchJob. # The `ExecStep` to run before the patch update.
          &quot;linuxExecStepConfig&quot;: { # Common configurations for an ExecStep. # The ExecStepConfig for all Linux VMs targeted by the PatchJob.
            &quot;localPath&quot;: &quot;A String&quot;, # An absolute path to the executable on the VM.
            &quot;allowedSuccessCodes&quot;: [ # Defaults to [0]. A list of possible return values that the
                # execution can return to indicate a success.
              42,
            ],
            &quot;gcsObject&quot;: { # Cloud Storage object representation. # A Cloud Storage object containing the executable.
              &quot;bucket&quot;: &quot;A String&quot;, # Required. Bucket of the Cloud Storage object.
              &quot;object&quot;: &quot;A String&quot;, # Required. Name of the Cloud Storage object.
              &quot;generationNumber&quot;: &quot;A String&quot;, # Required. Generation number of the Cloud Storage object. This is used to
                  # ensure that the ExecStep specified by this PatchJob does not change.
            },
            &quot;interpreter&quot;: &quot;A String&quot;, # The script interpreter to use to run the script. If no interpreter is
                # specified the script will be executed directly, which will likely
                # only succeed for scripts with [shebang lines]
                # (https://en.wikipedia.org/wiki/Shebang_\(Unix\)).
          },
          &quot;windowsExecStepConfig&quot;: { # Common configurations for an ExecStep. # The ExecStepConfig for all Windows VMs targeted by the PatchJob.
            &quot;localPath&quot;: &quot;A String&quot;, # An absolute path to the executable on the VM.
            &quot;allowedSuccessCodes&quot;: [ # Defaults to [0]. A list of possible return values that the
                # execution can return to indicate a success.
              42,
            ],
            &quot;gcsObject&quot;: { # Cloud Storage object representation. # A Cloud Storage object containing the executable.
              &quot;bucket&quot;: &quot;A String&quot;, # Required. Bucket of the Cloud Storage object.
              &quot;object&quot;: &quot;A String&quot;, # Required. Name of the Cloud Storage object.
              &quot;generationNumber&quot;: &quot;A String&quot;, # Required. Generation number of the Cloud Storage object. This is used to
                  # ensure that the ExecStep specified by this PatchJob does not change.
            },
            &quot;interpreter&quot;: &quot;A String&quot;, # The script interpreter to use to run the script. If no interpreter is
                # specified the script will be executed directly, which will likely
                # only succeed for scripts with [shebang lines]
                # (https://en.wikipedia.org/wiki/Shebang_\(Unix\)).
          },
        },
        &quot;windowsUpdate&quot;: { # Windows patching is performed using the Windows Update Agent. # Windows update settings. Use this override the default windows patch rules.
          &quot;excludes&quot;: [ # List of KBs to exclude from update.
            &quot;A String&quot;,
          ],
          &quot;exclusivePatches&quot;: [ # An exclusive list of kbs to be updated. These are the only patches
              # that will be updated. This field must not be used with other
              # patch configurations.
            &quot;A String&quot;,
          ],
          &quot;classifications&quot;: [ # Only apply updates of these windows update classifications. If empty, all
              # updates are applied.
            &quot;A String&quot;,
          ],
        },
        &quot;zypper&quot;: { # Zypper patching is performed by running `zypper patch`. # Zypper update settings. Use this setting to override the default `zypper`
            # patch rules.
            # See also https://en.opensuse.org/SDB:Zypper_manual.
          &quot;exclusivePatches&quot;: [ # An exclusive list of patches to be updated. These are the only patches
              # that will be installed using &#x27;zypper patch patch:&lt;patch_name&gt;&#x27; command.
              # This field must not be used with any other patch configuration fields.
            &quot;A String&quot;,
          ],
          &quot;excludes&quot;: [ # List of patches to exclude from update.
            &quot;A String&quot;,
          ],
          &quot;withUpdate&quot;: True or False, # Adds the `--with-update` flag, to `zypper patch`.
          &quot;withOptional&quot;: True or False, # Adds the `--with-optional` flag to `zypper patch`.
          &quot;severities&quot;: [ # Install only patches with these severities.
              # Common severities include critical, important, moderate, and low.
            &quot;A String&quot;,
          ],
          &quot;categories&quot;: [ # Install only patches with these categories.
              # Common categories include security, recommended, and feature.
            &quot;A String&quot;,
          ],
        },
        &quot;postStep&quot;: { # A step that runs an executable for a PatchJob. # The `ExecStep` to run after the patch update.
          &quot;linuxExecStepConfig&quot;: { # Common configurations for an ExecStep. # The ExecStepConfig for all Linux VMs targeted by the PatchJob.
            &quot;localPath&quot;: &quot;A String&quot;, # An absolute path to the executable on the VM.
            &quot;allowedSuccessCodes&quot;: [ # Defaults to [0]. A list of possible return values that the
                # execution can return to indicate a success.
              42,
            ],
            &quot;gcsObject&quot;: { # Cloud Storage object representation. # A Cloud Storage object containing the executable.
              &quot;bucket&quot;: &quot;A String&quot;, # Required. Bucket of the Cloud Storage object.
              &quot;object&quot;: &quot;A String&quot;, # Required. Name of the Cloud Storage object.
              &quot;generationNumber&quot;: &quot;A String&quot;, # Required. Generation number of the Cloud Storage object. This is used to
                  # ensure that the ExecStep specified by this PatchJob does not change.
            },
            &quot;interpreter&quot;: &quot;A String&quot;, # The script interpreter to use to run the script. If no interpreter is
                # specified the script will be executed directly, which will likely
                # only succeed for scripts with [shebang lines]
                # (https://en.wikipedia.org/wiki/Shebang_\(Unix\)).
          },
          &quot;windowsExecStepConfig&quot;: { # Common configurations for an ExecStep. # The ExecStepConfig for all Windows VMs targeted by the PatchJob.
            &quot;localPath&quot;: &quot;A String&quot;, # An absolute path to the executable on the VM.
            &quot;allowedSuccessCodes&quot;: [ # Defaults to [0]. A list of possible return values that the
                # execution can return to indicate a success.
              42,
            ],
            &quot;gcsObject&quot;: { # Cloud Storage object representation. # A Cloud Storage object containing the executable.
              &quot;bucket&quot;: &quot;A String&quot;, # Required. Bucket of the Cloud Storage object.
              &quot;object&quot;: &quot;A String&quot;, # Required. Name of the Cloud Storage object.
              &quot;generationNumber&quot;: &quot;A String&quot;, # Required. Generation number of the Cloud Storage object. This is used to
                  # ensure that the ExecStep specified by this PatchJob does not change.
            },
            &quot;interpreter&quot;: &quot;A String&quot;, # The script interpreter to use to run the script. If no interpreter is
                # specified the script will be executed directly, which will likely
                # only succeed for scripts with [shebang lines]
                # (https://en.wikipedia.org/wiki/Shebang_\(Unix\)).
          },
        },
      },
      &quot;duration&quot;: &quot;A String&quot;, # Optional. Duration of the patch. After the duration ends, the patch times out.
      &quot;instanceFilter&quot;: { # A filter to target VM instances for patching. The targeted # Required. VM instances to patch.
          # VMs must meet all criteria specified. So if both labels and zones are
          # specified, the patch job targets only VMs with those labels and in those
          # zones.
        &quot;all&quot;: True or False, # Target all VM instances in the project. If true, no other criteria is
            # permitted.
        &quot;instances&quot;: [ # Targets any of the VM instances specified. Instances are specified by their
            # URI in the form `zones/[ZONE]/instances/[INSTANCE_NAME],
            # `projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]`, or
            # `https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]`
          &quot;A String&quot;,
        ],
        &quot;instanceNamePrefixes&quot;: [ # Targets VMs whose name starts with one of these prefixes. Similar to
            # labels, this is another way to group VMs when targeting configs, for
            # example prefix=&quot;prod-&quot;.
          &quot;A String&quot;,
        ],
        &quot;zones&quot;: [ # Targets VM instances in ANY of these zones. Leave empty to target VM
            # instances in any zone.
          &quot;A String&quot;,
        ],
        &quot;groupLabels&quot;: [ # Targets VM instances matching ANY of these GroupLabels. This allows
            # targeting of disparate groups of VM instances.
          { # 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`: `{&quot;env&quot;:&quot;test&quot;, &quot;app&quot;:&quot;web&quot;}`. This means that the patch job
              # is applied to VMs that have both the labels `env=test` and `app=web`.
            &quot;labels&quot;: { # Compute Engine instance labels that must be present for a VM
                # instance to be targeted by this filter.
              &quot;a_key&quot;: &quot;A String&quot;,
            },
          },
        ],
      },
      &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the patch deployment. Length of the description is limited
          # to 1024 characters.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time the patch deployment was created. Timestamp is in
          # [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time the patch deployment was last updated. Timestamp is in
          # [RFC3339](&quot;https://www.ietf.org/rfc/rfc3339.txt) text format.
      &quot;name&quot;: &quot;A String&quot;, # Unique name for the patch deployment resource in a project. The patch
          # deployment name is in the form:
          # `projects/{project_id}/patchDeployments/{patch_deployment_id}`.
          # This field is ignored when you create a new patch deployment.
      &quot;recurringSchedule&quot;: { # Sets the time for recurring patch deployments. # Required. Schedule recurring executions.
        &quot;timeOfDay&quot;: { # Represents a time of day. The date and time zone are either not significant # Required. Time of the day to run a recurring deployment.
            # or are specified elsewhere. An API may choose to allow leap seconds. Related
            # types are google.type.Date and `google.protobuf.Timestamp`.
          &quot;minutes&quot;: 42, # Minutes of hour of day. Must be from 0 to 59.
          &quot;hours&quot;: 42, # Hours of day in 24 hour format. Should be from 0 to 23. An API may choose
              # to allow the value &quot;24:00:00&quot; for scenarios like business closing time.
          &quot;nanos&quot;: 42, # Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
          &quot;seconds&quot;: 42, # Seconds of minutes of the time. Must normally be from 0 to 59. An API may
              # allow the value 60 if it allows leap-seconds.
        },
        &quot;weekly&quot;: { # Represents a weekly schedule. # Required. Schedule with weekly executions.
          &quot;dayOfWeek&quot;: &quot;A String&quot;, # Required. Day of the week.
        },
        &quot;lastExecuteTime&quot;: &quot;A String&quot;, # Output only. The time the last patch job ran successfully.
        &quot;frequency&quot;: &quot;A String&quot;, # Required. The frequency unit of this recurring schedule.
        &quot;timeZone&quot;: { # Represents a time zone from the # Required. Defines the time zone that `time_of_day` is relative to.
            # The rules for daylight saving time are determined by the chosen time zone.
            # [IANA Time Zone Database](https://www.iana.org/time-zones).
          &quot;id&quot;: &quot;A String&quot;, # IANA Time Zone Database time zone, e.g. &quot;America/New_York&quot;.
          &quot;version&quot;: &quot;A String&quot;, # Optional. IANA Time Zone Database version number, e.g. &quot;2019a&quot;.
        },
        &quot;endTime&quot;: &quot;A String&quot;, # Optional. The end time at which a recurring patch deployment schedule is no longer
            # active.
        &quot;nextExecuteTime&quot;: &quot;A String&quot;, # Output only. The time the next patch job is scheduled to run.
        &quot;startTime&quot;: &quot;A String&quot;, # Optional. The time that the recurring schedule becomes effective.
            # Defaults to `create_time` of the patch deployment.
        &quot;monthly&quot;: { # Represents a monthly schedule. An example of a valid monthly schedule is # Required. Schedule with monthly executions.
            # &quot;on the third Tuesday of the month&quot; or &quot;on the 15th of the month&quot;.
          &quot;weekDayOfMonth&quot;: { # Represents one week day in a month. An example is &quot;the 4th Sunday&quot;. # Required. Week day in a month.
            &quot;weekOrdinal&quot;: 42, # Required. Week number in a month. 1-4 indicates the 1st to 4th week of the month. -1
                # indicates the last week of the month.
            &quot;dayOfWeek&quot;: &quot;A String&quot;, # Required. A day of the week.
          },
          &quot;monthDay&quot;: 42, # Required. One day of the month. 1-31 indicates the 1st to the 31st day. -1
              # indicates the last day of the month.
              # Months without the target day will be skipped. For example, a schedule to
              # run &quot;every month on the 31st&quot; will not run in February, April, June, etc.
        },
      },
      &quot;oneTimeSchedule&quot;: { # Sets the time for a one time patch deployment. Timestamp is in # Required. Schedule a one-time execution.
          # [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
        &quot;executeTime&quot;: &quot;A String&quot;, # Required. The desired patch job execution time.
      },
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Get a page of OS Config patch deployments.

Args:
  parent: string, Required. The resource name of the parent in the form `projects/*`. (required)
  pageToken: string, Optional. A pagination token returned from a previous call to ListPatchDeployments
that indicates where this listing should continue from.
  pageSize: integer, Optional. The maximum number of patch deployments to return. Default is 100.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A response message for listing patch deployments.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # A pagination token that can be used to get the next page of patch
        # deployments.
    &quot;patchDeployments&quot;: [ # The list of patch deployments.
      { # Patch deployments are configurations that individual patch jobs use to
            # 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](https://cloud.google.com/compute/docs/os-patch-management/schedule-patch-jobs).
          &quot;lastExecuteTime&quot;: &quot;A String&quot;, # Output only. The last time a patch job was started by this deployment.
              # Timestamp is in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text
              # format.
          &quot;patchConfig&quot;: { # Patch configuration specifications. Contains details on how to apply the # Optional. Patch configuration that is applied.
              # patch(es) to a VM instance.
            &quot;apt&quot;: { # Apt patching is completed by executing `apt-get update &amp;&amp; apt-get # Apt update settings. Use this setting to override the default `apt` patch
                # rules.
                # upgrade`. Additional options can be set to control how this is executed.
              &quot;excludes&quot;: [ # List of packages to exclude from update. These packages will be excluded
                &quot;A String&quot;,
              ],
              &quot;exclusivePackages&quot;: [ # An exclusive list of packages to be updated. These are the only packages
                  # that will be updated. If these packages are not installed, they will be
                  # ignored. This field cannot be specified with any other patch configuration
                  # fields.
                &quot;A String&quot;,
              ],
              &quot;type&quot;: &quot;A String&quot;, # By changing the type to DIST, the patching is performed
                  # using `apt-get dist-upgrade` instead.
            },
            &quot;yum&quot;: { # Yum patching is performed by executing `yum update`. Additional options # Yum update settings. Use this setting to override the default `yum` patch
                # rules.
                # can be set to control how this is executed.
                #
                # Note that not all settings are supported on all platforms.
              &quot;minimal&quot;: True or False, # Will cause patch to run `yum update-minimal` instead.
              &quot;excludes&quot;: [ # List of packages to exclude from update. These packages are excluded by
                  # using the yum `--exclude` flag.
                &quot;A String&quot;,
              ],
              &quot;exclusivePackages&quot;: [ # An exclusive list of packages to be updated. These are the only packages
                  # that will be updated. If these packages are not installed, they will be
                  # ignored. This field must not be specified with any other patch
                  # configuration fields.
                &quot;A String&quot;,
              ],
              &quot;security&quot;: True or False, # Adds the `--security` flag to `yum update`. Not supported on
                  # all platforms.
            },
            &quot;goo&quot;: { # Googet patching is performed by running `googet update`. # Goo update settings. Use this setting to override the default `goo` patch
                # rules.
            },
            &quot;rebootConfig&quot;: &quot;A String&quot;, # Post-patch reboot settings.
            &quot;preStep&quot;: { # A step that runs an executable for a PatchJob. # The `ExecStep` to run before the patch update.
              &quot;linuxExecStepConfig&quot;: { # Common configurations for an ExecStep. # The ExecStepConfig for all Linux VMs targeted by the PatchJob.
                &quot;localPath&quot;: &quot;A String&quot;, # An absolute path to the executable on the VM.
                &quot;allowedSuccessCodes&quot;: [ # Defaults to [0]. A list of possible return values that the
                    # execution can return to indicate a success.
                  42,
                ],
                &quot;gcsObject&quot;: { # Cloud Storage object representation. # A Cloud Storage object containing the executable.
                  &quot;bucket&quot;: &quot;A String&quot;, # Required. Bucket of the Cloud Storage object.
                  &quot;object&quot;: &quot;A String&quot;, # Required. Name of the Cloud Storage object.
                  &quot;generationNumber&quot;: &quot;A String&quot;, # Required. Generation number of the Cloud Storage object. This is used to
                      # ensure that the ExecStep specified by this PatchJob does not change.
                },
                &quot;interpreter&quot;: &quot;A String&quot;, # The script interpreter to use to run the script. If no interpreter is
                    # specified the script will be executed directly, which will likely
                    # only succeed for scripts with [shebang lines]
                    # (https://en.wikipedia.org/wiki/Shebang_\(Unix\)).
              },
              &quot;windowsExecStepConfig&quot;: { # Common configurations for an ExecStep. # The ExecStepConfig for all Windows VMs targeted by the PatchJob.
                &quot;localPath&quot;: &quot;A String&quot;, # An absolute path to the executable on the VM.
                &quot;allowedSuccessCodes&quot;: [ # Defaults to [0]. A list of possible return values that the
                    # execution can return to indicate a success.
                  42,
                ],
                &quot;gcsObject&quot;: { # Cloud Storage object representation. # A Cloud Storage object containing the executable.
                  &quot;bucket&quot;: &quot;A String&quot;, # Required. Bucket of the Cloud Storage object.
                  &quot;object&quot;: &quot;A String&quot;, # Required. Name of the Cloud Storage object.
                  &quot;generationNumber&quot;: &quot;A String&quot;, # Required. Generation number of the Cloud Storage object. This is used to
                      # ensure that the ExecStep specified by this PatchJob does not change.
                },
                &quot;interpreter&quot;: &quot;A String&quot;, # The script interpreter to use to run the script. If no interpreter is
                    # specified the script will be executed directly, which will likely
                    # only succeed for scripts with [shebang lines]
                    # (https://en.wikipedia.org/wiki/Shebang_\(Unix\)).
              },
            },
            &quot;windowsUpdate&quot;: { # Windows patching is performed using the Windows Update Agent. # Windows update settings. Use this override the default windows patch rules.
              &quot;excludes&quot;: [ # List of KBs to exclude from update.
                &quot;A String&quot;,
              ],
              &quot;exclusivePatches&quot;: [ # An exclusive list of kbs to be updated. These are the only patches
                  # that will be updated. This field must not be used with other
                  # patch configurations.
                &quot;A String&quot;,
              ],
              &quot;classifications&quot;: [ # Only apply updates of these windows update classifications. If empty, all
                  # updates are applied.
                &quot;A String&quot;,
              ],
            },
            &quot;zypper&quot;: { # Zypper patching is performed by running `zypper patch`. # Zypper update settings. Use this setting to override the default `zypper`
                # patch rules.
                # See also https://en.opensuse.org/SDB:Zypper_manual.
              &quot;exclusivePatches&quot;: [ # An exclusive list of patches to be updated. These are the only patches
                  # that will be installed using &#x27;zypper patch patch:&lt;patch_name&gt;&#x27; command.
                  # This field must not be used with any other patch configuration fields.
                &quot;A String&quot;,
              ],
              &quot;excludes&quot;: [ # List of patches to exclude from update.
                &quot;A String&quot;,
              ],
              &quot;withUpdate&quot;: True or False, # Adds the `--with-update` flag, to `zypper patch`.
              &quot;withOptional&quot;: True or False, # Adds the `--with-optional` flag to `zypper patch`.
              &quot;severities&quot;: [ # Install only patches with these severities.
                  # Common severities include critical, important, moderate, and low.
                &quot;A String&quot;,
              ],
              &quot;categories&quot;: [ # Install only patches with these categories.
                  # Common categories include security, recommended, and feature.
                &quot;A String&quot;,
              ],
            },
            &quot;postStep&quot;: { # A step that runs an executable for a PatchJob. # The `ExecStep` to run after the patch update.
              &quot;linuxExecStepConfig&quot;: { # Common configurations for an ExecStep. # The ExecStepConfig for all Linux VMs targeted by the PatchJob.
                &quot;localPath&quot;: &quot;A String&quot;, # An absolute path to the executable on the VM.
                &quot;allowedSuccessCodes&quot;: [ # Defaults to [0]. A list of possible return values that the
                    # execution can return to indicate a success.
                  42,
                ],
                &quot;gcsObject&quot;: { # Cloud Storage object representation. # A Cloud Storage object containing the executable.
                  &quot;bucket&quot;: &quot;A String&quot;, # Required. Bucket of the Cloud Storage object.
                  &quot;object&quot;: &quot;A String&quot;, # Required. Name of the Cloud Storage object.
                  &quot;generationNumber&quot;: &quot;A String&quot;, # Required. Generation number of the Cloud Storage object. This is used to
                      # ensure that the ExecStep specified by this PatchJob does not change.
                },
                &quot;interpreter&quot;: &quot;A String&quot;, # The script interpreter to use to run the script. If no interpreter is
                    # specified the script will be executed directly, which will likely
                    # only succeed for scripts with [shebang lines]
                    # (https://en.wikipedia.org/wiki/Shebang_\(Unix\)).
              },
              &quot;windowsExecStepConfig&quot;: { # Common configurations for an ExecStep. # The ExecStepConfig for all Windows VMs targeted by the PatchJob.
                &quot;localPath&quot;: &quot;A String&quot;, # An absolute path to the executable on the VM.
                &quot;allowedSuccessCodes&quot;: [ # Defaults to [0]. A list of possible return values that the
                    # execution can return to indicate a success.
                  42,
                ],
                &quot;gcsObject&quot;: { # Cloud Storage object representation. # A Cloud Storage object containing the executable.
                  &quot;bucket&quot;: &quot;A String&quot;, # Required. Bucket of the Cloud Storage object.
                  &quot;object&quot;: &quot;A String&quot;, # Required. Name of the Cloud Storage object.
                  &quot;generationNumber&quot;: &quot;A String&quot;, # Required. Generation number of the Cloud Storage object. This is used to
                      # ensure that the ExecStep specified by this PatchJob does not change.
                },
                &quot;interpreter&quot;: &quot;A String&quot;, # The script interpreter to use to run the script. If no interpreter is
                    # specified the script will be executed directly, which will likely
                    # only succeed for scripts with [shebang lines]
                    # (https://en.wikipedia.org/wiki/Shebang_\(Unix\)).
              },
            },
          },
          &quot;duration&quot;: &quot;A String&quot;, # Optional. Duration of the patch. After the duration ends, the patch times out.
          &quot;instanceFilter&quot;: { # A filter to target VM instances for patching. The targeted # Required. VM instances to patch.
              # VMs must meet all criteria specified. So if both labels and zones are
              # specified, the patch job targets only VMs with those labels and in those
              # zones.
            &quot;all&quot;: True or False, # Target all VM instances in the project. If true, no other criteria is
                # permitted.
            &quot;instances&quot;: [ # Targets any of the VM instances specified. Instances are specified by their
                # URI in the form `zones/[ZONE]/instances/[INSTANCE_NAME],
                # `projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]`, or
                # `https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]`
              &quot;A String&quot;,
            ],
            &quot;instanceNamePrefixes&quot;: [ # Targets VMs whose name starts with one of these prefixes. Similar to
                # labels, this is another way to group VMs when targeting configs, for
                # example prefix=&quot;prod-&quot;.
              &quot;A String&quot;,
            ],
            &quot;zones&quot;: [ # Targets VM instances in ANY of these zones. Leave empty to target VM
                # instances in any zone.
              &quot;A String&quot;,
            ],
            &quot;groupLabels&quot;: [ # Targets VM instances matching ANY of these GroupLabels. This allows
                # targeting of disparate groups of VM instances.
              { # 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`: `{&quot;env&quot;:&quot;test&quot;, &quot;app&quot;:&quot;web&quot;}`. This means that the patch job
                  # is applied to VMs that have both the labels `env=test` and `app=web`.
                &quot;labels&quot;: { # Compute Engine instance labels that must be present for a VM
                    # instance to be targeted by this filter.
                  &quot;a_key&quot;: &quot;A String&quot;,
                },
              },
            ],
          },
          &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the patch deployment. Length of the description is limited
              # to 1024 characters.
          &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time the patch deployment was created. Timestamp is in
              # [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
          &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time the patch deployment was last updated. Timestamp is in
              # [RFC3339](&quot;https://www.ietf.org/rfc/rfc3339.txt) text format.
          &quot;name&quot;: &quot;A String&quot;, # Unique name for the patch deployment resource in a project. The patch
              # deployment name is in the form:
              # `projects/{project_id}/patchDeployments/{patch_deployment_id}`.
              # This field is ignored when you create a new patch deployment.
          &quot;recurringSchedule&quot;: { # Sets the time for recurring patch deployments. # Required. Schedule recurring executions.
            &quot;timeOfDay&quot;: { # Represents a time of day. The date and time zone are either not significant # Required. Time of the day to run a recurring deployment.
                # or are specified elsewhere. An API may choose to allow leap seconds. Related
                # types are google.type.Date and `google.protobuf.Timestamp`.
              &quot;minutes&quot;: 42, # Minutes of hour of day. Must be from 0 to 59.
              &quot;hours&quot;: 42, # Hours of day in 24 hour format. Should be from 0 to 23. An API may choose
                  # to allow the value &quot;24:00:00&quot; for scenarios like business closing time.
              &quot;nanos&quot;: 42, # Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
              &quot;seconds&quot;: 42, # Seconds of minutes of the time. Must normally be from 0 to 59. An API may
                  # allow the value 60 if it allows leap-seconds.
            },
            &quot;weekly&quot;: { # Represents a weekly schedule. # Required. Schedule with weekly executions.
              &quot;dayOfWeek&quot;: &quot;A String&quot;, # Required. Day of the week.
            },
            &quot;lastExecuteTime&quot;: &quot;A String&quot;, # Output only. The time the last patch job ran successfully.
            &quot;frequency&quot;: &quot;A String&quot;, # Required. The frequency unit of this recurring schedule.
            &quot;timeZone&quot;: { # Represents a time zone from the # Required. Defines the time zone that `time_of_day` is relative to.
                # The rules for daylight saving time are determined by the chosen time zone.
                # [IANA Time Zone Database](https://www.iana.org/time-zones).
              &quot;id&quot;: &quot;A String&quot;, # IANA Time Zone Database time zone, e.g. &quot;America/New_York&quot;.
              &quot;version&quot;: &quot;A String&quot;, # Optional. IANA Time Zone Database version number, e.g. &quot;2019a&quot;.
            },
            &quot;endTime&quot;: &quot;A String&quot;, # Optional. The end time at which a recurring patch deployment schedule is no longer
                # active.
            &quot;nextExecuteTime&quot;: &quot;A String&quot;, # Output only. The time the next patch job is scheduled to run.
            &quot;startTime&quot;: &quot;A String&quot;, # Optional. The time that the recurring schedule becomes effective.
                # Defaults to `create_time` of the patch deployment.
            &quot;monthly&quot;: { # Represents a monthly schedule. An example of a valid monthly schedule is # Required. Schedule with monthly executions.
                # &quot;on the third Tuesday of the month&quot; or &quot;on the 15th of the month&quot;.
              &quot;weekDayOfMonth&quot;: { # Represents one week day in a month. An example is &quot;the 4th Sunday&quot;. # Required. Week day in a month.
                &quot;weekOrdinal&quot;: 42, # Required. Week number in a month. 1-4 indicates the 1st to 4th week of the month. -1
                    # indicates the last week of the month.
                &quot;dayOfWeek&quot;: &quot;A String&quot;, # Required. A day of the week.
              },
              &quot;monthDay&quot;: 42, # Required. One day of the month. 1-31 indicates the 1st to the 31st day. -1
                  # indicates the last day of the month.
                  # Months without the target day will be skipped. For example, a schedule to
                  # run &quot;every month on the 31st&quot; will not run in February, April, June, etc.
            },
          },
          &quot;oneTimeSchedule&quot;: { # Sets the time for a one time patch deployment. Timestamp is in # Required. Schedule a one-time execution.
              # [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
            &quot;executeTime&quot;: &quot;A String&quot;, # Required. The desired patch job execution time.
          },
        },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>