#!/usr/bin/python
# -*- coding: utf-8 -*-

from ansible.module_utils.openshift_common import OpenShiftAnsibleModule, OpenShiftAnsibleException

DOCUMENTATION = '''
module: openshift_v1_template_instance_list
short_description: OpenShift TemplateInstanceList
description:
- Retrieve a list of template_instances. List operations provide a snapshot read of
  the underlying objects, returning a resource_version representing a consistent version
  of the listed objects.
version_added: 2.3.0
author: OpenShift (@openshift)
options:
  api_key:
    description:
    - Token used to connect to the API.
  cert_file:
    description:
    - Path to a certificate used to authenticate with the API.
    type: path
  context:
    description:
    - The name of a context found in the Kubernetes config file.
  debug:
    description:
    - Enable debug output from the OpenShift helper. Logging info is written to KubeObjHelper.log
    default: false
    type: bool
  force:
    description:
    - If set to C(True), and I(state) is C(present), an existing object will updated,
      and lists will be replaced, rather than merged.
    default: false
    type: bool
  host:
    description:
    - Provide a URL for acessing the Kubernetes API.
  key_file:
    description:
    - Path to a key file used to authenticate with the API.
    type: path
  kubeconfig:
    description:
    - Path to an existing Kubernetes config file. If not provided, and no other connection
      options are provided, the openshift client will attempt to load the default
      configuration file from I(~/.kube/config.json).
    type: path
  password:
    description:
    - Provide a password for connecting to the API. Use in conjunction with I(username).
  resource_definition:
    description:
    - Provide the YAML definition for the object, bypassing any modules parameters
      intended to define object attributes.
    type: dict
  src:
    description:
    - Provide a path to a file containing the YAML definition of the object. Mutually
      exclusive with I(resource_definition).
    type: path
  ssl_ca_cert:
    description:
    - Path to a CA certificate used to authenticate with the API.
    type: path
  state:
    description:
    - Determines if an object should be created, patched, or deleted. When set to
      C(present), the object will be created, if it does not exist, or patched, if
      parameter values differ from the existing object's attributes, and deleted,
      if set to C(absent). A patch operation results in merging lists and updating
      dictionaries, with lists being merged into a unique set of values. If a list
      contains a dictionary with a I(name) or I(type) attribute, a strategic merge
      is performed, where individual elements with a matching I(name_) or I(type)
      are merged. To force the replacement of lists, set the I(force) option to C(True).
    default: present
    choices:
    - present
    - absent
  username:
    description:
    - Provide a username for connecting to the API.
  verify_ssl:
    description:
    - Whether or not to verify the API server's SSL certificates.
    type: bool
requirements:
- openshift == 0.3.3
'''

EXAMPLES = '''
'''

