# this is a virtual module that is entirely implemented server side

DOCUMENTATION = """
---
module: config_template
version_added: 1.9.2
short_description: Renders template files providing a create/update override interface
description:
  - The module contains the template functionality with the ability to override items
    in config, in transit, through the use of a simple dictionary without having to
    write out various temp files on target machines. The module renders all of the
    potential jinja a user could provide in both the template file and in the override
    dictionary which is ideal for deployers who may have lots of different configs
    using a similar code base.
  - The module is an extension of the **copy** module and all of attributes that can be
    set there are available to be set here.
options:
  src:
    description:
      - Path of a Jinja2 formatted template on the local server. This can be a relative
        or absolute path.
    required: true
    default: null
  dest:
    description:
      - Location to render the template to on the remote machine.
    required: true
    default: null
  config_overrides:
    description:
      - A dictionary used to update or override items within a configuration template.
        The dictionary data structure may be nested. If the target config file is an ini
        file the nested keys in the ``config_overrides`` will be used as section
        headers.
  config_type:
    description:
      - A string value describing the target config type.
    choices:
      - ini
      - json
      - yaml
  list_extend:
    description:
      - By default a list item in a JSON or YAML format will extend if
        its already defined in the target template and a config_override
        using a list is being set for the existing "key". This functionality
        can be toggled on or off using this option. If disabled an override
        list will replace an existing "key".
    choices:
      - True
      - False
  ignore_none_type:
    description:
      - Can be true or false. If ignore_none_type is set to true, then
        valueless INI options will not be written out to the resultant file.
        If it's set to false, then config_template will write out only
        the option name without the '=' or ':' suffix. The default is true.
    choices:
      - True
      - False
  default_section:
    description:
      - Specify the default section for INI configuration files. This is the
        section that will appear at the top of the configuration file. For
        example 'global'.
    default: 'DEFAULT'
  remote_src:
    description:
      - Influence whether the template needs to be transferred or already is
        present remotely.
      - If false, it will search the originating machine.
      - If true, it will go to the remote/target machine to inject the
        template. If the remote source does not exist the module will fail.
    choices:
      - True
      - False
    default: false

author: Kevin Carter
"""

EXAMPLES = """
  - name: run config template ini
    config_template:
      src: templates/test.ini.j2
      dest: /tmp/test.ini
      config_overrides: {}
      top_ini_section: 'global'
      config_type: ini

  - name: run config template json
    config_template:
      src: templates/test.json.j2
      dest: /tmp/test.json
      config_overrides: {}
      config_type: json

  - name: run config template yaml
    config_template:
      src: templates/test.yaml.j2
      dest: /tmp/test.yaml
      config_overrides: {}
      config_type: yaml
"""
