helm:
  client:

    #
    # The version of the Helm client to install
    #
    # version: 2.6.2
    
    #
    # The flavor of the helm or kubectl binary to install, as informed by the
    # target minion's OS. For available flavor names, peruse the listing of
    # Helm binaries exposed at:
    # 
    #   https://storage.googleapis.com/kubernetes-helm
    #   
    # Defaults to linux-amd64
    #
    # flavor: linux-amd64

    #
    # The hash for the helm client binary. You must calculate the hash for the
    # version and flavor of the binary you install (per the helm:client:flavor 
    # configuration value)
    # Defaults to the SHA 256 hash for the helm-v2.6.2-linux-amd64.tar.gz binary
    # 
    # 
    # The binary is downloaded from:
    # 
    # https://storage.googleapis.com/kubernetes-helm/helm-v[[ client.version ]]-[[ client.flavor ]].tar.gz
    # 
    # Here is an example command you can use to calculate the sha256 hash for 
    # the binary:
    # 
    # ```
    # shasum -a 256 /path/to/helm-v[[ client.version ]]-linux.amd64.tar.gz
    # ```
    # 
    # download_hash: sha256=ba807d6017b612a0c63c093a954c7d63918d3e324bdba335d67b7948439dbca8

    #
    # Configurations to manage the cluster's Tiller installation
    #
    # tiller:
      #
      # Whether Tiller should be deployed to the kubernetes cluster as part of
      # this formaul. Defaults to true.
      #
      # install: true

      #
      # The namespace to which Tiller should be installed (only used if 
      # `helm:client:tiller:install` is set to true).
      # Defaults to `kube-system`
      #
      # naamespace: kube-system

      #
      # The host IP or name and port for an existing tiller installation that
      # should be used by the Helm client. Defaults to Helm's default if
      # unspecified.
      #
      # host:

    #
    # Configurations defined to manage the target minion's kubectl installation
    #
    # kubectl:
      #
      # Whether kubectl should be installed as part of this formula. 
      # Defaults to false
      #
      # install: false
      
      #
      # The version of the kubectl binary to install.
      # Defaults to 1.6.7
      #
      # version: 1.6.7

      #
      # The hash for the kubectl binary version to install. You must calculate 
      # the hash for the version and flavor of the binary you install (per the
      # helm:client:flavor configuration value)
      # 
      # 
      # The binary is downloaded from:
      # 
      # https://dl.k8s.io/v[[ client.kubectl.version ]]/kubernetes-client-[[ client.flavor ]].tar.gz
      # 
      # 
      # Defaults to the SHA 256 hash for the Linux distribution of version 1.6.7
      # 
      # Here is an example command you can use to calculate the sha256 hash for 
      # the binary:
      # 
      # ```
      # shasum -a 256 /path/to/kubernetes-client-[[ client.flavor ]].tar.gz
      # ```
      # 
      # download_hash: sha256=54947ef84181e89f9dbacedd54717cbed5cc7f9c36cb37bc8afc9097648e2c91
      
      
      #
      # Configuration parameters that should be applied to the kubectl 
      # installation's kubeconfig. Not that this will only be applied to the 
      # kubectl installation managed by this formula.
      # 
      # While the kubectl tool can be configured to connect to multiple 
      # clusters and allow switching between cluster contexts, this kubectl
      # configuration managed by this formula will only be configured with
      # the cluster context details used by this formula.
      #
      # config:
      #   cluster: 
      #     server: https://kubernetes.example.com
      #     certificate-authority-data: base64_of_ca_certificate
      #   cluster_name: kubernetes.example
      #   context_name: kubernetes-example
      #   user:
      #     username: admin
      #     password: uberadminpass
      #   user_name: admin
      

    #
    # The mapping of repository names to urls that should be registered and
    # kept up-to-date with the helm client
    #
    repos:
      mirantisworkloads: https://mirantisworkloads.storage.googleapis.com/
      incubator: https://kubernetes-charts-incubator.storage.googleapis.com/

    #
    # The listing of releases that should be managed by the formula. Note that
    # if configured, the releases listed under this `helm:client:releases` key
    # will be used as an authoritative, exclusive listing of the releases that
    # should be configured and deployed to the Tiller installation; any 
    # release existing in the tiller cluster that is not configured here 
    # **will be deleted**
    #
    releases:
      zoo1:

        #
        # The name of the release
        #
        name: my-zookeeper

        #
        # The repository name and chart name combination for the chart to
        # release
        #
        chart: mirantisworkloads/zookeeper

        #
        # The version of the helm chart to install
        #
        version: 1.2.0 

        #
        # The namespace to which the release should be deployed
        #
        namespace: helm-example-namespace

        # 
        # Configuration values that should be supplied to the chart.
        #
        values:
          logLevel: INFO 