RETURN = '''
api_version:
  type: string
  description: Requested API version
template_instance_list:
  type: complex
  returned: when I(state) = C(present)
  contains:
    api_version:
      description:
      - 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.
      type: str
    items:
      description:
      - items is a list of Templateinstances
      type: list
      contains:
        api_version:
          description:
          - 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.
          type: str
        kind:
          description:
          - 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.
          type: str
        metadata:
          description:
          - Standard object metadata.
          type: complex
          contains:
            annotations:
              description:
              - Annotations is an unstructured key value map stored with a resource
                that may be set by external tools to store and retrieve arbitrary
                metadata. They are not queryable and should be preserved when modifying
                objects.
              type: complex
              contains: str, str
            cluster_name:
              description:
              - The name of the cluster which the object belongs to. This is used
                to distinguish resources with same name and namespace in different
                clusters. This field is not set anywhere right now and apiserver is
                going to ignore it if set in create or update request.
              type: str
            creation_timestamp:
              description:
              - CreationTimestamp is a timestamp representing the server time when
                this object was created. It is not guaranteed to be set in happens-before
                order across separate operations. Clients may not set this value.
                It is represented in RFC3339 form and is in UTC. Populated by the
                system. Read-only. Null for lists.
              type: complex
              contains: {}
            deletion_grace_period_seconds:
              description:
              - Number of seconds allowed for this object to gracefully terminate
                before it will be removed from the system. Only set when deletionTimestamp
                is also set. May only be shortened. Read-only.
              type: int
            deletion_timestamp:
              description:
              - DeletionTimestamp is RFC 3339 date and time at which this resource
                will be deleted. This field is set by the server when a graceful deletion
                is requested by the user, and is not directly settable by a client.
                The resource is expected to be deleted (no longer visible from resource
                lists, and not reachable by name) after the time in this field. Once
                set, this value may not be unset or be set further into the future,
                although it may be shortened or the resource may be deleted prior
                to this time. For example, a user may request that a pod is deleted
                in 30 seconds. The Kubelet will react by sending a graceful termination
                signal to the containers in the pod. After that 30 seconds, the Kubelet
                will send a hard termination signal (SIGKILL) to the container and
                after cleanup, remove the pod from the API. In the presence of network
                partitions, this object may still exist after this timestamp, until
                an administrator or automated process can determine the resource is
                fully terminated. If not set, graceful deletion of the object has
                not been requested. Populated by the system when a graceful deletion
                is requested. Read-only.
              type: complex
              contains: {}
            finalizers:
              description:
              - Must be empty before the object is deleted from the registry. Each
                entry is an identifier for the responsible component that will remove
                the entry from the list. If the deletionTimestamp of the object is
                non-nil, entries in this list can only be removed.
              type: list
              contains: str
            generate_name:
              description:
              - GenerateName is an optional prefix, used by the server, to generate
                a unique name ONLY IF the Name field has not been provided. If this
                field is used, the name returned to the client will be different than
                the name passed. This value will also be combined with a unique suffix.
                The provided value has the same validation rules as the Name field,
                and may be truncated by the length of the suffix required to make
                the value unique on the server. If this field is specified and the
                generated name exists, the server will NOT return a 409 - instead,
                it will either return 201 Created or 500 with Reason ServerTimeout
                indicating a unique name could not be found in the time allotted,
                and the client should retry (optionally after the time indicated in
                the Retry-After header). Applied only if Name is not specified.
              type: str
            generation:
              description:
              - A sequence number representing a specific generation of the desired
                state. Populated by the system. Read-only.
              type: int
            initializers:
              description:
              - An initializer is a controller which enforces some system invariant
                at object creation time. This field is a list of initializers that
                have not yet acted on this object. If nil or empty, this object has
                been completely initialized. Otherwise, the object is considered uninitialized
                and is hidden (in list/watch and get calls) from clients that haven't
                explicitly asked to observe uninitialized objects. When an object
                is created, the system will populate this list with the current set
                of initializers. Only privileged users may set or modify this list.
                Once it is empty, it may not be modified further by any user.
              type: complex
              contains:
                pending:
                  description:
                  - Pending is a list of initializers that must execute in order before
                    this object is visible. When the last pending initializer is removed,
                    and no failing result is set, the initializers struct will be
                    set to nil and the object is considered as initialized and visible
                    to all clients.
                  type: list
                  contains:
                    name:
                      description:
                      - name of the process that is responsible for initializing this
                        object.
                      type: str
                result:
                  description:
                  - If result is set with the Failure field, the object will be persisted
                    to storage and then deleted, ensuring that other clients can observe
                    the deletion.
                  type: complex
                  contains:
                    api_version:
                      description:
                      - 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.
                      type: str
                    code:
                      description:
                      - Suggested HTTP return code for this status, 0 if not set.
                      type: int
                    details:
                      description:
                      - Extended data associated with the reason. Each reason may
                        define its own extended details. This field is optional and
                        the data returned is not guaranteed to conform to any schema
                        except that defined by the reason type.
                      type: complex
                      contains:
                        causes:
                          description:
                          - The Causes array includes more details associated with
                            the StatusReason failure. Not all StatusReasons may provide
                            detailed causes.
                          type: list
                          contains:
                            field:
                              description:
                              - 'The field of the resource that has caused this error,
                                as named by its JSON serialization. May include dot
                                and postfix notation for nested attributes. Arrays
                                are zero-indexed. Fields may appear more than once
                                in an array of causes due to fields having multiple
                                errors. Optional. Examples: "name" - the field "name"
                                on the current resource "items[0].name" - the field
                                "name" on the first array entry in "items"'
                              type: str
                            message:
                              description:
                              - A human-readable description of the cause of the error.
                                This field may be presented as-is to a reader.
                              type: str
                            reason:
                              description:
                              - A machine-readable description of the cause of the
                                error. If this value is empty there is no information
                                available.
                              type: str
                        group:
                          description:
                          - The group attribute of the resource associated with the
                            status StatusReason.
                          type: str
                        kind:
                          description:
                          - The kind attribute of the resource associated with the
                            status StatusReason. On some operations may differ from
                            the requested resource Kind.
                          type: str
                        name:
                          description:
                          - The name attribute of the resource associated with the
                            status StatusReason (when there is a single name which
                            can be described).
                          type: str
                        retry_after_seconds:
                          description:
                          - If specified, the time in seconds before the operation
                            should be retried.
                          type: int
                        uid:
                          description:
                          - UID of the resource. (when there is a single resource
                            which can be described).
                          type: str
                    kind:
                      description:
                      - 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.
                      type: str
                    message:
                      description:
                      - A human-readable description of the status of this operation.
                      type: str
                    metadata:
                      description:
                      - Standard list metadata.
                      type: complex
                      contains:
                        resource_version:
                          description:
                          - String that identifies the server's internal version of
                            this object that can be used by clients to determine when
                            objects have changed. Value must be treated as opaque
                            by clients and passed unmodified back to the server. Populated
                            by the system. Read-only.
                          type: str
                        self_link:
                          description:
                          - SelfLink is a URL representing this object. Populated
                            by the system. Read-only.
                          type: str
                    reason:
                      description:
                      - A machine-readable description of why this operation is in
                        the "Failure" status. If this value is empty there is no information
                        available. A Reason clarifies an HTTP status code but does
                        not override it.
                      type: str
                    status:
                      description:
                      - 'Status of the operation. One of: "Success" or "Failure".'
                      type: str
            labels:
              description:
              - Map of string keys and values that can be used to organize and categorize
                (scope and select) objects. May match selectors of replication controllers
                and services.
              type: complex
              contains: str, str
            name:
              description:
              - Name must be unique within a namespace. Is required when creating
                resources, although some resources may allow a client to request the
                generation of an appropriate name automatically. Name is primarily
                intended for creation idempotence and configuration definition. Cannot
                be updated.
              type: str
            namespace:
              description:
              - Namespace defines the space within each name must be unique. An empty
                namespace is equivalent to the "default" namespace, but "default"
                is the canonical representation. Not all objects are required to be
                scoped to a namespace - the value of this field for those objects
                will be empty. Must be a DNS_LABEL. Cannot be updated.
              type: str
            owner_references:
              description:
              - List of objects depended by this object. If ALL objects in the list
                have been deleted, this object will be garbage collected. If this
                object is managed by a controller, then an entry in this list will
                point to this controller, with the controller field set to true. There
                cannot be more than one managing controller.
              type: list
              contains:
                api_version:
                  description:
                  - API version of the referent.
                  type: str
                block_owner_deletion:
                  description:
                  - If true, AND if the owner has the "foregroundDeletion" finalizer,
                    then the owner cannot be deleted from the key-value store until
                    this reference is removed. Defaults to false. To set this field,
                    a user needs "delete" permission of the owner, otherwise 422 (Unprocessable
                    Entity) will be returned.
                  type: bool
                controller:
                  description:
                  - If true, this reference points to the managing controller.
                  type: bool
                kind:
                  description:
                  - Kind of the referent.
                  type: str
                name:
                  description:
                  - Name of the referent.
                  type: str
                uid:
                  description:
                  - UID of the referent.
                  type: str
            resource_version:
              description:
              - An opaque value that represents the internal version of this object
                that can be used by clients to determine when objects have changed.
                May be used for optimistic concurrency, change detection, and the
                watch operation on a resource or set of resources. Clients must treat
                these values as opaque and passed unmodified back to the server. They
                may only be valid for a particular resource or set of resources. Populated
                by the system. Read-only. Value must be treated as opaque by clients
                and .
              type: str
            self_link:
              description:
              - SelfLink is a URL representing this object. Populated by the system.
                Read-only.
              type: str
            uid:
              description:
              - UID is the unique in time and space value for this object. It is typically
                generated by the server on successful creation of a resource and is
                not allowed to change on PUT operations. Populated by the system.
                Read-only.
              type: str
        spec:
          description:
          - spec describes the desired state of this TemplateInstance.
          type: complex
          contains:
            requester:
              description:
              - requester holds the identity of the agent requesting the template
                instantiation.
              type: complex
              contains:
                extra:
                  description:
                  - extra holds additional information provided by the authenticator.
                  type: complex
                  contains: str, list[str]
                groups:
                  description:
                  - groups represent the groups this user is a part of.
                  type: list
                  contains: str
                uid:
                  description:
                  - uid is a unique value that identifies this user across time; if
                    this user is deleted and another user by the same name is added,
                    they will have different UIDs.
                  type: str
                username:
                  description:
                  - username uniquely identifies this user among all active users.
                  type: str
            secret:
              description:
              - secret is a reference to a Secret object containing the necessary
                template parameters.
              type: complex
              contains:
                name:
                  description:
                  - Name of the referent.
                  type: str
            template:
              description:
              - template is a full copy of the template for instantiation.
              type: complex
              contains:
                api_version:
                  description:
                  - 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.
                  type: str
                kind:
                  description:
                  - 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.
                  type: str
                labels:
                  description:
                  - labels is a optional set of labels that are applied to every object
                    during the Template to Config transformation.
                  type: complex
                  contains: str, str
                message:
                  description:
                  - message is an optional instructional message that will be displayed
                    when this template is instantiated. This field should inform the
                    user how to utilize the newly created resources. Parameter substitution
                    will be performed on the message before being displayed so that
                    generated credentials and other parameters can be included in
                    the output.
                  type: str
                metadata:
                  description:
                  - Standard object's metadata.
                  type: complex
                  contains:
                    annotations:
                      description:
                      - Annotations is an unstructured key value map stored with a
                        resource that may be set by external tools to store and retrieve
                        arbitrary metadata. They are not queryable and should be preserved
                        when modifying objects.
                      type: complex
                      contains: str, str
                    cluster_name:
                      description:
                      - The name of the cluster which the object belongs to. This
                        is used to distinguish resources with same name and namespace
                        in different clusters. This field is not set anywhere right
                        now and apiserver is going to ignore it if set in create or
                        update request.
                      type: str
                    creation_timestamp:
                      description:
                      - CreationTimestamp is a timestamp representing the server time
                        when this object was created. It is not guaranteed to be set
                        in happens-before order across separate operations. Clients
                        may not set this value. It is represented in RFC3339 form
                        and is in UTC. Populated by the system. Read-only. Null for
                        lists.
                      type: complex
                      contains: {}
                    deletion_grace_period_seconds:
                      description:
                      - Number of seconds allowed for this object to gracefully terminate
                        before it will be removed from the system. Only set when deletionTimestamp
                        is also set. May only be shortened. Read-only.
                      type: int
                    deletion_timestamp:
                      description:
                      - DeletionTimestamp is RFC 3339 date and time at which this
                        resource will be deleted. This field is set by the server
                        when a graceful deletion is requested by the user, and is
                        not directly settable by a client. The resource is expected
                        to be deleted (no longer visible from resource lists, and
                        not reachable by name) after the time in this field. Once
                        set, this value may not be unset or be set further into the
                        future, although it may be shortened or the resource may be
                        deleted prior to this time. For example, a user may request
                        that a pod is deleted in 30 seconds. The Kubelet will react
                        by sending a graceful termination signal to the containers
                        in the pod. After that 30 seconds, the Kubelet will send a
                        hard termination signal (SIGKILL) to the container and after
                        cleanup, remove the pod from the API. In the presence of network
                        partitions, this object may still exist after this timestamp,
                        until an administrator or automated process can determine
                        the resource is fully terminated. If not set, graceful deletion
                        of the object has not been requested. Populated by the system
                        when a graceful deletion is requested. Read-only.
                      type: complex
                      contains: {}
                    finalizers:
                      description:
                      - Must be empty before the object is deleted from the registry.
                        Each entry is an identifier for the responsible component
                        that will remove the entry from the list. If the deletionTimestamp
                        of the object is non-nil, entries in this list can only be
                        removed.
                      type: list
                      contains: str
                    generate_name:
                      description:
                      - GenerateName is an optional prefix, used by the server, to
                        generate a unique name ONLY IF the Name field has not been
                        provided. If this field is used, the name returned to the
                        client will be different than the name passed. This value
                        will also be combined with a unique suffix. The provided value
                        has the same validation rules as the Name field, and may be
                        truncated by the length of the suffix required to make the
                        value unique on the server. If this field is specified and
                        the generated name exists, the server will NOT return a 409
                        - instead, it will either return 201 Created or 500 with Reason
                        ServerTimeout indicating a unique name could not be found
                        in the time allotted, and the client should retry (optionally
                        after the time indicated in the Retry-After header). Applied
                        only if Name is not specified.
                      type: str
                    generation:
                      description:
                      - A sequence number representing a specific generation of the
                        desired state. Populated by the system. Read-only.
                      type: int
                    initializers:
                      description:
                      - An initializer is a controller which enforces some system
                        invariant at object creation time. This field is a list of
                        initializers that have not yet acted on this object. If nil
                        or empty, this object has been completely initialized. Otherwise,
                        the object is considered uninitialized and is hidden (in list/watch
                        and get calls) from clients that haven't explicitly asked
                        to observe uninitialized objects. When an object is created,
                        the system will populate this list with the current set of
                        initializers. Only privileged users may set or modify this
                        list. Once it is empty, it may not be modified further by
                        any user.
                      type: complex
                      contains:
                        pending:
                          description:
                          - Pending is a list of initializers that must execute in
                            order before this object is visible. When the last pending
                            initializer is removed, and no failing result is set,
                            the initializers struct will be set to nil and the object
                            is considered as initialized and visible to all clients.
                          type: list
                          contains:
                            name:
                              description:
                              - name of the process that is responsible for initializing
                                this object.
                              type: str
                        result:
                          description:
                          - If result is set with the Failure field, the object will
                            be persisted to storage and then deleted, ensuring that
                            other clients can observe the deletion.
                          type: complex
                          contains:
                            api_version:
                              description:
                              - 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.
                              type: str
                            code:
                              description:
                              - Suggested HTTP return code for this status, 0 if not
                                set.
                              type: int
                            details:
                              description:
                              - Extended data associated with the reason. Each reason
                                may define its own extended details. This field is
                                optional and the data returned is not guaranteed to
                                conform to any schema except that defined by the reason
                                type.
                              type: complex
                              contains:
                                causes:
                                  description:
                                  - The Causes array includes more details associated
                                    with the StatusReason failure. Not all StatusReasons
                                    may provide detailed causes.
                                  type: list
                                  contains:
                                    field:
                                      description:
                                      - 'The field of the resource that has caused
                                        this error, as named by its JSON serialization.
                                        May include dot and postfix notation for nested
                                        attributes. Arrays are zero-indexed. Fields
                                        may appear more than once in an array of causes
                                        due to fields having multiple errors. Optional.
                                        Examples: "name" - the field "name" on the
                                        current resource "items[0].name" - the field
                                        "name" on the first array entry in "items"'
                                      type: str
                                    message:
                                      description:
                                      - A human-readable description of the cause
                                        of the error. This field may be presented
                                        as-is to a reader.
                                      type: str
                                    reason:
                                      description:
                                      - A machine-readable description of the cause
                                        of the error. If this value is empty there
                                        is no information available.
                                      type: str
                                group:
                                  description:
                                  - The group attribute of the resource associated
                                    with the status StatusReason.
                                  type: str
                                kind:
                                  description:
                                  - The kind attribute of the resource associated
                                    with the status StatusReason. On some operations
                                    may differ from the requested resource Kind.
                                  type: str
                                name:
                                  description:
                                  - The name attribute of the resource associated
                                    with the status StatusReason (when there is a
                                    single name which can be described).
                                  type: str
                                retry_after_seconds:
                                  description:
                                  - If specified, the time in seconds before the operation
                                    should be retried.
                                  type: int
                                uid:
                                  description:
                                  - UID of the resource. (when there is a single resource
                                    which can be described).
                                  type: str
                            kind:
                              description:
                              - 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.
                              type: str
                            message:
                              description:
                              - A human-readable description of the status of this
                                operation.
                              type: str
                            metadata:
                              description:
                              - Standard list metadata.
                              type: complex
                              contains:
                                resource_version:
                                  description:
                                  - String that identifies the server's internal version
                                    of this object that can be used by clients to
                                    determine when objects have changed. Value must
                                    be treated as opaque by clients and passed unmodified
                                    back to the server. Populated by the system. Read-only.
                                  type: str
                                self_link:
                                  description:
                                  - SelfLink is a URL representing this object. Populated
                                    by the system. Read-only.
                                  type: str
                            reason:
                              description:
                              - A machine-readable description of why this operation
                                is in the "Failure" status. If this value is empty
                                there is no information available. A Reason clarifies
                                an HTTP status code but does not override it.
                              type: str
                            status:
                              description:
                              - 'Status of the operation. One of: "Success" or "Failure".'
                              type: str
                    labels:
                      description:
                      - Map of string keys and values that can be used to organize
                        and categorize (scope and select) objects. May match selectors
                        of replication controllers and services.
                      type: complex
                      contains: str, str
                    name:
                      description:
                      - Name must be unique within a namespace. Is required when creating
                        resources, although some resources may allow a client to request
                        the generation of an appropriate name automatically. Name
                        is primarily intended for creation idempotence and configuration
                        definition. Cannot be updated.
                      type: str
                    namespace:
                      description:
                      - Namespace defines the space within each name must be unique.
                        An empty namespace is equivalent to the "default" namespace,
                        but "default" is the canonical representation. Not all objects
                        are required to be scoped to a namespace - the value of this
                        field for those objects will be empty. Must be a DNS_LABEL.
                        Cannot be updated.
                      type: str
                    owner_references:
                      description:
                      - List of objects depended by this object. If ALL objects in
                        the list have been deleted, this object will be garbage collected.
                        If this object is managed by a controller, then an entry in
                        this list will point to this controller, with the controller
                        field set to true. There cannot be more than one managing
                        controller.
                      type: list
                      contains:
                        api_version:
                          description:
                          - API version of the referent.
                          type: str
                        block_owner_deletion:
                          description:
                          - If true, AND if the owner has the "foregroundDeletion"
                            finalizer, then the owner cannot be deleted from the key-value
                            store until this reference is removed. Defaults to false.
                            To set this field, a user needs "delete" permission of
                            the owner, otherwise 422 (Unprocessable Entity) will be
                            returned.
                          type: bool
                        controller:
                          description:
                          - If true, this reference points to the managing controller.
                          type: bool
                        kind:
                          description:
                          - Kind of the referent.
                          type: str
                        name:
                          description:
                          - Name of the referent.
                          type: str
                        uid:
                          description:
                          - UID of the referent.
                          type: str
                    resource_version:
                      description:
                      - An opaque value that represents the internal version of this
                        object that can be used by clients to determine when objects
                        have changed. May be used for optimistic concurrency, change
                        detection, and the watch operation on a resource or set of
                        resources. Clients must treat these values as opaque and passed
                        unmodified back to the server. They may only be valid for
                        a particular resource or set of resources. Populated by the
                        system. Read-only. Value must be treated as opaque by clients
                        and .
                      type: str
                    self_link:
                      description:
                      - SelfLink is a URL representing this object. Populated by the
                        system. Read-only.
                      type: str
                    uid:
                      description:
                      - UID is the unique in time and space value for this object.
                        It is typically generated by the server on successful creation
                        of a resource and is not allowed to change on PUT operations.
                        Populated by the system. Read-only.
                      type: str
                objects:
                  description:
                  - objects is an array of resources to include in this template.
                    If a namespace value is hardcoded in the object, it will be removed
                    during template instantiation, however if the namespace value
                    is, or contains, a ${PARAMETER_REFERENCE}, the resolved value
                    after parameter substitution will be respected and the object
                    will be created in that namespace.
                  type: list
                  contains:
                    raw:
                      description:
                      - Raw is the underlying serialization of this object.
                      type: str
                parameters:
                  description:
                  - parameters is an optional array of Parameters used during the
                    Template to Config transformation.
                  type: list
                  contains:
                    _from:
                      description:
                      - From is an input value for the generator. Optional.
                      type: str
                    description:
                      description:
                      - Description of a parameter. Optional.
                      type: str
                    display_name:
                      description:
                      - "Optional: The name that will show in UI instead of parameter\
                        \ 'Name'"
                      type: str
                    generate:
                      description:
                      - 'generate specifies the generator to be used to generate random
                        string from an input value specified by From field. The result
                        string is stored into Value field. If empty, no generator
                        is being used, leaving the result Value untouched. Optional.
                        The only supported generator is "expression", which accepts
                        a "from" value in the form of a simple regular expression
                        containing the range expression "[a-zA-Z0-9]", and the length
                        expression "a{length}". Examples: from | value -----------------------------
                        "test[0-9]{1}x" | "test7x" "[0-1]{8}" | "01001100" "0x[A-F0-9]{4}"
                        | "0xB3AF" "[a-zA-Z0-9]{8}" | "hW4yQU5i"'
                      type: str
                    name:
                      description:
                      - Name must be set and it can be referenced in Template Items
                        using ${PARAMETER_NAME}. Required.
                      type: str
                    required:
                      description:
                      - 'Optional: Indicates the parameter must have a value. Defaults
                        to false.'
                      type: bool
                    value:
                      description:
                      - Value holds the Parameter data. If specified, the generator
                        will be ignored. The value replaces all occurrences of the
                        Parameter ${Name} expression during the Template to Config
                        transformation. Optional.
                      type: str
        status:
          description:
          - status describes the current state of this TemplateInstance.
          type: complex
          contains:
            conditions:
              description:
              - conditions represent the latest available observations of a TemplateInstance's
                current state.
              type: list
              contains:
                last_transition_time:
                  description:
                  - LastTransitionTime is the last time a condition status transitioned
                    from one state to another.
                  type: complex
                  contains: {}
                message:
                  description:
                  - Message is a human readable description of the details of the
                    last transition, complementing reason.
                  type: str
                reason:
                  description:
                  - Reason is a brief machine readable explanation for the condition's
                    last transition.
                  type: str
                status:
                  description:
                  - Status of the condition, one of True, False or Unknown.
                  type: str
                type:
                  description:
                  - Type of the condition, currently Ready or InstantiateFailure.
                  type: str
            objects:
              description:
              - Objects references the objects created by the TemplateInstance.
              type: list
              contains:
                ref:
                  description:
                  - ref is a reference to the created object. When used under .spec,
                    only name and namespace are used; these can contain references
                    to parameters which will be substituted following the usual rules.
                  type: complex
                  contains:
                    api_version:
                      description:
                      - API version of the referent.
                      type: str
                    field_path:
                      description:
                      - 'If referring to a piece of an object instead of an entire
                        object, this string should contain a valid JSON/Go field access
                        statement, such as desiredState.manifest.containers[2]. For
                        example, if the object reference is to a container within
                        a pod, this would take on a value like: "spec.containers{name}"
                        (where "name" refers to the name of the container that triggered
                        the event) or if no container name is specified "spec.containers[2]"
                        (container with index 2 in this pod). This syntax is chosen
                        only to have some well-defined way of referencing a part of
                        an object.'
                      type: str
                    kind:
                      description:
                      - Kind of the referent.
                      type: str
                    name:
                      description:
                      - Name of the referent.
                      type: str
                    namespace:
                      description:
                      - Namespace of the referent.
                      type: str
                    resource_version:
                      description:
                      - Specific resourceVersion to which this reference is made,
                        if any.
                      type: str
                    uid:
                      description:
                      - UID of the referent.
                      type: str
    kind:
      description:
      - 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.
      type: str
    metadata:
      description:
      - Standard object metadata.
      type: complex
      contains:
        resource_version:
          description:
          - String that identifies the server's internal version of this object that
            can be used by clients to determine when objects have changed. Value must
            be treated as opaque by clients and passed unmodified back to the server.
            Populated by the system. Read-only.
          type: str
        self_link:
          description:
          - SelfLink is a URL representing this object. Populated by the system. Read-only.
          type: str
'''


def main():
    try:
        module = OpenShiftAnsibleModule('template_instance_list', 'v1')
    except OpenShiftAnsibleException as exc:
        # The helper failed to init, so there is no module object. All we can do is raise the error.
        raise Exception(exc.message)

    try:
        module.execute_module()
    except OpenShiftAnsibleException as exc:
        module.fail_json(msg="Module failed!", error=str(exc))


if __name__ == '__main__':
    main()
