

# Kheops can act as ENC
# This is a basic tree that demonstrate how to use Kheops as ENC:
# Examples:
#   kheops -vvv  -c examples/kheops.yml  lookup2 -n ex1_enc  -f examples/q_011.yml  profile
#
ex1_enc:
  
  #Query keys:
  #  profile,role,class:
  #  profiles,roles,classes:
  config:
    file_path_prefix: "ex1_enc/"
    #file_path_suffix: "/ansible"
    file_path_suffix: null
    merge_deep_algo: additive

  lookups:

    - path: default # Simplest form, just a path
    - path: "roles/{role}" # If list, it's auto expanded like in bash
    - path: "env_{env}" # If list, it's auto expanded like in bash
    - path: "nodes/{node}"

      #loop:
      #  totot: loop2
      #loop_1:
      #  tutu: blaaaa



      ### ADDD NEW EXAMPLES:
      # Add a way to remove entries, so we need to talk about mergers... Not yet

exN_scope_plugins:
  
  #Query keys:
  #  profile,role,class:
  #  profiles,roles,classes:
  config:
    file_path_prefix: "01_hello/"
    #file_path_suffix: "/ansible"
    file_path_suffix: null
    merge_deep_algo: additive

  lookups:

    - path: "tree/{item_hier1}" # If list, it's auto expanded like in bash
      scope:
        - module: loop
          data:
            - toto1
            - toto2
            - toto3

    - path: "tree/{item_loop}/{item_hier}" # If list, it's auto expanded like in bash
      scope:
        - module: loop
          data:
            - prod
            - dev
        - module: hier
          data: node_fqdn

          split: '.'
          reversed: True
          start: 2


    - path: "tree/{item_hier1}" # If list, it's auto expanded like in bash
      scope:
        - module: hier
          data: test_hg
          split: '/'
          reversed: False


# Kheops can store your configuration/data
# This is a basic tree that demonstrate how to use Kheops as ENC:
ex2_config:
  
  #Query keys:
  #  profile,role,class:
  #  profiles,roles,classes:

  lookups:

    # Default config
    - common/default

    # Per distribution config
    - "common/dist_{ansible_dist_name}"
    - "common/dist_{ansible_dist_name}{ansible_dist_version}"

    # Nested dir support
    - path: site/{node_env}/{node_role}
      engine: jerakia

    # Per node and group config
    - groups/{node_group}
    - nodes/{node_fqdn}

    # Override config
    - common/override
      #


# Kheops support many backends: file, http, consul, even script !!!
ex3_backends:
  lookups:
    - backend: file,glob,consul,http,script,vault,none
      
    - path: node/{node_fqdn}
      backend: file
      file:
        sufix: /ansible.yml

    - path: node/{node_fqdn}
      backend: glob
      glob:
        sufix: /ansible_*.yml

    - backend: http
      path: https://foreman.corp/host/{node_fqdn}/facts?fmt=json
      http:
        format: json
        http_auth: SECRET_FILE.pass
        headers:

# Keops support operations on scope variable
ex3_loops_profiles:
  
  lookups:

    # Group management, axpanded list
    - path: groups/{item}
      loop: 
        data: groups

    # A more advanced example, hierarchical exampansion
    - path: site/{foreman_hostgroups}/{ansible_fqdn} # If list, it's auto expanded like in bash
      engine: jerakia
      hier: 
        data: foreman_hostgroup
        var: foreman_hostgroups
        reversed: False

    # DO an example of multiple loops

    - nodes/{ansible_fqdn}
    - common/override


# Kheops support nested hierarchy like in Foreman/Sattelite
# Example to use Kheops with Foreman
ex4_foreman_hostgroups:
  
  #Query keys:
  #  profile,role,class:
  #  profiles,roles,classes:

  lookups:
    - path: site/loc_{foreman_location} # If list, it's auto expanded like in bash
      engine: jerakia
    - path: site/org_{foreman_organization} # If list, it's auto expanded like in bash
      engine: jerakia

    - path: site/{foreman_hostgroups}/{ansible_fqdn} # If list, it's auto expanded like in bash
      engine: jerakia
      hier: 
        data: foreman_hostgroup
        var: foreman_hostgroups
        reversed: False

    - nodes/{ansible_fqdn}


# Kheops support namespace (For performance reasons) and include to make your code DRY
ex5_ns_include:
  ns1:
    lookups:
      - include: common.yml
      - path: ns1_only/{node_fqdn}
  ns2:
    lookups:
      - include: common.yml
      - include: ns2_only.yml


# Kheops allow to customize which and how keys are merged together
# Explain how to merge the keys
ex6_rules:
  lookups:
    ...
  rules:
  - key: "my_key"
  - key: ".*"
  - key: ".*_db"
  - key: "prefix_.*"
    continue: True
    merge: 
      last: No merge
      basic: basic python merge, assemble list and combine dict 1 level.
      schema: jsonmerge, heavy in resources
      first: Why ?
      smart_lists: support +-!~ key identifiers ...
      smart_dict: support +-!~ key identifiers ...





# REal and complete example
ex7_data:
  config:
    app: {}
      # prefix: ./ext/ansible-tree/tree
      #totot: titi

    lookups:
      #prefix: ./ext/ansible-tree/tree
      prefix: ext/tiger-jerakia/data/data
      engine: file.auto
      sufix: ansible.yaml
      default_engine: jerakia
      default_item:
        engine: jerakia

  # File lookup
  lookups:
    - common/deprecated
    - common/all
    - "common/dist_{ansible_dist_name}"
    - "common/dist_{ansible_dist_name}{ansible_dist_version}"
    # Default structure

    # Profile management
    - path: profiles/{item}
      loop: 
        data: tiger_profiles

    # THis is not dry, use include to make code DRY


    - path: site/loc_{foreman_location} # If list, it's auto expanded like in bash
      engine: jerakia
    - path: site/org_{foreman_organization} # If list, it's auto expanded like in bash
      engine: jerakia

    - path: site/{foreman_hostgroups}/{ansible_fqdn} # If list, it's auto expanded like in bash
      engine: jerakia
      hier: 
        data: foreman_hostgroup
        var: foreman_hostgroups
        reversed: False
#      loop: 
#        var: aa_env
#        data:
#          - prod
#          - preprod
#          - devel

#    - path: site/{foreman_hostgroup}/{ansible_fqdn}
#      engine: jerakia

    - nodes/{ansible_fqdn}
    - common/override

  rules:

    - rule: 'profilesss'
      strategy: first
      schema: 
        "$schema": http://json-schema.org/draft-04/schema#
        type: array
        mergeStrategy: append

    - rule: '(.*)_item'
      schema: generic item schema

