text: # coding=utf-8
  # *** WARNING: this file was generated by pulumigen. ***
  # *** Do not edit by hand unless you're certain you know what you are doing! ***
  
  import warnings
  import pulumi
  import pulumi.runtime
  from typing import Any, Dict, List, Mapping, Optional, Tuple, Union
  from ... import _utilities, _tables
  from . import outputs
  from ... import meta as _meta
  from ._inputs import *
  
  __all__ = ['Service']
  
  
  class Service(pulumi.CustomResource):
      def __init__(__self__,
                   resource_name: str,
                   opts: Optional[pulumi.ResourceOptions] = None,
                   api_version: Optional[pulumi.Input[str]] = None,
                   kind: Optional[pulumi.Input[str]] = None,
                   metadata: Optional[pulumi.Input[pulumi.InputType['_meta.v1.ObjectMetaArgs']]] = None,
                   spec: Optional[pulumi.Input[pulumi.InputType['ServiceSpecArgs']]] = None,
                   __props__=None,
                   __name__=None,
                   __opts__=None):
          """
          Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.
  
          This resource waits until its status is ready before registering success
          for create/update, and populating output properties from the current state of the resource.
          The following conditions are used to determine whether the resource creation has
          succeeded or failed:
  
          1. Service object exists.
          2. Related Endpoint objects are created. Each time we get an update, wait 10 seconds
             for any stragglers.
          3. The endpoints objects target some number of living objects (unless the Service is
             an "empty headless" Service [1] or a Service with '.spec.type: ExternalName').
          4. External IP address is allocated (if Service has '.spec.type: LoadBalancer').
  
          Known limitations:
          Services targeting ReplicaSets (and, by extension, Deployments,
          StatefulSets, etc.) with '.spec.replicas' set to 0 are not handled, and will time
          out. To work around this limitation, set 'pulumi.com/skipAwait: "true"' on
          '.metadata.annotations' for the Service. Work to handle this case is in progress [2].
  
          [1] https://kubernetes.io/docs/concepts/services-networking/service/#headless-services
          [2] https://github.com/pulumi/pulumi-kubernetes/pull/703
  
          If the Service has not reached a Ready state after 10 minutes, it will
          time out and mark the resource update as Failed. You can override the default timeout value
          by setting the 'customTimeouts' option on the resource.
  
          :param str resource_name: The name of the resource.
          :param pulumi.ResourceOptions opts: Options for the resource.
          :param pulumi.Input[str] api_version: APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
          :param pulumi.Input[str] kind: Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
          :param pulumi.Input[pulumi.InputType['_meta.v1.ObjectMetaArgs']] metadata: Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
          :param pulumi.Input[pulumi.InputType['ServiceSpecArgs']] spec: Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
          """
          if __name__ is not None:
              warnings.warn("explicit use of __name__ is deprecated", DeprecationWarning)
              resource_name = __name__
          if __opts__ is not None:
              warnings.warn("explicit use of __opts__ is deprecated, use 'opts' instead", DeprecationWarning)
              opts = __opts__
          if opts is None:
              opts = pulumi.ResourceOptions()
          if not isinstance(opts, pulumi.ResourceOptions):
              raise TypeError('Expected resource options to be a ResourceOptions instance')
          if opts.version is None:
              opts.version = _utilities.get_version()
          if opts.id is None:
              if __props__ is not None:
                  raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
              __props__ = dict()
  
              __props__['api_version'] = 'v1'
              __props__['kind'] = 'Service'
              __props__['metadata'] = metadata
              __props__['spec'] = spec
              __props__['status'] = None
          super(Service, __self__).__init__(
              'kubernetes:core/v1:Service',
              resource_name,
              __props__,
              opts)
  
      @staticmethod
      def get(resource_name: str,
              id: pulumi.Input[str],
              opts: Optional[pulumi.ResourceOptions] = None) -> 'Service':
          """
          Get an existing Service resource's state with the given name, id, and optional extra
          properties used to qualify the lookup.
  
          :param str resource_name: The unique name of the resulting resource.
          :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
          :param pulumi.ResourceOptions opts: Options for the resource.
          """
          opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))
  
          __props__ = dict()
  
          return Service(resource_name, opts=opts, __props__=__props__)
  
      @property
      @pulumi.getter(name="apiVersion")
      def api_version(self) -> pulumi.Output[Optional[str]]:
          """
          APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
          """
          return pulumi.get(self, "api_version")
  
      @property
      @pulumi.getter
      def kind(self) -> pulumi.Output[Optional[str]]:
          """
          Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
          """
          return pulumi.get(self, "kind")
  
      @property
      @pulumi.getter
      def metadata(self) -> pulumi.Output[Optional['_meta.v1.outputs.ObjectMeta']]:
          """
          Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
          """
          return pulumi.get(self, "metadata")
  
      @property
      @pulumi.getter
      def spec(self) -> pulumi.Output[Optional['outputs.ServiceSpec']]:
          """
          Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
          """
          return pulumi.get(self, "spec")
  
      @property
      @pulumi.getter
      def status(self) -> pulumi.Output[Optional['outputs.ServiceStatus']]:
          """
          Most recently observed status of the service. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
          """
          return pulumi.get(self, "status")
  
      def translate_output_property(self, prop):
          return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop
  
      def translate_input_property(self, prop):
          return _tables.SNAKE_TO_CAMEL_CASE_TABLE.get(prop) or prop
  
  