helm:
  client:

    #
    # The version of the Helm client to install
    #
    # version: 2.6.2
    
    #
    # The hash for the helm client binary. You must calculate the hash for the
    # version of the binary you install. 
    # Defaults to the SHA 256 hash for the helm-v2.6.2-linux-amd64.tar.gz
    # 
    # 
    # The binary is downloaded from:
    # 
    # https://storage.googleapis.com/kubernetes-helm/helm-v[[ client.version ]]-linux-amd64.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
    
    #
    # Whether the helm client should be enabled for the target minion or not
    # 
    # TODO: this should be removed.
    #
    enabled: true

    #
    # 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 of the binary you install. 
      # 
      # 
      # The binary is downloaded from:
      # 
      # https://dl.k8s.io/v[[ client.kubectl.version ]]/kubernetes-client-linux-amd64.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-linux-amd64.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 