# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import json
import warnings
import pulumi
import pulumi.runtime
from typing import Union
from .. import utilities, tables

class GetNodeTypesResult:
    """
    A collection of values returned by getNodeTypes.
    """
    def __init__(__self__, names=None, project=None, zone=None, id=None):
        if names and not isinstance(names, list):
            raise TypeError("Expected argument 'names' to be a list")
        __self__.names = names
        """
        A list of node types available in the given zone and project.
        """
        if project and not isinstance(project, str):
            raise TypeError("Expected argument 'project' to be a str")
        __self__.project = project
        if zone and not isinstance(zone, str):
            raise TypeError("Expected argument 'zone' to be a str")
        __self__.zone = zone
        if id and not isinstance(id, str):
            raise TypeError("Expected argument 'id' to be a str")
        __self__.id = id
        """
        id is the provider-assigned unique ID for this managed resource.
        """
class AwaitableGetNodeTypesResult(GetNodeTypesResult):
    # pylint: disable=using-constant-test
    def __await__(self):
        if False:
            yield self
        return GetNodeTypesResult(
            names=self.names,
            project=self.project,
            zone=self.zone,
            id=self.id)

def get_node_types(project=None,zone=None,opts=None):
    """
    Provides available node types for Compute Engine sole-tenant nodes in a zone
    for a given project. For more information, see [the official documentation](https://cloud.google.com/compute/docs/nodes/#types) and [API](https://cloud.google.com/compute/docs/reference/rest/v1/nodeTypes).
    
    :param str project: ID of the project to list available node types for.
           Should match the project the nodes of this type will be deployed to.
           Defaults to the project that the provider is authenticated with.
    :param str zone: The zone to list node types for. Should be in zone of intended node groups and region of referencing node template. If `zone` is not specified, the provider-level zone must be set and is used
           instead.

    > This content is derived from https://github.com/terraform-providers/terraform-provider-google/blob/master/website/docs/d/compute_node_types.html.markdown.
    """
    __args__ = dict()

    __args__['project'] = project
    __args__['zone'] = zone
    if opts is None:
        opts = pulumi.InvokeOptions()
    if opts.version is None:
        opts.version = utilities.get_version()
    __ret__ = pulumi.runtime.invoke('gcp:compute/getNodeTypes:getNodeTypes', __args__, opts=opts).value

    return AwaitableGetNodeTypesResult(
        names=__ret__.get('names'),
        project=__ret__.get('project'),
        zone=__ret__.get('zone'),
        id=__ret__.get('id'))
