helm:
  client:

    #
    # The version of the Helm client to install
    #
    # version: 2.6.2
    
    #
    # The path to which the Helm binary should be installed. Defaults to 
    # /usr/bin/helm
    #
    # bin: /usr/bin/helm

    #
    # The path this formula should use as helm home. Defaults to /srv/helm/home;
    # it is recommended to set this to /root/.helm if users will be calling 
    # helm from the command line directly on the target minion
    #
    # helm_home: /srv/helm/home

    #
    # 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 path to which the kubectl binary should be installed. Defaults to 
      # /usr/bin/kubectl
      #
      # bin: /usr/bin/kubectl

      #
      # 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 