<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_v1alpha.html">OS Config API</a> . <a href="osconfig_v1alpha.projects.html">projects</a> . <a href="osconfig_v1alpha.projects.locations.html">locations</a> . <a href="osconfig_v1alpha.projects.locations.instanceOSPoliciesCompliances.html">instanceOSPoliciesCompliances</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Get OS policies compliance data for the specified Compute Engine VM instance.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List OS policies compliance data for all Compute Engine VM instances in the specified zone.</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="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Get OS policies compliance data for the specified Compute Engine VM instance.

Args:
  name: string, Required. API resource name for instance OS policies compliance resource. Format: `projects/{project}/locations/{location}/instanceOSPoliciesCompliances/{instance}` For `{project}`, either Compute Engine project-number or project-id can be provided. For `{instance}`, either Compute Engine VM instance-id or instance-name can be provided. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This API resource represents the OS policies compliance data for a Compute Engine virtual machine (VM) instance at a given point in time. A Compute Engine VM can have multiple OS policy assignments, and each assignment can have multiple OS policies. As a result, multiple OS policies could be applied to a single VM. You can use this API resource to determine both the compliance state of your VM as well as the compliance state of an individual OS policy. For more information, see [View compliance](https://cloud.google.com/compute/docs/os-configuration-management/view-compliance).
  &quot;detailedState&quot;: &quot;A String&quot;, # Output only. Detailed compliance state of the VM. This field is populated only when compliance state is `UNKNOWN`. It may contain one of the following values: * `no-compliance-data`: Compliance data is not available for this VM. * `no-agent-detected`: OS Config agent is not detected for this VM. * `config-not-supported-by-agent`: The version of the OS Config agent running on this VM does not support configuration management. * `inactive`: VM is not running. * `internal-service-errors`: There were internal service errors encountered while enforcing compliance. * `agent-errors`: OS config agent encountered errors while enforcing compliance.
  &quot;detailedStateReason&quot;: &quot;A String&quot;, # Output only. The reason for the `detailed_state` of the VM (if any).
  &quot;instance&quot;: &quot;A String&quot;, # Output only. The Compute Engine VM instance name.
  &quot;lastComplianceCheckTime&quot;: &quot;A String&quot;, # Output only. Timestamp of the last compliance check for the VM.
  &quot;lastComplianceRunId&quot;: &quot;A String&quot;, # Output only. Unique identifier for the last compliance run. This id will be logged by the OS config agent during a compliance run and can be used for debugging and tracing purpose.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The `InstanceOSPoliciesCompliance` API resource name. Format: `projects/{project_number}/locations/{location}/instanceOSPoliciesCompliances/{instance_id}`
  &quot;osPolicyCompliances&quot;: [ # Output only. Compliance data for each `OSPolicy` that is applied to the VM.
    { # Compliance data for an OS policy
      &quot;osPolicyAssignment&quot;: &quot;A String&quot;, # Reference to the `OSPolicyAssignment` API resource that the `OSPolicy` belongs to. Format: `projects/{project_number}/locations/{location}/osPolicyAssignments/{os_policy_assignment_id@revision_id}`
      &quot;osPolicyId&quot;: &quot;A String&quot;, # The OS policy id
      &quot;osPolicyResourceCompliances&quot;: [ # Compliance data for each `OSPolicyResource` that is applied to the VM.
        { # Compliance data for an OS policy resource.
          &quot;configSteps&quot;: [ # Ordered list of configuration steps taken by the agent for the OS policy resource.
            { # Step performed by the OS Config agent for configuring an `OSPolicyResource` to its desired state.
              &quot;outcome&quot;: &quot;A String&quot;, # Outcome of the configuration step.
              &quot;type&quot;: &quot;A String&quot;, # Configuration step type.
            },
          ],
          &quot;execResourceOutput&quot;: { # ExecResource specific output. # ExecResource specific output.
            &quot;enforcementOutput&quot;: &quot;A String&quot;, # Output from Enforcement phase output file (if run). Output size is limited to 100K bytes.
          },
          &quot;osPolicyResourceId&quot;: &quot;A String&quot;, # The id of the OS policy resource.
          &quot;state&quot;: &quot;A String&quot;, # Compliance state of the OS policy resource.
        },
      ],
      &quot;state&quot;: &quot;A String&quot;, # Compliance state of the OS policy.
    },
  ],
  &quot;state&quot;: &quot;A String&quot;, # Output only. Compliance state of the VM.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>List OS policies compliance data for all Compute Engine VM instances in the specified zone.

Args:
  parent: string, Required. The parent resource name. Format: `projects/{project}/locations/{location}` For `{project}`, either Compute Engine project-number or project-id can be provided. (required)
  filter: string, If provided, this field specifies the criteria that must be met by a `InstanceOSPoliciesCompliance` API resource to be included in the response.
  pageSize: integer, The maximum number of results to return.
  pageToken: string, A pagination token returned from a previous call to `ListInstanceOSPoliciesCompliances` that indicates where this listing should continue from.
  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 OS policies compliance data for all Compute Engine VMs in the given location.
  &quot;instanceOsPoliciesCompliances&quot;: [ # List of instance OS policies compliance objects.
    { # This API resource represents the OS policies compliance data for a Compute Engine virtual machine (VM) instance at a given point in time. A Compute Engine VM can have multiple OS policy assignments, and each assignment can have multiple OS policies. As a result, multiple OS policies could be applied to a single VM. You can use this API resource to determine both the compliance state of your VM as well as the compliance state of an individual OS policy. For more information, see [View compliance](https://cloud.google.com/compute/docs/os-configuration-management/view-compliance).
      &quot;detailedState&quot;: &quot;A String&quot;, # Output only. Detailed compliance state of the VM. This field is populated only when compliance state is `UNKNOWN`. It may contain one of the following values: * `no-compliance-data`: Compliance data is not available for this VM. * `no-agent-detected`: OS Config agent is not detected for this VM. * `config-not-supported-by-agent`: The version of the OS Config agent running on this VM does not support configuration management. * `inactive`: VM is not running. * `internal-service-errors`: There were internal service errors encountered while enforcing compliance. * `agent-errors`: OS config agent encountered errors while enforcing compliance.
      &quot;detailedStateReason&quot;: &quot;A String&quot;, # Output only. The reason for the `detailed_state` of the VM (if any).
      &quot;instance&quot;: &quot;A String&quot;, # Output only. The Compute Engine VM instance name.
      &quot;lastComplianceCheckTime&quot;: &quot;A String&quot;, # Output only. Timestamp of the last compliance check for the VM.
      &quot;lastComplianceRunId&quot;: &quot;A String&quot;, # Output only. Unique identifier for the last compliance run. This id will be logged by the OS config agent during a compliance run and can be used for debugging and tracing purpose.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The `InstanceOSPoliciesCompliance` API resource name. Format: `projects/{project_number}/locations/{location}/instanceOSPoliciesCompliances/{instance_id}`
      &quot;osPolicyCompliances&quot;: [ # Output only. Compliance data for each `OSPolicy` that is applied to the VM.
        { # Compliance data for an OS policy
          &quot;osPolicyAssignment&quot;: &quot;A String&quot;, # Reference to the `OSPolicyAssignment` API resource that the `OSPolicy` belongs to. Format: `projects/{project_number}/locations/{location}/osPolicyAssignments/{os_policy_assignment_id@revision_id}`
          &quot;osPolicyId&quot;: &quot;A String&quot;, # The OS policy id
          &quot;osPolicyResourceCompliances&quot;: [ # Compliance data for each `OSPolicyResource` that is applied to the VM.
            { # Compliance data for an OS policy resource.
              &quot;configSteps&quot;: [ # Ordered list of configuration steps taken by the agent for the OS policy resource.
                { # Step performed by the OS Config agent for configuring an `OSPolicyResource` to its desired state.
                  &quot;outcome&quot;: &quot;A String&quot;, # Outcome of the configuration step.
                  &quot;type&quot;: &quot;A String&quot;, # Configuration step type.
                },
              ],
              &quot;execResourceOutput&quot;: { # ExecResource specific output. # ExecResource specific output.
                &quot;enforcementOutput&quot;: &quot;A String&quot;, # Output from Enforcement phase output file (if run). Output size is limited to 100K bytes.
              },
              &quot;osPolicyResourceId&quot;: &quot;A String&quot;, # The id of the OS policy resource.
              &quot;state&quot;: &quot;A String&quot;, # Compliance state of the OS policy resource.
            },
          ],
          &quot;state&quot;: &quot;A String&quot;, # Compliance state of the OS policy.
        },
      ],
      &quot;state&quot;: &quot;A String&quot;, # Output only. Compliance state of the VM.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The pagination token to retrieve the next page of instance OS policies compliance objects.
}</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>